@tspro/ts-utils-lib 1.0.1 → 1.2.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.
- package/CHANGELOG.md +11 -0
- package/LICENSE +20 -17
- package/dist/index.d.mts +348 -0
- package/dist/index.d.ts +348 -0
- package/dist/index.js +1104 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1076 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +32 -29
- package/dist/index.esm.mjs +0 -1101
- package/dist/types/array/index.d.ts +0 -12
- package/dist/types/array/index.test.d.ts +0 -1
- package/dist/types/core/LRU-cache.d.ts +0 -17
- package/dist/types/core/index.d.ts +0 -4
- package/dist/types/core/small-int-cache.d.ts +0 -10
- package/dist/types/core/stack.d.ts +0 -9
- package/dist/types/core/stack.test.d.ts +0 -1
- package/dist/types/core/vec2.d.ts +0 -10
- package/dist/types/dom/index.d.ts +0 -45
- package/dist/types/enum/index.d.ts +0 -7
- package/dist/types/index.d.ts +0 -16
- package/dist/types/map/index.d.ts +0 -1
- package/dist/types/math/index.d.ts +0 -16
- package/dist/types/math/index.test.d.ts +0 -1
- package/dist/types/modules/assert.d.ts +0 -21
- package/dist/types/modules/cookies.d.ts +0 -12
- package/dist/types/modules/device.d.ts +0 -12
- package/dist/types/modules/index.d.ts +0 -3
- package/dist/types/string/index.d.ts +0 -7
- package/dist/types/string/index.test.d.ts +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/index.ts","../src/utils/arr/index.ts","../src/utils/math/index.ts","../src/utils/dom/index.ts","../src/utils/enum/index.ts","../src/modules/assert.ts","../src/modules/device.ts","../src/utils/map/index.ts","../src/utils/obj/index.ts","../src/utils/str/index.ts","../src/modules/cookies.ts","../src/core/stack.ts","../src/core/vec2.ts","../src/core/LRU-cache.ts","../src/core/small-int-cache.ts"],"sourcesContent":["export * as Arr from \"./arr\";\r\nexport * as Dom from \"./dom\";\r\nexport * as Enum from \"./enum\";\r\nexport * as Map from \"./map\";\r\nexport * as Math from \"./math\";\r\nexport * as Obj from \"./obj\";\r\nexport * as Str from \"./str\";\r\n","import { isInteger } from \"../math\";\r\n\r\nexport function isArray<T>(a: T[] | unknown): a is T[] {\r\n return !!a && Object.prototype.toString.call(a) === \"[object Array]\";\r\n}\r\n\r\nexport function toArray<T>(a: T | T[]): Array<T> {\r\n return isArray(a) ? a : [a];\r\n}\r\n\r\nexport function duplicate<T>(a: T[] | undefined) {\r\n return a === undefined ? a : a.slice();\r\n}\r\n\r\nexport function removeDuplicates<T>(a: T[]): T[] {\r\n return a.filter((item, pos, arr) => arr.indexOf(item) === pos);\r\n}\r\n\r\nexport function removeDuplicatesCmp<T>(arr: ReadonlyArray<T>, cmp: (t1: T, t2: T) => boolean): T[] {\r\n return arr.filter((t1, index, self) => index === self.findIndex(t2 => cmp(t1, t2)));\r\n}\r\n\r\nexport function fillArray<T>(fillValue: T, fillCount: number): T[] {\r\n if (!isInteger(fillCount) || fillCount < 0) {\r\n throw new Error(\"fillArray: Invalid fillCount = \" + fillCount);\r\n }\r\n return new Array<T>(fillCount).fill(fillValue);\r\n}\r\n\r\nexport function mapSequenceArray<T>(len: number, fn: (i: number) => T): T[] {\r\n if (!isInteger(len) || len < 0) {\r\n throw new Error(\"mapSequenceArray: Invalid len = \" + len);\r\n }\r\n let arr: T[] = new Array(len);\r\n for (let i = 0; i < len; i++) { arr[i] = fn(i); }\r\n return arr;\r\n}\r\n\r\nexport function getSequenceArray(len: number): number[] {\r\n return mapSequenceArray(len, i => i);\r\n}\r\n\r\nexport function mapRangeArray<T>(start: number, end: number, fn: (i: number) => T): T[] {\r\n if (!isInteger(start)) {\r\n throw new Error(\"mapRangeArray: Invalid start = \" + end);\r\n }\r\n if (!isInteger(end)) {\r\n throw new Error(\"mapRangeArray: Invalid end = \" + end);\r\n }\r\n let len = Math.abs(end - start) + 1;\r\n let arr: T[] = new Array(len);\r\n for (let i = 0, s = start, inc = Math.sign(end - start); i < len; s += inc, i++) { arr[i] = fn(s); }\r\n return arr;\r\n}\r\n\r\nexport function getRangeArray(start: number, end: number): number[] {\r\n return mapRangeArray(start, end, i => i);\r\n}\r\n\r\nexport function arrayContains<T extends unknown>(arg: T[], item: T): boolean {\r\n return arg.indexOf(item) >= 0;\r\n}\r\n\r\nexport function chunckArray<A>(arr: ReadonlyArray<A>, chunckSize: number): A[][] {\r\n if (!isInteger(chunckSize) || chunckSize < 1) {\r\n throw new Error(\"chunckArray: Invalid chunckSize = \" + chunckSize);\r\n }\r\n let result: A[][] = [];\r\n for (let i = 0; i < arr.length; i += chunckSize) {\r\n result.push(arr.slice(i, i + chunckSize));\r\n }\r\n return result;\r\n}\r\n","\r\nexport function isInteger(n: unknown): n is number {\r\n return typeof n === \"number\" && isFinite(n) && n === Math.trunc(n);\r\n}\r\n\r\nexport function linearToDecibels(linearVolume: number): number {\r\n if (!isFinite(linearVolume)) {\r\n throw new Error(\"linearToDecibel: Invalid linearVolume = \" + linearVolume);\r\n }\r\n else if (linearVolume <= 0) {\r\n return -Infinity;\r\n }\r\n else {\r\n return 20 * Math.log10(linearVolume);\r\n }\r\n}\r\n\r\nexport function mod(m: number, n: number) {\r\n return ((m % n) + n) % n;\r\n}\r\n\r\n/**\r\n * Convert number to roman number.\r\n * https://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter\r\n */\r\nexport function romanize(n: number) {\r\n if (!isInteger(n) || n < 0) {\r\n throw new Error(\"romanize: Invalid n = \" + n);\r\n }\r\n\r\n var digits = String(+n).split(\"\");\r\n var key = [\"\", \"C\", \"CC\", \"CCC\", \"CD\", \"D\", \"DC\", \"DCC\", \"DCCC\", \"CM\",\r\n \"\", \"X\", \"XX\", \"XXX\", \"XL\", \"L\", \"LX\", \"LXX\", \"LXXX\", \"XC\",\r\n \"\", \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"];\r\n var roman = \"\", i = 3;\r\n while (i--) roman = (key[+digits.pop()! + (i * 10)] || \"\") + roman;\r\n return Array(+digits.join(\"\") + 1).join(\"M\") + roman;\r\n}\r\n\r\nexport function toOrdinalNumber(n: number) {\r\n if (!isInteger(n)) {\r\n throw new Error(\"toOrdinalNumber: Invalid n = \" + n);\r\n }\r\n\r\n const nStr = n.toString();\r\n const lastDigit = Number(nStr.charAt(nStr.length - 1));\r\n\r\n if (n === 1 || n >= 20 && lastDigit === 1) {\r\n return nStr + \"st\";\r\n }\r\n else if (n === 2 || n >= 20 && lastDigit === 2) {\r\n return nStr + \"nd\";\r\n }\r\n else if (n === 3 || n >= 20 && lastDigit === 3) {\r\n return nStr + \"rd\";\r\n }\r\n else {\r\n return nStr + \"th\";\r\n }\r\n}\r\n\r\nexport function interpolateCoord(startX: number, startY: number, endX: number, endY: number, t: number) {\r\n return {\r\n x: startX + (endX - startX) * t,\r\n y: startY + (endY - startY) * t\r\n }\r\n}\r\n\r\nexport function interpolateY(startX: number, startY: number, endX: number, endY: number, x: number) {\r\n let t = (x - startX) / (endX - startX);\r\n return startY + (endY - startY) * t;\r\n}\r\n\r\nexport function clamp(num: number, min: number, max: number) {\r\n return Math.min(Math.max(num, min), max);\r\n}\r\n\r\nexport function calcNormal(x1: number, y1: number, x2: number, y2: number) {\r\n let dx = x2 - x1;\r\n let dy = y2 - y1;\r\n\r\n let nx = -dy;\r\n let ny = dx;\r\n\r\n let len = Math.sqrt(nx * nx + ny * ny);\r\n\r\n if (len > 0) {\r\n nx /= len;\r\n ny /= len;\r\n }\r\n else {\r\n nx = 0;\r\n ny = 1;\r\n }\r\n\r\n return { nx, ny }\r\n}\r\n\r\nexport function sum(arr: number[]): number {\r\n return arr.reduce((prev, cur) => cur + prev, 0);\r\n}\r\n\r\n","import { Device } from \"../../modules/device\";\r\n\r\nexport interface CSSProperties {\r\n // Declare necessary css properties\r\n //[key: string]: string | number;\r\n padding?: string | number;\r\n paddingLeft?: string | number;\r\n paddingRight?: string | number;\r\n paddingTop?: string | number;\r\n paddingBottom?: string | number;\r\n left?: string | number;\r\n right?: string | number;\r\n top?: string | number;\r\n bottom?: string | number;\r\n width?: string | number;\r\n height?: string | number;\r\n}\r\n\r\nfunction toPx(value: string | number | undefined): number | undefined {\r\n return value === undefined ? undefined : Device.toPx(value);\r\n}\r\n\r\nexport function hasClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return false;\r\n }\r\n else if (el.classList) {\r\n return el.classList.contains(className);\r\n }\r\n else {\r\n return !!el.className.match(new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\"));\r\n }\r\n}\r\n\r\nexport function addClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return;\r\n }\r\n else if (el.classList) {\r\n el.classList.add(className)\r\n }\r\n else if (!hasClass(el, className)) {\r\n el.className += \" \" + className;\r\n }\r\n}\r\n\r\nexport function removeClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return;\r\n }\r\n else if (el.classList) {\r\n el.classList.remove(className)\r\n }\r\n else if (hasClass(el, className)) {\r\n var reg = new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\");\r\n el.className = el.className.replace(reg, \" \");\r\n }\r\n}\r\n\r\nexport function setOffset(el: HTMLElement, left: number, top: number, unit: string = \"px\") {\r\n el.style.left = left + unit;\r\n el.style.top = top + unit;\r\n}\r\n\r\nexport function getOffset(el: HTMLElement): { left: number, top: number } {\r\n let box = el.getBoundingClientRect();\r\n let docElem = document.documentElement;\r\n return {\r\n top: box.top + window.pageYOffset - docElem.clientTop,\r\n left: box.left + window.pageXOffset - docElem.clientLeft\r\n }\r\n}\r\n\r\nexport function getWidth(el: HTMLElement | Window) {\r\n if (el instanceof Window) {\r\n return el.innerWidth;\r\n }\r\n else {\r\n let w = parseFloat(getComputedStyle(el, null).width.replace(\"px\", \"\"));\r\n return isNaN(w) ? 0 : w;\r\n }\r\n}\r\n\r\nexport function setWidth(el: HTMLElement, val: number) {\r\n el.style.width = val + 'px';\r\n}\r\n\r\nexport function getHeight(el: HTMLElement | Window) {\r\n if (el instanceof Window) {\r\n return el.innerHeight;\r\n }\r\n else {\r\n let h = parseFloat(getComputedStyle(el, null).height.replace(\"px\", \"\"));\r\n return isNaN(h) ? 0 : h;\r\n }\r\n}\r\n\r\nexport function setHeight(el: HTMLElement, val: number) {\r\n el.style.height = val + \"px\";\r\n}\r\n\r\nexport function appendTo(el: HTMLElement | SVGElement, to: HTMLElement | SVGElement) {\r\n to.appendChild(el);\r\n}\r\n\r\nexport function removeFromParent(el: HTMLElement | SVGElement) {\r\n el.remove();\r\n}\r\n\r\nexport function setVisibility(el: HTMLElement | SVGElement, visible: boolean) {\r\n el.style.display = visible ? \"block\" : \"none\";\r\n}\r\n\r\nexport function setRect(el: HTMLElement, left: number, top: number, width: number, height: number, unit: string = \"px\") {\r\n el.style.left = left + unit;\r\n el.style.top = top + unit;\r\n el.style.width = width + unit;\r\n el.style.height = height + unit;\r\n}\r\n\r\nexport function getButton(btn: HTMLElement | string): HTMLButtonElement | undefined {\r\n let el = typeof btn === \"string\" ? document.getElementById(btn) : btn;\r\n return el instanceof HTMLButtonElement ? el : undefined;\r\n}\r\n\r\nexport function getCanvas(canvas: HTMLElement | string): HTMLCanvasElement | undefined {\r\n let el = typeof canvas === \"string\" ? document.getElementById(canvas) : canvas;\r\n return el instanceof HTMLCanvasElement ? el : undefined;\r\n}\r\n\r\nexport function getPadding(style?: CSSProperties): { top: number, right: number, bottom: number, left: number } {\r\n if (!style) {\r\n return { top: 0, right: 0, bottom: 0, left: 0 };\r\n }\r\n\r\n let top = toPx(style.paddingTop);\r\n let right = toPx(style.paddingRight);\r\n let bottom = toPx(style.paddingBottom);\r\n let left = toPx(style.paddingLeft);\r\n\r\n let padding = (style.padding ?? \"\").toString().split(\" \").filter(s => s.length > 0);\r\n\r\n switch (padding.length) {\r\n case 0:\r\n break;\r\n case 1:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[0]);\r\n bottom ??= toPx(padding[0]);\r\n left ??= toPx(padding[0]);\r\n break;\r\n case 2:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[0]);\r\n left ??= toPx(padding[1]);\r\n break;\r\n case 3:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[2]);\r\n left ??= toPx(padding[1]);\r\n break;\r\n case 4:\r\n default:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[2]);\r\n left ??= toPx(padding[3]);\r\n break;\r\n }\r\n\r\n top ??= 0;\r\n right ??= 0;\r\n bottom ??= 0;\r\n left ??= 0;\r\n\r\n return { top, right, bottom, left };\r\n}\r\n\r\nexport function getDimension(style?: CSSProperties) {\r\n let left = toPx(style?.left);\r\n let right = toPx(style?.right);\r\n let top = toPx(style?.top);\r\n let bottom = toPx(style?.bottom);\r\n let width = toPx(style?.width);\r\n let height = toPx(style?.height);\r\n\r\n if (width === undefined && left !== undefined && right !== undefined) {\r\n width = right - left;\r\n }\r\n\r\n if (height === undefined && top !== undefined && bottom !== undefined) {\r\n height = bottom - top;\r\n }\r\n\r\n return { left, top, width, height }\r\n}\r\n\r\nexport function styleLayoutChanged(style1?: CSSProperties, style2?: CSSProperties) {\r\n if (!style1 && !style2) {\r\n return false;\r\n }\r\n else if (!style1 || !style2) {\r\n return true;\r\n }\r\n else {\r\n return style1.left !== style2.left || style1.top !== style2.top ||\r\n style1.right !== style2.right || style1.bottom !== style2.bottom ||\r\n style1.width !== style2.width || style1.height !== style2.height;\r\n }\r\n}\r\n\r\nlet canvas: HTMLCanvasElement | undefined;\r\n\r\nexport function getCanvasTextWidth(text: string, font: string) {\r\n canvas ??= document.createElement(\"canvas\");\r\n\r\n let ctx = canvas.getContext(\"2d\");\r\n if (!ctx) {\r\n return 0;\r\n }\r\n\r\n ctx.font = font;\r\n\r\n return ctx.measureText(text).width;\r\n}\r\n","\r\nexport type EnumObject = { [key: string]: string | number; }\r\nexport type EnumValue<E extends EnumObject> = E extends { [key: string]: string | infer V; } ? V : never;\r\n\r\nexport function getEnumValues<E extends EnumObject>(e: E): Array<EnumValue<E>> {\r\n return Object.keys(e).filter(key => Number.isNaN(Number(key))).map(key => e[key] as EnumValue<E>);\r\n}\r\n","import { getEnumValues } from \"../utils/enum\";\r\n\r\nexport namespace Assert {\r\n\r\n export type ErrorConstructor = new (msg: string) => Error;\r\n\r\n let errorConstructor: ErrorConstructor = Error;\r\n\r\n export function setErrorClass(ec?: ErrorConstructor) {\r\n errorConstructor = ec ?? Error;\r\n }\r\n\r\n function throwError(errorMsg: string, userMsg?: string): never {\r\n throw new errorConstructor(\"Assertion Error: \" + errorMsg + (userMsg ? \" \" + userMsg : \"\"));\r\n }\r\n\r\n function is_int(a: unknown): a is number {\r\n return typeof a === \"number\" && isFinite(a) && a === Math.trunc(a);\r\n }\r\n\r\n function is_number(a: unknown): a is number {\r\n return typeof a === \"number\";\r\n }\r\n\r\n export function assert<T>(a: T, userMsg?: string) {\r\n if (!a) {\r\n throwError(userMsg ?? \"Assertion failed!\");\r\n }\r\n }\r\n\r\n export function assertEnum<E extends Record<string, string | number>>(value: unknown, enumObj: E, name = \"value\"): asserts value is E[keyof E] {\r\n if (!getEnumValues(enumObj).some(v => v === value)) {\r\n throw new TypeError(`Invalid ${name} enum value: ${value}`);\r\n }\r\n }\r\n\r\n export function interrupt(userMsg?: string): never {\r\n throwError(userMsg ?? \"Interrupted!\");\r\n }\r\n\r\n export function int(a: unknown, userMsg?: string): number {\r\n if (!is_int(a)) {\r\n throwError(`Expected ${a} to be integer.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function eq<T>(a: T, b: T, userMsg?: string): T {\r\n if (a !== b) {\r\n throwError(`Expected ${a} to equal ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_eq(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a === b)) {\r\n throwError(`Expected ${a} to be integer equal to ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_lt(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a < b)) {\r\n throwError(`Expected ${a} to be integer less than ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_lte(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a <= b)) {\r\n throwError(`Expected ${a} to be integer less than or equal to ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_gt(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a > b)) {\r\n throwError(`Expected ${a} to be integer greater than ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_gte(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a >= b)) {\r\n throwError(`Expected ${a} to be integer greater than or equal to ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_between(a: unknown, min: unknown, max: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(min) && is_number(max) && a >= min && a <= max)) {\r\n throwError(`Expected ${a} to be integer between ${min} and ${max}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function odd(a: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && a % 2 === 1)) {\r\n throwError(`Expected ${a} to be odd number.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function even(a: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && a % 2 === 0)) {\r\n throwError(`Expected ${a} to be even number.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function in_group<T>(a: T, group: ReadonlyArray<T>, userMsg?: string): T {\r\n if (!(group.some(e => e === a))) {\r\n let strGroup = group.map(v => String(v)).join(\", \");\r\n throwError(`Expected ${a} to be in group [${strGroup}].`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function finite(a: unknown, userMsg?: string): number {\r\n if (!(is_number(a) && isFinite(a))) {\r\n throwError(`Expected ${a} to be finite number.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function array_id<T>(arr: Readonly<T[]>, id: unknown, userMsg?: string): number {\r\n if (!(is_int(id) && id >= 0 && id < arr.length)) {\r\n throwError(`Expected ${id} to be array index in bounds [0..${arr.length - 1}].`, userMsg);\r\n }\r\n return id;\r\n }\r\n\r\n export function array_elem<T>(arr: Readonly<T[]>, id: number, userMsg?: string): T {\r\n return arr[array_id(arr, id, userMsg)];\r\n }\r\n\r\n export function require<T>(arg: T, userMsg?: string): NonNullable<T> {\r\n if (arg === undefined) {\r\n throwError(\"Required value is undefined.\", userMsg);\r\n }\r\n else {\r\n return arg!;\r\n }\r\n }\r\n}\r\n","import { Assert } from \"./assert\";\r\n\r\nexport namespace Device {\r\n function getDPI(): number {\r\n let el = document.createElement(\"div\");\r\n el.style.width = \"1in\";\r\n document.body.appendChild(el);\r\n let dpi = el.offsetWidth;\r\n el.remove();\r\n return dpi || 96;\r\n }\r\n\r\n function getScrollBarWidth(): number {\r\n try {\r\n let outer = document.createElement(\"div\");\r\n outer.style.visibility = \"hidden\";\r\n outer.style.width = \"100px\";\r\n //outer.style.msOverflowStyle = \"scrollbar\"; // needed for WinJS apps\r\n\r\n document.body.appendChild(outer);\r\n\r\n let widthNoScroll = outer.offsetWidth;\r\n // force scrollbars\r\n outer.style.overflow = \"scroll\";\r\n\r\n // add innerdiv\r\n let inner = document.createElement(\"div\");\r\n inner.style.width = \"100%\";\r\n outer.appendChild(inner);\r\n\r\n let widthWithScroll = inner.offsetWidth;\r\n\r\n // remove divs\r\n if (outer.parentNode) {\r\n outer.parentNode.removeChild(outer);\r\n }\r\n\r\n return widthNoScroll - widthWithScroll;\r\n }\r\n catch (e) {\r\n return 0;\r\n }\r\n }\r\n\r\n function getSystemFontSize(): number {\r\n let tmpDiv = document.createElement(\"div\");\r\n tmpDiv.style.cssText = \"display:inline-block; padding:0; line-height:1; position:absolute; visibility:hidden; font-size:1em\";\r\n tmpDiv.appendChild(document.createTextNode(\"M\"));\r\n document.body.appendChild(tmpDiv);\r\n let fontsize = tmpDiv.offsetHeight;\r\n document.body.removeChild(tmpDiv);\r\n return fontsize;\r\n }\r\n\r\n function getIsTouchDevice(): boolean {\r\n // Modified from: https://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript\r\n\r\n if (\"ontouchstart\" in window || \"DocumentTouch\" in window || \"createTouch\" in document && \"createTouchList\" in document) {\r\n return true;\r\n }\r\n\r\n // include the \"heartz\" as a way to have a non matching MQ to help terminate the join\r\n // https://git.io/vznFH\r\n\r\n var prefixes = \" -webkit- -moz- -o- -ms- \".split(\" \");\r\n var mq = function (query: string) {\r\n return window.matchMedia(query).matches;\r\n }\r\n var query = [\"(\", prefixes.join(\"touch-enabled),(\"), \"heartz\", \")\"].join(\"\");\r\n return mq(query);\r\n }\r\n\r\n function getIsMobileDevice() {\r\n let a = navigator.userAgent || navigator.vendor || (<any>window).opera;\r\n return (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4)));\r\n }\r\n\r\n function getHostAddress(): string {\r\n return location.protocol + \"//\" + location.host;\r\n }\r\n\r\n type UnitType = \"mm\" | \"cm\" | \"in\" | \"inch\" | \"px\" | \"em\";\r\n const UnitRegExp = /^(mm|cm|in|inch|px|em)$/;\r\n const ValueUnitRegExp = /^([0-9\\\\.]+)(.*)$/;\r\n\r\n export const DPI = getDPI();\r\n export const PxPerMm = DPI / 25.4;\r\n export const ScrollbarWidth = getScrollBarWidth();\r\n export const FontSize = getSystemFontSize();\r\n export const IsTouchDevice = getIsTouchDevice();\r\n export const IsMobileDevice = getIsMobileDevice();\r\n export const HostAddress = getHostAddress();\r\n\r\n export function pxToMm(px: number): number {\r\n return px / PxPerMm;\r\n }\r\n\r\n export function mmToPx(mm: number): number {\r\n return mm * PxPerMm;\r\n }\r\n\r\n export function toPx(input: string | number): number {\r\n if (typeof input === \"number\") {\r\n return input;\r\n }\r\n\r\n let value: number = NaN;\r\n let unit: UnitType | undefined = undefined;\r\n\r\n let match = input.toString().match(ValueUnitRegExp);\r\n\r\n if (match && match[1]) {\r\n value = parseFloat(match[1]);\r\n\r\n let unitStr = match[2] ? match[2].toLowerCase() : \"undefined\";\r\n let unitStrOk = UnitRegExp.test(unitStr);\r\n\r\n unit = unitStrOk ? unitStr as UnitType : undefined;\r\n if (!unit) {\r\n console.log(\"Unknown unit '\" + unitStr + \"' => using 'px'.\");\r\n }\r\n }\r\n else {\r\n value = parseFloat(input);\r\n }\r\n\r\n Assert.finite(value, \"value in function toPx\");\r\n\r\n switch (unit) {\r\n case \"mm\":\r\n return mmToPx(value);\r\n case \"cm\":\r\n return mmToPx(value) * 10;\r\n case \"in\":\r\n case \"inch\":\r\n return mmToPx(value) * 25.4;\r\n case \"em\":\r\n return Device.FontSize * value;\r\n default:\r\n case \"px\":\r\n return value;\r\n }\r\n }\r\n}\r\n","\r\nexport function getMapKeys<K, V>(map: Map<K, V>): K[] {\r\n let keys: K[] = [];\r\n map.forEach((value: V, key: K) => keys.push(key));\r\n return keys;\r\n}\r\n","import { isArray } from \"../arr\";\r\n\r\nexport function isObject(value: unknown): value is Record<string, unknown> {\r\n return typeof value === \"object\" && value !== null && !isArray(value);\r\n}\r\n","import { isInteger } from \"../math\";\r\n\r\n/**\r\n * toCharArray(\"abc\") => [\"a\", \"b\", \"c\"].\r\n * @param str \r\n */\r\nexport function toCharArray(str: string): string[] {\r\n return str.split(\"\");\r\n}\r\n\r\n/**\r\n * repeat(\"abc\", 3) => \"abcabcabc\".\r\n * repeat(\"abc\", 0) => \"\".\r\n * @param repeatString \r\n * @param repeatCount \r\n */\r\nexport function repeatString(repeatString: string, repeatCount: number): string {\r\n if (!isInteger(repeatCount) || repeatCount < 0) {\r\n throw new Error(\"repeatStr: Invalid repeatCount = \" + repeatCount);\r\n }\r\n\r\n return new Array(repeatCount + 1).join(repeatString);\r\n}\r\n\r\n/**\r\n * \"abcdefgh\":chunkSize = 3 => [\"abc\", \"def\", \"gh\"]\r\n * @param str \r\n * @param chunkSize\r\n */\r\nexport function chunkString(str: string, chunkSize: number): string[] {\r\n if (!isInteger(chunkSize) || chunkSize < 1) {\r\n throw new Error(\"chunckString: Invalid chuckSize = \" + chunkSize);\r\n }\r\n let result: string[] = [];\r\n for (let i = 0; i < str.length; i += chunkSize) {\r\n result.push(str.slice(i, i + chunkSize));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Replaces part of string.\r\n * @param str \r\n * @param pos \r\n * @param removeCount \r\n * @param insert \r\n */\r\nexport function replaceAt(str: string, pos: number, removeCount: number, insert: string) {\r\n if (!isInteger(removeCount) || removeCount < 0) {\r\n throw new Error(\"replaceAt: Invalid removeCount = \" + removeCount);\r\n }\r\n else if (!isInteger(pos) || pos < 0 || pos + removeCount > str.length) {\r\n throw new Error(\"replaceAt: Invalid pos = \" + pos + \", removeCount = \" + removeCount + \", str.length = \" + str.length);\r\n }\r\n else {\r\n return str.substring(0, pos) + insert + str.substring(pos + removeCount);\r\n }\r\n}\r\n\r\n/**\r\n * Insert string to another.\r\n * @param str \r\n * @param pos \r\n * @param insertStr \r\n */\r\nexport function insertAt(str: string, pos: number, insertStr: string) {\r\n return replaceAt(str, pos, 0, insertStr);\r\n}\r\n\r\n/**\r\n * Remove part of string.\r\n * @param str \r\n * @param pos \r\n * @param removeCount \r\n */\r\nexport function removeAt(str: string, pos: number, removeCount: number) {\r\n return replaceAt(str, pos, removeCount, \"\");\r\n}\r\n\r\n/**\r\n * \"UndeclaredVariable\" => \"Undeclared variable\"\r\n * @param PascalString \r\n */\r\nexport function makeSentenceFromPascal(PascalString: string) {\r\n if (PascalString === \"\") {\r\n return \"\";\r\n }\r\n let word = PascalString.charAt(0);\r\n let sentence = \"\";\r\n\r\n const addWord = () => {\r\n if (word !== \"\") {\r\n if (sentence === \"\") {\r\n sentence += word.charAt(0).toUpperCase() + word.substring(1);\r\n }\r\n else {\r\n sentence += \" \" + word;\r\n }\r\n word = \"\";\r\n }\r\n }\r\n\r\n const isLetterAndCapital = (c: string) => {\r\n return c.toUpperCase() !== c.toLowerCase() && c === c.toUpperCase();\r\n }\r\n\r\n for (let i = 1; i < PascalString.length; i++) {\r\n let c = PascalString.charAt(i);\r\n if (isLetterAndCapital(c)) {\r\n addWord();\r\n }\r\n word += c.toLowerCase();\r\n }\r\n\r\n addWord();\r\n\r\n return sentence;\r\n}\r\n","export namespace Cookies {\r\n\r\n const ConsentCookieName = \"ConsentCookie\";\r\n\r\n enum ConsentState {\r\n Accept = \"accept\",\r\n Decline = \"decline\"\r\n }\r\n\r\n let _consent: ConsentState | undefined;\r\n let _expires: Date | undefined;\r\n\r\n let str = _read(ConsentCookieName);\r\n _consent = (str === ConsentState.Accept || str === ConsentState.Decline) ? str : undefined;\r\n\r\n export function setExpireDays(days: number) {\r\n _expires = new Date();\r\n _expires.setDate(_expires.getDate() + days);\r\n }\r\n\r\n export function isConsentPending() {\r\n return _consent === undefined;\r\n }\r\n\r\n export function accept() {\r\n _consent = ConsentState.Accept;\r\n _save(ConsentCookieName, _consent);\r\n }\r\n\r\n export function decline() {\r\n _consent = ConsentState.Decline;\r\n _save(ConsentCookieName, _consent);\r\n }\r\n\r\n function _getList(): string[] {\r\n let s = document.cookie;\r\n return s.split(\";\").map(c => c.trim());\r\n }\r\n\r\n function _save<T extends string | number | boolean>(name: string, value: T): T {\r\n let cookie = name + \"=\" + value.toString() + \";sameSite=Lax;\";\r\n\r\n if (_expires) {\r\n cookie += \"expires=\" + _expires.toUTCString() + \";\";\r\n }\r\n\r\n document.cookie = cookie;\r\n\r\n return value;\r\n }\r\n\r\n function _read(name: string, defaultValue?: string): string | undefined {\r\n let str = _getList().find(c => c.startsWith(name + \"=\"));\r\n return str === undefined ? defaultValue : str.substring(name.length + 1);\r\n }\r\n\r\n function _erase(name: string) {\r\n document.cookie = name + \"=;\" + \"expires=Thu, 01 Jan 1970 00:00:00 UTC;\";\r\n }\r\n\r\n export function save<T extends string | number | boolean>(name: string, value: T): T {\r\n if (_consent === ConsentState.Accept) {\r\n _save(name, value);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n export function read(name: string, defaultValue: string): string {\r\n if (_consent === ConsentState.Accept) {\r\n return _read(name, defaultValue) || defaultValue;\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n export function readInt(name: string, defaultValue: number): number {\r\n if (_consent === ConsentState.Accept) {\r\n let str = _read(name);\r\n return str === undefined ? defaultValue : parseInt(str);\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n export function readBool(name: string, defaultValue: boolean): boolean {\r\n if (_consent === ConsentState.Accept) {\r\n let str = _read(name);\r\n return str === undefined ? defaultValue : (/true|1/i).test(str);\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n export function erase(name: string) {\r\n if (_consent === ConsentState.Accept || name === ConsentCookieName) {\r\n _erase(name);\r\n }\r\n }\r\n\r\n export function eraseAll() {\r\n document.cookie.split(';').forEach(c => erase(c.trim().split('=')[0]));\r\n }\r\n}\r\n","import { Assert } from \"../modules/assert\";\r\n\r\nexport class Stack<T> {\r\n private readonly list: T[] = [];\r\n\r\n push(e: T) {\r\n this.list.push(e);\r\n return e;\r\n }\r\n\r\n pop(): T {\r\n Assert.int_gt(this.list.length, 0);\r\n return this.list.pop()!;\r\n }\r\n\r\n top() {\r\n return Assert.array_elem(this.list, this.list.length - 1, \"Stack is empty!\");\r\n }\r\n\r\n toArray() {\r\n return this.list;\r\n }\r\n\r\n get length() {\r\n return this.list.length;\r\n }\r\n\r\n clear() {\r\n this.list.length = 0;\r\n }\r\n}\r\n","export class Vec2 {\r\n readonly x: number;\r\n readonly y: number;\r\n\r\n constructor(x?: number, y?: number) {\r\n this.x = x ?? 0;\r\n this.y = y ?? 0;\r\n }\r\n\r\n length() {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n\r\n add(a: Vec2) {\r\n return new Vec2(this.x + a.x, this.y + a.y);\r\n }\r\n\r\n sub(a: Vec2) {\r\n return new Vec2(this.x - a.x, this.y - a.y);\r\n }\r\n\r\n mul(a: number) {\r\n return new Vec2(this.x * a, this.y * a);\r\n }\r\n\r\n div(a: number) {\r\n return new Vec2(this.x / a, this.y / a);\r\n }\r\n}\r\n","/**\r\n * LRUCache class: Least Recently Used cache with a fixed capacity\r\n * \r\n * Provided by ChatGPT.\r\n */\r\nexport class LRUCache<K extends string, V> {\r\n private cache: Record<K, V>; // Stores the actual key-value pairs\r\n private next: Record<K, K>; // Linked list: points to the next newer key\r\n private prev: Record<K, K>; // Linked list: points to the previous older key\r\n private head: K | null; // The least recently used key (oldest)\r\n private tail: K | null; // The most recently used key (newest)\r\n private capacity: number; // Maximum number of items allowed\r\n private size: number; // Current number of items\r\n private maxKeyLength: number; // Maximum key length.\r\n\r\n constructor(maxSize: number, maxKeyLength: number = Infinity) {\r\n this.cache = Object.create(null);\r\n this.next = Object.create(null);\r\n this.prev = Object.create(null);\r\n this.head = null;\r\n this.tail = null;\r\n this.capacity = maxSize;\r\n this.size = 0;\r\n this.maxKeyLength = maxKeyLength;\r\n }\r\n\r\n // Retrieves a value from the cache\r\n get(key: K): V | undefined {\r\n if (key.length > this.maxKeyLength) return undefined;\r\n\r\n if (this.cache[key] !== undefined) {\r\n this.touch(key); // Mark as recently used\r\n return this.cache[key];\r\n }\r\n return undefined; // Key not found\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (key.length > this.maxKeyLength) {\r\n // Skip caching for keys that are too large\r\n return;\r\n }\r\n\r\n if (this.cache[key] !== undefined) {\r\n // Update value and mark as recently used\r\n this.cache[key] = value;\r\n this.touch(key);\r\n return;\r\n }\r\n\r\n // If cache is full, evict the least recently used item\r\n if (this.size >= this.capacity) {\r\n this.evict();\r\n }\r\n\r\n // Add new entry to the cache and to the tail (most recent)\r\n this.cache[key] = value;\r\n this.addToTail(key);\r\n this.size++;\r\n }\r\n\r\n // Marks a key as most recently used\r\n private touch(key: K): void {\r\n if (this.tail === key) return; // Already the most recently used\r\n\r\n this.removeKey(key); // Remove from current position\r\n this.addToTail(key); // Re-add at the tail\r\n }\r\n\r\n // Evicts the least recently used item (at the head)\r\n private evict(): void {\r\n if (this.head !== null) {\r\n const oldestKey = this.head;\r\n this.removeKey(oldestKey); // Remove from the linked list\r\n delete this.cache[oldestKey]; // Remove from cache storage\r\n this.size--;\r\n }\r\n }\r\n\r\n // Removes a key from the linked list\r\n private removeKey(key: K): void {\r\n const prevKey = this.prev[key];\r\n const nextKey = this.next[key];\r\n\r\n if (prevKey !== undefined) {\r\n this.next[prevKey] = nextKey;\r\n }\r\n else {\r\n // If no previous key, this was the head\r\n this.head = nextKey ?? null;\r\n }\r\n\r\n if (nextKey !== undefined) {\r\n this.prev[nextKey] = prevKey;\r\n }\r\n else {\r\n // If no next key, this was the tail\r\n this.tail = prevKey ?? null;\r\n }\r\n\r\n // Clean up links\r\n delete this.prev[key];\r\n delete this.next[key];\r\n }\r\n\r\n // Adds a key to the tail (most recently used position)\r\n private addToTail(key: K): void {\r\n if (this.tail !== null) {\r\n // Link the current tail to the new key\r\n this.next[this.tail] = key;\r\n this.prev[key] = this.tail;\r\n }\r\n else {\r\n // If the cache was empty, set as head\r\n this.head = key;\r\n }\r\n this.tail = key; // Always set as new tail\r\n }\r\n}\r\n","import { isInteger } from \"../utils/math\";\r\n\r\n/**\r\n * A cache-like structure optimized for small-range integer keys, including negatives.\r\n *\r\n * Internally implemented using two sparse arrays: one for non-negative keys,\r\n * and one for negative keys (stored by index `-key - 1`).\r\n *\r\n * @remarks\r\n * - Fast access for small integer keys.\r\n * - Not suitable for large or sparse key ranges — memory usage may grow significantly.\r\n * - Supports `get`, `set`, `delete`, `has` and `clear`\r\n *\r\n * @example\r\n * ```ts\r\n * const cache = new SmallIntCache<string>();\r\n * cache.set(-2, 'A');\r\n * cache.set(3, 'B');\r\n * console.log(cache.get(-2)); // 'A'\r\n * ```\r\n */\r\nexport class SmallIntCache<V> {\r\n private pos: V[]; // for keys >= 0\r\n private neg: V[]; // for keys < 0\r\n\r\n constructor() {\r\n this.pos = [];\r\n this.neg = [];\r\n }\r\n\r\n set(key: number, value: V): void {\r\n if (!isInteger(key)) {\r\n throw new Error(\"Key must be an integer\");\r\n }\r\n else if (key >= 0) {\r\n this.pos[key] = value;\r\n }\r\n else {\r\n this.neg[-key - 1] = value; // e.g., key = -1 => index = 0\r\n }\r\n }\r\n\r\n get(key: number): V | undefined {\r\n if (!isInteger(key)) {\r\n throw new Error(\"Key must be an integer\");\r\n }\r\n else if (key >= 0) {\r\n return this.pos[key];\r\n }\r\n else {\r\n return this.neg[-key - 1];\r\n }\r\n }\r\n\r\n has(key: number): boolean {\r\n if (!isInteger(key)) {\r\n return false;\r\n }\r\n else if (key >= 0) {\r\n return key in this.pos;\r\n }\r\n else {\r\n return (-key - 1) in this.neg;\r\n }\r\n }\r\n\r\n delete(key: number): void {\r\n if (!isInteger(key)) {\r\n return;\r\n }\r\n else if (key >= 0) {\r\n delete this.pos[key];\r\n }\r\n else {\r\n delete this.neg[-key - 1];\r\n }\r\n }\r\n\r\n clear(): void {\r\n this.pos = [];\r\n this.neg = [];\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,SAAS,UAAU,GAAyB;AAC/C,SAAO,OAAO,MAAM,YAAY,SAAS,CAAC,KAAK,MAAM,KAAK,MAAM,CAAC;AACrE;AAEO,SAAS,iBAAiB,cAA8B;AAC3D,MAAI,CAAC,SAAS,YAAY,GAAG;AACzB,UAAM,IAAI,MAAM,6CAA6C,YAAY;AAAA,EAC7E,WACS,gBAAgB,GAAG;AACxB,WAAO;AAAA,EACX,OACK;AACD,WAAO,KAAK,KAAK,MAAM,YAAY;AAAA,EACvC;AACJ;AAEO,SAAS,IAAI,GAAW,GAAW;AACtC,UAAS,IAAI,IAAK,KAAK;AAC3B;AAMO,SAAS,SAAS,GAAW;AAChC,MAAI,CAAC,UAAU,CAAC,KAAK,IAAI,GAAG;AACxB,UAAM,IAAI,MAAM,2BAA2B,CAAC;AAAA,EAChD;AAEA,MAAI,SAAS,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;AAChC,MAAI,MAAM;AAAA,IAAC;AAAA,IAAI;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAM;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAQ;AAAA,IAC7D;AAAA,IAAI;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAM;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAQ;AAAA,IACtD;AAAA,IAAI;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAM;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAQ;AAAA,EAAI;AAC9D,MAAI,QAAQ,IAAI,IAAI;AACpB,SAAO,IAAK,UAAS,IAAI,CAAC,OAAO,IAAI,IAAM,IAAI,EAAG,KAAK,MAAM;AAC7D,SAAO,MAAM,CAAC,OAAO,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI;AACnD;AAEO,SAAS,gBAAgB,GAAW;AACvC,MAAI,CAAC,UAAU,CAAC,GAAG;AACf,UAAM,IAAI,MAAM,kCAAkC,CAAC;AAAA,EACvD;AAEA,QAAM,OAAO,EAAE,SAAS;AACxB,QAAM,YAAY,OAAO,KAAK,OAAO,KAAK,SAAS,CAAC,CAAC;AAErD,MAAI,MAAM,KAAK,KAAK,MAAM,cAAc,GAAG;AACvC,WAAO,OAAO;AAAA,EAClB,WACS,MAAM,KAAK,KAAK,MAAM,cAAc,GAAG;AAC5C,WAAO,OAAO;AAAA,EAClB,WACS,MAAM,KAAK,KAAK,MAAM,cAAc,GAAG;AAC5C,WAAO,OAAO;AAAA,EAClB,OACK;AACD,WAAO,OAAO;AAAA,EAClB;AACJ;AAEO,SAAS,iBAAiB,QAAgB,QAAgB,MAAc,MAAc,GAAW;AACpG,SAAO;AAAA,IACH,GAAG,UAAU,OAAO,UAAU;AAAA,IAC9B,GAAG,UAAU,OAAO,UAAU;AAAA,EAClC;AACJ;AAEO,SAAS,aAAa,QAAgB,QAAgB,MAAc,MAAc,GAAW;AAChG,MAAI,KAAK,IAAI,WAAW,OAAO;AAC/B,SAAO,UAAU,OAAO,UAAU;AACtC;AAEO,SAAS,MAAM,KAAa,KAAa,KAAa;AACzD,SAAO,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG;AAC3C;AAEO,SAAS,WAAW,IAAY,IAAY,IAAY,IAAY;AACvE,MAAI,KAAK,KAAK;AACd,MAAI,KAAK,KAAK;AAEd,MAAI,KAAK,CAAC;AACV,MAAI,KAAK;AAET,MAAI,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AAErC,MAAI,MAAM,GAAG;AACT,UAAM;AACN,UAAM;AAAA,EACV,OACK;AACD,SAAK;AACL,SAAK;AAAA,EACT;AAEA,SAAO,EAAE,IAAI,GAAG;AACpB;AAEO,SAAS,IAAI,KAAuB;AACvC,SAAO,IAAI,OAAO,CAAC,MAAM,QAAQ,MAAM,MAAM,CAAC;AAClD;;;ADlGO,SAAS,QAAW,GAA4B;AACnD,SAAO,CAAC,CAAC,KAAK,OAAO,UAAU,SAAS,KAAK,CAAC,MAAM;AACxD;AAEO,SAAS,QAAW,GAAsB;AAC7C,SAAO,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;AAC9B;AAEO,SAAS,UAAa,GAAoB;AAC7C,SAAO,MAAM,SAAY,IAAI,EAAE,MAAM;AACzC;AAEO,SAAS,iBAAoB,GAAa;AAC7C,SAAO,EAAE,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,IAAI,MAAM,GAAG;AACjE;AAEO,SAAS,oBAAuB,KAAuB,KAAqC;AAC/F,SAAO,IAAI,OAAO,CAAC,IAAI,OAAO,SAAS,UAAU,KAAK,UAAU,QAAM,IAAI,IAAI,EAAE,CAAC,CAAC;AACtF;AAEO,SAAS,UAAa,WAAc,WAAwB;AAC/D,MAAI,CAAC,UAAU,SAAS,KAAK,YAAY,GAAG;AACxC,UAAM,IAAI,MAAM,oCAAoC,SAAS;AAAA,EACjE;AACA,SAAO,IAAI,MAAS,SAAS,EAAE,KAAK,SAAS;AACjD;AAEO,SAAS,iBAAoB,KAAa,IAA2B;AACxE,MAAI,CAAC,UAAU,GAAG,KAAK,MAAM,GAAG;AAC5B,UAAM,IAAI,MAAM,qCAAqC,GAAG;AAAA,EAC5D;AACA,MAAI,MAAW,IAAI,MAAM,GAAG;AAC5B,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAAE,QAAI,CAAC,IAAI,GAAG,CAAC;AAAA,EAAG;AAChD,SAAO;AACX;AAEO,SAAS,iBAAiB,KAAuB;AACpD,SAAO,iBAAiB,KAAK,OAAK,CAAC;AACvC;AAEO,SAAS,cAAiB,OAAe,KAAa,IAA2B;AACpF,MAAI,CAAC,UAAU,KAAK,GAAG;AACnB,UAAM,IAAI,MAAM,oCAAoC,GAAG;AAAA,EAC3D;AACA,MAAI,CAAC,UAAU,GAAG,GAAG;AACjB,UAAM,IAAI,MAAM,kCAAkC,GAAG;AAAA,EACzD;AACA,MAAI,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI;AAClC,MAAI,MAAW,IAAI,MAAM,GAAG;AAC5B,WAAS,IAAI,GAAG,IAAI,OAAO,MAAM,KAAK,KAAK,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK;AAAE,QAAI,CAAC,IAAI,GAAG,CAAC;AAAA,EAAG;AACnG,SAAO;AACX;AAEO,SAAS,cAAc,OAAe,KAAuB;AAChE,SAAO,cAAc,OAAO,KAAK,OAAK,CAAC;AAC3C;AAEO,SAAS,cAAiC,KAAU,MAAkB;AACzE,SAAO,IAAI,QAAQ,IAAI,KAAK;AAChC;AAEO,SAAS,YAAe,KAAuB,YAA2B;AAC7E,MAAI,CAAC,UAAU,UAAU,KAAK,aAAa,GAAG;AAC1C,UAAM,IAAI,MAAM,uCAAuC,UAAU;AAAA,EACrE;AACA,MAAI,SAAgB,CAAC;AACrB,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,YAAY;AAC7C,WAAO,KAAK,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC;AAAA,EAC5C;AACA,SAAO;AACX;;;AExEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAIO,SAAS,cAAoC,GAA2B;AAC3E,SAAO,OAAO,KAAK,CAAC,EAAE,OAAO,SAAO,OAAO,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,SAAO,EAAE,GAAG,CAAiB;AACpG;;;ACJO,IAAU;AAAA,CAAV,CAAUA,YAAV;AAIH,MAAI,mBAAqC;AAElC,WAAS,cAAc,IAAuB;AACjD,uBAAmB,MAAM;AAAA,EAC7B;AAFO,EAAAA,QAAS;AAIhB,WAAS,WAAW,UAAkB,SAAyB;AAC3D,UAAM,IAAI,iBAAiB,sBAAsB,YAAY,UAAU,MAAM,UAAU,GAAG;AAAA,EAC9F;AAEA,WAAS,OAAO,GAAyB;AACrC,WAAO,OAAO,MAAM,YAAY,SAAS,CAAC,KAAK,MAAM,KAAK,MAAM,CAAC;AAAA,EACrE;AAEA,WAAS,UAAU,GAAyB;AACxC,WAAO,OAAO,MAAM;AAAA,EACxB;AAEO,WAAS,OAAU,GAAM,SAAkB;AAC9C,QAAI,CAAC,GAAG;AACJ,iBAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AAJO,EAAAA,QAAS;AAMT,WAAS,WAAsD,OAAgB,SAAY,OAAO,SAAsC;AAC3I,QAAI,CAAC,cAAc,OAAO,EAAE,KAAK,OAAK,MAAM,KAAK,GAAG;AAChD,YAAM,IAAI,UAAU,WAAW,IAAI,gBAAgB,KAAK,EAAE;AAAA,IAC9D;AAAA,EACJ;AAJO,EAAAA,QAAS;AAMT,WAAS,UAAU,SAAyB;AAC/C,eAAW,WAAW,cAAc;AAAA,EACxC;AAFO,EAAAA,QAAS;AAIT,WAAS,IAAI,GAAY,SAA0B;AACtD,QAAI,CAAC,OAAO,CAAC,GAAG;AACZ,iBAAW,YAAY,CAAC,mBAAmB,OAAO;AAAA,IACtD;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,GAAM,GAAM,GAAM,SAAqB;AACnD,QAAI,MAAM,GAAG;AACT,iBAAW,YAAY,CAAC,aAAa,CAAC,KAAK,OAAO;AAAA,IACtD;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,OAAO,GAAY,GAAY,SAA0B;AACrE,QAAI,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC,KAAK,MAAM,IAAI;AACzC,iBAAW,YAAY,CAAC,2BAA2B,CAAC,KAAK,OAAO;AAAA,IACpE;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,OAAO,GAAY,GAAY,SAA0B;AACrE,QAAI,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC,KAAK,IAAI,IAAI;AACvC,iBAAW,YAAY,CAAC,4BAA4B,CAAC,KAAK,OAAO;AAAA,IACrE;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,QAAQ,GAAY,GAAY,SAA0B;AACtE,QAAI,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC,KAAK,KAAK,IAAI;AACxC,iBAAW,YAAY,CAAC,wCAAwC,CAAC,KAAK,OAAO;AAAA,IACjF;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,OAAO,GAAY,GAAY,SAA0B;AACrE,QAAI,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC,KAAK,IAAI,IAAI;AACvC,iBAAW,YAAY,CAAC,+BAA+B,CAAC,KAAK,OAAO;AAAA,IACxE;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,QAAQ,GAAY,GAAY,SAA0B;AACtE,QAAI,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC,KAAK,KAAK,IAAI;AACxC,iBAAW,YAAY,CAAC,2CAA2C,CAAC,KAAK,OAAO;AAAA,IACpF;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,YAAY,GAAY,KAAc,KAAc,SAA0B;AAC1F,QAAI,EAAE,OAAO,CAAC,KAAK,UAAU,GAAG,KAAK,UAAU,GAAG,KAAK,KAAK,OAAO,KAAK,MAAM;AAC1E,iBAAW,YAAY,CAAC,0BAA0B,GAAG,QAAQ,GAAG,KAAK,OAAO;AAAA,IAChF;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,IAAI,GAAY,SAA0B;AACtD,QAAI,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM,IAAI;AAC7B,iBAAW,YAAY,CAAC,sBAAsB,OAAO;AAAA,IACzD;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,KAAK,GAAY,SAA0B;AACvD,QAAI,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM,IAAI;AAC7B,iBAAW,YAAY,CAAC,uBAAuB,OAAO;AAAA,IAC1D;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,SAAY,GAAM,OAAyB,SAAqB;AAC5E,QAAI,CAAE,MAAM,KAAK,OAAK,MAAM,CAAC,GAAI;AAC7B,UAAI,WAAW,MAAM,IAAI,OAAK,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI;AAClD,iBAAW,YAAY,CAAC,oBAAoB,QAAQ,MAAM,OAAO;AAAA,IACrE;AACA,WAAO;AAAA,EACX;AANO,EAAAA,QAAS;AAQT,WAAS,OAAO,GAAY,SAA0B;AACzD,QAAI,EAAE,UAAU,CAAC,KAAK,SAAS,CAAC,IAAI;AAChC,iBAAW,YAAY,CAAC,yBAAyB,OAAO;AAAA,IAC5D;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,SAAY,KAAoB,IAAa,SAA0B;AACnF,QAAI,EAAE,OAAO,EAAE,KAAK,MAAM,KAAK,KAAK,IAAI,SAAS;AAC7C,iBAAW,YAAY,EAAE,oCAAoC,IAAI,SAAS,CAAC,MAAM,OAAO;AAAA,IAC5F;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,WAAc,KAAoB,IAAY,SAAqB;AAC/E,WAAO,IAAI,SAAS,KAAK,IAAI,OAAO,CAAC;AAAA,EACzC;AAFO,EAAAA,QAAS;AAIT,WAASC,SAAW,KAAQ,SAAkC;AACjE,QAAI,QAAQ,QAAW;AACnB,iBAAW,gCAAgC,OAAO;AAAA,IACtD,OACK;AACD,aAAO;AAAA,IACX;AAAA,EACJ;AAPO,EAAAD,QAAS,UAAAC;AAAA,GAtIH;;;ACAV,IAAU;AAAA,CAAV,CAAUC,YAAV;AACH,WAAS,SAAiB;AACtB,QAAI,KAAK,SAAS,cAAc,KAAK;AACrC,OAAG,MAAM,QAAQ;AACjB,aAAS,KAAK,YAAY,EAAE;AAC5B,QAAI,MAAM,GAAG;AACb,OAAG,OAAO;AACV,WAAO,OAAO;AAAA,EAClB;AAEA,WAAS,oBAA4B;AACjC,QAAI;AACA,UAAI,QAAQ,SAAS,cAAc,KAAK;AACxC,YAAM,MAAM,aAAa;AACzB,YAAM,MAAM,QAAQ;AAGpB,eAAS,KAAK,YAAY,KAAK;AAE/B,UAAI,gBAAgB,MAAM;AAE1B,YAAM,MAAM,WAAW;AAGvB,UAAI,QAAQ,SAAS,cAAc,KAAK;AACxC,YAAM,MAAM,QAAQ;AACpB,YAAM,YAAY,KAAK;AAEvB,UAAI,kBAAkB,MAAM;AAG5B,UAAI,MAAM,YAAY;AAClB,cAAM,WAAW,YAAY,KAAK;AAAA,MACtC;AAEA,aAAO,gBAAgB;AAAA,IAC3B,SACO,GAAG;AACN,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,WAAS,oBAA4B;AACjC,QAAI,SAAS,SAAS,cAAc,KAAK;AACzC,WAAO,MAAM,UAAU;AACvB,WAAO,YAAY,SAAS,eAAe,GAAG,CAAC;AAC/C,aAAS,KAAK,YAAY,MAAM;AAChC,QAAI,WAAW,OAAO;AACtB,aAAS,KAAK,YAAY,MAAM;AAChC,WAAO;AAAA,EACX;AAEA,WAAS,mBAA4B;AAGjC,QAAI,kBAAkB,UAAU,mBAAmB,UAAU,iBAAiB,YAAY,qBAAqB,UAAU;AACrH,aAAO;AAAA,IACX;AAKA,QAAI,WAAW,4BAA4B,MAAM,GAAG;AACpD,QAAI,KAAK,SAAUC,QAAe;AAC9B,aAAO,OAAO,WAAWA,MAAK,EAAE;AAAA,IACpC;AACA,QAAI,QAAQ,CAAC,KAAK,SAAS,KAAK,kBAAkB,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE;AAC3E,WAAO,GAAG,KAAK;AAAA,EACnB;AAEA,WAAS,oBAAoB;AACzB,QAAI,IAAI,UAAU,aAAa,UAAU,UAAgB,OAAQ;AACjE,WAAQ,2TAA2T,KAAK,CAAC,KAAK,0kDAA0kD,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC;AAAA,EAC/6D;AAEA,WAAS,iBAAyB;AAC9B,WAAO,SAAS,WAAW,OAAO,SAAS;AAAA,EAC/C;AAGA,QAAM,aAAa;AACnB,QAAM,kBAAkB;AAEjB,EAAMD,QAAA,MAAM,OAAO;AACnB,EAAMA,QAAA,UAAUA,QAAA,MAAM;AACtB,EAAMA,QAAA,iBAAiB,kBAAkB;AACzC,EAAMA,QAAA,WAAW,kBAAkB;AACnC,EAAMA,QAAA,gBAAgB,iBAAiB;AACvC,EAAMA,QAAA,iBAAiB,kBAAkB;AACzC,EAAMA,QAAA,cAAc,eAAe;AAEnC,WAAS,OAAO,IAAoB;AACvC,WAAO,KAAKA,QAAA;AAAA,EAChB;AAFO,EAAAA,QAAS;AAIT,WAAS,OAAO,IAAoB;AACvC,WAAO,KAAKA,QAAA;AAAA,EAChB;AAFO,EAAAA,QAAS;AAIT,WAASE,MAAK,OAAgC;AACjD,QAAI,OAAO,UAAU,UAAU;AAC3B,aAAO;AAAA,IACX;AAEA,QAAI,QAAgB;AACpB,QAAI,OAA6B;AAEjC,QAAI,QAAQ,MAAM,SAAS,EAAE,MAAM,eAAe;AAElD,QAAI,SAAS,MAAM,CAAC,GAAG;AACnB,cAAQ,WAAW,MAAM,CAAC,CAAC;AAE3B,UAAI,UAAU,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,YAAY,IAAI;AAClD,UAAI,YAAY,WAAW,KAAK,OAAO;AAEvC,aAAO,YAAY,UAAsB;AACzC,UAAI,CAAC,MAAM;AACP,gBAAQ,IAAI,mBAAmB,UAAU,kBAAkB;AAAA,MAC/D;AAAA,IACJ,OACK;AACD,cAAQ,WAAW,KAAK;AAAA,IAC5B;AAEA,WAAO,OAAO,OAAO,wBAAwB;AAE7C,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,eAAO,OAAO,KAAK;AAAA,MACvB,KAAK;AACD,eAAO,OAAO,KAAK,IAAI;AAAA,MAC3B,KAAK;AAAA,MACL,KAAK;AACD,eAAO,OAAO,KAAK,IAAI;AAAA,MAC3B,KAAK;AACD,eAAOF,QAAO,WAAW;AAAA,MAC7B;AAAA,MACA,KAAK;AACD,eAAO;AAAA,IACf;AAAA,EACJ;AAzCO,EAAAA,QAAS,OAAAE;AAAA,GAnGH;;;AHgBjB,SAAS,KAAK,OAAwD;AAClE,SAAO,UAAU,SAAY,SAAY,OAAO,KAAK,KAAK;AAC9D;AAEO,SAAS,SAAS,IAAiB,WAAmB;AACzD,MAAI,UAAU,WAAW,GAAG;AACxB,WAAO;AAAA,EACX,WACS,GAAG,WAAW;AACnB,WAAO,GAAG,UAAU,SAAS,SAAS;AAAA,EAC1C,OACK;AACD,WAAO,CAAC,CAAC,GAAG,UAAU,MAAM,IAAI,OAAO,YAAY,YAAY,SAAS,CAAC;AAAA,EAC7E;AACJ;AAEO,SAAS,SAAS,IAAiB,WAAmB;AACzD,MAAI,UAAU,WAAW,GAAG;AACxB;AAAA,EACJ,WACS,GAAG,WAAW;AACnB,OAAG,UAAU,IAAI,SAAS;AAAA,EAC9B,WACS,CAAC,SAAS,IAAI,SAAS,GAAG;AAC/B,OAAG,aAAa,MAAM;AAAA,EAC1B;AACJ;AAEO,SAAS,YAAY,IAAiB,WAAmB;AAC5D,MAAI,UAAU,WAAW,GAAG;AACxB;AAAA,EACJ,WACS,GAAG,WAAW;AACnB,OAAG,UAAU,OAAO,SAAS;AAAA,EACjC,WACS,SAAS,IAAI,SAAS,GAAG;AAC9B,QAAI,MAAM,IAAI,OAAO,YAAY,YAAY,SAAS;AACtD,OAAG,YAAY,GAAG,UAAU,QAAQ,KAAK,GAAG;AAAA,EAChD;AACJ;AAEO,SAAS,UAAU,IAAiB,MAAc,KAAa,OAAe,MAAM;AACvF,KAAG,MAAM,OAAO,OAAO;AACvB,KAAG,MAAM,MAAM,MAAM;AACzB;AAEO,SAAS,UAAU,IAAgD;AACtE,MAAI,MAAM,GAAG,sBAAsB;AACnC,MAAI,UAAU,SAAS;AACvB,SAAO;AAAA,IACH,KAAK,IAAI,MAAM,OAAO,cAAc,QAAQ;AAAA,IAC5C,MAAM,IAAI,OAAO,OAAO,cAAc,QAAQ;AAAA,EAClD;AACJ;AAEO,SAAS,SAAS,IAA0B;AAC/C,MAAI,cAAc,QAAQ;AACtB,WAAO,GAAG;AAAA,EACd,OACK;AACD,QAAI,IAAI,WAAW,iBAAiB,IAAI,IAAI,EAAE,MAAM,QAAQ,MAAM,EAAE,CAAC;AACrE,WAAO,MAAM,CAAC,IAAI,IAAI;AAAA,EAC1B;AACJ;AAEO,SAAS,SAAS,IAAiB,KAAa;AACnD,KAAG,MAAM,QAAQ,MAAM;AAC3B;AAEO,SAAS,UAAU,IAA0B;AAChD,MAAI,cAAc,QAAQ;AACtB,WAAO,GAAG;AAAA,EACd,OACK;AACD,QAAI,IAAI,WAAW,iBAAiB,IAAI,IAAI,EAAE,OAAO,QAAQ,MAAM,EAAE,CAAC;AACtE,WAAO,MAAM,CAAC,IAAI,IAAI;AAAA,EAC1B;AACJ;AAEO,SAAS,UAAU,IAAiB,KAAa;AACpD,KAAG,MAAM,SAAS,MAAM;AAC5B;AAEO,SAAS,SAAS,IAA8B,IAA8B;AACjF,KAAG,YAAY,EAAE;AACrB;AAEO,SAAS,iBAAiB,IAA8B;AAC3D,KAAG,OAAO;AACd;AAEO,SAAS,cAAc,IAA8B,SAAkB;AAC1E,KAAG,MAAM,UAAU,UAAU,UAAU;AAC3C;AAEO,SAAS,QAAQ,IAAiB,MAAc,KAAa,OAAe,QAAgB,OAAe,MAAM;AACpH,KAAG,MAAM,OAAO,OAAO;AACvB,KAAG,MAAM,MAAM,MAAM;AACrB,KAAG,MAAM,QAAQ,QAAQ;AACzB,KAAG,MAAM,SAAS,SAAS;AAC/B;AAEO,SAAS,UAAU,KAA0D;AAChF,MAAI,KAAK,OAAO,QAAQ,WAAW,SAAS,eAAe,GAAG,IAAI;AAClE,SAAO,cAAc,oBAAoB,KAAK;AAClD;AAEO,SAAS,UAAUC,SAA6D;AACnF,MAAI,KAAK,OAAOA,YAAW,WAAW,SAAS,eAAeA,OAAM,IAAIA;AACxE,SAAO,cAAc,oBAAoB,KAAK;AAClD;AAEO,SAAS,WAAW,OAAqF;AAC5G,MAAI,CAAC,OAAO;AACR,WAAO,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE;AAAA,EAClD;AAEA,MAAI,MAAM,KAAK,MAAM,UAAU;AAC/B,MAAI,QAAQ,KAAK,MAAM,YAAY;AACnC,MAAI,SAAS,KAAK,MAAM,aAAa;AACrC,MAAI,OAAO,KAAK,MAAM,WAAW;AAEjC,MAAI,WAAW,MAAM,WAAW,IAAI,SAAS,EAAE,MAAM,GAAG,EAAE,OAAO,OAAK,EAAE,SAAS,CAAC;AAElF,UAAQ,QAAQ,QAAQ;AAAA,IACpB,KAAK;AACD;AAAA,IACJ,KAAK;AACD,oBAAQ,KAAK,QAAQ,CAAC,CAAC;AACvB,wBAAU,KAAK,QAAQ,CAAC,CAAC;AACzB,0BAAW,KAAK,QAAQ,CAAC,CAAC;AAC1B,sBAAS,KAAK,QAAQ,CAAC,CAAC;AACxB;AAAA,IACJ,KAAK;AACD,oBAAQ,KAAK,QAAQ,CAAC,CAAC;AACvB,wBAAU,KAAK,QAAQ,CAAC,CAAC;AACzB,0BAAW,KAAK,QAAQ,CAAC,CAAC;AAC1B,sBAAS,KAAK,QAAQ,CAAC,CAAC;AACxB;AAAA,IACJ,KAAK;AACD,oBAAQ,KAAK,QAAQ,CAAC,CAAC;AACvB,wBAAU,KAAK,QAAQ,CAAC,CAAC;AACzB,0BAAW,KAAK,QAAQ,CAAC,CAAC;AAC1B,sBAAS,KAAK,QAAQ,CAAC,CAAC;AACxB;AAAA,IACJ,KAAK;AAAA,IACL;AACI,oBAAQ,KAAK,QAAQ,CAAC,CAAC;AACvB,wBAAU,KAAK,QAAQ,CAAC,CAAC;AACzB,0BAAW,KAAK,QAAQ,CAAC,CAAC;AAC1B,sBAAS,KAAK,QAAQ,CAAC,CAAC;AACxB;AAAA,EACR;AAEA,gBAAQ;AACR,oBAAU;AACV,sBAAW;AACX,kBAAS;AAET,SAAO,EAAE,KAAK,OAAO,QAAQ,KAAK;AACtC;AAEO,SAAS,aAAa,OAAuB;AAChD,MAAI,OAAO,KAAK,OAAO,IAAI;AAC3B,MAAI,QAAQ,KAAK,OAAO,KAAK;AAC7B,MAAI,MAAM,KAAK,OAAO,GAAG;AACzB,MAAI,SAAS,KAAK,OAAO,MAAM;AAC/B,MAAI,QAAQ,KAAK,OAAO,KAAK;AAC7B,MAAI,SAAS,KAAK,OAAO,MAAM;AAE/B,MAAI,UAAU,UAAa,SAAS,UAAa,UAAU,QAAW;AAClE,YAAQ,QAAQ;AAAA,EACpB;AAEA,MAAI,WAAW,UAAa,QAAQ,UAAa,WAAW,QAAW;AACnE,aAAS,SAAS;AAAA,EACtB;AAEA,SAAO,EAAE,MAAM,KAAK,OAAO,OAAO;AACtC;AAEO,SAAS,mBAAmB,QAAwB,QAAwB;AAC/E,MAAI,CAAC,UAAU,CAAC,QAAQ;AACpB,WAAO;AAAA,EACX,WACS,CAAC,UAAU,CAAC,QAAQ;AACzB,WAAO;AAAA,EACX,OACK;AACD,WAAO,OAAO,SAAS,OAAO,QAAQ,OAAO,QAAQ,OAAO,OACxD,OAAO,UAAU,OAAO,SAAS,OAAO,WAAW,OAAO,UAC1D,OAAO,UAAU,OAAO,SAAS,OAAO,WAAW,OAAO;AAAA,EAClE;AACJ;AAEA,IAAI;AAEG,SAAS,mBAAmB,MAAc,MAAc;AAC3D,sBAAW,SAAS,cAAc,QAAQ;AAE1C,MAAI,MAAM,OAAO,WAAW,IAAI;AAChC,MAAI,CAAC,KAAK;AACN,WAAO;AAAA,EACX;AAEA,MAAI,OAAO;AAEX,SAAO,IAAI,YAAY,IAAI,EAAE;AACjC;;;AIlOA;AAAA;AAAA;AAAA;AACO,SAAS,WAAiB,KAAqB;AAClD,MAAI,OAAY,CAAC;AACjB,MAAI,QAAQ,CAAC,OAAU,QAAW,KAAK,KAAK,GAAG,CAAC;AAChD,SAAO;AACX;;;ACLA;AAAA;AAAA;AAAA;AAEO,SAAS,SAAS,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,QAAQ,KAAK;AACxE;;;ACJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,SAAS,YAAY,KAAuB;AAC/C,SAAO,IAAI,MAAM,EAAE;AACvB;AAQO,SAAS,aAAaC,eAAsB,aAA6B;AAC5E,MAAI,CAAC,UAAU,WAAW,KAAK,cAAc,GAAG;AAC5C,UAAM,IAAI,MAAM,sCAAsC,WAAW;AAAA,EACrE;AAEA,SAAO,IAAI,MAAM,cAAc,CAAC,EAAE,KAAKA,aAAY;AACvD;AAOO,SAAS,YAAY,KAAa,WAA6B;AAClE,MAAI,CAAC,UAAU,SAAS,KAAK,YAAY,GAAG;AACxC,UAAM,IAAI,MAAM,uCAAuC,SAAS;AAAA,EACpE;AACA,MAAI,SAAmB,CAAC;AACxB,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,WAAW;AAC5C,WAAO,KAAK,IAAI,MAAM,GAAG,IAAI,SAAS,CAAC;AAAA,EAC3C;AACA,SAAO;AACX;AASO,SAAS,UAAU,KAAa,KAAa,aAAqB,QAAgB;AACrF,MAAI,CAAC,UAAU,WAAW,KAAK,cAAc,GAAG;AAC5C,UAAM,IAAI,MAAM,sCAAsC,WAAW;AAAA,EACrE,WACS,CAAC,UAAU,GAAG,KAAK,MAAM,KAAK,MAAM,cAAc,IAAI,QAAQ;AACnE,UAAM,IAAI,MAAM,8BAA8B,MAAM,qBAAqB,cAAc,oBAAoB,IAAI,MAAM;AAAA,EACzH,OACK;AACD,WAAO,IAAI,UAAU,GAAG,GAAG,IAAI,SAAS,IAAI,UAAU,MAAM,WAAW;AAAA,EAC3E;AACJ;AAQO,SAAS,SAAS,KAAa,KAAa,WAAmB;AAClE,SAAO,UAAU,KAAK,KAAK,GAAG,SAAS;AAC3C;AAQO,SAAS,SAAS,KAAa,KAAa,aAAqB;AACpE,SAAO,UAAU,KAAK,KAAK,aAAa,EAAE;AAC9C;AAMO,SAAS,uBAAuB,cAAsB;AACzD,MAAI,iBAAiB,IAAI;AACrB,WAAO;AAAA,EACX;AACA,MAAI,OAAO,aAAa,OAAO,CAAC;AAChC,MAAI,WAAW;AAEf,QAAM,UAAU,MAAM;AAClB,QAAI,SAAS,IAAI;AACb,UAAI,aAAa,IAAI;AACjB,oBAAY,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,UAAU,CAAC;AAAA,MAC/D,OACK;AACD,oBAAY,MAAM;AAAA,MACtB;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,QAAM,qBAAqB,CAAC,MAAc;AACtC,WAAO,EAAE,YAAY,MAAM,EAAE,YAAY,KAAK,MAAM,EAAE,YAAY;AAAA,EACtE;AAEA,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,QAAI,IAAI,aAAa,OAAO,CAAC;AAC7B,QAAI,mBAAmB,CAAC,GAAG;AACvB,cAAQ;AAAA,IACZ;AACA,YAAQ,EAAE,YAAY;AAAA,EAC1B;AAEA,UAAQ;AAER,SAAO;AACX;;;ACrHO,IAAU;AAAA,CAAV,CAAUC,aAAV;AAEH,QAAM,oBAAoB;AAE1B,MAAK;AAAL,IAAKC,kBAAL;AACI,IAAAA,cAAA,YAAS;AACT,IAAAA,cAAA,aAAU;AAAA,KAFT;AAKL,MAAI;AACJ,MAAI;AAEJ,MAAI,MAAM,MAAM,iBAAiB;AACjC,aAAY,QAAQ,yBAAuB,QAAQ,0BAAwB,MAAM;AAE1E,WAAS,cAAc,MAAc;AACxC,eAAW,oBAAI,KAAK;AACpB,aAAS,QAAQ,SAAS,QAAQ,IAAI,IAAI;AAAA,EAC9C;AAHO,EAAAD,SAAS;AAKT,WAAS,mBAAmB;AAC/B,WAAO,aAAa;AAAA,EACxB;AAFO,EAAAA,SAAS;AAIT,WAAS,SAAS;AACrB,eAAW;AACX,UAAM,mBAAmB,QAAQ;AAAA,EACrC;AAHO,EAAAA,SAAS;AAKT,WAAS,UAAU;AACtB,eAAW;AACX,UAAM,mBAAmB,QAAQ;AAAA,EACrC;AAHO,EAAAA,SAAS;AAKhB,WAAS,WAAqB;AAC1B,QAAI,IAAI,SAAS;AACjB,WAAO,EAAE,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAAA,EACzC;AAEA,WAAS,MAA2C,MAAc,OAAa;AAC3E,QAAI,SAAS,OAAO,MAAM,MAAM,SAAS,IAAI;AAE7C,QAAI,UAAU;AACV,gBAAU,aAAa,SAAS,YAAY,IAAI;AAAA,IACpD;AAEA,aAAS,SAAS;AAElB,WAAO;AAAA,EACX;AAEA,WAAS,MAAM,MAAc,cAA2C;AACpE,QAAIE,OAAM,SAAS,EAAE,KAAK,OAAK,EAAE,WAAW,OAAO,GAAG,CAAC;AACvD,WAAOA,SAAQ,SAAY,eAAeA,KAAI,UAAU,KAAK,SAAS,CAAC;AAAA,EAC3E;AAEA,WAAS,OAAO,MAAc;AAC1B,aAAS,SAAS,OAAO;AAAA,EAC7B;AAEO,WAAS,KAA0C,MAAc,OAAa;AACjF,QAAI,aAAa,uBAAqB;AAClC,YAAM,MAAM,KAAK;AAAA,IACrB;AAEA,WAAO;AAAA,EACX;AANO,EAAAF,SAAS;AAQT,WAAS,KAAK,MAAc,cAA8B;AAC7D,QAAI,aAAa,uBAAqB;AAClC,aAAO,MAAM,MAAM,YAAY,KAAK;AAAA,IACxC,OACK;AACD,aAAO;AAAA,IACX;AAAA,EACJ;AAPO,EAAAA,SAAS;AAST,WAAS,QAAQ,MAAc,cAA8B;AAChE,QAAI,aAAa,uBAAqB;AAClC,UAAIE,OAAM,MAAM,IAAI;AACpB,aAAOA,SAAQ,SAAY,eAAe,SAASA,IAAG;AAAA,IAC1D,OACK;AACD,aAAO;AAAA,IACX;AAAA,EACJ;AARO,EAAAF,SAAS;AAUT,WAAS,SAAS,MAAc,cAAgC;AACnE,QAAI,aAAa,uBAAqB;AAClC,UAAIE,OAAM,MAAM,IAAI;AACpB,aAAOA,SAAQ,SAAY,eAAgB,UAAW,KAAKA,IAAG;AAAA,IAClE,OACK;AACD,aAAO;AAAA,IACX;AAAA,EACJ;AARO,EAAAF,SAAS;AAUT,WAAS,MAAM,MAAc;AAChC,QAAI,aAAa,yBAAuB,SAAS,mBAAmB;AAChE,aAAO,IAAI;AAAA,IACf;AAAA,EACJ;AAJO,EAAAA,SAAS;AAMT,WAAS,WAAW;AACvB,aAAS,OAAO,MAAM,GAAG,EAAE,QAAQ,OAAK,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AAAA,EACzE;AAFO,EAAAA,SAAS;AAAA,GAvGH;;;ACEV,IAAM,QAAN,MAAe;AAAA,EAAf;AACH,wBAAiB,QAAY,CAAC;AAAA;AAAA,EAE9B,KAAK,GAAM;AACP,SAAK,KAAK,KAAK,CAAC;AAChB,WAAO;AAAA,EACX;AAAA,EAEA,MAAS;AACL,WAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACjC,WAAO,KAAK,KAAK,IAAI;AAAA,EACzB;AAAA,EAEA,MAAM;AACF,WAAO,OAAO,WAAW,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,iBAAiB;AAAA,EAC/E;AAAA,EAEA,UAAU;AACN,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,SAAS;AACT,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EAEA,QAAQ;AACJ,SAAK,KAAK,SAAS;AAAA,EACvB;AACJ;;;AC9BO,IAAM,OAAN,MAAM,MAAK;AAAA,EAId,YAAY,GAAY,GAAY;AAHpC,wBAAS;AACT,wBAAS;AAGL,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;AAAA,EAClB;AAAA,EAEA,SAAS;AACL,WAAO,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;AAAA,EACtD;AAAA,EAEA,IAAI,GAAS;AACT,WAAO,IAAI,MAAK,KAAK,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;AAAA,EAC9C;AAAA,EAEA,IAAI,GAAS;AACT,WAAO,IAAI,MAAK,KAAK,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;AAAA,EAC9C;AAAA,EAEA,IAAI,GAAW;AACX,WAAO,IAAI,MAAK,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC;AAAA,EAC1C;AAAA,EAEA,IAAI,GAAW;AACX,WAAO,IAAI,MAAK,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC;AAAA,EAC1C;AACJ;;;ACvBO,IAAM,WAAN,MAAoC;AAAA;AAAA,EAUvC,YAAY,SAAiB,eAAuB,UAAU;AAT9D,wBAAQ;AACR;AAAA,wBAAQ;AACR;AAAA,wBAAQ;AACR;AAAA,wBAAQ;AACR;AAAA,wBAAQ;AACR;AAAA,wBAAQ;AACR;AAAA,wBAAQ;AACR;AAAA,wBAAQ;AAGJ,SAAK,QAAQ,uBAAO,OAAO,IAAI;AAC/B,SAAK,OAAO,uBAAO,OAAO,IAAI;AAC9B,SAAK,OAAO,uBAAO,OAAO,IAAI;AAC9B,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,WAAW;AAChB,SAAK,OAAO;AACZ,SAAK,eAAe;AAAA,EACxB;AAAA;AAAA,EAGA,IAAI,KAAuB;AACvB,QAAI,IAAI,SAAS,KAAK,aAAc,QAAO;AAE3C,QAAI,KAAK,MAAM,GAAG,MAAM,QAAW;AAC/B,WAAK,MAAM,GAAG;AACd,aAAO,KAAK,MAAM,GAAG;AAAA,IACzB;AACA,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,KAAQ,OAAgB;AACxB,QAAI,IAAI,SAAS,KAAK,cAAc;AAEhC;AAAA,IACJ;AAEA,QAAI,KAAK,MAAM,GAAG,MAAM,QAAW;AAE/B,WAAK,MAAM,GAAG,IAAI;AAClB,WAAK,MAAM,GAAG;AACd;AAAA,IACJ;AAGA,QAAI,KAAK,QAAQ,KAAK,UAAU;AAC5B,WAAK,MAAM;AAAA,IACf;AAGA,SAAK,MAAM,GAAG,IAAI;AAClB,SAAK,UAAU,GAAG;AAClB,SAAK;AAAA,EACT;AAAA;AAAA,EAGQ,MAAM,KAAc;AACxB,QAAI,KAAK,SAAS,IAAK;AAEvB,SAAK,UAAU,GAAG;AAClB,SAAK,UAAU,GAAG;AAAA,EACtB;AAAA;AAAA,EAGQ,QAAc;AAClB,QAAI,KAAK,SAAS,MAAM;AACpB,YAAM,YAAY,KAAK;AACvB,WAAK,UAAU,SAAS;AACxB,aAAO,KAAK,MAAM,SAAS;AAC3B,WAAK;AAAA,IACT;AAAA,EACJ;AAAA;AAAA,EAGQ,UAAU,KAAc;AAC5B,UAAM,UAAU,KAAK,KAAK,GAAG;AAC7B,UAAM,UAAU,KAAK,KAAK,GAAG;AAE7B,QAAI,YAAY,QAAW;AACvB,WAAK,KAAK,OAAO,IAAI;AAAA,IACzB,OACK;AAED,WAAK,OAAO,WAAW;AAAA,IAC3B;AAEA,QAAI,YAAY,QAAW;AACvB,WAAK,KAAK,OAAO,IAAI;AAAA,IACzB,OACK;AAED,WAAK,OAAO,WAAW;AAAA,IAC3B;AAGA,WAAO,KAAK,KAAK,GAAG;AACpB,WAAO,KAAK,KAAK,GAAG;AAAA,EACxB;AAAA;AAAA,EAGQ,UAAU,KAAc;AAC5B,QAAI,KAAK,SAAS,MAAM;AAEpB,WAAK,KAAK,KAAK,IAAI,IAAI;AACvB,WAAK,KAAK,GAAG,IAAI,KAAK;AAAA,IAC1B,OACK;AAED,WAAK,OAAO;AAAA,IAChB;AACA,SAAK,OAAO;AAAA,EAChB;AACJ;;;ACjGO,IAAM,gBAAN,MAAuB;AAAA;AAAA,EAI1B,cAAc;AAHd,wBAAQ;AACR;AAAA,wBAAQ;AAGJ,SAAK,MAAM,CAAC;AACZ,SAAK,MAAM,CAAC;AAAA,EAChB;AAAA,EAEA,IAAI,KAAa,OAAgB;AAC7B,QAAI,CAAC,UAAU,GAAG,GAAG;AACjB,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAC5C,WACS,OAAO,GAAG;AACf,WAAK,IAAI,GAAG,IAAI;AAAA,IACpB,OACK;AACD,WAAK,IAAI,CAAC,MAAM,CAAC,IAAI;AAAA,IACzB;AAAA,EACJ;AAAA,EAEA,IAAI,KAA4B;AAC5B,QAAI,CAAC,UAAU,GAAG,GAAG;AACjB,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAC5C,WACS,OAAO,GAAG;AACf,aAAO,KAAK,IAAI,GAAG;AAAA,IACvB,OACK;AACD,aAAO,KAAK,IAAI,CAAC,MAAM,CAAC;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEA,IAAI,KAAsB;AACtB,QAAI,CAAC,UAAU,GAAG,GAAG;AACjB,aAAO;AAAA,IACX,WACS,OAAO,GAAG;AACf,aAAO,OAAO,KAAK;AAAA,IACvB,OACK;AACD,aAAQ,CAAC,MAAM,KAAM,KAAK;AAAA,IAC9B;AAAA,EACJ;AAAA,EAEA,OAAO,KAAmB;AACtB,QAAI,CAAC,UAAU,GAAG,GAAG;AACjB;AAAA,IACJ,WACS,OAAO,GAAG;AACf,aAAO,KAAK,IAAI,GAAG;AAAA,IACvB,OACK;AACD,aAAO,KAAK,IAAI,CAAC,MAAM,CAAC;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEA,QAAc;AACV,SAAK,MAAM,CAAC;AACZ,SAAK,MAAM,CAAC;AAAA,EAChB;AACJ;","names":["Assert","require","Device","query","toPx","canvas","repeatString","Cookies","ConsentState","str"]}
|
package/package.json
CHANGED
|
@@ -1,51 +1,54 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tspro/ts-utils-lib",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"author": "PahkaSoft",
|
|
5
|
+
"license": "MIT",
|
|
5
6
|
"private": false,
|
|
6
|
-
"license": "zlib",
|
|
7
7
|
"description": "",
|
|
8
|
-
"
|
|
9
|
-
"
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"module": "dist/index.mjs",
|
|
10
11
|
"exports": {
|
|
11
12
|
".": {
|
|
12
|
-
"
|
|
13
|
-
|
|
13
|
+
"browser": {
|
|
14
|
+
"require": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"default": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"import": {
|
|
19
|
+
"types": "./dist/index.d.mts",
|
|
20
|
+
"default": "./dist/index.mjs"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"require": {
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"default": "./dist/index.js"
|
|
26
|
+
},
|
|
27
|
+
"import": {
|
|
28
|
+
"types": "./dist/index.d.mts",
|
|
29
|
+
"default": "./dist/index.mjs"
|
|
30
|
+
}
|
|
14
31
|
}
|
|
15
32
|
},
|
|
16
33
|
"devDependencies": {
|
|
17
34
|
"@types/jasmine": "^5.1.8",
|
|
18
|
-
"
|
|
19
|
-
"jasmine
|
|
35
|
+
"benchmark": "^2.1.4",
|
|
36
|
+
"jasmine": "^5.8.0",
|
|
20
37
|
"karma": "^6.4.4",
|
|
21
38
|
"karma-chrome-launcher": "^3.2.0",
|
|
22
39
|
"karma-cli": "^2.0.0",
|
|
23
40
|
"karma-jasmine": "^5.1.0",
|
|
24
|
-
"karma-sourcemap-loader": "^0.4.0",
|
|
25
41
|
"karma-webpack": "^5.0.1",
|
|
26
|
-
"
|
|
42
|
+
"npm-watch": "^0.13.0",
|
|
27
43
|
"ts-loader": "^9.5.2",
|
|
28
|
-
"
|
|
29
|
-
"typescript": "
|
|
30
|
-
"webpack": "^5.
|
|
31
|
-
"webpack-cli": "^6.0.1",
|
|
32
|
-
"webpack-dev-server": "^5.2.1"
|
|
33
|
-
},
|
|
34
|
-
"watch": {
|
|
35
|
-
"build:dev": {
|
|
36
|
-
"patterns": [
|
|
37
|
-
"src"
|
|
38
|
-
],
|
|
39
|
-
"extensions": "ts,tsx",
|
|
40
|
-
"quiet": false
|
|
41
|
-
}
|
|
44
|
+
"tsup": "^8.5.0",
|
|
45
|
+
"typescript": "latest",
|
|
46
|
+
"webpack": "^5.100.0"
|
|
42
47
|
},
|
|
43
48
|
"scripts": {
|
|
44
|
-
"build
|
|
49
|
+
"build": "tsup",
|
|
50
|
+
"watch": "tsup --watch",
|
|
45
51
|
"test": "karma start",
|
|
46
52
|
"docs": "typedoc"
|
|
47
|
-
}
|
|
48
|
-
"browserslist": [
|
|
49
|
-
"defaults"
|
|
50
|
-
]
|
|
53
|
+
}
|
|
51
54
|
}
|