@pacem/pacem 1.0.4 → 1.0.5-bartels
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -22
- package/dist/browser/pacem-2d.js +4 -4
- package/dist/browser/pacem-2d.js.map +1 -1
- package/dist/browser/pacem-2d.min.js +2 -2
- package/dist/browser/pacem-3d.js +508 -508
- package/dist/browser/pacem-3d.js.map +1 -1
- package/dist/browser/pacem-3d.min.js +2 -2
- package/dist/browser/pacem-charts.js +1 -1
- package/dist/browser/pacem-charts.min.js +1 -1
- package/dist/browser/pacem-cms.js +1 -1
- package/dist/browser/pacem-cms.min.js +1 -1
- package/dist/browser/pacem-core.js +4097 -4097
- package/dist/browser/pacem-core.js.map +1 -1
- package/dist/browser/pacem-core.min.js +2 -2
- package/dist/browser/pacem-foundation.js +1 -4
- package/dist/browser/pacem-foundation.js.map +1 -1
- package/dist/browser/pacem-foundation.min.js +1 -1
- package/dist/browser/pacem-fx.js +1 -1
- package/dist/browser/pacem-fx.min.js +1 -1
- package/dist/browser/pacem-logging.js +1 -1
- package/dist/browser/pacem-logging.min.js +1 -1
- package/dist/browser/pacem-maps.js +1 -1
- package/dist/browser/pacem-maps.min.js +1 -1
- package/dist/browser/pacem-media.js +1 -1
- package/dist/browser/pacem-media.min.js +1 -1
- package/dist/browser/pacem-networking.js +1 -1
- package/dist/browser/pacem-networking.min.js +1 -1
- package/dist/browser/pacem-numerical.js +1 -1
- package/dist/browser/pacem-numerical.min.js +1 -1
- package/dist/browser/pacem-plus.js +7 -2
- package/dist/browser/pacem-plus.js.map +1 -1
- package/dist/browser/pacem-plus.min.js +2 -2
- package/dist/browser/pacem-scaffolding.js +1 -1
- package/dist/browser/pacem-scaffolding.min.js +1 -1
- package/dist/browser/pacem-ui.js +7 -1
- package/dist/browser/pacem-ui.js.map +1 -1
- package/dist/browser/pacem-ui.min.js +1 -1
- package/dist/bundle/pacem.min.mjs +680 -680
- package/dist/bundle/pacem.mjs +40226 -40348
- package/dist/bundle/pacem.mjs.map +4 -4
- package/dist/docs/pacem-core.json +5 -5
- package/dist/docs/pacem-foundation.json +1 -1
- package/dist/docs/pacem-numerical.json +2 -2
- package/dist/docs/pacem-plus.json +6363 -6351
- package/dist/typings/index.d.ts +915 -590
- package/package.json +5 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pacem-foundation.js","sources":["../esm/number-extensions.js","../esm/dates.js","../esm/null-checker.js","../esm/array-extensions.js","../esm/deepmerger.js","../esm/arrays.js","../esm/blobs.js","../esm/browser.js","../esm/colors.js","../esm/geom.js","../esm/matrix2d.js","../esm/rect.js","../esm/history-svc.js","../esm/imaging.js","../esm/keygenerator.js","../esm/numbers.js","../esm/strings.js","../esm/compile/parser.js","../esm/compile/markdown/parser.js","../esm/index.js","../esm/index-iife.js"],"sourcesContent":["Number.prototype.isCloseTo = function (other, precision = 14) {\n const delta = Number(`1e-${precision}`);\n return this > (other - delta) && this < (other + delta);\n //return this.toFixed(precision) === other.toFixed(precision); \n};\nNumber.prototype.roundoff = function (precision = 14) {\n return parseFloat(this.toFixed(precision));\n};\nNumber.prototype.clamp = function (min, max) {\n let value = this;\n if (min != null && !isNaN(min)) {\n value = Math.max(value, min);\n }\n if (max != null && !isNaN(max)) {\n value = Math.min(value, max);\n }\n return value;\n};\nNumber.prototype.toBase62 = function () {\n var alphabet = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n var temp = this;\n var sb = '';\n while (temp != 0) {\n var mod = temp % 62;\n sb = alphabet.charAt(mod) + sb;\n temp = Math.floor(temp / 62);\n }\n return sb;\n};\nNumber.prototype.toBase36 = function () {\n return this.toString(36);\n};\nexport {};\n","//namespace Pacem {\nconst JSON_DATE_PATTERN = /^\\/Date\\([\\d]+\\)\\/$/i;\n/** Date parsing and arithmetic utilities. */\nexport class Dates {\n /**\n * Parses a value into a `Date`. Accepts ISO/parseable date strings, ASP.NET-style\n * `/Date(ticks)/` JSON date strings, numeric timestamps, or a `Date` instance (returned as-is).\n * @param input Value to parse.\n * @returns The resulting `Date`.\n */\n static parse(input) {\n let d;\n if (typeof input === 'string') {\n if (JSON_DATE_PATTERN.test(input))\n d = parseInt(input.substring(6));\n else\n d = Date.parse(input);\n return new Date(d);\n }\n else if (typeof input === 'number') {\n return new Date(input);\n }\n else\n return input;\n }\n /**\n * Gets whether the given year is a leap year.\n * @param year Year to check.\n */\n static isLeapYear(year) {\n return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));\n }\n /**\n * Gets the number of days in a given month of a given year.\n * @param year Year (used to account for leap Februaries).\n * @param month Zero-based month index (0 = January, ..., 11 = December).\n * @returns Number of days in the month.\n */\n static daysInMonth(year, month) {\n return [31, (Dates.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n }\n /**\n * Gets whether a date is an `Invalid Date` or not.\n * @param date\n */\n static isDate(date) {\n return date instanceof Date && !isNaN(date.valueOf());\n }\n /**\n * Returns the date-only equaivalent of a provided datetime.\n * @param datetime\n */\n static dateOnly(datetime) {\n return new Date(datetime.getFullYear(), datetime.getMonth(), datetime.getDate());\n }\n /**\n * Returns a new date obtained by adding a (possibly negative) number of months to `input`,\n * clamping the day-of-month to the target month's length (e.g. Jan 31 + 1 month => Feb 28/29).\n * @param input Starting date.\n * @param value Number of months to add.\n * @returns The resulting date.\n */\n static addMonths(input, value) {\n let n = input.getDate(), i = new Date(input), month = i.getMonth() + value, years = 0;\n while (month < 0) {\n month += 12;\n years--;\n }\n i.setDate(1);\n i.setMonth(month % 12);\n i.setFullYear(i.getFullYear() + years + Math.floor(month / 12));\n i.setDate(Math.min(n, Dates.daysInMonth(i.getFullYear(), i.getMonth())));\n return i;\n }\n /**\n * Returns a new date obtained by adding a (possibly negative) number of days to `input`.\n * @param input Starting date.\n * @param value Number of days to add.\n * @returns The resulting date.\n */\n static addDays(input, value) {\n return new Date(input.valueOf() + value * 86400000);\n }\n /**\n * Computes the number of days (possibly fractional) between two dates.\n * @param start Start date.\n * @param end End date.\n * @returns Number of days between `start` and `end` (negative if `end` precedes `start`).\n */\n static daysBetween(start, end) {\n return (end.valueOf() - start.valueOf()) / 86400000;\n }\n}\n//}\n","/// <reference path=\"dates.ts\" />\nimport { Dates } from \"./dates\";\n// namespace Pacem {\n/** Null/empty value-checking utilities. */\nexport class NullChecker {\n /**\n * Returns whether the given value is `null` or `undefined`.\n * @param o Value to check.\n */\n static isNull(o) {\n return o === null || o === void 0;\n }\n /**\n * Returns whether the given value is \"empty\": an empty array, an empty string, or a\n * plain object with no own enumerable keys (dates, regexes and file-system handles are never\n * considered empty).\n * @param o Value to check.\n */\n static isEmpty(o) {\n try {\n return (Array.isArray(o) && o.length === 0)\n || (typeof o === 'string' && o === '')\n || (typeof o === 'object' && Object.keys(o).length === 0 && !Dates.isDate(o) && !(o instanceof RegExp) && !(o instanceof FileSystemDirectoryHandle) && !(o instanceof FileSystemFileHandle));\n }\n catch (e) {\n // Object.keys(null) would throw...\n return false;\n }\n }\n /**\n * Returns whether the given value is `null`, `undefined`, or \"empty\" (see {@link NullChecker.isEmpty}).\n * @param o Value to check.\n */\n static isNullOrEmpty(o) {\n return NullChecker.isNull(o) || NullChecker.isEmpty(o);\n }\n}\n//}\n","import { NullChecker } from \"./null-checker\";\nArray.prototype.distinct = function () {\n return Array.from(new Set(this));\n};\nArray.prototype.union = function (other) {\n const thisEmpty = NullChecker.isNullOrEmpty(this), thatEmpty = NullChecker.isNullOrEmpty(other);\n if (thisEmpty && thatEmpty) {\n return [];\n }\n if (thatEmpty) {\n return this.slice();\n }\n if (thisEmpty) {\n return other.slice();\n }\n return this.concat(other).distinct();\n};\nArray.prototype.moveWithin = function (from, to) {\n const OUT_OF_RANGE = 'Index must be greater or equal than 0 and less or equal than the length of the array.';\n var arr = this;\n if (from < 0 || from > arr.length)\n throw new Error(OUT_OF_RANGE);\n if (to < 0 || to > arr.length)\n throw new Error(OUT_OF_RANGE);\n arr.splice(to, 0, /* avoid to trigger a double change on a single command */ Array.prototype.splice.apply(arr, [from, 1])[0]);\n};\nArray.prototype.equalsContent = function (other) {\n if (other == null || this.length !== other.length) {\n return false;\n }\n for (let j = 0; j < this.length; j++) {\n if (this[j] !== other[j]) {\n return false;\n }\n }\n return true;\n};\nArray.prototype.cloneFrom = function (other) {\n if (other == null) {\n throw 'Cannot clone array from null object.';\n }\n const length = other.length;\n var changes = this.length !== other.length;\n for (let j = 0; j < length; j++) {\n const item = other[j];\n if (this.length > j) {\n if (this[j] !== item) {\n this[j] = item;\n changes = true;\n }\n }\n else {\n Array.prototype.push.apply(this, [item]);\n changes = true;\n }\n }\n if (changes) {\n // trigger change just in case\n this.splice(length);\n }\n};\n","function isPlainObject(value) {\n return (value != null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n (value.constructor === Object || value.constructor === undefined));\n}\nfunction deepMerge(target, source) {\n const output = target;\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const targetValue = output[key];\n if (isPlainObject(sourceValue)) {\n // never adopt the source's object by reference: bundlers emit frozen\n // namespace objects (`export * as X`), so a later merge into the same\n // slot would throw (\"object is not extensible\"). Always merge into a\n // fresh, extensible object instead.\n output[key] = deepMerge(isPlainObject(targetValue) ? targetValue : {}, sourceValue);\n }\n else if (Array.isArray(sourceValue)) {\n output[key] = sourceValue.slice();\n }\n else {\n output[key] = sourceValue;\n }\n }\n return output;\n}\n/** Deep-merging utility for plain objects. */\nexport class DeepMerger {\n constructor() {\n }\n /**\n * Recursively merges `source` into `target`, in place: plain-object properties are merged\n * recursively (into a fresh object, never adopted by reference), arrays are shallow-copied,\n * and any other value overwrites the target's.\n * @param source Object whose properties are merged into `target`.\n * @param target Object to merge into (defaults to, and lazily creates, the global `Pacem` namespace object).\n * @returns The mutated `target`, typed as the union of both inputs.\n */\n static merge(source, target) {\n target ??= (globalThis['Pacem'] ??= {});\n return deepMerge(target, source);\n }\n}\n","//namespace Pacem {\nimport { NullChecker } from \"./null-checker\";\n/** Array manipulation utilities. */\nexport class Arrays {\n static range(min, max, items = 2) {\n let x = min;\n if (NullChecker.isNull(max)) {\n max = items = min;\n min = 1;\n }\n const step = (max - min) / (items - 1);\n const output = [];\n if (step > 0) {\n //while (x <= max) {\n while (output.length < items) {\n output.push(x.roundoff());\n x += step;\n }\n }\n return output;\n }\n /**\n * Splits an array into chunks of a given size.\n * @param source Array to split.\n * @param size Maximum size of each chunk (must be a positive integer).\n * @returns Array of chunks; an empty array if `source` is null or empty.\n */\n static chunkify(source, size) {\n if (NullChecker.isNullOrEmpty(source)) {\n return [];\n }\n if (size <= 0 || size % 1 !== 0) {\n throw new Error('Provide a positive integer number.');\n }\n const length = Math.ceil(source.length / size);\n return Array.from({ length }, (_, index) => {\n const start = index * size, end = start + size;\n return source.slice(start, end);\n });\n }\n}\n//}\n","//namespace Pacem {\n/** Conversion utilities between `Blob`, base64/data URLs and plain text. */\nexport class Blobs {\n /**\n * Reads a `Blob` and resolves it as a base64-encoded data URL.\n * @param blob Blob to read.\n * @returns A promise resolving with the data URL string.\n */\n static blobToDataURL(blob) {\n return new Promise((resolve, _) => {\n const a = new FileReader();\n a.onload = (e) => { resolve(e.target.result); };\n a.readAsDataURL(blob);\n });\n }\n static _b64ToUint8Array(bstr) {\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return u8arr;\n }\n /**\n * Converts a base64-encoded string into a `Blob`.\n * @param bstr Base64-encoded string (without the `data:...;base64,` prefix).\n * @param options Blob options (e.g. MIME `type`).\n * @returns The resulting `Blob`.\n */\n static base64ToBlob(bstr, options) {\n const u8arr = Blobs._b64ToUint8Array(atob(bstr));\n return new Blob([u8arr], options);\n }\n /**\n * Converts a data URL (`data:<mime>;base64,<data>`) into a `Blob`, inferring the MIME type when present.\n * @param dataurl Data URL to convert.\n * @returns The resulting `Blob`.\n */\n static dataURLToBlob(dataurl) {\n const coma = dataurl.indexOf(',');\n if (coma === -1) {\n return Blobs.base64ToBlob(dataurl);\n }\n else {\n const bstr = dataurl.substring(coma + 1), data = dataurl.substring(0, coma);\n const mime = data.match(/:(.*?);/)[1];\n return Blobs.base64ToBlob(bstr, { type: mime });\n }\n }\n /**\n * Reads a `Blob` and decodes it as text.\n * @param blob Blob to read.\n * @param encoding Text encoding to use for decoding (defaults to the platform's default, typically UTF-8).\n * @returns A promise resolving with the decoded text.\n */\n static async blobToText(blob, encoding) {\n const buffer = await blob.arrayBuffer();\n const decoder = new TextDecoder(encoding, { fatal: false });\n return decoder.decode(buffer);\n }\n static textToBlob(content, type = 'text/plain', charset = 'utf-8', bom, lossyChar = 0x3F) {\n let charsetLower = charset.toLowerCase();\n const fullType = () => `${type};charset=${charsetLower}`;\n switch (charsetLower) {\n // -------------------------\n // UTF-8 (native, safe)\n // -------------------------\n case 'utf-8': {\n const encoder = new TextEncoder();\n const bytes = encoder.encode(content);\n const parts = bom\n ? [new Uint8Array([0xEF, 0xBB, 0xBF]), bytes]\n : [bytes];\n return new Blob(parts, { type: fullType() });\n }\n // -------------------------\n // UTF-16 (explicit LE/BE)\n // -------------------------\n case 'utf-16':\n // Treat as UTF-16LE with BOM (common convention)\n charsetLower = 'utf-16le';\n bom ??= true;\n case 'utf-16le':\n case 'utf-16be': {\n const littleEndian = charsetLower !== 'utf-16be';\n const offset = bom ? 1 : 0;\n const buffer = new ArrayBuffer((content.length + offset) * 2);\n const view = new DataView(buffer);\n if (bom) {\n view.setUint16(0, 0xFEFF, littleEndian);\n }\n for (let i = 0; i < content.length; i++) {\n view.setUint16((i + offset) * 2, content.charCodeAt(i), littleEndian);\n }\n return new Blob([buffer], {\n type: fullType()\n });\n }\n // -------------------------\n // Latin-1 (ISO-8859-1)\n // -------------------------\n case 'ascii':\n case 'iso-8859-1':\n case 'latin1': {\n const boundary = charsetLower === 'ascii' ? 0x7F : 0xFF;\n const buffer = new Uint8Array(content.length);\n const lossy = lossyChar > 0;\n for (let i = 0; i < content.length; i++) {\n const code = content.charCodeAt(i);\n if (code > boundary) {\n if (lossy) {\n buffer[i] = lossyChar; // ? char\n }\n else {\n throw new Error(`Character \"${content[i]}\" cannot be encoded in ${charset}.`);\n }\n }\n else {\n buffer[i] = code;\n }\n }\n return new Blob([buffer], { type: fullType() });\n }\n // -------------------------\n // Explicitly unsupported\n // -------------------------\n default:\n throw new Error(`Encoding \"${charset}\" is not supported safely in the browser. ` +\n `Use UTF-8 or any supported encoding.`);\n }\n }\n}\n//}\n","//namespace Pacem.Browsers {\n// Function to extract browser version using regex\nconst browserVersion = (userAgent, regex) => {\n const match = userAgent.match(regex);\n return match ? match[2] : null;\n};\n// https://stackoverflow.com/77095874\n/**\n * Detects the browser name and version from a user-agent string.\n * @param userAgent User-agent string to parse (defaults to `navigator.userAgent`).\n * @returns An object with the detected browser `name` (e.g. `Chrome`, `Firefox`, `Safari`, `Edge`, `IE`, `unknown`, ...) and its `version`.\n */\nexport function detect(userAgent = navigator.userAgent) {\n let browser = 'unknown';\n let version = null;\n // Detect browser name\n if (/ucbrowser/i.test(userAgent)) {\n browser = 'UCBrowser';\n }\n else if (/edg/i.test(userAgent)) {\n browser = 'Edge';\n }\n else if (/googlebot/i.test(userAgent)) {\n browser = 'GoogleBot';\n }\n else if (/chromium/i.test(userAgent)) {\n browser = 'Chromium';\n }\n else if (/firefox|fxios/i.test(userAgent) && !/seamonkey/i.test(userAgent)) {\n browser = 'Firefox';\n }\n else if (/; msie|trident/i.test(userAgent) && !/ucbrowser/i.test(userAgent)) {\n browser = 'IE';\n }\n else if (/chrome|crios/i.test(userAgent) && !/opr|opera|chromium|edg|ucbrowser|googlebot/i.test(userAgent)) {\n browser = 'Chrome';\n }\n else if (/safari/i.test(userAgent) && !/chromium|edg|ucbrowser|chrome|crios|opr|opera|fxios|firefox/i.test(userAgent)) {\n browser = 'Safari';\n }\n else if (/opr|opera/i.test(userAgent)) {\n browser = 'Opera';\n }\n // Detect browser version\n switch (browser) {\n case 'UCBrowser':\n version = browserVersion(userAgent, /(ucbrowser)\\/([\\d\\.]+)/i);\n break;\n case 'Edge':\n version = browserVersion(userAgent, /(edge|edga|edgios|edg)\\/([\\d\\.]+)/i);\n break;\n case 'GoogleBot':\n version = browserVersion(userAgent, /(googlebot)\\/([\\d\\.]+)/i);\n break;\n case 'Chromium':\n version = browserVersion(userAgent, /(chromium)\\/([\\d\\.]+)/i);\n break;\n case 'Firefox':\n version = browserVersion(userAgent, /(firefox|fxios)\\/([\\d\\.]+)/i);\n break;\n case 'Chrome':\n version = browserVersion(userAgent, /(chrome|crios)\\/([\\d\\.]+)/i);\n break;\n case 'Safari':\n version = browserVersion(userAgent, /(safari)\\/([\\d\\.]+)/i);\n break;\n case 'Opera':\n version = browserVersion(userAgent, /(opera|opr)\\/([\\d\\.]+)/i);\n break;\n case 'IE': {\n const tridentVersion = browserVersion(userAgent, /(trident)\\/([\\d\\.]+)/i);\n // IE version is mapped using Trident version\n // IE/8.0 = Trident/4.0, IE/9.0 = Trident/5.0\n version = tridentVersion ? `${parseFloat(tridentVersion) + 4.0}` : '7.0';\n break;\n }\n default:\n version = '0.0.0.0';\n break;\n }\n return { name: browser, version };\n}\n//}\n","//namespace Pacem {\nimport { NullChecker } from \"./null-checker\";\nconst HSL_PATTERN = /^hsl\\s*\\(\\s*([\\d\\.]+)\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)%\\s*\\)$/;\nconst HSLA_PATTERN = /^hsla\\s*\\(\\s*([\\d\\.]+)\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)\\)$/;\nconst RGB_PATTERN = /^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/;\nconst RGBA_PATTERN = /^rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d\\.]+)\\)$/;\nconst HEX_PATTERN = /^#[a-f0-9]{6}$/;\nconst HEX_SHORT_PATTERN = /^#[a-f0-9]{3}$/;\n;\n;\n;\nfunction isRgb(clr) {\n const base = !NullChecker.isNullOrEmpty(clr) && typeof clr === 'object' && 'r' in clr && 'g' in clr && 'b' in clr // && 'a' in clr\n && typeof clr.r === 'number' && typeof clr.b === 'number' && typeof clr.g === 'number' // && typeof clr.a === 'number'\n ;\n if (!base) {\n return false;\n }\n clr.a ??= 1;\n return clr.r >= 0 && clr.r <= 1\n && clr.g >= 0 && clr.g <= 1\n && clr.b >= 0 && clr.b <= 1\n && clr.a >= 0 && clr.a <= 1;\n}\nfunction isHsl(clr) {\n const base = !NullChecker.isNullOrEmpty(clr) && typeof clr === 'object' && 'h' in clr && 's' in clr && 'l' in clr // && 'a' in clr\n && typeof clr.h === 'number' && typeof clr.s === 'number' && typeof clr.l === 'number' // && typeof clr.a === 'number'\n ;\n if (!base) {\n return false;\n }\n clr.a ??= 1;\n return clr.h >= 0 && clr.h <= 360\n && clr.s >= 0 && clr.s <= 1\n && clr.l >= 0 && clr.l <= 1\n && clr.a >= 0 && clr.a <= 1;\n}\nfunction luminance(rgb) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const l = .5 * (Math.max(r, g, b) + Math.min(r, g, b));\n return l.clamp(0, 1);\n}\nconst cieUtils = {\n adjustRgbChannel: (v) => {\n // sRGB => sR'G'B'\n return v <= .03928 ? (v / 12.92) : Math.pow((v + .055) / 1.055, 2.4);\n },\n adjustRgbChannelInv: (v) => {\n // sR'G'B' => sRGB\n return v <= .00304 ? (v * 12.92) : 1.055 * (Math.pow(v, 1 / 2.4) - .055);\n },\n adjustRgb: (rgb) => {\n const rgbOut = { r: cieUtils.adjustRgbChannel(rgb.r), g: cieUtils.adjustRgbChannel(rgb.g), b: cieUtils.adjustRgbChannel(rgb.b), a: rgb.a };\n return rgbOut;\n },\n adjustRgbInv: (rgb) => {\n const rgbOut = { r: cieUtils.adjustRgbChannelInv(rgb.r), g: cieUtils.adjustRgbChannelInv(rgb.g), b: cieUtils.adjustRgbChannelInv(rgb.b), a: rgb.a };\n return rgbOut;\n },\n X: (adjustedRgb) => {\n return .4125 * adjustedRgb.r + .3576 * adjustedRgb.g + .1804 * adjustedRgb.b;\n },\n Y: (adjustedRgb) => {\n // https://www.w3.org/TR/WCAG20/#relativeluminancedef\n return .2126 * adjustedRgb.r + .7152 * adjustedRgb.g + .0722 * adjustedRgb.b;\n },\n Z: (adjustedRgb) => {\n return .0193 * adjustedRgb.r + .1191 * adjustedRgb.g + .9503 * adjustedRgb.b;\n },\n relativeLuminance: (rgb) => {\n const adjRgb = cieUtils.adjustRgb(rgb);\n return cieUtils.Y(adjRgb);\n },\n rgbToCieXYZ: (rgb) => {\n const adjRgb = cieUtils.adjustRgb(rgb);\n const xyz = { x: cieUtils.X(adjRgb), y: cieUtils.Y(adjRgb), z: cieUtils.Z(adjRgb), a: rgb.a };\n return xyz;\n },\n cieXYZToRgb: (xyz) => {\n const r = 3.2410 * xyz.x - 1.5374 * xyz.y - .4986 * xyz.z, g = -.9692 * xyz.x + 1.8760 * xyz.y + .0416 * xyz.z, b = .0556 * xyz.x - .2040 * xyz.y + 1.0570 * xyz.z;\n return cieUtils.adjustRgbInv({ r, g, b, a: xyz.a });\n },\n /**\n * Returns the contrast ratio between two colors.\n * @param rgb1 Color 1\n * @param rgb2 Color 2\n * @returns A numeric value between 1 and 21.\n */\n contrastRatio: (rgb1, rgb2) => {\n // https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n const l1 = cieUtils.relativeLuminance(rgb1) + .05, l2 = cieUtils.relativeLuminance(rgb2) + .05;\n return l1 > l2 ?\n l1 / l2\n :\n l2 / l1;\n }\n};\nfunction saturation(rgb, l) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const s = (l === 0 || l === 1) ? 0 : (max - min) / (1 - Math.abs(2 * l - 1));\n return s.clamp(0, 1);\n}\n/**\n * Preucil 'hexagon' algorithm.\n * @param rgb\n */\nfunction hueHexagon(rgb) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const deg = Math.atan2(Math.sqrt(3) * (g - b), 2 * r - g - b) * 180 / Math.PI;\n return (deg + 360) % 360;\n}\n/**\n * Preucil 'circle' algorithm.\n * @param rgb\n */\nfunction hueCircle(rgb) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let hue = 0;\n if (max !== min) {\n if (max === r) {\n hue = (60 * ((g - b) / (max - min)) + 360) % 360;\n }\n else if (max === g) {\n hue = (60 * ((b - r) / (max - min)) + 120) % 360;\n }\n else {\n hue = (60 * ((r - g) / (max - min)) + 240) % 360;\n }\n }\n return hue.clamp(0, 360);\n}\nfunction hexify(v) {\n return v.toString(16).padStart(2, '0');\n //return Pacem.Strings.leftPad(v.toString(16), 2, '0');\n}\n/** Color parsing, conversion (RGB/HSL/CIE XYZ) and manipulation utilities. */\nexport class Colors {\n /** Minimum WCAG contrast ratio recommended for large-scale text/graphical objects. */\n static { this.WCAG_MINIMUM_CONTRAST = 3.0; }\n /** Minimum WCAG (AA) contrast ratio recommended for normal-sized text. */\n static { this.WCAG_NORMAL_TEXT_CONTRAST = 4.5; }\n /** Minimum WCAG (AAA) contrast ratio recommended for enhanced accessibility. */\n static { this.WCAG_SAFE_CONTRAST = 7.0; }\n static _clampRGB(rgb) {\n const clmp = (n) => Math.min(1.0, Math.max(0, n));\n if (rgb[3] == null) {\n rgb[3] = 1.0;\n }\n return { r: clmp(rgb[0]), g: clmp(rgb[1]), b: clmp(rgb[2]), a: Math.min(1, Math.max(0, rgb[3])) };\n }\n static _normalize(rgb) {\n return [rgb[0] / 255.0, rgb[1] / 255.0, rgb[2] / 255.0, rgb[3]];\n }\n /**\n * Parses a CSS color string (`rgb()`, `rgba()`, `#rrggbb`, `#rgb`, `hsl()` or `hsla()`) into an {@link Rgba} value.\n * @param clr CSS color string.\n * @returns The parsed color, or `undefined` if the string does not match any supported format.\n */\n static parse(clr) {\n clr = (clr || '').toLowerCase();\n /* rgb(255,255,255) */\n if (RGB_PATTERN.test(clr)) {\n let rgbArr = RGB_PATTERN.exec(clr);\n return this._clampRGB(this._normalize([parseInt(rgbArr[1]), parseInt(rgbArr[2]), parseInt(rgbArr[3]), 1]));\n }\n /* rgba(255,255,255,.5) */\n if (RGBA_PATTERN.test(clr)) {\n let rgbArr = RGBA_PATTERN.exec(clr);\n return this._clampRGB(this._normalize([parseInt(rgbArr[1]), parseInt(rgbArr[2]), parseInt(rgbArr[3]), parseFloat(rgbArr[4])]));\n }\n /* #ffffff */\n if (HEX_PATTERN.test(clr)) {\n let hex = HEX_PATTERN.exec(clr)[0];\n return this._clampRGB(this._normalize([parseInt('0x' + hex.substr(1, 2)), parseInt('0x' + hex.substr(3, 2)), parseInt('0x' + hex.substr(5, 2)), 1]));\n }\n /* #fff */\n if (HEX_SHORT_PATTERN.test(clr)) {\n let hex = HEX_SHORT_PATTERN.exec(clr)[0];\n let r = hex.substr(1, 1), g = hex.substr(2, 1), b = hex.substr(3, 1);\n return this._clampRGB(this._normalize([parseInt('0x' + r + r), parseInt('0x' + g + g), parseInt('0x' + b + b), 1]));\n }\n /* hsl(0,60%,100%) */\n if (HSL_PATTERN.test(clr)) {\n let hslArr = HSL_PATTERN.exec(clr);\n const hsl = { h: parseFloat(hslArr[1]), s: parseFloat(hslArr[2]) * .01, l: parseFloat(hslArr[3]) * .01 };\n return this.rgb(hsl);\n }\n /* hsla(0,40%,50%,.5) */\n if (HSLA_PATTERN.test(clr)) {\n let hslaArr = HSLA_PATTERN.exec(clr);\n const hsla = { h: parseFloat(hslaArr[1]), s: parseFloat(hslaArr[2]) * .01, l: parseFloat(hslaArr[3]) * .01, a: parseFloat(hslaArr[4]) };\n return this.rgb(hsla);\n }\n }\n /**\n * Converts an {@link Rgba} color into its {@link Hsla} equivalent.\n * @param rgb Color to convert.\n * @returns The converted color.\n */\n static hsl(rgb) {\n const l = luminance(rgb), s = saturation(rgb, l), h = hueCircle(rgb);\n return { h, s, l, a: rgb.a };\n }\n static cieXYZ(clr) {\n if (isHsl(clr)) {\n clr = this.rgb(clr);\n }\n return cieUtils.rgbToCieXYZ(clr);\n }\n static rgb(clr) {\n if (isHsl(clr)) {\n // hsl\n const h = clr.h, s = clr.s, l = clr.l, h6 = h / 60.0;\n const C = (1 - Math.abs(2 * l - 1)) * s;\n const X = C * (1 - Math.abs(h6 % 2 - 1));\n const m = l - C / 2;\n const compose = (r, g, b) => this._clampRGB([r + m, g + m, b + m, clr.a]);\n if (h6 <= 1) {\n return compose(C, X, 0);\n }\n else if (h6 <= 2) {\n return compose(X, C, 0);\n }\n else if (h6 <= 3) {\n return compose(0, C, X);\n }\n else if (h6 <= 4) {\n return compose(0, X, C);\n }\n else if (h6 <= 5) {\n return compose(X, 0, C);\n }\n else if (h6 <= 6) {\n return compose(C, 0, X);\n }\n }\n else {\n // cie XYZ\n const rgb = cieUtils.cieXYZToRgb(clr);\n return this._clampRGB([rgb.r, rgb.g, rgb.b, rgb.a]);\n }\n }\n static stringify(clr, arg1 = 1) {\n if (isHsl(clr)) {\n arg1 ??= 1;\n clr.a ??= 1;\n const precision = typeof arg1 === 'number' ? arg1 : 1;\n return `hsla(${clr.h.roundoff(precision)},${(clr.s * 100).roundoff(precision)}%,${(clr.l * 100).roundoff(precision)}%,${clr.a.roundoff()})`;\n }\n else if (isRgb(clr)) {\n arg1 ??= true;\n clr.a ??= 1;\n const hex = typeof arg1 === 'boolean' ? arg1 : !!arg1, r = Math.round(clr.r * 255), g = Math.round(clr.g * 255), b = Math.round(clr.b * 255), a = clr.a.roundoff();\n if (a === 1) {\n if (hex) {\n return ('#' + hexify(r) + hexify(g) + hexify(b)).toUpperCase();\n }\n return `rgb(${r},${g},${b})`;\n }\n return `rgba(${r},${g},${b},${a})`;\n }\n return undefined;\n }\n /**\n * Contrast ratio betwen two colors (useful for accessibility assessments). Output range: 1 (no-contrast) to 21 (maximum contrast)\n */\n static contrastRatio(clr1, clr2) {\n if (isHsl(clr1)) {\n clr1 = this.rgb(clr1);\n }\n if (isHsl(clr2)) {\n clr2 = this.rgb(clr2);\n }\n return cieUtils.contrastRatio(clr1, clr2);\n }\n /**\n * Returns the relative luminance as of WCAG specs.\n */\n static luminance(clr) {\n if (isHsl(clr)) {\n clr = Colors.rgb(clr);\n }\n return cieUtils.relativeLuminance(clr);\n }\n static lighten(clr, amount = 0.1) {\n amount ||= 0;\n if (isHsl(clr)) {\n const l = Math.min(1, Math.max(0, clr.l + amount));\n return Object.assign({}, clr, { l });\n }\n if (isRgb(clr)) {\n const hsl = this.lighten(this.hsl(clr), amount);\n return this.rgb(hsl);\n }\n return clr;\n }\n static darken(clr, amount = 0.1) {\n return this.lighten(clr, -amount);\n }\n static saturate(clr, amount = 0.1) {\n amount ||= 0;\n if (isHsl(clr)) {\n const s = Math.min(1, Math.max(0, clr.s + amount));\n return Object.assign({}, clr, { s });\n }\n if (isRgb(clr)) {\n const hsl = this.saturate(this.hsl(clr), amount);\n return this.rgb(hsl);\n }\n return clr;\n }\n static desaturate(clr, amount = 0.1) {\n return this.saturate(clr, -amount);\n }\n static interpolate(clr1, clr2, weight1, weight2) {\n weight1 ??= .5;\n weight2 ??= weight1;\n const weight = (weight1 + weight2).roundoff();\n const ratio1 = (weight1 / weight).roundoff(), ratio2 = (weight2 / weight).roundoff();\n const rgb = isRgb(clr1), hsl = isHsl(clr1);\n const toCieXYZ = (c) => {\n if (isRgb(c) || isHsl(c)) {\n return Colors.cieXYZ(c);\n }\n return c;\n };\n clr1 = toCieXYZ(clr1);\n clr2 = toCieXYZ(clr2);\n const clr = {\n x: (clr1.x * ratio1 + clr2.x * ratio2).roundoff(),\n y: (clr1.y * ratio1 + clr2.y * ratio2).roundoff(),\n z: (clr1.z * ratio1 + clr2.z * ratio2).roundoff(),\n a: (clr1.a * ratio1 + clr2.a * ratio2).roundoff(),\n };\n if (rgb) {\n return Colors.rgb(clr);\n }\n if (hsl) {\n return Colors.hsl(Colors.rgb(clr));\n }\n return clr;\n }\n}\n//}\n","import { NullChecker } from \"./null-checker\";\n// 1.7763568394002505e-15 -20.4551920341394 40 40\nconst FLOAT_PATTERN = /[-+]?([\\d]+(\\.[\\d]+(e-[\\d]+)?)?|[\\d]*(\\.[\\d]+(e-[\\d]+)?))/g;\n/**\n * Extracts all the floating point numbers found in a string (e.g. `\"10px 20px\"` => `[10, 20]`).\n * @param input String to parse.\n * @returns Array of the numbers found, in order of appearance.\n */\nexport function parseAsNumericalArray(input) {\n const arr = [];\n let reg = input.match(FLOAT_PATTERN);\n if (reg && reg.length > 0) {\n reg.forEach(i => arr.push(parseFloat(i)));\n }\n return arr;\n}\n/** Angle-related utilities. */\nexport class Angle {\n /**\n * Type-guards a value as a valid {@link Angle} object.\n * @param obj Value to check.\n */\n static isAngle(obj) {\n return typeof obj === 'object'\n && 'vertex' in obj && Point.isPoint(obj['vertex'])\n && 'start' in obj && Point.isPoint(obj['start'])\n && 'end' in obj && Point.isPoint(obj['end']);\n }\n /**\n * Returns the angle span in radians.\n * Clockwise angles are positive, counterclockwise angles are negative.\n */\n static value(angle) {\n if (NullChecker.isNullOrEmpty(angle) || !Angle.isAngle(angle)) {\n return Number.NaN;\n }\n const { vertex, start, end } = angle;\n return Angle.angleBetween(vertex, start, end);\n }\n /**\n * Returns the angle (in radians) given the angle vertex and two points belonging to the rays that combine to build the angle sides.\n * Clockwise angles are positive, counterclockwise angles are negative.\n * @param vertex Angle vertex\n * @param start Point belonging to the start side\n * @param end Point belonging to the end side\n * @returns Angle span in radians [-pi, pi]\n */\n static angleBetween(vertex, start, end) {\n const v1 = { x: start.x - vertex.x, y: start.y - vertex.y }, v2 = { x: end.x - vertex.x, y: end.y - vertex.y };\n const dot = v1.x * v2.x + v1.y * v2.y;\n const cross = v1.x * v2.y - v1.y * v2.x;\n // clockwise positive, ccw negative\n return -Math.atan2(cross, dot);\n }\n}\n;\n/** Size-related utilities. */\nexport class Size {\n /**\n * Parses a string containing exactly two numbers into a {@link Size}.\n * @param sz String to parse (e.g. `\"100 50\"`).\n * @returns The parsed size.\n * @throws If `sz` does not contain exactly two numbers.\n */\n static parse(sz) {\n let arr = parseAsNumericalArray(sz);\n if (arr && arr.length === 2) {\n return { width: arr[0], height: arr[1] };\n }\n throw new Error(`Cannot parse \"${sz}\" as a valid Size.`);\n }\n /**\n * Type-guards a value as a valid {@link Size} object.\n * @param obj Value to check.\n */\n static isSize(obj) {\n return typeof obj === 'object'\n && 'width' in obj && typeof obj['width'] === 'number'\n && 'height' in obj && typeof obj['height'] === 'number';\n }\n}\n/** Point-related utilities. */\nexport class Point {\n /**\n * Parses a string containing exactly two numbers into a {@link Point}.\n * @param pt String to parse (e.g. `\"10 20\"`).\n * @returns The parsed point.\n * @throws If `pt` does not contain exactly two numbers.\n */\n static parse(pt) {\n let arr = parseAsNumericalArray(pt);\n if (arr && arr.length === 2) {\n return { x: arr[0], y: arr[1] };\n }\n throw new Error(`Cannot parse \"${pt}\" as a valid Point.`);\n }\n /**\n * Type-guards a value as a valid {@link Point} object.\n * @param obj Value to check.\n */\n static isPoint(obj) {\n return typeof obj === 'object'\n && 'x' in obj && typeof obj['x'] === 'number'\n && 'y' in obj && typeof obj['y'] === 'number';\n }\n /**\n * Computes the distance between two points.\n * @param p1 Point 1\n * @param p2 Point 2\n */\n static distance(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n }\n /**\n * Subtracts a point p from another and returns the resulting vector.\n * @param p Point to subtract\n * @param from Point to be subtracted from\n */\n static subtract(p, from) {\n return { x: from.x - p.x, y: from.y - p.y };\n }\n /**\n * Adds a set of points together and returns the resulting vector.\n * @param points Points to add\n */\n static add(...points) {\n var point = { x: 0, y: 0 };\n for (var p of points) {\n point.x += p.x;\n point.y += p.y;\n }\n return point;\n }\n /**\n * Memberwise multiplication.\n * @param p Original Point object\n * @param f Factor\n * @returns New Point object.\n */\n static multiply(p, f) {\n return { x: p.x * f, y: p.y * f };\n }\n}\n//}\n","/// <reference path=\"geom.ts\" />\n;\n/** 2D affine matrix ([a b; c d] linear part, [e f] translation) manipulation utilities. */\nexport class Matrix2D {\n /**\n * Returns whether the given matrix is the identity matrix.\n * @param m Matrix to check.\n */\n static isIdentity(m) {\n return m.a === 1 && m.d === 1 && m.b === 0 && m.f === 0 && m.c === 0 && m.e === 0;\n }\n /** Gets a fresh identity matrix. @readonly */\n static get identity() {\n return { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 };\n }\n /**\n * Returns a shallow copy of the given matrix.\n * @param m Matrix to copy.\n */\n static copy(m) {\n return { a: m.a, b: m.b, c: m.c, d: m.d, e: m.e, f: m.f };\n }\n static scale(m, sx, sy = sx) {\n return { a: m.a * sx, b: m.b, c: m.c, d: m.d * sy, e: m.e, f: m.f };\n }\n /**\n * Returns a copy of `m` translated by the given vector.\n * @param m Matrix to translate.\n * @param t Translation vector.\n */\n static translate(m, t) {\n return { a: m.a, b: m.b, c: m.c, d: m.d, e: m.e + t.x, f: m.f + t.y };\n }\n /**\n * Returns a copy of `m` rotated (about the origin) by the given angle.\n * @param m Matrix to rotate.\n * @param rad Rotation angle, in radians.\n */\n static rotate(m, rad) {\n const cos = Math.cos(rad), sin = Math.sin(rad);\n return Matrix2D.multiply(m, { a: cos, b: sin, c: -sin, d: cos, e: 0, f: 0 });\n }\n static multiply(m1, m2) {\n if (\"x\" in m1 && \"y\" in m1) {\n if (typeof m2 === 'number') {\n return { x: m1.x * m2, y: m1.y * m2 };\n }\n else {\n return { x: m1.x * m2.a + m1.y * m2.c + m2.e, y: m1.x * m2.b + m1.y * m2.d + m2.f };\n }\n }\n if (typeof m2 === 'number') {\n return {\n a: m1.a * m2, b: m1.b * m2, c: m1.c * m2, d: m1.d * m2, e: m1.e * m2, f: m1.f * m2\n };\n }\n return {\n a: m1.a * m2.a + m1.b * m2.c,\n b: m1.a * m2.b + m1.b * m2.d,\n c: m1.c * m2.a + m1.d * m2.c,\n d: m1.c * m2.b + m1.d * m2.d,\n e: m1.e * m2.a + m1.f * m2.c + m2.e,\n f: m1.e * m2.b + m1.f * m2.d + m2.f\n };\n }\n /**\n * Computes the determinant of the matrix's linear part.\n * @param m Matrix to compute the determinant of.\n */\n static det(m) {\n return m.a * m.d - m.c * m.b;\n }\n /**\n * Computes the inverse of the given matrix.\n * @param m Matrix to invert.\n * @returns The inverse matrix, or `null` if `m` is singular (determinant is zero).\n */\n static invert(m) {\n const det = this.det(m);\n if (det === 0) {\n // NaM(2D) ? \n return null;\n }\n const invdet = 1 / det;\n /*\n * 1. swap a, d\n * 2. swap c, b and change signs\n * 3. e := -e*d + f*c\n * 4. f := e*b - f*a\n * 5. divide everything by [det]\n */\n return this.multiply({\n a: m.d,\n b: -m.b,\n c: -m.c,\n d: m.a,\n e: -m.e * m.d + m.c * m.f,\n f: m.e * m.b - m.a * m.f\n }, invdet);\n }\n /**\n * Decomposes a matrix into its scale, rotation and translation components.\n * @param m Matrix to decompose.\n * @param transformOrigin Origin about which the rotation/scale are considered to be applied (defaults to `{x:0, y:0}`).\n * @returns The decomposed `scaleX`, `scaleY`, `rotation` (radians) and `translation`.\n */\n static toComponents(m, transformOrigin = { x: 0, y: 0 }) {\n const scaleX = Math.sqrt(m.a * m.a + m.c * m.c);\n const scaleY = Math.sqrt(m.b * m.b + m.d * m.d);\n const cos = scaleX != 0 ? m.a / scaleX : 0;\n const sin = scaleX != 0 ? m.c / scaleX : 0;\n const rotation = Math.atan2(sin, cos);\n const { x: px, y: py } = transformOrigin;\n const translation = {\n x: m.e - px * (scaleX * cos - 1) + py * scaleX * sin,\n y: m.f - py * (scaleY * cos - 1) - px * scaleY * sin,\n };\n return {\n scaleX, scaleY, rotation,\n translation\n };\n }\n /**\n * Returns the matrix that transforms the triangle defined by the points p0, p1, p2 into the triangle defined by the points q0, q1, q2.\n * @param param0 Triangle defined by the points p0, p1, p2 (before transformation).\n * @param param1 Triangle defined by the points q0, q1, q2 (after transformation).\n * @returns Transformation matrix.\n */\n static fromTransform([p0, p1, p2], [q0, q1, q2]) {\n const det = p0.x * (p1.y - p2.y) -\n p0.y * (p1.x - p2.x) +\n (p1.x * p2.y - p2.x * p1.y);\n if (Math.abs(det) < 1e-10) {\n throw new Error(\"Points are collinear; matrix is singular and cannot be solved.\");\n }\n const idet = 1 / det;\n // Matrix inversion of the 3x3 augmented source points\n // then multiplied by the destination points to get rows 1 and 2\n return {\n a: idet * (q0.x * (p1.y - p2.y) + q1.x * (p2.y - p0.y) + q2.x * (p0.y - p1.y)),\n b: idet * (q0.y * (p1.y - p2.y) + q1.y * (p2.y - p0.y) + q2.y * (p0.y - p1.y)),\n c: idet * (q0.x * (p2.x - p1.x) + q1.x * (p0.x - p2.x) + q2.x * (p1.x - p0.x)),\n d: idet * (q0.y * (p2.x - p1.x) + q1.y * (p0.x - p2.x) + q2.y * (p1.x - p0.x)),\n e: idet * (q0.x * (p1.x * p2.y - p2.x * p1.y) +\n q1.x * (p2.x * p0.y - p0.x * p2.y) +\n q2.x * (p0.x * p1.y - p1.x * p0.y)),\n f: idet * (q0.y * (p1.x * p2.y - p2.x * p1.y) +\n q1.y * (p2.x * p0.y - p0.x * p2.y) +\n q2.y * (p0.x * p1.y - p1.x * p0.y))\n };\n }\n /**\n * Returns whether two matrices are equal to each other, within a certain precision (number of decimal digits).\n * @param m1\n * @param m2\n * @param precision\n * @returns\n */\n static areClose(m1, m2, precision = 12) {\n return m1.a.isCloseTo(m2.a, precision)\n && m1.b.isCloseTo(m2.b, precision)\n && m1.c.isCloseTo(m2.c, precision)\n && m1.d.isCloseTo(m2.d, precision)\n && m1.e.isCloseTo(m2.e, precision)\n && m1.f.isCloseTo(m2.f, precision);\n }\n}\n// }\n","import { Matrix2D } from './matrix2d';\nimport { parseAsNumericalArray, Point, Size } from \"./geom\";\n/** Rectangle-related utilities (parsing, transform computation, intersection, bounding box). */\nexport class Rect {\n /**\n * Parses a string containing exactly four numbers into a {@link Rect}.\n * @param rect String to parse (e.g. `\"0 0 100 50\"`, in `x y width height` order).\n * @returns The parsed rect.\n * @throws If `rect` does not contain exactly four numbers.\n */\n static parse(rect) {\n let arr = parseAsNumericalArray(rect);\n if (arr && arr.length === 4) {\n return { x: arr[0], y: arr[1], width: arr[2], height: arr[3] };\n }\n throw new Error(`Cannot parse \"${rect}\" as a valid Rect.`);\n }\n /**\n * Type-guards a value as a valid {@link Rect} object.\n * @param obj Value to check.\n */\n static isRect(obj) {\n return Point.isPoint(obj) && Size.isSize(obj);\n }\n static _stretch(from, to) {\n return { a: to.width / from.width, b: 0, c: 0, d: to.height / from.height, e: to.x - from.x, f: to.y - from.y };\n }\n static _contain(from, to, align, valign) {\n let scale = 1;\n const fromRatio = from.width / from.height, toRatio = to.width / to.height;\n if (fromRatio >= toRatio) {\n // constraining width\n scale = to.width / from.width;\n }\n else {\n // constraining height\n scale = to.height / from.height;\n }\n const w = from.width * scale, h = from.height * scale;\n const translation = this._align({ x: from.x, y: from.y, width: w, height: h }, to, align, valign);\n return Matrix2D.translate({ a: scale, b: 0, c: 0, d: scale, e: 0, f: 0 }, translation);\n }\n static _cover(from, to, align, valign) {\n let scale = 1;\n const fromRatio = from.width / from.height, toRatio = to.width / to.height;\n if (fromRatio < toRatio) {\n // constraining width\n scale = to.width / from.width;\n }\n else {\n // constraining height\n scale = to.height / from.height;\n }\n const w = from.width * scale, h = from.height * scale;\n const translation = this._align({ x: from.x, y: from.y, width: w, height: h }, to, align, valign);\n return Matrix2D.translate({ a: scale, b: 0, c: 0, d: scale, e: 0, f: 0 }, translation);\n }\n static _align(from, to, align, valign) {\n let x = 0, y = 0;\n switch (align) {\n case 'left':\n x = to.x - from.x;\n break;\n case 'right':\n x = (to.x + to.width - from.width) - from.x;\n break;\n default:\n x = (to.x + to.width * .5 - from.width * .5) - from.x;\n break;\n }\n switch (valign) {\n case 'top':\n y = to.y - from.y;\n break;\n case 'bottom':\n y = (to.y + to.height - from.height) - from.y;\n break;\n default:\n y = (to.y + to.height * .5 - from.height * .5) - from.y;\n break;\n }\n return { x, y };\n }\n /**\n * Computes the 2D matrix that transforms one rect into another.\n * @param a Rect from\n * @param b Rect to\n * @param mode Transformation mode\n * @param align Horizontal alignment\n * @param valign Vertical alignment\n */\n static findTransform(a, b, mode = 'stretch', align = 'center', valign = 'middle') {\n switch (mode) {\n case 'contain':\n return this._contain(a, b, align, valign);\n case 'cover':\n return this._cover(a, b, align, valign);\n default:\n return this._stretch(a, b);\n }\n }\n /**\n * Computes the intersection rect among a set of provided rects.\n * @param rects Rects to intersect\n */\n static intersect(...rects) {\n const empty = { x: 0, y: 0, height: 0, width: 0 }, arr = Array.from(rects || []);\n if (arr.length <= 0) {\n return empty;\n }\n var rect = arr[0];\n for (var i = 1; i < arr.length; i++) {\n const r = arr[i];\n const x = Math.max(r.x, rect.x), y = Math.max(r.y, rect.y), xw = Math.min(r.x + r.width, rect.x + rect.width), xh = Math.min(r.y + r.height, rect.y + rect.height), w = xw - x, h = xh - y;\n if (w < 0 || h <= 0) {\n // no intersection\n return empty;\n }\n rect = { x: x, y: y, width: w, height: h };\n }\n return rect;\n }\n static expand(rect, ...args) {\n const arr = Array.from(args || []);\n let x0 = rect.x, y0 = rect.y, x1 = x0, y1 = y0;\n if (Rect.isRect(rect)) {\n x1 += rect.width;\n y1 += rect.height;\n }\n for (let p of arr) {\n x0 = Math.min(p.x, x0);\n y0 = Math.min(p.y, y0);\n x1 = Math.max(p.x, x1);\n y1 = Math.max(p.y, y1);\n }\n return { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };\n }\n}\n//}\n","// namespace Pacem {\n/** Grants undo/redo functionalities for given state. */\nexport class HistoryService {\n /**\n * @param state Initial state.\n * @param maxlength Maximum number of stored states (undo queue + redo stack); unbounded when omitted.\n */\n constructor(state, maxlength) {\n this.#current = state;\n this.#maxlength = maxlength;\n }\n // it's a queue\n #backwards = [];\n // it's a stack\n #forwards = [];\n // max number of items (queue + stack)\n #maxlength;\n #current;\n /**\n * Gets the current state.\n */\n get current() {\n return this.#current;\n }\n /** Gets whether there is a previous state to revert to. @readonly */\n get canUndo() {\n return this.#backwards.length > 0;\n }\n /** Gets whether there is a subsequent state to reapply. @readonly */\n get canRedo() {\n return this.#forwards.length > 0;\n }\n /** Sets the maximum number of stored states, queue + stack.\n */\n set maxlength(v) {\n this.#maxlength = v;\n }\n /** Reverts to the previous state, if any (see {@link canUndo}), moving the current state onto the redo stack. */\n undo() {\n if (this.canUndo) {\n const back = this.#backwards, fore = this.#forwards, current = this.#current;\n fore.unshift(current);\n this.#current = back.pop();\n }\n }\n /** Reapplies the next state, if any (see {@link canRedo}), moving the current state onto the undo queue. */\n redo() {\n if (this.canRedo) {\n const back = this.#backwards, fore = this.#forwards, current = this.#current;\n back.push(current);\n this.#current = fore.shift();\n }\n }\n /**\n * Pushes a new current state, clearing the redo stack and enqueuing the previous current state for undo.\n * Trims the undo queue to `maxlength`, if set.\n * @param state New current state.\n */\n push(state) {\n this.#forwards.splice(0);\n this.#backwards.push(this.#current);\n this.#current = state;\n const max = this.#maxlength, queue = this.#backwards;\n if (max > 0 && queue.length > max) {\n queue.splice(0, queue.length - max);\n }\n }\n /** Clears both the undo queue and the redo stack, leaving the current state untouched. */\n reset() {\n this.#forwards.splice(0);\n this.#backwards.splice(0);\n }\n}\n// }\n","// namespace Pacem {\nimport { Rect } from \"./rect\";\nconst DefaultImagingResizeOptions = {\n mode: 'stretch',\n align: 'center',\n valign: 'middle',\n quality: 1,\n type: 'image/jpeg'\n};\n/** Image loading and resizing utilities, based on `OffscreenCanvas`. */\nexport class Imaging {\n /**\n * Fetches an image from a URL as a `Blob`.\n * @param url URL of the image to load.\n * @returns A promise resolving with the loaded `Blob`, or `null` if the fetch response was not OK.\n */\n static async loadImage(url) {\n const response = await fetch(url);\n if (!response.ok) {\n return null;\n }\n const blob = await response.blob();\n return blob;\n }\n static async resizeImage(img, width, height, options) {\n if (width <= 0 || height <= 0 || isNaN(width) || isNaN(height)) {\n throw new Error('Invalid target size');\n }\n if (typeof img === 'string') {\n img = await Imaging.loadImage(img);\n }\n const el = await self.createImageBitmap(img);\n const origWidth = el.width, origHeight = el.height;\n const cnv = new OffscreenCanvas(origWidth, origHeight);\n const ctx = cnv.getContext('2d');\n ctx.imageSmoothingEnabled =\n ctx['mozImageSmoothingEnabled'] =\n ctx['oImageSmoothingEnabled'] =\n ctx['webkitImageSmoothingEnabled'] =\n true;\n const { quality, type, mode, align, valign, background } = Object.assign({}, DefaultImagingResizeOptions, options ?? {});\n const from = { width: origWidth, height: origHeight, x: 0, y: 0 }, to = { x: 0, y: 0, width, height };\n const transformMatrix = Rect.findTransform(from, to, mode, align, valign);\n cnv.width = width;\n cnv.height = height;\n if (background) {\n ctx.fillStyle = background;\n ctx.fillRect(0, 0, cnv.width, cnv.height);\n }\n ctx.setTransform(transformMatrix);\n ctx.drawImage(el, 0, 0);\n const retval = await cnv.convertToBlob({ quality, type });\n return retval;\n }\n}\n// }\n","// namespace Pacem {\n/** Unique key/id generation utilities. */\nexport class Keys {\n static #seed;\n /**\n * Generates a process-wide monotonically increasing numeric id, seeded from the current timestamp.\n * @returns A new unique numeric id.\n */\n static uniqueId() {\n let seed = Keys.#seed || Date.now();\n return Keys.#seed = ++seed;\n }\n /**\n * Generates a process-wide unique id, base-62 encoded.\n * @returns A new unique string code.\n */\n static uniqueCode() {\n const newid = Keys.uniqueId();\n return newid.toBase62();\n }\n /**\n * Generates a random base-62 string of at least the given length.\n * @param length Minimum length of the generated string.\n * @returns A random string.\n */\n static randomString(length) {\n let retval = '';\n do {\n retval += (Math.random() * 62).toBase62();\n } while (retval.length < length);\n return retval;\n }\n}\n// }\n","// namespace Pacem {\n/** Numeric utilities. */\nexport class Numbers {\n /**\n * Rounds a number to the nearest multiple of `step`.\n * @param x Value to round.\n * @param step Rounding step/increment (defaults to 1).\n * @returns The rounded value.\n */\n static round(x, step = 1.0) {\n return Math.round(x / step) * step;\n }\n /**\n * Computes the logarithm of `x` in an arbitrary `base`.\n * @param x Value to compute the logarithm of.\n * @param base Logarithm base.\n */\n static log(x, base) {\n return Math.log10(x) / Math.log10(base);\n }\n /**\n * Converts a number (or numeric string) from one base to another.\n * @param v Value to convert, expressed in base `from`.\n * @param from Source base (2-36).\n * @param to Target base (2-36).\n * @returns The value re-expressed in base `to`, as a string; `\"NaN\"` if `v` is not a valid number in base `from`.\n */\n static rebase(v, from, to) {\n const vStr = v.toString();\n const firstPass = parseInt(vStr, from);\n if (!vStr.endsWith(firstPass.toString(from))) {\n return Number.NaN.toString();\n }\n return parseInt(v.toString(), from).toString(to);\n }\n}\n//}\n","// namespace Pacem {\nimport { NullChecker } from \"./null-checker\";\n/**\n * Computes the Longest Common Subsequence (LCS) table for two arrays of strings.\n * @param aTokens Array of strings from the first input.\n * @param bTokens Array of strings from the second input.\n * @returns The DP table for LCS lengths.\n */\nfunction lcs(aTokens, bTokens) {\n const m = aTokens.length;\n const n = bTokens.length;\n // Initialize DP table with zeros\n const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));\n // Fill DP table\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (aTokens[i - 1] === bTokens[j - 1]) {\n // Tokens match, increment LCS length\n dp[i][j] = dp[i - 1][j - 1] + 1;\n }\n else {\n // Tokens don't match, take max length from previous states\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n }\n return dp;\n}\n/**\n * Internal diff implementation using backtracking on the LCS DP table.\n * Works on token arrays (characters, words, lines).\n * @param aTokens Array of strings from the first input.\n * @param bTokens Array of strings from the second input.\n * @param dp The precomputed LCS DP table.\n * @param joiner The string to use when joining tokens of the same type (e.g., \"\" for chars, \"\\n\" for lines).\n * For word diffing, joiner is effectively \"\" because whitespace is part of the tokens.\n * @returns An array of DiffTokens representing the differences.\n */\nfunction diffInternal(aTokens, bTokens, dp, joiner = '') {\n const m = aTokens.length;\n const n = bTokens.length;\n const result = [];\n let i = m, j = n;\n let currentToken = null;\n const finalizeToken = () => {\n if (currentToken) {\n result.push(currentToken);\n currentToken = null;\n }\n };\n // Backtrack through the DP table\n while (i > 0 || j > 0) { // Continue until both sequences are fully processed\n var currentType = null;\n let currentValue = null;\n if (i > 0 && j > 0 && aTokens[i - 1] === bTokens[j - 1]) {\n // Common token\n currentType = '=';\n currentValue = aTokens[i - 1];\n i--;\n j--;\n }\n else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n // Token added in b\n currentType = '+';\n currentValue = bTokens[j - 1];\n j--;\n }\n else if (i > 0 && (j === 0 || dp[i - 1][j] > dp[i][j - 1])) {\n // Token removed from a\n currentType = '-';\n currentValue = aTokens[i - 1];\n i--;\n }\n if (currentType && currentValue !== null) {\n if (currentToken && currentToken.type === currentType) {\n // Prepend the value to the existing token\n currentToken.value = currentValue + (currentToken.value ? joiner : '') + currentToken.value;\n }\n else {\n // Finalize the previous token (if different type) and start a new one\n finalizeToken();\n currentToken = { type: currentType, value: currentValue };\n }\n }\n else {\n // Should not happen in standard LCS backtracking, but finalize just in case\n finalizeToken();\n }\n }\n finalizeToken(); // Add the last accumulated token\n return result.reverse(); // Reverse to get the correct order\n}\n/**\n* Performs character-level diffing.\n* @param a The first string.\n* @param b The second string.\n* @returns An array of DiffTokens.\n*/\nfunction diffChars(a, b) {\n const aTokens = a.split(''); // Split into characters\n const bTokens = b.split(''); // Split into characters\n const dp = lcs(aTokens, bTokens);\n // No joiner needed as characters are concatenated directly\n return diffInternal(aTokens, bTokens, dp, '');\n}\n/**\n * Performs word-level diffing, preserving whitespace and line breaks.\n * It tokenizes based on sequences of non-whitespace (\\S+) or whitespace (\\s+).\n * @param a The first string.\n * @param b The second string.\n * @returns An array of DiffTokens.\n */\nfunction diffWords(a, b) {\n // Tokenize into words (\\S+) and whitespace/newlines (\\s+)\n // This preserves the original spacing and line breaks.\n const wordRegex = /(\\S+|\\s+)/g;\n const aTokens = a.match(wordRegex) || [];\n const bTokens = b.match(wordRegex) || [];\n const dp = lcs(aTokens, bTokens);\n // No joiner needed; whitespace tokens handle spacing.\n return diffInternal(aTokens, bTokens, dp, '');\n}\n/**\n * Performs line-level diffing.\n * @param a The first string.\n * @param b The second string.\n * @returns An array of DiffTokens where each token's value can contain multiple lines.\n */\nfunction diffLines(a, b) {\n // Split by newline characters, keeping the EOL character concept separate\n // The result of split does not contain the separators themselves.\n const lineRegex = /\\r?\\n/;\n const aTokens = a.split(lineRegex);\n const bTokens = b.split(lineRegex);\n // Handle potential empty string added by split if text ends with a newline\n // (This behavior is often desired, representing an empty line after the last newline)\n // Example: \"a\\nb\\n\".split(/\\n/) -> [\"a\", \"b\", \"\"]\n const dp = lcs(aTokens, bTokens);\n // Join consecutive lines of the same type with newline characters\n return diffInternal(aTokens, bTokens, dp, '\\n');\n}\n//#endregion\n/** String manipulation utilities. */\nexport class Strings {\n /** @deprecated Use String.prototype.padStart() instead. */\n static leftPad(v, targetLength, padChar) {\n let retval = v.toString();\n return retval.padStart(targetLength, padChar);\n //while (retval.length < targetLength)\n // retval = padChar + retval;\n //return retval;\n }\n /**\n * Formats a template string, replacing `{0}`, `{1}`, ... placeholders with the corresponding arguments.\n * Doubled braces (`{{`/`}}`) escape a placeholder.\n * @param template Template string containing `{n}` placeholders.\n * @param args Values to substitute into the placeholders, by index.\n * @returns The formatted string.\n * @throws If the template references an argument index that was not supplied.\n */\n static format(template, ...args) {\n const array = Array.from(args);\n let retval = template;\n for (let j = 0; j < array.length; j++) {\n const regex = new RegExp('(^|[^\\\\{])\\\\{' + j + '\\\\}($|[^\\\\}])', 'g');\n retval = retval.replaceAll(regex, (match, ...args0) => {\n return match.replace('{' + j + '}', array[j]);\n });\n }\n const check = /(^|[^\\{}])\\{(\\d+)\\}($|[^\\}])/.exec(retval);\n if (!NullChecker.isNullOrEmpty(check)) {\n throw new Error(`Missing argument at index ${check[2]}.`);\n }\n return retval;\n }\n /**\n * Computes a diff between two strings, using the Longest Common Subsequence algorithm.\n * @param a First (original) string.\n * @param b Second (modified) string.\n * @param mode Diffing granularity: `'char'` (default), `'word'` or `'line'`.\n * @returns Array of {@link DiffToken}s describing unchanged, removed and added chunks.\n */\n static diff(a, b, mode = 'char') {\n switch (mode) {\n case 'line':\n return diffLines(a, b);\n case 'word':\n return diffWords(a, b);\n default:\n return diffChars(a, b);\n }\n }\n /**\n * Computes the cryptographic hash of a string using the SubtleCrypto API.\n * @param input String to hash.\n * @param algo Hash algorithm to use (defaults to `SHA-256`).\n * @returns A promise resolving with the hash, hex-encoded.\n */\n static async hash(input, algo = 'SHA-256') {\n const hashBuffer = await crypto.subtle.digest(algo, new TextEncoder().encode(input));\n return Array.from(new Uint8Array(hashBuffer))\n .map(byte => byte.toString(16).padStart(2, '0'))\n .join('');\n }\n}\n// }\n","//namespace Pacem.Compile {\nclass LexerClass {\n tokenize(input, grammar) {\n const tokens = [];\n while (input) {\n const start = input.length;\n for (let rule of grammar) {\n const newTokens = rule.exec(input, /* arguments that ease recursion when needed */ this), length = newTokens?.length;\n if (length > 0) {\n Array.prototype.push.apply(tokens, newTokens);\n const last = newTokens[length - 1];\n input = input.substr((last.index || 0) + last.raw.length);\n break;\n }\n }\n if (input.length >= start) {\n // break infinite loop\n throw new Error(`Cannot parse\\n\"${input}\"\\n using the provided grammar.`);\n }\n }\n return tokens;\n }\n}\n/** Generic tokenize-then-render text parser: lexes input against a grammar, then renders the resulting token tree. */\nexport class Parser {\n /**\n * @param _lexer Lexer implementation to use (defaults to a built-in greedy, rule-ordered lexer).\n */\n constructor(_lexer = new LexerClass()) {\n this._lexer = _lexer;\n }\n /**\n * Tokenizes `input` against `grammar` and renders the resulting token tree.\n * @param input String to parse.\n * @param grammar Ordered list of rules describing the grammar.\n * @param renderer Renderer used to turn the token tree into the output string.\n * @returns The rendered output.\n */\n parse(input, grammar, renderer) {\n const tokens = this._lexer.tokenize(input, grammar);\n return renderer.render(tokens);\n }\n}\n//}\n","//namespace Pacem.Compile.Markdown {\nimport { NullChecker } from \"../../null-checker\";\nimport * as Compile from \"../parser\";\n// #region HELPERS\nfunction htmlEncode(input) {\n return (input ?? '').replace(/</g, '<');\n}\nfunction extractReference(input) {\n if (NullChecker.isNullOrEmpty(input)) {\n return void 0;\n }\n if (/^\\(/.test(input) && /\\)$/.test(input)) {\n return void 0;\n }\n if (/^\\[/.test(input) && /\\]$/.test(input)) {\n input = input.substr(1, input.length - 2);\n }\n return input;\n}\nfunction regexMatchIndex(arr) {\n return arr?.index || void 0;\n}\nfunction extractUrl(input) {\n if (NullChecker.isNullOrEmpty(input)) {\n return void 0;\n }\n if (/^\\[/.test(input) && /\\]$/.test(input)) {\n return void 0;\n }\n if (/^\\(/.test(input) && /\\)$/.test(input)) {\n input = input.substr(1, input.length - 2);\n }\n return input;\n}\nfunction normalizeReference(input) {\n return input?.replace(/[^\\w]+/g, ' ').trim().replace(/ +/g, '-').toLowerCase();\n}\nfunction match(input, pattern, fn) {\n const arr = pattern.exec(input);\n if (arr && arr.length) {\n return fn(arr);\n }\n return null;\n}\n// #endregion\nconst COMMENT = /(<!--)([\\s\\S]*?)(-->|$)/;\nconst HR = /^ {0,3}(={3,}|_{3,}|-{3,})(\\r?\\n|$)/;\nconst HEADING = /^ {0,3}(#{1,6})\\s+([^\\n]+)(\\r?\\n|$)+/;\nconst HEADING1 = /^ {0,3}([^\\n]+)(\\r?\\n=+(\\r?\\n|$))+/;\nconst HEADING2 = /^ {0,3}([^\\n]+)(\\r?\\n-+(\\r?\\n|$))+/;\nconst CODEBLOCK = /^ {4,}.+(\\r?\\n {4,}.+)*(\\r?\\n|$)+/;\nconst FENCES = /^ {0,3}``` *([^\\n]*)\\r?\\n(([\\s\\S](?!\\r?\\n {0,3}```))*.(\\r?\\n)+) {0,3}```(\\r?\\n|$)+/;\nconst BLOCKQUOTE = /^ {0,3}> *([^\\n]+)(\\r?\\n {0,3}> *([^\\n]*))*(\\r?\\n|$)+/;\nconst ULIST = /^( {0,3}([-+]).*\\r?\\n|$)((?!(?: {0,3}(?:\\d+[.\\)]|\\r?\\n\\S))).*(\\r?\\n|$))*/;\nconst OLIST = /^( {0,3}(\\d+[.\\)]).*\\r?\\n|$)((?!(?: {0,3}(?:[+-]|\\r?\\n\\S))).*(\\r?\\n|$))*/;\nconst LISTITEM = /^(?:[-+*]|\\d+[.\\)])/m;\nconst PARAGRAPH = /^(?! {4,})(.+(\\n(?! {0,3}```)(?! {0,3}([-+]|\\d+[.\\)]))(?! {4,})(?! {0,3}>).+)*)/;\nconst REF = /^ {0,3}(!?)\\[([^\\]]+)\\]: +(\\S+)(?: +['\"\\(](.+)['\"\\)])?(\\r?\\n|$)+/;\nconst IMAGE_OR_LINK = /!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?(\\[[^\\[\\]]*\\]|\\([^\\(\\)]*\\))?/;\nconst EMPHASIZED_LINK = /(\\*\\*?|__?)(\\[[^\\]]*]\\([^\\)]+\\))\\1/;\nconst CODE = /(?:(?<!\\\\)`)(.+?)(?:(?<!\\\\)`)/;\nconst EMPHASIZE = /(\\*\\*?|__?)((?!\\1\\s?)(?:(?!\\1)[\\S\\s])*[^\\s])\\1/;\nconst STRIKE = /(~~?|__?)(?!\\1\\s?)([^\\s][\\s\\S]*?(?!\\1)[^\\s])\\1/;\nconst QUOTE = /(:\")(?!\":\\s?)([^\\s][\\s\\S]*?(?!\":)[^\\s])\":/;\nconst SPACE = /^\\s+/;\nconst LINEBREAK = / {2,}\\r?\\n/;\nconst TEXT = /^[^\\r\\n]+/;\nvar MARKDOWN_TYPES;\n(function (MARKDOWN_TYPES) {\n MARKDOWN_TYPES[\"Html\"] = \"html\";\n MARKDOWN_TYPES[\"Text\"] = \"text\";\n MARKDOWN_TYPES[\"Paragraph\"] = \"paragraph\";\n MARKDOWN_TYPES[\"BlockQuote\"] = \"blockquote\";\n MARKDOWN_TYPES[\"Space\"] = \"space\";\n MARKDOWN_TYPES[\"Heading\"] = \"heading\";\n MARKDOWN_TYPES[\"Bold\"] = \"bold\";\n MARKDOWN_TYPES[\"Italic\"] = \"italic\";\n MARKDOWN_TYPES[\"CodeBlock\"] = \"codeblock\";\n MARKDOWN_TYPES[\"Code\"] = \"code\";\n MARKDOWN_TYPES[\"Image\"] = \"img\";\n MARKDOWN_TYPES[\"ImageLike\"] = \"imglike\";\n MARKDOWN_TYPES[\"Link\"] = \"link\";\n MARKDOWN_TYPES[\"LinkLike\"] = \"linklike\";\n MARKDOWN_TYPES[\"LineBreak\"] = \"br\";\n MARKDOWN_TYPES[\"StrikeThrough\"] = \"strike\";\n MARKDOWN_TYPES[\"Quote\"] = \"quote\";\n MARKDOWN_TYPES[\"HorizontalRule\"] = \"hr\";\n MARKDOWN_TYPES[\"OrderedList\"] = \"ol\";\n MARKDOWN_TYPES[\"UnorderedList\"] = \"ul\";\n MARKDOWN_TYPES[\"ListItem\"] = \"listitem\";\n MARKDOWN_TYPES[\"Reference\"] = \"ref\";\n})(MARKDOWN_TYPES || (MARKDOWN_TYPES = {}));\nvar MARKDOWN_RULES;\n(function (MARKDOWN_RULES) {\n MARKDOWN_RULES[MARKDOWN_RULES[\"Comment\"] = 0] = \"Comment\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Reference\"] = 1] = \"Reference\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"HorizontalRule\"] = 2] = \"HorizontalRule\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Heading\"] = 3] = \"Heading\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Heading1\"] = 4] = \"Heading1\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Heading2\"] = 5] = \"Heading2\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"CodeBlock\"] = 6] = \"CodeBlock\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Fences\"] = 7] = \"Fences\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"BlockQuote\"] = 8] = \"BlockQuote\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"OrderedList\"] = 9] = \"OrderedList\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"UnorderedList\"] = 10] = \"UnorderedList\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Paragraph\"] = 11] = \"Paragraph\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"EmphasizedLink\"] = 12] = \"EmphasizedLink\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"ImageOrLink\"] = 13] = \"ImageOrLink\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Emphasize\"] = 14] = \"Emphasize\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"StrikeThrough\"] = 15] = \"StrikeThrough\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Quote\"] = 16] = \"Quote\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Code\"] = 17] = \"Code\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"LineBreak\"] = 18] = \"LineBreak\";\n // lowest priority\n MARKDOWN_RULES[MARKDOWN_RULES[\"Text\"] = 254] = \"Text\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Space\"] = 255] = \"Space\";\n})(MARKDOWN_RULES || (MARKDOWN_RULES = {}));\n/**\n * Builds the full Markdown grammar (block + inline rules, comment/reference handling first),\n * optionally merging in caller-supplied {@link ExtraRule}s.\n * @param extra Additional block/inline/code rules to plug into the built-in grammar.\n * @returns Ordered list of {@link Compile.Rule}s ready to be fed to a {@link Compile.Lexer}.\n */\nfunction getGrammar(extra = []) {\n const inert = {\n // comment\n [MARKDOWN_RULES.Comment]: {\n exec: (input, lexer) => match(input, COMMENT, arr => {\n const index = regexMatchIndex(arr);\n const output = [{\n type: MARKDOWN_TYPES.Html, index, raw: arr[0], text: arr[2]\n }];\n if (index > 0) {\n const left = input.substr(0, index), tokens = lexer.tokenize(left, blockRules);\n Array.prototype.unshift.apply(output, tokens);\n }\n return output;\n })\n },\n // reference\n [MARKDOWN_RULES.Reference]: {\n exec: (input) => match(input, REF, arr => {\n const index = regexMatchIndex(arr), raw = arr[0], text = raw, image = arr[1] === '!', id = arr[2], url = arr[3], title = arr[4];\n return [{\n type: MARKDOWN_TYPES.Reference, index, raw, text, id, image, url, title\n }];\n })\n },\n };\n const blockExtra = [], inlineExtra = [], codeExtra = {};\n for (let r of extra) {\n let rule, type = 'inline';\n if ('type' in r) {\n type = r.type;\n rule = r.rule;\n }\n else {\n rule = r;\n }\n switch (type) {\n case 'block':\n blockExtra.push(rule);\n break;\n case 'code':\n if ('lang' in r) {\n const key = r.lang.toLowerCase();\n (codeExtra[key] = codeExtra[key] || []).push(rule);\n }\n break;\n default:\n const inlineRule = {\n exec: (input, lexer) => {\n const output = rule.exec(input, lexer);\n inPlaceInlineExec(input, output, lexer);\n return output;\n }\n };\n inlineExtra.push(inlineRule);\n break;\n }\n }\n // #region INLINE\n const inlinelowpriority = {\n // text\n [MARKDOWN_RULES.Text]: {\n exec: (input) => match(input, TEXT, arr => {\n const raw = arr[0], text = raw;\n return [{\n index: regexMatchIndex(arr), raw, text, type: MARKDOWN_TYPES.Text\n }];\n })\n },\n // sparse lines\n [MARKDOWN_RULES.Space]: {\n exec: (input) => match(input, SPACE, arr => {\n const raw = arr[0];\n return [{\n type: MARKDOWN_TYPES.Space, raw, text: raw\n }];\n })\n }\n };\n const inline = {\n // link/image\n [MARKDOWN_RULES.ImageOrLink]: {\n exec: (input, lexer) => inlineMatch(input, IMAGE_OR_LINK, lexer, arr => {\n const index = regexMatchIndex(arr), raw = arr[0], image = raw.charAt(0) === '!', text = arr[1], url = extractUrl(arr[2]), ref = normalizeReference(extractReference(arr[2]) ?? text);\n if (image) {\n return [{\n index, type: url ? MARKDOWN_TYPES.Image : MARKDOWN_TYPES.ImageLike,\n raw, text, src: url, ref,\n tokens: lexer.tokenize(text, inlineRules)\n }];\n }\n else {\n return [{\n index, type: url ? MARKDOWN_TYPES.Link : MARKDOWN_TYPES.LinkLike,\n raw, text, href: url, ref,\n tokens: lexer.tokenize(text, inlineRules)\n }];\n }\n })\n },\n // code\n [MARKDOWN_RULES.Code]: {\n exec: (input, lexer) => inlineMatch(input, CODE, lexer, arr => {\n const text = htmlEncode(arr[1]);\n return [{\n type: MARKDOWN_TYPES.Code, raw: arr[0], text, index: regexMatchIndex(arr)\n }];\n })\n },\n // italic/bold link\n [MARKDOWN_RULES.EmphasizedLink]: {\n exec: (input, lexer) => inlineMatch(input, EMPHASIZED_LINK, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = arr[1].length > 1 ? MARKDOWN_TYPES.Bold : MARKDOWN_TYPES.Italic, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // italic/bold\n [MARKDOWN_RULES.Emphasize]: {\n exec: (input, lexer) => inlineMatch(input, EMPHASIZE, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = arr[1].length > 1 ? MARKDOWN_TYPES.Bold : MARKDOWN_TYPES.Italic, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // strike\n [MARKDOWN_RULES.StrikeThrough]: {\n exec: (input, lexer) => inlineMatch(input, STRIKE, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = MARKDOWN_TYPES.StrikeThrough, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // quote\n [MARKDOWN_RULES.Quote]: {\n exec: (input, lexer) => inlineMatch(input, QUOTE, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = MARKDOWN_TYPES.Quote, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // line break\n [MARKDOWN_RULES.LineBreak]: {\n exec: (input, lexer) => inlineMatch(input, LINEBREAK, lexer, arr => {\n const raw = arr[0], text = raw;\n return [{\n index: regexMatchIndex(arr), raw, text, type: MARKDOWN_TYPES.LineBreak\n }];\n })\n },\n };\n const inPlaceInlineExec = (input, output, lexer) => {\n const index = output?.length > 0 && output[0].index;\n if (index > 0) {\n const left = input.substr(0, index);\n const tokens = lexer.tokenize(left, inlineRules) || [];\n Array.prototype.unshift.apply(output, tokens);\n }\n };\n const inlineMatch = (input, pattern, lexer, fn) => {\n const output = match(input, pattern, arr => {\n if (pattern != CODE) {\n // prioritize code\n const codeCheck = CODE.exec(input);\n if (codeCheck\n && codeCheck.length\n && codeCheck.index < arr.index\n // && (codeCheck.index + codeCheck[0].length) > arr.index\n ) {\n return null;\n }\n }\n return fn(arr);\n });\n inPlaceInlineExec(input, output, lexer);\n return output;\n };\n const inlineRules = Object.values(inline);\n Array.prototype.push.apply(inlineRules, inlineExtra);\n inlineRules.push(inlinelowpriority[MARKDOWN_RULES.Text], inlinelowpriority[MARKDOWN_RULES.Space]);\n // #endregion\n // #region CODE\n const getLangGrammar = (lang) => {\n const retval = [inlinelowpriority[MARKDOWN_RULES.Text], inlinelowpriority[MARKDOWN_RULES.Space]];\n const key = lang?.toLowerCase() || '';\n if (key && key in codeExtra) {\n Array.prototype.unshift.apply(retval, codeExtra[key]);\n }\n return retval;\n };\n // #endregion\n // #region BLOCK\n const lowpriority = {\n // paragraph\n [MARKDOWN_RULES.Paragraph]: {\n exec: (input, lexer) => match(input, PARAGRAPH, arr => {\n const raw = arr[0], text = raw;\n return [{\n type: MARKDOWN_TYPES.Paragraph, raw, text,\n // recursion (inline rules only)\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // sparse lines\n [MARKDOWN_RULES.Space]: inlinelowpriority[MARKDOWN_RULES.Space]\n };\n const tokenizeListItem = (text, lexer) => {\n const grammar = !/^ {0,3}(`{3,}|$|>|[+-]\\s|\\d+[.\\)])/m.test(text) ? inlineRules : blockRules;\n return lexer.tokenize(text, grammar);\n };\n const block = {\n // hr\n [MARKDOWN_RULES.HorizontalRule]: {\n exec: (input, lexer) => match(input, HR, arr => {\n const raw = arr[0], text = raw;\n return [{\n type: MARKDOWN_TYPES.HorizontalRule, raw, text\n }];\n })\n },\n // headings\n [MARKDOWN_RULES.Heading]: {\n exec: (input, lexer) => match(input, HEADING, arr => {\n const text = arr[2];\n return [{\n type: MARKDOWN_TYPES.Heading, raw: arr[0], text, level: arr[1].length, ref: normalizeReference(text),\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n [MARKDOWN_RULES.Heading1]: {\n exec: (input, lexer) => match(input, HEADING1, arr => {\n const text = arr[1];\n return [{\n type: MARKDOWN_TYPES.Heading, raw: arr[0], text, level: 1, ref: normalizeReference(text),\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n [MARKDOWN_RULES.Heading2]: {\n exec: (input, lexer) => match(input, HEADING2, arr => {\n const text = arr[1];\n return [{\n type: MARKDOWN_TYPES.Heading, raw: arr[0], text, level: 2, ref: normalizeReference(text),\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // codeblock\n [MARKDOWN_RULES.CodeBlock]: {\n exec: (input, lexer) => match(input, CODEBLOCK, arr => {\n const raw = arr[0], text = htmlEncode(raw);\n return [{\n type: MARKDOWN_TYPES.CodeBlock, raw, text,\n tokens: lexer.tokenize(text, [])\n }];\n })\n },\n // codeblock\n [MARKDOWN_RULES.Fences]: {\n exec: (input, lexer) => match(input, FENCES, arr => {\n const text = htmlEncode(arr[2]), lang = arr[1]?.toLowerCase();\n return [{\n type: MARKDOWN_TYPES.CodeBlock, raw: arr[0], text, lang,\n tokens: lexer.tokenize(text, getLangGrammar(lang))\n }];\n })\n },\n // blockquote\n [MARKDOWN_RULES.BlockQuote]: {\n exec: (input, lexer) => match(input, BLOCKQUOTE, arr => {\n const raw = arr[0], text = raw.replace(/^ {0,3}> */gm, '');\n return [{\n type: MARKDOWN_TYPES.BlockQuote, raw, text,\n // recursion\n tokens: lexer.tokenize(text, [\n lowpriority[MARKDOWN_RULES.Paragraph],\n lowpriority[MARKDOWN_RULES.Space]\n ])\n }];\n })\n },\n // lists\n [MARKDOWN_RULES.OrderedList]: {\n exec: (input, lexer) => match(input, OLIST, arr => {\n const raw = arr[0], items = raw.replace(/^ {0,3}/gm, '').split(LISTITEM).filter(i => !NullChecker.isNullOrEmpty(i)).map(i => i.trim());\n return [{\n type: MARKDOWN_TYPES.OrderedList, start: parseInt(/\\d/.exec(arr[0])[0]), raw, text: raw, tokens: items.map(i => {\n // avoid paragraphs if not strictly needed\n return {\n type: MARKDOWN_TYPES.ListItem, raw: i, text: i, tokens: tokenizeListItem(i, lexer)\n };\n })\n }];\n })\n },\n [MARKDOWN_RULES.UnorderedList]: {\n exec: (input, lexer) => match(input, ULIST, arr => {\n const raw = arr[0], items = raw.replace(/^ {0,3}/gm, '').split(LISTITEM).filter(i => !NullChecker.isNullOrEmpty(i)).map(i => i.trim());\n return [{\n type: MARKDOWN_TYPES.UnorderedList, raw, text: raw, tokens: items.map(i => {\n return {\n type: MARKDOWN_TYPES.ListItem, raw: i, text: i, tokens: tokenizeListItem(i, lexer)\n };\n })\n }];\n })\n }\n };\n const blockRules = Object.values(block);\n Array.prototype.push.apply(blockRules, blockExtra);\n blockRules.push(lowpriority[MARKDOWN_RULES.Paragraph], lowpriority[MARKDOWN_RULES.Space]);\n // #endregion\n return [\n // comment first\n inert[MARKDOWN_RULES.Comment],\n inert[MARKDOWN_RULES.Reference]\n ].concat(\n // block rules contain recursive inline rules (at least)\n blockRules);\n}\n// #region HTML RENDERER HELPER\n// meant to help in unnecessary spaces replacement.\nconst CARRIAGE_RETURN_PLACEHOLDER = '\\0';\nconst TRIM_INSIDE = /[ \\r\\n]*\\0+[ \\r\\n]*/g;\nfunction trim(input) {\n return input?.replace(TRIM_INSIDE, '\\n').trim();\n}\n// #endregion\n/** Renders a Markdown token tree, as produced by the grammar returned by {@link getGrammar}, into HTML markup. */\nclass HtmlRenderer {\n constructor(_extraItemRender = (token, __) => token?.text || '') {\n this._extraItemRender = _extraItemRender;\n this._renderContent = (token) => {\n const children = token.tokens;\n if (NullChecker.isNullOrEmpty(children)) {\n return token.text;\n }\n return this._render(children);\n };\n }\n _rendeItem(token, allTokens) {\n const r = this._renderContent, R = CARRIAGE_RETURN_PLACEHOLDER;\n switch (token?.type) {\n case MARKDOWN_TYPES.Reference:\n return '';\n case MARKDOWN_TYPES.Html:\n return token.raw;\n case MARKDOWN_TYPES.BlockQuote:\n return `<blockquote>\\n${r(token)}</blockquote>${R}`;\n case MARKDOWN_TYPES.Bold:\n return `<b>${r(token)}</b>`;\n case MARKDOWN_TYPES.CodeBlock:\n const lang = token['lang'];\n return `<pre>${R}<code${(lang ? (' class=\"' + lang + '\"') : '')}>${r(token)}</code>${R}</pre>${R}`;\n case MARKDOWN_TYPES.Code:\n return `<code>${r(token)}</code>`;\n case MARKDOWN_TYPES.HorizontalRule:\n return `<hr />${R}`;\n case MARKDOWN_TYPES.Heading:\n const hlevel = token['level'], hid = token['ref'];\n return `<h${hlevel} id=\"${hid}\">${r(token)}</h${hlevel}>${R}`;\n case MARKDOWN_TYPES.Image:\n case MARKDOWN_TYPES.ImageLike:\n const itk = token;\n let isrc = itk.src, ititle = '';\n const alt = itk.text, iref = itk.ref;\n if (!isrc && iref) {\n const ireftk = allTokens.find(t => t.type === MARKDOWN_TYPES.Reference && t['image'] === true && t['id']?.toLowerCase() === iref.toLowerCase());\n if (ireftk) {\n isrc = ireftk.url;\n ititle = ireftk.title ?? '';\n }\n }\n return isrc ? `<img src=\"${isrc}\" alt=\"${alt}\"${(ititle ? (' title=\"' + ititle + '\"') : '')} />` : `![${r(token)}]`;\n case MARKDOWN_TYPES.Italic:\n return `<i>${r(token)}</i>`;\n case MARKDOWN_TYPES.StrikeThrough:\n return `<s>${r(token)}</s>`;\n case MARKDOWN_TYPES.Quote:\n return `<q>${r(token)}</q>`;\n case MARKDOWN_TYPES.LineBreak:\n return '<br />' + R;\n case MARKDOWN_TYPES.OrderedList:\n return `<ol start=\"${token['start']}\">\\n${r(token)}</ol>${R}`;\n case MARKDOWN_TYPES.UnorderedList:\n return `<ul>\\n${r(token)}</ul>${R}`;\n case MARKDOWN_TYPES.ListItem:\n return `\\t<li>${r(token)}</li>${R}`;\n case MARKDOWN_TYPES.Link:\n case MARKDOWN_TYPES.LinkLike:\n const atk = token;\n let ahref = atk.href, atitle = '';\n const aref = atk.ref;\n if (!ahref && aref) {\n const areftk = allTokens.find(t => t.type === MARKDOWN_TYPES.Reference && t['image'] !== true && t['id']?.toLowerCase() === aref.toLowerCase());\n if (areftk) {\n ahref = areftk.url;\n atitle = areftk.title ?? '';\n }\n }\n return ahref ? `<a href=\"${ahref}\"${(atitle ? (' title=\"' + atitle + '\"') : '')}>${r(token)}</a>` : `[${r(token)}]`;\n case MARKDOWN_TYPES.Paragraph:\n return `<p>${r(token)}</p>${R}`;\n case MARKDOWN_TYPES.Text:\n case MARKDOWN_TYPES.Space:\n return token.text;\n }\n return this._extraItemRender(token, allTokens);\n }\n _render(tree) {\n let acc = '';\n for (let token of tree || []) {\n acc += this._rendeItem(token, tree);\n }\n return acc;\n }\n render(tree) {\n return trim(this._render(tree));\n }\n}\n/** Renders a Markdown token tree as a JSON array of tokens, mainly useful for debugging/inspection. */\nclass TokenRenderer {\n _render(token) {\n return NullChecker.isNullOrEmpty(token) ? '' : JSON.stringify(token);\n }\n render(tree) {\n return '[' + tree.filter(i => !NullChecker.isNullOrEmpty(i)).map(this._render).join(',') + ']';\n }\n}\nfunction isRenderer(obj) {\n return obj && typeof obj === 'object' && typeof obj.render === 'function';\n}\n/** Markdown parser: tokenizes Markdown source and renders it to HTML (or another format via a custom {@link Compile.Renderer}). */\nexport class Parser extends Compile.Parser {\n /**\n * Parses Markdown `input` and renders it to an HTML string.\n * @param input Markdown source.\n * @param extraGrammar Additional grammar rules to extend the built-in Markdown syntax.\n * @param extraItemRenderer Fallback renderer invoked for token types not natively handled (e.g. tokens produced by `extraGrammar`); defaults to returning the token's `text`.\n * @returns The rendered HTML string.\n */\n toHtml(input, extraGrammar, extraItemRenderer) {\n const renderer = new HtmlRenderer(extraItemRenderer);\n if (NullChecker.isNullOrEmpty(extraGrammar)) {\n return this.parse(input, renderer);\n }\n return this.parse(input, getGrammar(extraGrammar), renderer);\n }\n /**\n * Parses Markdown `input` and returns its token tree as a plain (JSON-serializable) array, useful for inspection/debugging.\n * @param input Markdown source.\n * @param extraGrammar Additional grammar rules to extend the built-in Markdown syntax.\n * @returns The parsed token tree.\n */\n tokenize(input, extraGrammar) {\n const json = this.parse(input, getGrammar(extraGrammar), new TokenRenderer());\n return JSON.parse(json);\n }\n parse(input, grammarOrRenderer = getGrammar(), renderer = new HtmlRenderer()) {\n if (isRenderer(grammarOrRenderer)) {\n return super.parse(input, getGrammar(), grammarOrRenderer);\n }\n else {\n return super.parse(input, grammarOrRenderer, renderer);\n }\n }\n}\n//}\n","// import './number-extensions';\n// import './array-extensions';\nexport * from './number-extensions';\nexport * from './array-extensions';\nexport * from './deepmerger';\nexport * from './arrays';\nexport * from './blobs';\nexport * from './browser';\nexport * from './colors';\nexport * from './dates';\nexport * from './geom';\nexport * from './rect';\nexport * from \"./null-checker\";\nexport * from './history-svc';\nexport * from './imaging';\nexport * from './keygenerator';\nexport * from './matrix2d';\nexport * from './numbers';\nexport * from './strings';\nexport * as Compile from './index-compile';\n","import * as Output from './index';\nOutput.DeepMerger.merge(Output);\n"],"names":["Compile.Parser","Output.DeepMerger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pacem-foundation.js","sources":["../esm/number-extensions.js","../esm/dates.js","../esm/null-checker.js","../esm/array-extensions.js","../esm/deepmerger.js","../esm/arrays.js","../esm/blobs.js","../esm/browser.js","../esm/colors.js","../esm/geom.js","../esm/matrix2d.js","../esm/rect.js","../esm/history-svc.js","../esm/imaging.js","../esm/keygenerator.js","../esm/numbers.js","../esm/strings.js","../esm/compile/parser.js","../esm/compile/markdown/parser.js","../esm/index-iife.js"],"sourcesContent":["Number.prototype.isCloseTo = function (other, precision = 14) {\n const delta = Number(`1e-${precision}`);\n return this > (other - delta) && this < (other + delta);\n //return this.toFixed(precision) === other.toFixed(precision); \n};\nNumber.prototype.roundoff = function (precision = 14) {\n return parseFloat(this.toFixed(precision));\n};\nNumber.prototype.clamp = function (min, max) {\n let value = this;\n if (min != null && !isNaN(min)) {\n value = Math.max(value, min);\n }\n if (max != null && !isNaN(max)) {\n value = Math.min(value, max);\n }\n return value;\n};\nNumber.prototype.toBase62 = function () {\n var alphabet = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n var temp = this;\n var sb = '';\n while (temp != 0) {\n var mod = temp % 62;\n sb = alphabet.charAt(mod) + sb;\n temp = Math.floor(temp / 62);\n }\n return sb;\n};\nNumber.prototype.toBase36 = function () {\n return this.toString(36);\n};\nexport {};\n","//namespace Pacem {\nconst JSON_DATE_PATTERN = /^\\/Date\\([\\d]+\\)\\/$/i;\n/** Date parsing and arithmetic utilities. */\nexport class Dates {\n /**\n * Parses a value into a `Date`. Accepts ISO/parseable date strings, ASP.NET-style\n * `/Date(ticks)/` JSON date strings, numeric timestamps, or a `Date` instance (returned as-is).\n * @param input Value to parse.\n * @returns The resulting `Date`.\n */\n static parse(input) {\n let d;\n if (typeof input === 'string') {\n if (JSON_DATE_PATTERN.test(input))\n d = parseInt(input.substring(6));\n else\n d = Date.parse(input);\n return new Date(d);\n }\n else if (typeof input === 'number') {\n return new Date(input);\n }\n else\n return input;\n }\n /**\n * Gets whether the given year is a leap year.\n * @param year Year to check.\n */\n static isLeapYear(year) {\n return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));\n }\n /**\n * Gets the number of days in a given month of a given year.\n * @param year Year (used to account for leap Februaries).\n * @param month Zero-based month index (0 = January, ..., 11 = December).\n * @returns Number of days in the month.\n */\n static daysInMonth(year, month) {\n return [31, (Dates.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n }\n /**\n * Gets whether a date is an `Invalid Date` or not.\n * @param date\n */\n static isDate(date) {\n return date instanceof Date && !isNaN(date.valueOf());\n }\n /**\n * Returns the date-only equaivalent of a provided datetime.\n * @param datetime\n */\n static dateOnly(datetime) {\n return new Date(datetime.getFullYear(), datetime.getMonth(), datetime.getDate());\n }\n /**\n * Returns a new date obtained by adding a (possibly negative) number of months to `input`,\n * clamping the day-of-month to the target month's length (e.g. Jan 31 + 1 month => Feb 28/29).\n * @param input Starting date.\n * @param value Number of months to add.\n * @returns The resulting date.\n */\n static addMonths(input, value) {\n let n = input.getDate(), i = new Date(input), month = i.getMonth() + value, years = 0;\n while (month < 0) {\n month += 12;\n years--;\n }\n i.setDate(1);\n i.setMonth(month % 12);\n i.setFullYear(i.getFullYear() + years + Math.floor(month / 12));\n i.setDate(Math.min(n, Dates.daysInMonth(i.getFullYear(), i.getMonth())));\n return i;\n }\n /**\n * Returns a new date obtained by adding a (possibly negative) number of days to `input`.\n * @param input Starting date.\n * @param value Number of days to add.\n * @returns The resulting date.\n */\n static addDays(input, value) {\n return new Date(input.valueOf() + value * 86400000);\n }\n /**\n * Computes the number of days (possibly fractional) between two dates.\n * @param start Start date.\n * @param end End date.\n * @returns Number of days between `start` and `end` (negative if `end` precedes `start`).\n */\n static daysBetween(start, end) {\n return (end.valueOf() - start.valueOf()) / 86400000;\n }\n}\n//}\n","/// <reference path=\"dates.ts\" />\nimport { Dates } from \"./dates\";\n// namespace Pacem {\n/** Null/empty value-checking utilities. */\nexport class NullChecker {\n /**\n * Returns whether the given value is `null` or `undefined`.\n * @param o Value to check.\n */\n static isNull(o) {\n return o === null || o === void 0;\n }\n /**\n * Returns whether the given value is \"empty\": an empty array, an empty string, or a\n * plain object with no own enumerable keys (dates, regexes and file-system handles are never\n * considered empty).\n * @param o Value to check.\n */\n static isEmpty(o) {\n try {\n return (Array.isArray(o) && o.length === 0)\n || (typeof o === 'string' && o === '')\n || (typeof o === 'object' && Object.keys(o).length === 0 && !Dates.isDate(o) && !(o instanceof RegExp) && !(o instanceof FileSystemDirectoryHandle) && !(o instanceof FileSystemFileHandle));\n }\n catch (e) {\n // Object.keys(null) would throw...\n return false;\n }\n }\n /**\n * Returns whether the given value is `null`, `undefined`, or \"empty\" (see {@link NullChecker.isEmpty}).\n * @param o Value to check.\n */\n static isNullOrEmpty(o) {\n return NullChecker.isNull(o) || NullChecker.isEmpty(o);\n }\n}\n//}\n","import { NullChecker } from \"./null-checker\";\nArray.prototype.distinct = function () {\n return Array.from(new Set(this));\n};\nArray.prototype.union = function (other) {\n const thisEmpty = NullChecker.isNullOrEmpty(this), thatEmpty = NullChecker.isNullOrEmpty(other);\n if (thisEmpty && thatEmpty) {\n return [];\n }\n if (thatEmpty) {\n return this.slice();\n }\n if (thisEmpty) {\n return other.slice();\n }\n return this.concat(other).distinct();\n};\nArray.prototype.moveWithin = function (from, to) {\n const OUT_OF_RANGE = 'Index must be greater or equal than 0 and less or equal than the length of the array.';\n var arr = this;\n if (from < 0 || from > arr.length)\n throw new Error(OUT_OF_RANGE);\n if (to < 0 || to > arr.length)\n throw new Error(OUT_OF_RANGE);\n arr.splice(to, 0, /* avoid to trigger a double change on a single command */ Array.prototype.splice.apply(arr, [from, 1])[0]);\n};\nArray.prototype.equalsContent = function (other) {\n if (other == null || this.length !== other.length) {\n return false;\n }\n for (let j = 0; j < this.length; j++) {\n if (this[j] !== other[j]) {\n return false;\n }\n }\n return true;\n};\nArray.prototype.cloneFrom = function (other) {\n if (other == null) {\n throw 'Cannot clone array from null object.';\n }\n const length = other.length;\n var changes = this.length !== other.length;\n for (let j = 0; j < length; j++) {\n const item = other[j];\n if (this.length > j) {\n if (this[j] !== item) {\n this[j] = item;\n changes = true;\n }\n }\n else {\n Array.prototype.push.apply(this, [item]);\n changes = true;\n }\n }\n if (changes) {\n // trigger change just in case\n this.splice(length);\n }\n};\n","function isPlainObject(value) {\n return (value != null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n (value.constructor === Object || value.constructor === undefined));\n}\nfunction deepMerge(target, source) {\n const output = target;\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const targetValue = output[key];\n if (isPlainObject(sourceValue)) {\n // never adopt the source's object by reference: bundlers emit frozen\n // namespace objects (`export * as X`), so a later merge into the same\n // slot would throw (\"object is not extensible\"). Always merge into a\n // fresh, extensible object instead.\n output[key] = deepMerge(isPlainObject(targetValue) ? targetValue : {}, sourceValue);\n }\n else if (Array.isArray(sourceValue)) {\n output[key] = sourceValue.slice();\n }\n else {\n output[key] = sourceValue;\n }\n }\n return output;\n}\n/** Deep-merging utility for plain objects. */\nexport class DeepMerger {\n constructor() {\n }\n /**\n * Recursively merges `source` into `target`, in place: plain-object properties are merged\n * recursively (into a fresh object, never adopted by reference), arrays are shallow-copied,\n * and any other value overwrites the target's.\n * @param source Object whose properties are merged into `target`.\n * @param target Object to merge into (defaults to, and lazily creates, the global `Pacem` namespace object).\n * @returns The mutated `target`, typed as the union of both inputs.\n */\n static merge(source, target) {\n target ??= (globalThis['Pacem'] ??= {});\n return deepMerge(target, source);\n }\n}\n","//namespace Pacem {\nimport { NullChecker } from \"./null-checker\";\n/** Array manipulation utilities. */\nexport class Arrays {\n static range(min, max, items = 2) {\n let x = min;\n if (NullChecker.isNull(max)) {\n max = items = min;\n min = 1;\n }\n const step = (max - min) / (items - 1);\n const output = [];\n if (step > 0) {\n //while (x <= max) {\n while (output.length < items) {\n output.push(x.roundoff());\n x += step;\n }\n }\n return output;\n }\n /**\n * Splits an array into chunks of a given size.\n * @param source Array to split.\n * @param size Maximum size of each chunk (must be a positive integer).\n * @returns Array of chunks; an empty array if `source` is null or empty.\n */\n static chunkify(source, size) {\n if (NullChecker.isNullOrEmpty(source)) {\n return [];\n }\n if (size <= 0 || size % 1 !== 0) {\n throw new Error('Provide a positive integer number.');\n }\n const length = Math.ceil(source.length / size);\n return Array.from({ length }, (_, index) => {\n const start = index * size, end = start + size;\n return source.slice(start, end);\n });\n }\n}\n//}\n","//namespace Pacem {\n/** Conversion utilities between `Blob`, base64/data URLs and plain text. */\nexport class Blobs {\n /**\n * Reads a `Blob` and resolves it as a base64-encoded data URL.\n * @param blob Blob to read.\n * @returns A promise resolving with the data URL string.\n */\n static blobToDataURL(blob) {\n return new Promise((resolve, _) => {\n const a = new FileReader();\n a.onload = (e) => { resolve(e.target.result); };\n a.readAsDataURL(blob);\n });\n }\n static _b64ToUint8Array(bstr) {\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return u8arr;\n }\n /**\n * Converts a base64-encoded string into a `Blob`.\n * @param bstr Base64-encoded string (without the `data:...;base64,` prefix).\n * @param options Blob options (e.g. MIME `type`).\n * @returns The resulting `Blob`.\n */\n static base64ToBlob(bstr, options) {\n const u8arr = Blobs._b64ToUint8Array(atob(bstr));\n return new Blob([u8arr], options);\n }\n /**\n * Converts a data URL (`data:<mime>;base64,<data>`) into a `Blob`, inferring the MIME type when present.\n * @param dataurl Data URL to convert.\n * @returns The resulting `Blob`.\n */\n static dataURLToBlob(dataurl) {\n const coma = dataurl.indexOf(',');\n if (coma === -1) {\n return Blobs.base64ToBlob(dataurl);\n }\n else {\n const bstr = dataurl.substring(coma + 1), data = dataurl.substring(0, coma);\n const mime = data.match(/:(.*?);/)[1];\n return Blobs.base64ToBlob(bstr, { type: mime });\n }\n }\n /**\n * Reads a `Blob` and decodes it as text.\n * @param blob Blob to read.\n * @param encoding Text encoding to use for decoding (defaults to the platform's default, typically UTF-8).\n * @returns A promise resolving with the decoded text.\n */\n static async blobToText(blob, encoding) {\n const buffer = await blob.arrayBuffer();\n const decoder = new TextDecoder(encoding, { fatal: false });\n return decoder.decode(buffer);\n }\n static textToBlob(content, type = 'text/plain', charset = 'utf-8', bom, lossyChar = 0x3F) {\n let charsetLower = charset.toLowerCase();\n const fullType = () => `${type};charset=${charsetLower}`;\n switch (charsetLower) {\n // -------------------------\n // UTF-8 (native, safe)\n // -------------------------\n case 'utf-8': {\n const encoder = new TextEncoder();\n const bytes = encoder.encode(content);\n const parts = bom\n ? [new Uint8Array([0xEF, 0xBB, 0xBF]), bytes]\n : [bytes];\n return new Blob(parts, { type: fullType() });\n }\n // -------------------------\n // UTF-16 (explicit LE/BE)\n // -------------------------\n case 'utf-16':\n // Treat as UTF-16LE with BOM (common convention)\n charsetLower = 'utf-16le';\n bom ??= true;\n case 'utf-16le':\n case 'utf-16be': {\n const littleEndian = charsetLower !== 'utf-16be';\n const offset = bom ? 1 : 0;\n const buffer = new ArrayBuffer((content.length + offset) * 2);\n const view = new DataView(buffer);\n if (bom) {\n view.setUint16(0, 0xFEFF, littleEndian);\n }\n for (let i = 0; i < content.length; i++) {\n view.setUint16((i + offset) * 2, content.charCodeAt(i), littleEndian);\n }\n return new Blob([buffer], {\n type: fullType()\n });\n }\n // -------------------------\n // Latin-1 (ISO-8859-1)\n // -------------------------\n case 'ascii':\n case 'iso-8859-1':\n case 'latin1': {\n const boundary = charsetLower === 'ascii' ? 0x7F : 0xFF;\n const buffer = new Uint8Array(content.length);\n const lossy = lossyChar > 0;\n for (let i = 0; i < content.length; i++) {\n const code = content.charCodeAt(i);\n if (code > boundary) {\n if (lossy) {\n buffer[i] = lossyChar; // ? char\n }\n else {\n throw new Error(`Character \"${content[i]}\" cannot be encoded in ${charset}.`);\n }\n }\n else {\n buffer[i] = code;\n }\n }\n return new Blob([buffer], { type: fullType() });\n }\n // -------------------------\n // Explicitly unsupported\n // -------------------------\n default:\n throw new Error(`Encoding \"${charset}\" is not supported safely in the browser. ` +\n `Use UTF-8 or any supported encoding.`);\n }\n }\n}\n//}\n","//namespace Pacem.Browsers {\n// Function to extract browser version using regex\nconst browserVersion = (userAgent, regex) => {\n const match = userAgent.match(regex);\n return match ? match[2] : null;\n};\n// https://stackoverflow.com/77095874\n/**\n * Detects the browser name and version from a user-agent string.\n * @param userAgent User-agent string to parse (defaults to `navigator.userAgent`).\n * @returns An object with the detected browser `name` (e.g. `Chrome`, `Firefox`, `Safari`, `Edge`, `IE`, `unknown`, ...) and its `version`.\n */\nexport function detect(userAgent = navigator.userAgent) {\n let browser = 'unknown';\n let version = null;\n // Detect browser name\n if (/ucbrowser/i.test(userAgent)) {\n browser = 'UCBrowser';\n }\n else if (/edg/i.test(userAgent)) {\n browser = 'Edge';\n }\n else if (/googlebot/i.test(userAgent)) {\n browser = 'GoogleBot';\n }\n else if (/chromium/i.test(userAgent)) {\n browser = 'Chromium';\n }\n else if (/firefox|fxios/i.test(userAgent) && !/seamonkey/i.test(userAgent)) {\n browser = 'Firefox';\n }\n else if (/; msie|trident/i.test(userAgent) && !/ucbrowser/i.test(userAgent)) {\n browser = 'IE';\n }\n else if (/chrome|crios/i.test(userAgent) && !/opr|opera|chromium|edg|ucbrowser|googlebot/i.test(userAgent)) {\n browser = 'Chrome';\n }\n else if (/safari/i.test(userAgent) && !/chromium|edg|ucbrowser|chrome|crios|opr|opera|fxios|firefox/i.test(userAgent)) {\n browser = 'Safari';\n }\n else if (/opr|opera/i.test(userAgent)) {\n browser = 'Opera';\n }\n // Detect browser version\n switch (browser) {\n case 'UCBrowser':\n version = browserVersion(userAgent, /(ucbrowser)\\/([\\d\\.]+)/i);\n break;\n case 'Edge':\n version = browserVersion(userAgent, /(edge|edga|edgios|edg)\\/([\\d\\.]+)/i);\n break;\n case 'GoogleBot':\n version = browserVersion(userAgent, /(googlebot)\\/([\\d\\.]+)/i);\n break;\n case 'Chromium':\n version = browserVersion(userAgent, /(chromium)\\/([\\d\\.]+)/i);\n break;\n case 'Firefox':\n version = browserVersion(userAgent, /(firefox|fxios)\\/([\\d\\.]+)/i);\n break;\n case 'Chrome':\n version = browserVersion(userAgent, /(chrome|crios)\\/([\\d\\.]+)/i);\n break;\n case 'Safari':\n version = browserVersion(userAgent, /(safari)\\/([\\d\\.]+)/i);\n break;\n case 'Opera':\n version = browserVersion(userAgent, /(opera|opr)\\/([\\d\\.]+)/i);\n break;\n case 'IE': {\n const tridentVersion = browserVersion(userAgent, /(trident)\\/([\\d\\.]+)/i);\n // IE version is mapped using Trident version\n // IE/8.0 = Trident/4.0, IE/9.0 = Trident/5.0\n version = tridentVersion ? `${parseFloat(tridentVersion) + 4.0}` : '7.0';\n break;\n }\n default:\n version = '0.0.0.0';\n break;\n }\n return { name: browser, version };\n}\n//}\n","//namespace Pacem {\nimport { NullChecker } from \"./null-checker\";\nconst HSL_PATTERN = /^hsl\\s*\\(\\s*([\\d\\.]+)\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)%\\s*\\)$/;\nconst HSLA_PATTERN = /^hsla\\s*\\(\\s*([\\d\\.]+)\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)\\)$/;\nconst RGB_PATTERN = /^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/;\nconst RGBA_PATTERN = /^rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d\\.]+)\\)$/;\nconst HEX_PATTERN = /^#[a-f0-9]{6}$/;\nconst HEX_SHORT_PATTERN = /^#[a-f0-9]{3}$/;\n;\n;\n;\nfunction isRgb(clr) {\n const base = !NullChecker.isNullOrEmpty(clr) && typeof clr === 'object' && 'r' in clr && 'g' in clr && 'b' in clr // && 'a' in clr\n && typeof clr.r === 'number' && typeof clr.b === 'number' && typeof clr.g === 'number' // && typeof clr.a === 'number'\n ;\n if (!base) {\n return false;\n }\n clr.a ??= 1;\n return clr.r >= 0 && clr.r <= 1\n && clr.g >= 0 && clr.g <= 1\n && clr.b >= 0 && clr.b <= 1\n && clr.a >= 0 && clr.a <= 1;\n}\nfunction isHsl(clr) {\n const base = !NullChecker.isNullOrEmpty(clr) && typeof clr === 'object' && 'h' in clr && 's' in clr && 'l' in clr // && 'a' in clr\n && typeof clr.h === 'number' && typeof clr.s === 'number' && typeof clr.l === 'number' // && typeof clr.a === 'number'\n ;\n if (!base) {\n return false;\n }\n clr.a ??= 1;\n return clr.h >= 0 && clr.h <= 360\n && clr.s >= 0 && clr.s <= 1\n && clr.l >= 0 && clr.l <= 1\n && clr.a >= 0 && clr.a <= 1;\n}\nfunction luminance(rgb) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const l = .5 * (Math.max(r, g, b) + Math.min(r, g, b));\n return l.clamp(0, 1);\n}\nconst cieUtils = {\n adjustRgbChannel: (v) => {\n // sRGB => sR'G'B'\n return v <= .03928 ? (v / 12.92) : Math.pow((v + .055) / 1.055, 2.4);\n },\n adjustRgbChannelInv: (v) => {\n // sR'G'B' => sRGB\n return v <= .00304 ? (v * 12.92) : 1.055 * (Math.pow(v, 1 / 2.4) - .055);\n },\n adjustRgb: (rgb) => {\n const rgbOut = { r: cieUtils.adjustRgbChannel(rgb.r), g: cieUtils.adjustRgbChannel(rgb.g), b: cieUtils.adjustRgbChannel(rgb.b), a: rgb.a };\n return rgbOut;\n },\n adjustRgbInv: (rgb) => {\n const rgbOut = { r: cieUtils.adjustRgbChannelInv(rgb.r), g: cieUtils.adjustRgbChannelInv(rgb.g), b: cieUtils.adjustRgbChannelInv(rgb.b), a: rgb.a };\n return rgbOut;\n },\n X: (adjustedRgb) => {\n return .4125 * adjustedRgb.r + .3576 * adjustedRgb.g + .1804 * adjustedRgb.b;\n },\n Y: (adjustedRgb) => {\n // https://www.w3.org/TR/WCAG20/#relativeluminancedef\n return .2126 * adjustedRgb.r + .7152 * adjustedRgb.g + .0722 * adjustedRgb.b;\n },\n Z: (adjustedRgb) => {\n return .0193 * adjustedRgb.r + .1191 * adjustedRgb.g + .9503 * adjustedRgb.b;\n },\n relativeLuminance: (rgb) => {\n const adjRgb = cieUtils.adjustRgb(rgb);\n return cieUtils.Y(adjRgb);\n },\n rgbToCieXYZ: (rgb) => {\n const adjRgb = cieUtils.adjustRgb(rgb);\n const xyz = { x: cieUtils.X(adjRgb), y: cieUtils.Y(adjRgb), z: cieUtils.Z(adjRgb), a: rgb.a };\n return xyz;\n },\n cieXYZToRgb: (xyz) => {\n const r = 3.2410 * xyz.x - 1.5374 * xyz.y - .4986 * xyz.z, g = -.9692 * xyz.x + 1.8760 * xyz.y + .0416 * xyz.z, b = .0556 * xyz.x - .2040 * xyz.y + 1.0570 * xyz.z;\n return cieUtils.adjustRgbInv({ r, g, b, a: xyz.a });\n },\n /**\n * Returns the contrast ratio between two colors.\n * @param rgb1 Color 1\n * @param rgb2 Color 2\n * @returns A numeric value between 1 and 21.\n */\n contrastRatio: (rgb1, rgb2) => {\n // https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n const l1 = cieUtils.relativeLuminance(rgb1) + .05, l2 = cieUtils.relativeLuminance(rgb2) + .05;\n return l1 > l2 ?\n l1 / l2\n :\n l2 / l1;\n }\n};\nfunction saturation(rgb, l) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const s = (l === 0 || l === 1) ? 0 : (max - min) / (1 - Math.abs(2 * l - 1));\n return s.clamp(0, 1);\n}\n/**\n * Preucil 'hexagon' algorithm.\n * @param rgb\n */\nfunction hueHexagon(rgb) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const deg = Math.atan2(Math.sqrt(3) * (g - b), 2 * r - g - b) * 180 / Math.PI;\n return (deg + 360) % 360;\n}\n/**\n * Preucil 'circle' algorithm.\n * @param rgb\n */\nfunction hueCircle(rgb) {\n const r = rgb.r, g = rgb.g, b = rgb.b;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let hue = 0;\n if (max !== min) {\n if (max === r) {\n hue = (60 * ((g - b) / (max - min)) + 360) % 360;\n }\n else if (max === g) {\n hue = (60 * ((b - r) / (max - min)) + 120) % 360;\n }\n else {\n hue = (60 * ((r - g) / (max - min)) + 240) % 360;\n }\n }\n return hue.clamp(0, 360);\n}\nfunction hexify(v) {\n return v.toString(16).padStart(2, '0');\n //return Pacem.Strings.leftPad(v.toString(16), 2, '0');\n}\n/** Color parsing, conversion (RGB/HSL/CIE XYZ) and manipulation utilities. */\nexport class Colors {\n /** Minimum WCAG contrast ratio recommended for large-scale text/graphical objects. */\n static { this.WCAG_MINIMUM_CONTRAST = 3.0; }\n /** Minimum WCAG (AA) contrast ratio recommended for normal-sized text. */\n static { this.WCAG_NORMAL_TEXT_CONTRAST = 4.5; }\n /** Minimum WCAG (AAA) contrast ratio recommended for enhanced accessibility. */\n static { this.WCAG_SAFE_CONTRAST = 7.0; }\n static _clampRGB(rgb) {\n const clmp = (n) => Math.min(1.0, Math.max(0, n));\n if (rgb[3] == null) {\n rgb[3] = 1.0;\n }\n return { r: clmp(rgb[0]), g: clmp(rgb[1]), b: clmp(rgb[2]), a: Math.min(1, Math.max(0, rgb[3])) };\n }\n static _normalize(rgb) {\n return [rgb[0] / 255.0, rgb[1] / 255.0, rgb[2] / 255.0, rgb[3]];\n }\n /**\n * Parses a CSS color string (`rgb()`, `rgba()`, `#rrggbb`, `#rgb`, `hsl()` or `hsla()`) into an {@link Rgba} value.\n * @param clr CSS color string.\n * @returns The parsed color, or `undefined` if the string does not match any supported format.\n */\n static parse(clr) {\n clr = (clr || '').toLowerCase();\n /* rgb(255,255,255) */\n if (RGB_PATTERN.test(clr)) {\n let rgbArr = RGB_PATTERN.exec(clr);\n return this._clampRGB(this._normalize([parseInt(rgbArr[1]), parseInt(rgbArr[2]), parseInt(rgbArr[3]), 1]));\n }\n /* rgba(255,255,255,.5) */\n if (RGBA_PATTERN.test(clr)) {\n let rgbArr = RGBA_PATTERN.exec(clr);\n return this._clampRGB(this._normalize([parseInt(rgbArr[1]), parseInt(rgbArr[2]), parseInt(rgbArr[3]), parseFloat(rgbArr[4])]));\n }\n /* #ffffff */\n if (HEX_PATTERN.test(clr)) {\n let hex = HEX_PATTERN.exec(clr)[0];\n return this._clampRGB(this._normalize([parseInt('0x' + hex.substr(1, 2)), parseInt('0x' + hex.substr(3, 2)), parseInt('0x' + hex.substr(5, 2)), 1]));\n }\n /* #fff */\n if (HEX_SHORT_PATTERN.test(clr)) {\n let hex = HEX_SHORT_PATTERN.exec(clr)[0];\n let r = hex.substr(1, 1), g = hex.substr(2, 1), b = hex.substr(3, 1);\n return this._clampRGB(this._normalize([parseInt('0x' + r + r), parseInt('0x' + g + g), parseInt('0x' + b + b), 1]));\n }\n /* hsl(0,60%,100%) */\n if (HSL_PATTERN.test(clr)) {\n let hslArr = HSL_PATTERN.exec(clr);\n const hsl = { h: parseFloat(hslArr[1]), s: parseFloat(hslArr[2]) * .01, l: parseFloat(hslArr[3]) * .01 };\n return this.rgb(hsl);\n }\n /* hsla(0,40%,50%,.5) */\n if (HSLA_PATTERN.test(clr)) {\n let hslaArr = HSLA_PATTERN.exec(clr);\n const hsla = { h: parseFloat(hslaArr[1]), s: parseFloat(hslaArr[2]) * .01, l: parseFloat(hslaArr[3]) * .01, a: parseFloat(hslaArr[4]) };\n return this.rgb(hsla);\n }\n }\n /**\n * Converts an {@link Rgba} color into its {@link Hsla} equivalent.\n * @param rgb Color to convert.\n * @returns The converted color.\n */\n static hsl(rgb) {\n const l = luminance(rgb), s = saturation(rgb, l), h = hueCircle(rgb);\n return { h, s, l, a: rgb.a };\n }\n static cieXYZ(clr) {\n if (isHsl(clr)) {\n clr = this.rgb(clr);\n }\n return cieUtils.rgbToCieXYZ(clr);\n }\n static rgb(clr) {\n if (isHsl(clr)) {\n // hsl\n const h = clr.h, s = clr.s, l = clr.l, h6 = h / 60.0;\n const C = (1 - Math.abs(2 * l - 1)) * s;\n const X = C * (1 - Math.abs(h6 % 2 - 1));\n const m = l - C / 2;\n const compose = (r, g, b) => this._clampRGB([r + m, g + m, b + m, clr.a]);\n if (h6 <= 1) {\n return compose(C, X, 0);\n }\n else if (h6 <= 2) {\n return compose(X, C, 0);\n }\n else if (h6 <= 3) {\n return compose(0, C, X);\n }\n else if (h6 <= 4) {\n return compose(0, X, C);\n }\n else if (h6 <= 5) {\n return compose(X, 0, C);\n }\n else if (h6 <= 6) {\n return compose(C, 0, X);\n }\n }\n else {\n // cie XYZ\n const rgb = cieUtils.cieXYZToRgb(clr);\n return this._clampRGB([rgb.r, rgb.g, rgb.b, rgb.a]);\n }\n }\n static stringify(clr, arg1 = 1) {\n if (isHsl(clr)) {\n arg1 ??= 1;\n clr.a ??= 1;\n const precision = typeof arg1 === 'number' ? arg1 : 1;\n return `hsla(${clr.h.roundoff(precision)},${(clr.s * 100).roundoff(precision)}%,${(clr.l * 100).roundoff(precision)}%,${clr.a.roundoff()})`;\n }\n else if (isRgb(clr)) {\n arg1 ??= true;\n clr.a ??= 1;\n const hex = typeof arg1 === 'boolean' ? arg1 : !!arg1, r = Math.round(clr.r * 255), g = Math.round(clr.g * 255), b = Math.round(clr.b * 255), a = clr.a.roundoff();\n if (a === 1) {\n if (hex) {\n return ('#' + hexify(r) + hexify(g) + hexify(b)).toUpperCase();\n }\n return `rgb(${r},${g},${b})`;\n }\n return `rgba(${r},${g},${b},${a})`;\n }\n return undefined;\n }\n /**\n * Contrast ratio betwen two colors (useful for accessibility assessments). Output range: 1 (no-contrast) to 21 (maximum contrast)\n */\n static contrastRatio(clr1, clr2) {\n if (isHsl(clr1)) {\n clr1 = this.rgb(clr1);\n }\n if (isHsl(clr2)) {\n clr2 = this.rgb(clr2);\n }\n return cieUtils.contrastRatio(clr1, clr2);\n }\n /**\n * Returns the relative luminance as of WCAG specs.\n */\n static luminance(clr) {\n if (isHsl(clr)) {\n clr = Colors.rgb(clr);\n }\n return cieUtils.relativeLuminance(clr);\n }\n static lighten(clr, amount = 0.1) {\n amount ||= 0;\n if (isHsl(clr)) {\n const l = Math.min(1, Math.max(0, clr.l + amount));\n return Object.assign({}, clr, { l });\n }\n if (isRgb(clr)) {\n const hsl = this.lighten(this.hsl(clr), amount);\n return this.rgb(hsl);\n }\n return clr;\n }\n static darken(clr, amount = 0.1) {\n return this.lighten(clr, -amount);\n }\n static saturate(clr, amount = 0.1) {\n amount ||= 0;\n if (isHsl(clr)) {\n const s = Math.min(1, Math.max(0, clr.s + amount));\n return Object.assign({}, clr, { s });\n }\n if (isRgb(clr)) {\n const hsl = this.saturate(this.hsl(clr), amount);\n return this.rgb(hsl);\n }\n return clr;\n }\n static desaturate(clr, amount = 0.1) {\n return this.saturate(clr, -amount);\n }\n static interpolate(clr1, clr2, weight1, weight2) {\n weight1 ??= .5;\n weight2 ??= weight1;\n const weight = (weight1 + weight2).roundoff();\n const ratio1 = (weight1 / weight).roundoff(), ratio2 = (weight2 / weight).roundoff();\n const rgb = isRgb(clr1), hsl = isHsl(clr1);\n const toCieXYZ = (c) => {\n if (isRgb(c) || isHsl(c)) {\n return Colors.cieXYZ(c);\n }\n return c;\n };\n clr1 = toCieXYZ(clr1);\n clr2 = toCieXYZ(clr2);\n const clr = {\n x: (clr1.x * ratio1 + clr2.x * ratio2).roundoff(),\n y: (clr1.y * ratio1 + clr2.y * ratio2).roundoff(),\n z: (clr1.z * ratio1 + clr2.z * ratio2).roundoff(),\n a: (clr1.a * ratio1 + clr2.a * ratio2).roundoff(),\n };\n if (rgb) {\n return Colors.rgb(clr);\n }\n if (hsl) {\n return Colors.hsl(Colors.rgb(clr));\n }\n return clr;\n }\n}\n//}\n","import { NullChecker } from \"./null-checker\";\n// 1.7763568394002505e-15 -20.4551920341394 40 40\nconst FLOAT_PATTERN = /[-+]?([\\d]+(\\.[\\d]+(e-[\\d]+)?)?|[\\d]*(\\.[\\d]+(e-[\\d]+)?))/g;\n/**\n * Extracts all the floating point numbers found in a string (e.g. `\"10px 20px\"` => `[10, 20]`).\n * @param input String to parse.\n * @returns Array of the numbers found, in order of appearance.\n */\nexport function parseAsNumericalArray(input) {\n const arr = [];\n let reg = input.match(FLOAT_PATTERN);\n if (reg && reg.length > 0) {\n reg.forEach(i => arr.push(parseFloat(i)));\n }\n return arr;\n}\n/** Angle-related utilities. */\nexport class Angle {\n /**\n * Type-guards a value as a valid {@link Angle} object.\n * @param obj Value to check.\n */\n static isAngle(obj) {\n return typeof obj === 'object'\n && 'vertex' in obj && Point.isPoint(obj['vertex'])\n && 'start' in obj && Point.isPoint(obj['start'])\n && 'end' in obj && Point.isPoint(obj['end']);\n }\n /**\n * Returns the angle span in radians.\n * Clockwise angles are positive, counterclockwise angles are negative.\n */\n static value(angle) {\n if (NullChecker.isNullOrEmpty(angle) || !Angle.isAngle(angle)) {\n return Number.NaN;\n }\n const { vertex, start, end } = angle;\n return Angle.angleBetween(vertex, start, end);\n }\n /**\n * Returns the angle (in radians) given the angle vertex and two points belonging to the rays that combine to build the angle sides.\n * Clockwise angles are positive, counterclockwise angles are negative.\n * @param vertex Angle vertex\n * @param start Point belonging to the start side\n * @param end Point belonging to the end side\n * @returns Angle span in radians [-pi, pi]\n */\n static angleBetween(vertex, start, end) {\n const v1 = { x: start.x - vertex.x, y: start.y - vertex.y }, v2 = { x: end.x - vertex.x, y: end.y - vertex.y };\n const dot = v1.x * v2.x + v1.y * v2.y;\n const cross = v1.x * v2.y - v1.y * v2.x;\n // clockwise positive, ccw negative\n return -Math.atan2(cross, dot);\n }\n}\n;\n/** Size-related utilities. */\nexport class Size {\n /**\n * Parses a string containing exactly two numbers into a {@link Size}.\n * @param sz String to parse (e.g. `\"100 50\"`).\n * @returns The parsed size.\n * @throws If `sz` does not contain exactly two numbers.\n */\n static parse(sz) {\n let arr = parseAsNumericalArray(sz);\n if (arr && arr.length === 2) {\n return { width: arr[0], height: arr[1] };\n }\n throw new Error(`Cannot parse \"${sz}\" as a valid Size.`);\n }\n /**\n * Type-guards a value as a valid {@link Size} object.\n * @param obj Value to check.\n */\n static isSize(obj) {\n return typeof obj === 'object'\n && 'width' in obj && typeof obj['width'] === 'number'\n && 'height' in obj && typeof obj['height'] === 'number';\n }\n}\n/** Point-related utilities. */\nexport class Point {\n /**\n * Parses a string containing exactly two numbers into a {@link Point}.\n * @param pt String to parse (e.g. `\"10 20\"`).\n * @returns The parsed point.\n * @throws If `pt` does not contain exactly two numbers.\n */\n static parse(pt) {\n let arr = parseAsNumericalArray(pt);\n if (arr && arr.length === 2) {\n return { x: arr[0], y: arr[1] };\n }\n throw new Error(`Cannot parse \"${pt}\" as a valid Point.`);\n }\n /**\n * Type-guards a value as a valid {@link Point} object.\n * @param obj Value to check.\n */\n static isPoint(obj) {\n return typeof obj === 'object'\n && 'x' in obj && typeof obj['x'] === 'number'\n && 'y' in obj && typeof obj['y'] === 'number';\n }\n /**\n * Computes the distance between two points.\n * @param p1 Point 1\n * @param p2 Point 2\n */\n static distance(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n }\n /**\n * Subtracts a point p from another and returns the resulting vector.\n * @param p Point to subtract\n * @param from Point to be subtracted from\n */\n static subtract(p, from) {\n return { x: from.x - p.x, y: from.y - p.y };\n }\n /**\n * Adds a set of points together and returns the resulting vector.\n * @param points Points to add\n */\n static add(...points) {\n var point = { x: 0, y: 0 };\n for (var p of points) {\n point.x += p.x;\n point.y += p.y;\n }\n return point;\n }\n /**\n * Memberwise multiplication.\n * @param p Original Point object\n * @param f Factor\n * @returns New Point object.\n */\n static multiply(p, f) {\n return { x: p.x * f, y: p.y * f };\n }\n}\n//}\n","/// <reference path=\"geom.ts\" />\n;\n/** 2D affine matrix ([a b; c d] linear part, [e f] translation) manipulation utilities. */\nexport class Matrix2D {\n /**\n * Returns whether the given matrix is the identity matrix.\n * @param m Matrix to check.\n */\n static isIdentity(m) {\n return m.a === 1 && m.d === 1 && m.b === 0 && m.f === 0 && m.c === 0 && m.e === 0;\n }\n /** Gets a fresh identity matrix. @readonly */\n static get identity() {\n return { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 };\n }\n /**\n * Returns a shallow copy of the given matrix.\n * @param m Matrix to copy.\n */\n static copy(m) {\n return { a: m.a, b: m.b, c: m.c, d: m.d, e: m.e, f: m.f };\n }\n static scale(m, sx, sy = sx) {\n return { a: m.a * sx, b: m.b, c: m.c, d: m.d * sy, e: m.e, f: m.f };\n }\n /**\n * Returns a copy of `m` translated by the given vector.\n * @param m Matrix to translate.\n * @param t Translation vector.\n */\n static translate(m, t) {\n return { a: m.a, b: m.b, c: m.c, d: m.d, e: m.e + t.x, f: m.f + t.y };\n }\n /**\n * Returns a copy of `m` rotated (about the origin) by the given angle.\n * @param m Matrix to rotate.\n * @param rad Rotation angle, in radians.\n */\n static rotate(m, rad) {\n const cos = Math.cos(rad), sin = Math.sin(rad);\n return Matrix2D.multiply(m, { a: cos, b: sin, c: -sin, d: cos, e: 0, f: 0 });\n }\n static multiply(m1, m2) {\n if (\"x\" in m1 && \"y\" in m1) {\n if (typeof m2 === 'number') {\n return { x: m1.x * m2, y: m1.y * m2 };\n }\n else {\n return { x: m1.x * m2.a + m1.y * m2.c + m2.e, y: m1.x * m2.b + m1.y * m2.d + m2.f };\n }\n }\n if (typeof m2 === 'number') {\n return {\n a: m1.a * m2, b: m1.b * m2, c: m1.c * m2, d: m1.d * m2, e: m1.e * m2, f: m1.f * m2\n };\n }\n return {\n a: m1.a * m2.a + m1.b * m2.c,\n b: m1.a * m2.b + m1.b * m2.d,\n c: m1.c * m2.a + m1.d * m2.c,\n d: m1.c * m2.b + m1.d * m2.d,\n e: m1.e * m2.a + m1.f * m2.c + m2.e,\n f: m1.e * m2.b + m1.f * m2.d + m2.f\n };\n }\n /**\n * Computes the determinant of the matrix's linear part.\n * @param m Matrix to compute the determinant of.\n */\n static det(m) {\n return m.a * m.d - m.c * m.b;\n }\n /**\n * Computes the inverse of the given matrix.\n * @param m Matrix to invert.\n * @returns The inverse matrix, or `null` if `m` is singular (determinant is zero).\n */\n static invert(m) {\n const det = this.det(m);\n if (det === 0) {\n // NaM(2D) ? \n return null;\n }\n const invdet = 1 / det;\n /*\n * 1. swap a, d\n * 2. swap c, b and change signs\n * 3. e := -e*d + f*c\n * 4. f := e*b - f*a\n * 5. divide everything by [det]\n */\n return this.multiply({\n a: m.d,\n b: -m.b,\n c: -m.c,\n d: m.a,\n e: -m.e * m.d + m.c * m.f,\n f: m.e * m.b - m.a * m.f\n }, invdet);\n }\n /**\n * Decomposes a matrix into its scale, rotation and translation components.\n * @param m Matrix to decompose.\n * @param transformOrigin Origin about which the rotation/scale are considered to be applied (defaults to `{x:0, y:0}`).\n * @returns The decomposed `scaleX`, `scaleY`, `rotation` (radians) and `translation`.\n */\n static toComponents(m, transformOrigin = { x: 0, y: 0 }) {\n const scaleX = Math.sqrt(m.a * m.a + m.c * m.c);\n const scaleY = Math.sqrt(m.b * m.b + m.d * m.d);\n const cos = scaleX != 0 ? m.a / scaleX : 0;\n const sin = scaleX != 0 ? m.c / scaleX : 0;\n const rotation = Math.atan2(sin, cos);\n const { x: px, y: py } = transformOrigin;\n const translation = {\n x: m.e - px * (scaleX * cos - 1) + py * scaleX * sin,\n y: m.f - py * (scaleY * cos - 1) - px * scaleY * sin,\n };\n return {\n scaleX, scaleY, rotation,\n translation\n };\n }\n /**\n * Returns the matrix that transforms the triangle defined by the points p0, p1, p2 into the triangle defined by the points q0, q1, q2.\n * @param param0 Triangle defined by the points p0, p1, p2 (before transformation).\n * @param param1 Triangle defined by the points q0, q1, q2 (after transformation).\n * @returns Transformation matrix.\n */\n static fromTransform([p0, p1, p2], [q0, q1, q2]) {\n const det = p0.x * (p1.y - p2.y) -\n p0.y * (p1.x - p2.x) +\n (p1.x * p2.y - p2.x * p1.y);\n if (Math.abs(det) < 1e-10) {\n throw new Error(\"Points are collinear; matrix is singular and cannot be solved.\");\n }\n const idet = 1 / det;\n // Matrix inversion of the 3x3 augmented source points\n // then multiplied by the destination points to get rows 1 and 2\n return {\n a: idet * (q0.x * (p1.y - p2.y) + q1.x * (p2.y - p0.y) + q2.x * (p0.y - p1.y)),\n b: idet * (q0.y * (p1.y - p2.y) + q1.y * (p2.y - p0.y) + q2.y * (p0.y - p1.y)),\n c: idet * (q0.x * (p2.x - p1.x) + q1.x * (p0.x - p2.x) + q2.x * (p1.x - p0.x)),\n d: idet * (q0.y * (p2.x - p1.x) + q1.y * (p0.x - p2.x) + q2.y * (p1.x - p0.x)),\n e: idet * (q0.x * (p1.x * p2.y - p2.x * p1.y) +\n q1.x * (p2.x * p0.y - p0.x * p2.y) +\n q2.x * (p0.x * p1.y - p1.x * p0.y)),\n f: idet * (q0.y * (p1.x * p2.y - p2.x * p1.y) +\n q1.y * (p2.x * p0.y - p0.x * p2.y) +\n q2.y * (p0.x * p1.y - p1.x * p0.y))\n };\n }\n /**\n * Returns whether two matrices are equal to each other, within a certain precision (number of decimal digits).\n * @param m1\n * @param m2\n * @param precision\n * @returns\n */\n static areClose(m1, m2, precision = 12) {\n return m1.a.isCloseTo(m2.a, precision)\n && m1.b.isCloseTo(m2.b, precision)\n && m1.c.isCloseTo(m2.c, precision)\n && m1.d.isCloseTo(m2.d, precision)\n && m1.e.isCloseTo(m2.e, precision)\n && m1.f.isCloseTo(m2.f, precision);\n }\n}\n// }\n","import { Matrix2D } from './matrix2d';\nimport { parseAsNumericalArray, Point, Size } from \"./geom\";\n/** Rectangle-related utilities (parsing, transform computation, intersection, bounding box). */\nexport class Rect {\n /**\n * Parses a string containing exactly four numbers into a {@link Rect}.\n * @param rect String to parse (e.g. `\"0 0 100 50\"`, in `x y width height` order).\n * @returns The parsed rect.\n * @throws If `rect` does not contain exactly four numbers.\n */\n static parse(rect) {\n let arr = parseAsNumericalArray(rect);\n if (arr && arr.length === 4) {\n return { x: arr[0], y: arr[1], width: arr[2], height: arr[3] };\n }\n throw new Error(`Cannot parse \"${rect}\" as a valid Rect.`);\n }\n /**\n * Type-guards a value as a valid {@link Rect} object.\n * @param obj Value to check.\n */\n static isRect(obj) {\n return Point.isPoint(obj) && Size.isSize(obj);\n }\n static _stretch(from, to) {\n return { a: to.width / from.width, b: 0, c: 0, d: to.height / from.height, e: to.x - from.x, f: to.y - from.y };\n }\n static _contain(from, to, align, valign) {\n let scale = 1;\n const fromRatio = from.width / from.height, toRatio = to.width / to.height;\n if (fromRatio >= toRatio) {\n // constraining width\n scale = to.width / from.width;\n }\n else {\n // constraining height\n scale = to.height / from.height;\n }\n const w = from.width * scale, h = from.height * scale;\n const translation = this._align({ x: from.x, y: from.y, width: w, height: h }, to, align, valign);\n return Matrix2D.translate({ a: scale, b: 0, c: 0, d: scale, e: 0, f: 0 }, translation);\n }\n static _cover(from, to, align, valign) {\n let scale = 1;\n const fromRatio = from.width / from.height, toRatio = to.width / to.height;\n if (fromRatio < toRatio) {\n // constraining width\n scale = to.width / from.width;\n }\n else {\n // constraining height\n scale = to.height / from.height;\n }\n const w = from.width * scale, h = from.height * scale;\n const translation = this._align({ x: from.x, y: from.y, width: w, height: h }, to, align, valign);\n return Matrix2D.translate({ a: scale, b: 0, c: 0, d: scale, e: 0, f: 0 }, translation);\n }\n static _align(from, to, align, valign) {\n let x = 0, y = 0;\n switch (align) {\n case 'left':\n x = to.x - from.x;\n break;\n case 'right':\n x = (to.x + to.width - from.width) - from.x;\n break;\n default:\n x = (to.x + to.width * .5 - from.width * .5) - from.x;\n break;\n }\n switch (valign) {\n case 'top':\n y = to.y - from.y;\n break;\n case 'bottom':\n y = (to.y + to.height - from.height) - from.y;\n break;\n default:\n y = (to.y + to.height * .5 - from.height * .5) - from.y;\n break;\n }\n return { x, y };\n }\n /**\n * Computes the 2D matrix that transforms one rect into another.\n * @param a Rect from\n * @param b Rect to\n * @param mode Transformation mode\n * @param align Horizontal alignment\n * @param valign Vertical alignment\n */\n static findTransform(a, b, mode = 'stretch', align = 'center', valign = 'middle') {\n switch (mode) {\n case 'contain':\n return this._contain(a, b, align, valign);\n case 'cover':\n return this._cover(a, b, align, valign);\n default:\n return this._stretch(a, b);\n }\n }\n /**\n * Computes the intersection rect among a set of provided rects.\n * @param rects Rects to intersect\n */\n static intersect(...rects) {\n const empty = { x: 0, y: 0, height: 0, width: 0 }, arr = Array.from(rects || []);\n if (arr.length <= 0) {\n return empty;\n }\n var rect = arr[0];\n for (var i = 1; i < arr.length; i++) {\n const r = arr[i];\n const x = Math.max(r.x, rect.x), y = Math.max(r.y, rect.y), xw = Math.min(r.x + r.width, rect.x + rect.width), xh = Math.min(r.y + r.height, rect.y + rect.height), w = xw - x, h = xh - y;\n if (w < 0 || h <= 0) {\n // no intersection\n return empty;\n }\n rect = { x: x, y: y, width: w, height: h };\n }\n return rect;\n }\n static expand(rect, ...args) {\n const arr = Array.from(args || []);\n let x0 = rect.x, y0 = rect.y, x1 = x0, y1 = y0;\n if (Rect.isRect(rect)) {\n x1 += rect.width;\n y1 += rect.height;\n }\n for (let p of arr) {\n x0 = Math.min(p.x, x0);\n y0 = Math.min(p.y, y0);\n x1 = Math.max(p.x, x1);\n y1 = Math.max(p.y, y1);\n }\n return { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };\n }\n}\n//}\n","// namespace Pacem {\n/** Grants undo/redo functionalities for given state. */\nexport class HistoryService {\n /**\n * @param state Initial state.\n * @param maxlength Maximum number of stored states (undo queue + redo stack); unbounded when omitted.\n */\n constructor(state, maxlength) {\n this.#current = state;\n this.#maxlength = maxlength;\n }\n // it's a queue\n #backwards = [];\n // it's a stack\n #forwards = [];\n // max number of items (queue + stack)\n #maxlength;\n #current;\n /**\n * Gets the current state.\n */\n get current() {\n return this.#current;\n }\n /** Gets whether there is a previous state to revert to. @readonly */\n get canUndo() {\n return this.#backwards.length > 0;\n }\n /** Gets whether there is a subsequent state to reapply. @readonly */\n get canRedo() {\n return this.#forwards.length > 0;\n }\n /** Sets the maximum number of stored states, queue + stack.\n */\n set maxlength(v) {\n this.#maxlength = v;\n }\n /** Reverts to the previous state, if any (see {@link canUndo}), moving the current state onto the redo stack. */\n undo() {\n if (this.canUndo) {\n const back = this.#backwards, fore = this.#forwards, current = this.#current;\n fore.unshift(current);\n this.#current = back.pop();\n }\n }\n /** Reapplies the next state, if any (see {@link canRedo}), moving the current state onto the undo queue. */\n redo() {\n if (this.canRedo) {\n const back = this.#backwards, fore = this.#forwards, current = this.#current;\n back.push(current);\n this.#current = fore.shift();\n }\n }\n /**\n * Pushes a new current state, clearing the redo stack and enqueuing the previous current state for undo.\n * Trims the undo queue to `maxlength`, if set.\n * @param state New current state.\n */\n push(state) {\n this.#forwards.splice(0);\n this.#backwards.push(this.#current);\n this.#current = state;\n const max = this.#maxlength, queue = this.#backwards;\n if (max > 0 && queue.length > max) {\n queue.splice(0, queue.length - max);\n }\n }\n /** Clears both the undo queue and the redo stack, leaving the current state untouched. */\n reset() {\n this.#forwards.splice(0);\n this.#backwards.splice(0);\n }\n}\n// }\n","// namespace Pacem {\nimport { Rect } from \"./rect\";\nconst DefaultImagingResizeOptions = {\n mode: 'stretch',\n align: 'center',\n valign: 'middle',\n quality: 1,\n type: 'image/jpeg'\n};\n/** Image loading and resizing utilities, based on `OffscreenCanvas`. */\nexport class Imaging {\n /**\n * Fetches an image from a URL as a `Blob`.\n * @param url URL of the image to load.\n * @returns A promise resolving with the loaded `Blob`, or `null` if the fetch response was not OK.\n */\n static async loadImage(url) {\n const response = await fetch(url);\n if (!response.ok) {\n return null;\n }\n const blob = await response.blob();\n return blob;\n }\n static async resizeImage(img, width, height, options) {\n if (width <= 0 || height <= 0 || isNaN(width) || isNaN(height)) {\n throw new Error('Invalid target size');\n }\n if (typeof img === 'string') {\n img = await Imaging.loadImage(img);\n }\n const el = await self.createImageBitmap(img);\n const origWidth = el.width, origHeight = el.height;\n const cnv = new OffscreenCanvas(origWidth, origHeight);\n const ctx = cnv.getContext('2d');\n ctx.imageSmoothingEnabled =\n ctx['mozImageSmoothingEnabled'] =\n ctx['oImageSmoothingEnabled'] =\n ctx['webkitImageSmoothingEnabled'] =\n true;\n const { quality, type, mode, align, valign, background } = Object.assign({}, DefaultImagingResizeOptions, options ?? {});\n const from = { width: origWidth, height: origHeight, x: 0, y: 0 }, to = { x: 0, y: 0, width, height };\n const transformMatrix = Rect.findTransform(from, to, mode, align, valign);\n cnv.width = width;\n cnv.height = height;\n if (background) {\n ctx.fillStyle = background;\n ctx.fillRect(0, 0, cnv.width, cnv.height);\n }\n ctx.setTransform(transformMatrix);\n ctx.drawImage(el, 0, 0);\n const retval = await cnv.convertToBlob({ quality, type });\n return retval;\n }\n}\n// }\n","// namespace Pacem {\n/** Unique key/id generation utilities. */\nexport class Keys {\n static #seed;\n /**\n * Generates a process-wide monotonically increasing numeric id, seeded from the current timestamp.\n * @returns A new unique numeric id.\n */\n static uniqueId() {\n let seed = Keys.#seed || Date.now();\n return Keys.#seed = ++seed;\n }\n /**\n * Generates a process-wide unique id, base-62 encoded.\n * @returns A new unique string code.\n */\n static uniqueCode() {\n const newid = Keys.uniqueId();\n return newid.toBase62();\n }\n /**\n * Generates a random base-62 string of at least the given length.\n * @param length Minimum length of the generated string.\n * @returns A random string.\n */\n static randomString(length) {\n let retval = '';\n do {\n retval += (Math.random() * 62).toBase62();\n } while (retval.length < length);\n return retval;\n }\n}\n// }\n","// namespace Pacem {\n/** Numeric utilities. */\nexport class Numbers {\n /**\n * Rounds a number to the nearest multiple of `step`.\n * @param x Value to round.\n * @param step Rounding step/increment (defaults to 1).\n * @returns The rounded value.\n */\n static round(x, step = 1.0) {\n return Math.round(x / step) * step;\n }\n /**\n * Computes the logarithm of `x` in an arbitrary `base`.\n * @param x Value to compute the logarithm of.\n * @param base Logarithm base.\n */\n static log(x, base) {\n return Math.log10(x) / Math.log10(base);\n }\n /**\n * Converts a number (or numeric string) from one base to another.\n * @param v Value to convert, expressed in base `from`.\n * @param from Source base (2-36).\n * @param to Target base (2-36).\n * @returns The value re-expressed in base `to`, as a string; `\"NaN\"` if `v` is not a valid number in base `from`.\n */\n static rebase(v, from, to) {\n const vStr = v.toString();\n const firstPass = parseInt(vStr, from);\n if (!vStr.endsWith(firstPass.toString(from))) {\n return Number.NaN.toString();\n }\n return parseInt(v.toString(), from).toString(to);\n }\n}\n//}\n","// namespace Pacem {\nimport { NullChecker } from \"./null-checker\";\n/**\n * Computes the Longest Common Subsequence (LCS) table for two arrays of strings.\n * @param aTokens Array of strings from the first input.\n * @param bTokens Array of strings from the second input.\n * @returns The DP table for LCS lengths.\n */\nfunction lcs(aTokens, bTokens) {\n const m = aTokens.length;\n const n = bTokens.length;\n // Initialize DP table with zeros\n const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));\n // Fill DP table\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (aTokens[i - 1] === bTokens[j - 1]) {\n // Tokens match, increment LCS length\n dp[i][j] = dp[i - 1][j - 1] + 1;\n }\n else {\n // Tokens don't match, take max length from previous states\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n }\n return dp;\n}\n/**\n * Internal diff implementation using backtracking on the LCS DP table.\n * Works on token arrays (characters, words, lines).\n * @param aTokens Array of strings from the first input.\n * @param bTokens Array of strings from the second input.\n * @param dp The precomputed LCS DP table.\n * @param joiner The string to use when joining tokens of the same type (e.g., \"\" for chars, \"\\n\" for lines).\n * For word diffing, joiner is effectively \"\" because whitespace is part of the tokens.\n * @returns An array of DiffTokens representing the differences.\n */\nfunction diffInternal(aTokens, bTokens, dp, joiner = '') {\n const m = aTokens.length;\n const n = bTokens.length;\n const result = [];\n let i = m, j = n;\n let currentToken = null;\n const finalizeToken = () => {\n if (currentToken) {\n result.push(currentToken);\n currentToken = null;\n }\n };\n // Backtrack through the DP table\n while (i > 0 || j > 0) { // Continue until both sequences are fully processed\n var currentType = null;\n let currentValue = null;\n if (i > 0 && j > 0 && aTokens[i - 1] === bTokens[j - 1]) {\n // Common token\n currentType = '=';\n currentValue = aTokens[i - 1];\n i--;\n j--;\n }\n else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n // Token added in b\n currentType = '+';\n currentValue = bTokens[j - 1];\n j--;\n }\n else if (i > 0 && (j === 0 || dp[i - 1][j] > dp[i][j - 1])) {\n // Token removed from a\n currentType = '-';\n currentValue = aTokens[i - 1];\n i--;\n }\n if (currentType && currentValue !== null) {\n if (currentToken && currentToken.type === currentType) {\n // Prepend the value to the existing token\n currentToken.value = currentValue + (currentToken.value ? joiner : '') + currentToken.value;\n }\n else {\n // Finalize the previous token (if different type) and start a new one\n finalizeToken();\n currentToken = { type: currentType, value: currentValue };\n }\n }\n else {\n // Should not happen in standard LCS backtracking, but finalize just in case\n finalizeToken();\n }\n }\n finalizeToken(); // Add the last accumulated token\n return result.reverse(); // Reverse to get the correct order\n}\n/**\n* Performs character-level diffing.\n* @param a The first string.\n* @param b The second string.\n* @returns An array of DiffTokens.\n*/\nfunction diffChars(a, b) {\n const aTokens = a.split(''); // Split into characters\n const bTokens = b.split(''); // Split into characters\n const dp = lcs(aTokens, bTokens);\n // No joiner needed as characters are concatenated directly\n return diffInternal(aTokens, bTokens, dp, '');\n}\n/**\n * Performs word-level diffing, preserving whitespace and line breaks.\n * It tokenizes based on sequences of non-whitespace (\\S+) or whitespace (\\s+).\n * @param a The first string.\n * @param b The second string.\n * @returns An array of DiffTokens.\n */\nfunction diffWords(a, b) {\n // Tokenize into words (\\S+) and whitespace/newlines (\\s+)\n // This preserves the original spacing and line breaks.\n const wordRegex = /(\\S+|\\s+)/g;\n const aTokens = a.match(wordRegex) || [];\n const bTokens = b.match(wordRegex) || [];\n const dp = lcs(aTokens, bTokens);\n // No joiner needed; whitespace tokens handle spacing.\n return diffInternal(aTokens, bTokens, dp, '');\n}\n/**\n * Performs line-level diffing.\n * @param a The first string.\n * @param b The second string.\n * @returns An array of DiffTokens where each token's value can contain multiple lines.\n */\nfunction diffLines(a, b) {\n // Split by newline characters, keeping the EOL character concept separate\n // The result of split does not contain the separators themselves.\n const lineRegex = /\\r?\\n/;\n const aTokens = a.split(lineRegex);\n const bTokens = b.split(lineRegex);\n // Handle potential empty string added by split if text ends with a newline\n // (This behavior is often desired, representing an empty line after the last newline)\n // Example: \"a\\nb\\n\".split(/\\n/) -> [\"a\", \"b\", \"\"]\n const dp = lcs(aTokens, bTokens);\n // Join consecutive lines of the same type with newline characters\n return diffInternal(aTokens, bTokens, dp, '\\n');\n}\n//#endregion\n/** String manipulation utilities. */\nexport class Strings {\n /** @deprecated Use String.prototype.padStart() instead. */\n static leftPad(v, targetLength, padChar) {\n let retval = v.toString();\n return retval.padStart(targetLength, padChar);\n //while (retval.length < targetLength)\n // retval = padChar + retval;\n //return retval;\n }\n /**\n * Formats a template string, replacing `{0}`, `{1}`, ... placeholders with the corresponding arguments.\n * Doubled braces (`{{`/`}}`) escape a placeholder.\n * @param template Template string containing `{n}` placeholders.\n * @param args Values to substitute into the placeholders, by index.\n * @returns The formatted string.\n * @throws If the template references an argument index that was not supplied.\n */\n static format(template, ...args) {\n const array = Array.from(args);\n let retval = template;\n for (let j = 0; j < array.length; j++) {\n const regex = new RegExp('(^|[^\\\\{])\\\\{' + j + '\\\\}($|[^\\\\}])', 'g');\n retval = retval.replaceAll(regex, (match, ...args0) => {\n return match.replace('{' + j + '}', array[j]);\n });\n }\n const check = /(^|[^\\{}])\\{(\\d+)\\}($|[^\\}])/.exec(retval);\n if (!NullChecker.isNullOrEmpty(check)) {\n throw new Error(`Missing argument at index ${check[2]}.`);\n }\n return retval;\n }\n /**\n * Computes a diff between two strings, using the Longest Common Subsequence algorithm.\n * @param a First (original) string.\n * @param b Second (modified) string.\n * @param mode Diffing granularity: `'char'` (default), `'word'` or `'line'`.\n * @returns Array of {@link DiffToken}s describing unchanged, removed and added chunks.\n */\n static diff(a, b, mode = 'char') {\n switch (mode) {\n case 'line':\n return diffLines(a, b);\n case 'word':\n return diffWords(a, b);\n default:\n return diffChars(a, b);\n }\n }\n /**\n * Computes the cryptographic hash of a string using the SubtleCrypto API.\n * @param input String to hash.\n * @param algo Hash algorithm to use (defaults to `SHA-256`).\n * @returns A promise resolving with the hash, hex-encoded.\n */\n static async hash(input, algo = 'SHA-256') {\n const hashBuffer = await crypto.subtle.digest(algo, new TextEncoder().encode(input));\n return Array.from(new Uint8Array(hashBuffer))\n .map(byte => byte.toString(16).padStart(2, '0'))\n .join('');\n }\n}\n// }\n","//namespace Pacem.Compile {\nclass LexerClass {\n tokenize(input, grammar) {\n const tokens = [];\n while (input) {\n const start = input.length;\n for (let rule of grammar) {\n const newTokens = rule.exec(input, /* arguments that ease recursion when needed */ this), length = newTokens?.length;\n if (length > 0) {\n Array.prototype.push.apply(tokens, newTokens);\n const last = newTokens[length - 1];\n input = input.substr((last.index || 0) + last.raw.length);\n break;\n }\n }\n if (input.length >= start) {\n // break infinite loop\n throw new Error(`Cannot parse\\n\"${input}\"\\n using the provided grammar.`);\n }\n }\n return tokens;\n }\n}\n/** Generic tokenize-then-render text parser: lexes input against a grammar, then renders the resulting token tree. */\nexport class Parser {\n /**\n * @param _lexer Lexer implementation to use (defaults to a built-in greedy, rule-ordered lexer).\n */\n constructor(_lexer = new LexerClass()) {\n this._lexer = _lexer;\n }\n /**\n * Tokenizes `input` against `grammar` and renders the resulting token tree.\n * @param input String to parse.\n * @param grammar Ordered list of rules describing the grammar.\n * @param renderer Renderer used to turn the token tree into the output string.\n * @returns The rendered output.\n */\n parse(input, grammar, renderer) {\n const tokens = this._lexer.tokenize(input, grammar);\n return renderer.render(tokens);\n }\n}\n//}\n","//namespace Pacem.Compile.Markdown {\nimport { NullChecker } from \"../../null-checker\";\nimport * as Compile from \"../parser\";\n// #region HELPERS\nfunction htmlEncode(input) {\n return (input ?? '').replace(/</g, '<');\n}\nfunction extractReference(input) {\n if (NullChecker.isNullOrEmpty(input)) {\n return void 0;\n }\n if (/^\\(/.test(input) && /\\)$/.test(input)) {\n return void 0;\n }\n if (/^\\[/.test(input) && /\\]$/.test(input)) {\n input = input.substr(1, input.length - 2);\n }\n return input;\n}\nfunction regexMatchIndex(arr) {\n return arr?.index || void 0;\n}\nfunction extractUrl(input) {\n if (NullChecker.isNullOrEmpty(input)) {\n return void 0;\n }\n if (/^\\[/.test(input) && /\\]$/.test(input)) {\n return void 0;\n }\n if (/^\\(/.test(input) && /\\)$/.test(input)) {\n input = input.substr(1, input.length - 2);\n }\n return input;\n}\nfunction normalizeReference(input) {\n return input?.replace(/[^\\w]+/g, ' ').trim().replace(/ +/g, '-').toLowerCase();\n}\nfunction match(input, pattern, fn) {\n const arr = pattern.exec(input);\n if (arr && arr.length) {\n return fn(arr);\n }\n return null;\n}\n// #endregion\nconst COMMENT = /(<!--)([\\s\\S]*?)(-->|$)/;\nconst HR = /^ {0,3}(={3,}|_{3,}|-{3,})(\\r?\\n|$)/;\nconst HEADING = /^ {0,3}(#{1,6})\\s+([^\\n]+)(\\r?\\n|$)+/;\nconst HEADING1 = /^ {0,3}([^\\n]+)(\\r?\\n=+(\\r?\\n|$))+/;\nconst HEADING2 = /^ {0,3}([^\\n]+)(\\r?\\n-+(\\r?\\n|$))+/;\nconst CODEBLOCK = /^ {4,}.+(\\r?\\n {4,}.+)*(\\r?\\n|$)+/;\nconst FENCES = /^ {0,3}``` *([^\\n]*)\\r?\\n(([\\s\\S](?!\\r?\\n {0,3}```))*.(\\r?\\n)+) {0,3}```(\\r?\\n|$)+/;\nconst BLOCKQUOTE = /^ {0,3}> *([^\\n]+)(\\r?\\n {0,3}> *([^\\n]*))*(\\r?\\n|$)+/;\nconst ULIST = /^( {0,3}([-+]).*\\r?\\n|$)((?!(?: {0,3}(?:\\d+[.\\)]|\\r?\\n\\S))).*(\\r?\\n|$))*/;\nconst OLIST = /^( {0,3}(\\d+[.\\)]).*\\r?\\n|$)((?!(?: {0,3}(?:[+-]|\\r?\\n\\S))).*(\\r?\\n|$))*/;\nconst LISTITEM = /^(?:[-+*]|\\d+[.\\)])/m;\nconst PARAGRAPH = /^(?! {4,})(.+(\\n(?! {0,3}```)(?! {0,3}([-+]|\\d+[.\\)]))(?! {4,})(?! {0,3}>).+)*)/;\nconst REF = /^ {0,3}(!?)\\[([^\\]]+)\\]: +(\\S+)(?: +['\"\\(](.+)['\"\\)])?(\\r?\\n|$)+/;\nconst IMAGE_OR_LINK = /!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?(\\[[^\\[\\]]*\\]|\\([^\\(\\)]*\\))?/;\nconst EMPHASIZED_LINK = /(\\*\\*?|__?)(\\[[^\\]]*]\\([^\\)]+\\))\\1/;\nconst CODE = /(?:(?<!\\\\)`)(.+?)(?:(?<!\\\\)`)/;\nconst EMPHASIZE = /(\\*\\*?|__?)((?!\\1\\s?)(?:(?!\\1)[\\S\\s])*[^\\s])\\1/;\nconst STRIKE = /(~~?|__?)(?!\\1\\s?)([^\\s][\\s\\S]*?(?!\\1)[^\\s])\\1/;\nconst QUOTE = /(:\")(?!\":\\s?)([^\\s][\\s\\S]*?(?!\":)[^\\s])\":/;\nconst SPACE = /^\\s+/;\nconst LINEBREAK = / {2,}\\r?\\n/;\nconst TEXT = /^[^\\r\\n]+/;\nvar MARKDOWN_TYPES;\n(function (MARKDOWN_TYPES) {\n MARKDOWN_TYPES[\"Html\"] = \"html\";\n MARKDOWN_TYPES[\"Text\"] = \"text\";\n MARKDOWN_TYPES[\"Paragraph\"] = \"paragraph\";\n MARKDOWN_TYPES[\"BlockQuote\"] = \"blockquote\";\n MARKDOWN_TYPES[\"Space\"] = \"space\";\n MARKDOWN_TYPES[\"Heading\"] = \"heading\";\n MARKDOWN_TYPES[\"Bold\"] = \"bold\";\n MARKDOWN_TYPES[\"Italic\"] = \"italic\";\n MARKDOWN_TYPES[\"CodeBlock\"] = \"codeblock\";\n MARKDOWN_TYPES[\"Code\"] = \"code\";\n MARKDOWN_TYPES[\"Image\"] = \"img\";\n MARKDOWN_TYPES[\"ImageLike\"] = \"imglike\";\n MARKDOWN_TYPES[\"Link\"] = \"link\";\n MARKDOWN_TYPES[\"LinkLike\"] = \"linklike\";\n MARKDOWN_TYPES[\"LineBreak\"] = \"br\";\n MARKDOWN_TYPES[\"StrikeThrough\"] = \"strike\";\n MARKDOWN_TYPES[\"Quote\"] = \"quote\";\n MARKDOWN_TYPES[\"HorizontalRule\"] = \"hr\";\n MARKDOWN_TYPES[\"OrderedList\"] = \"ol\";\n MARKDOWN_TYPES[\"UnorderedList\"] = \"ul\";\n MARKDOWN_TYPES[\"ListItem\"] = \"listitem\";\n MARKDOWN_TYPES[\"Reference\"] = \"ref\";\n})(MARKDOWN_TYPES || (MARKDOWN_TYPES = {}));\nvar MARKDOWN_RULES;\n(function (MARKDOWN_RULES) {\n MARKDOWN_RULES[MARKDOWN_RULES[\"Comment\"] = 0] = \"Comment\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Reference\"] = 1] = \"Reference\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"HorizontalRule\"] = 2] = \"HorizontalRule\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Heading\"] = 3] = \"Heading\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Heading1\"] = 4] = \"Heading1\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Heading2\"] = 5] = \"Heading2\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"CodeBlock\"] = 6] = \"CodeBlock\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Fences\"] = 7] = \"Fences\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"BlockQuote\"] = 8] = \"BlockQuote\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"OrderedList\"] = 9] = \"OrderedList\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"UnorderedList\"] = 10] = \"UnorderedList\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Paragraph\"] = 11] = \"Paragraph\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"EmphasizedLink\"] = 12] = \"EmphasizedLink\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"ImageOrLink\"] = 13] = \"ImageOrLink\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Emphasize\"] = 14] = \"Emphasize\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"StrikeThrough\"] = 15] = \"StrikeThrough\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Quote\"] = 16] = \"Quote\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Code\"] = 17] = \"Code\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"LineBreak\"] = 18] = \"LineBreak\";\n // lowest priority\n MARKDOWN_RULES[MARKDOWN_RULES[\"Text\"] = 254] = \"Text\";\n MARKDOWN_RULES[MARKDOWN_RULES[\"Space\"] = 255] = \"Space\";\n})(MARKDOWN_RULES || (MARKDOWN_RULES = {}));\n/**\n * Builds the full Markdown grammar (block + inline rules, comment/reference handling first),\n * optionally merging in caller-supplied {@link ExtraRule}s.\n * @param extra Additional block/inline/code rules to plug into the built-in grammar.\n * @returns Ordered list of {@link Compile.Rule}s ready to be fed to a {@link Compile.Lexer}.\n */\nfunction getGrammar(extra = []) {\n const inert = {\n // comment\n [MARKDOWN_RULES.Comment]: {\n exec: (input, lexer) => match(input, COMMENT, arr => {\n const index = regexMatchIndex(arr);\n const output = [{\n type: MARKDOWN_TYPES.Html, index, raw: arr[0], text: arr[2]\n }];\n if (index > 0) {\n const left = input.substr(0, index), tokens = lexer.tokenize(left, blockRules);\n Array.prototype.unshift.apply(output, tokens);\n }\n return output;\n })\n },\n // reference\n [MARKDOWN_RULES.Reference]: {\n exec: (input) => match(input, REF, arr => {\n const index = regexMatchIndex(arr), raw = arr[0], text = raw, image = arr[1] === '!', id = arr[2], url = arr[3], title = arr[4];\n return [{\n type: MARKDOWN_TYPES.Reference, index, raw, text, id, image, url, title\n }];\n })\n },\n };\n const blockExtra = [], inlineExtra = [], codeExtra = {};\n for (let r of extra) {\n let rule, type = 'inline';\n if ('type' in r) {\n type = r.type;\n rule = r.rule;\n }\n else {\n rule = r;\n }\n switch (type) {\n case 'block':\n blockExtra.push(rule);\n break;\n case 'code':\n if ('lang' in r) {\n const key = r.lang.toLowerCase();\n (codeExtra[key] = codeExtra[key] || []).push(rule);\n }\n break;\n default:\n const inlineRule = {\n exec: (input, lexer) => {\n const output = rule.exec(input, lexer);\n inPlaceInlineExec(input, output, lexer);\n return output;\n }\n };\n inlineExtra.push(inlineRule);\n break;\n }\n }\n // #region INLINE\n const inlinelowpriority = {\n // text\n [MARKDOWN_RULES.Text]: {\n exec: (input) => match(input, TEXT, arr => {\n const raw = arr[0], text = raw;\n return [{\n index: regexMatchIndex(arr), raw, text, type: MARKDOWN_TYPES.Text\n }];\n })\n },\n // sparse lines\n [MARKDOWN_RULES.Space]: {\n exec: (input) => match(input, SPACE, arr => {\n const raw = arr[0];\n return [{\n type: MARKDOWN_TYPES.Space, raw, text: raw\n }];\n })\n }\n };\n const inline = {\n // link/image\n [MARKDOWN_RULES.ImageOrLink]: {\n exec: (input, lexer) => inlineMatch(input, IMAGE_OR_LINK, lexer, arr => {\n const index = regexMatchIndex(arr), raw = arr[0], image = raw.charAt(0) === '!', text = arr[1], url = extractUrl(arr[2]), ref = normalizeReference(extractReference(arr[2]) ?? text);\n if (image) {\n return [{\n index, type: url ? MARKDOWN_TYPES.Image : MARKDOWN_TYPES.ImageLike,\n raw, text, src: url, ref,\n tokens: lexer.tokenize(text, inlineRules)\n }];\n }\n else {\n return [{\n index, type: url ? MARKDOWN_TYPES.Link : MARKDOWN_TYPES.LinkLike,\n raw, text, href: url, ref,\n tokens: lexer.tokenize(text, inlineRules)\n }];\n }\n })\n },\n // code\n [MARKDOWN_RULES.Code]: {\n exec: (input, lexer) => inlineMatch(input, CODE, lexer, arr => {\n const text = htmlEncode(arr[1]);\n return [{\n type: MARKDOWN_TYPES.Code, raw: arr[0], text, index: regexMatchIndex(arr)\n }];\n })\n },\n // italic/bold link\n [MARKDOWN_RULES.EmphasizedLink]: {\n exec: (input, lexer) => inlineMatch(input, EMPHASIZED_LINK, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = arr[1].length > 1 ? MARKDOWN_TYPES.Bold : MARKDOWN_TYPES.Italic, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // italic/bold\n [MARKDOWN_RULES.Emphasize]: {\n exec: (input, lexer) => inlineMatch(input, EMPHASIZE, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = arr[1].length > 1 ? MARKDOWN_TYPES.Bold : MARKDOWN_TYPES.Italic, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // strike\n [MARKDOWN_RULES.StrikeThrough]: {\n exec: (input, lexer) => inlineMatch(input, STRIKE, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = MARKDOWN_TYPES.StrikeThrough, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // quote\n [MARKDOWN_RULES.Quote]: {\n exec: (input, lexer) => inlineMatch(input, QUOTE, lexer, arr => {\n if (arr.length < 3 || NullChecker.isNullOrEmpty(arr[2])) {\n return null;\n }\n const type = MARKDOWN_TYPES.Quote, text = arr[2];\n return [{\n index: regexMatchIndex(arr),\n type, raw: arr[0], text, tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // line break\n [MARKDOWN_RULES.LineBreak]: {\n exec: (input, lexer) => inlineMatch(input, LINEBREAK, lexer, arr => {\n const raw = arr[0], text = raw;\n return [{\n index: regexMatchIndex(arr), raw, text, type: MARKDOWN_TYPES.LineBreak\n }];\n })\n },\n };\n const inPlaceInlineExec = (input, output, lexer) => {\n const index = output?.length > 0 && output[0].index;\n if (index > 0) {\n const left = input.substr(0, index);\n const tokens = lexer.tokenize(left, inlineRules) || [];\n Array.prototype.unshift.apply(output, tokens);\n }\n };\n const inlineMatch = (input, pattern, lexer, fn) => {\n const output = match(input, pattern, arr => {\n if (pattern != CODE) {\n // prioritize code\n const codeCheck = CODE.exec(input);\n if (codeCheck\n && codeCheck.length\n && codeCheck.index < arr.index\n // && (codeCheck.index + codeCheck[0].length) > arr.index\n ) {\n return null;\n }\n }\n return fn(arr);\n });\n inPlaceInlineExec(input, output, lexer);\n return output;\n };\n const inlineRules = Object.values(inline);\n Array.prototype.push.apply(inlineRules, inlineExtra);\n inlineRules.push(inlinelowpriority[MARKDOWN_RULES.Text], inlinelowpriority[MARKDOWN_RULES.Space]);\n // #endregion\n // #region CODE\n const getLangGrammar = (lang) => {\n const retval = [inlinelowpriority[MARKDOWN_RULES.Text], inlinelowpriority[MARKDOWN_RULES.Space]];\n const key = lang?.toLowerCase() || '';\n if (key && key in codeExtra) {\n Array.prototype.unshift.apply(retval, codeExtra[key]);\n }\n return retval;\n };\n // #endregion\n // #region BLOCK\n const lowpriority = {\n // paragraph\n [MARKDOWN_RULES.Paragraph]: {\n exec: (input, lexer) => match(input, PARAGRAPH, arr => {\n const raw = arr[0], text = raw;\n return [{\n type: MARKDOWN_TYPES.Paragraph, raw, text,\n // recursion (inline rules only)\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // sparse lines\n [MARKDOWN_RULES.Space]: inlinelowpriority[MARKDOWN_RULES.Space]\n };\n const tokenizeListItem = (text, lexer) => {\n const grammar = !/^ {0,3}(`{3,}|$|>|[+-]\\s|\\d+[.\\)])/m.test(text) ? inlineRules : blockRules;\n return lexer.tokenize(text, grammar);\n };\n const block = {\n // hr\n [MARKDOWN_RULES.HorizontalRule]: {\n exec: (input, lexer) => match(input, HR, arr => {\n const raw = arr[0], text = raw;\n return [{\n type: MARKDOWN_TYPES.HorizontalRule, raw, text\n }];\n })\n },\n // headings\n [MARKDOWN_RULES.Heading]: {\n exec: (input, lexer) => match(input, HEADING, arr => {\n const text = arr[2];\n return [{\n type: MARKDOWN_TYPES.Heading, raw: arr[0], text, level: arr[1].length, ref: normalizeReference(text),\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n [MARKDOWN_RULES.Heading1]: {\n exec: (input, lexer) => match(input, HEADING1, arr => {\n const text = arr[1];\n return [{\n type: MARKDOWN_TYPES.Heading, raw: arr[0], text, level: 1, ref: normalizeReference(text),\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n [MARKDOWN_RULES.Heading2]: {\n exec: (input, lexer) => match(input, HEADING2, arr => {\n const text = arr[1];\n return [{\n type: MARKDOWN_TYPES.Heading, raw: arr[0], text, level: 2, ref: normalizeReference(text),\n tokens: lexer.tokenize(text, inlineRules)\n }];\n })\n },\n // codeblock\n [MARKDOWN_RULES.CodeBlock]: {\n exec: (input, lexer) => match(input, CODEBLOCK, arr => {\n const raw = arr[0], text = htmlEncode(raw);\n return [{\n type: MARKDOWN_TYPES.CodeBlock, raw, text,\n tokens: lexer.tokenize(text, [])\n }];\n })\n },\n // codeblock\n [MARKDOWN_RULES.Fences]: {\n exec: (input, lexer) => match(input, FENCES, arr => {\n const text = htmlEncode(arr[2]), lang = arr[1]?.toLowerCase();\n return [{\n type: MARKDOWN_TYPES.CodeBlock, raw: arr[0], text, lang,\n tokens: lexer.tokenize(text, getLangGrammar(lang))\n }];\n })\n },\n // blockquote\n [MARKDOWN_RULES.BlockQuote]: {\n exec: (input, lexer) => match(input, BLOCKQUOTE, arr => {\n const raw = arr[0], text = raw.replace(/^ {0,3}> */gm, '');\n return [{\n type: MARKDOWN_TYPES.BlockQuote, raw, text,\n // recursion\n tokens: lexer.tokenize(text, [\n lowpriority[MARKDOWN_RULES.Paragraph],\n lowpriority[MARKDOWN_RULES.Space]\n ])\n }];\n })\n },\n // lists\n [MARKDOWN_RULES.OrderedList]: {\n exec: (input, lexer) => match(input, OLIST, arr => {\n const raw = arr[0], items = raw.replace(/^ {0,3}/gm, '').split(LISTITEM).filter(i => !NullChecker.isNullOrEmpty(i)).map(i => i.trim());\n return [{\n type: MARKDOWN_TYPES.OrderedList, start: parseInt(/\\d/.exec(arr[0])[0]), raw, text: raw, tokens: items.map(i => {\n // avoid paragraphs if not strictly needed\n return {\n type: MARKDOWN_TYPES.ListItem, raw: i, text: i, tokens: tokenizeListItem(i, lexer)\n };\n })\n }];\n })\n },\n [MARKDOWN_RULES.UnorderedList]: {\n exec: (input, lexer) => match(input, ULIST, arr => {\n const raw = arr[0], items = raw.replace(/^ {0,3}/gm, '').split(LISTITEM).filter(i => !NullChecker.isNullOrEmpty(i)).map(i => i.trim());\n return [{\n type: MARKDOWN_TYPES.UnorderedList, raw, text: raw, tokens: items.map(i => {\n return {\n type: MARKDOWN_TYPES.ListItem, raw: i, text: i, tokens: tokenizeListItem(i, lexer)\n };\n })\n }];\n })\n }\n };\n const blockRules = Object.values(block);\n Array.prototype.push.apply(blockRules, blockExtra);\n blockRules.push(lowpriority[MARKDOWN_RULES.Paragraph], lowpriority[MARKDOWN_RULES.Space]);\n // #endregion\n return [\n // comment first\n inert[MARKDOWN_RULES.Comment],\n inert[MARKDOWN_RULES.Reference]\n ].concat(\n // block rules contain recursive inline rules (at least)\n blockRules);\n}\n// #region HTML RENDERER HELPER\n// meant to help in unnecessary spaces replacement.\nconst CARRIAGE_RETURN_PLACEHOLDER = '\\0';\nconst TRIM_INSIDE = /[ \\r\\n]*\\0+[ \\r\\n]*/g;\nfunction trim(input) {\n return input?.replace(TRIM_INSIDE, '\\n').trim();\n}\n// #endregion\n/** Renders a Markdown token tree, as produced by the grammar returned by {@link getGrammar}, into HTML markup. */\nclass HtmlRenderer {\n constructor(_extraItemRender = (token, __) => token?.text || '') {\n this._extraItemRender = _extraItemRender;\n this._renderContent = (token) => {\n const children = token.tokens;\n if (NullChecker.isNullOrEmpty(children)) {\n return token.text;\n }\n return this._render(children);\n };\n }\n _rendeItem(token, allTokens) {\n const r = this._renderContent, R = CARRIAGE_RETURN_PLACEHOLDER;\n switch (token?.type) {\n case MARKDOWN_TYPES.Reference:\n return '';\n case MARKDOWN_TYPES.Html:\n return token.raw;\n case MARKDOWN_TYPES.BlockQuote:\n return `<blockquote>\\n${r(token)}</blockquote>${R}`;\n case MARKDOWN_TYPES.Bold:\n return `<b>${r(token)}</b>`;\n case MARKDOWN_TYPES.CodeBlock:\n const lang = token['lang'];\n return `<pre>${R}<code${(lang ? (' class=\"' + lang + '\"') : '')}>${r(token)}</code>${R}</pre>${R}`;\n case MARKDOWN_TYPES.Code:\n return `<code>${r(token)}</code>`;\n case MARKDOWN_TYPES.HorizontalRule:\n return `<hr />${R}`;\n case MARKDOWN_TYPES.Heading:\n const hlevel = token['level'], hid = token['ref'];\n return `<h${hlevel} id=\"${hid}\">${r(token)}</h${hlevel}>${R}`;\n case MARKDOWN_TYPES.Image:\n case MARKDOWN_TYPES.ImageLike:\n const itk = token;\n let isrc = itk.src, ititle = '';\n const alt = itk.text, iref = itk.ref;\n if (!isrc && iref) {\n const ireftk = allTokens.find(t => t.type === MARKDOWN_TYPES.Reference && t['image'] === true && t['id']?.toLowerCase() === iref.toLowerCase());\n if (ireftk) {\n isrc = ireftk.url;\n ititle = ireftk.title ?? '';\n }\n }\n return isrc ? `<img src=\"${isrc}\" alt=\"${alt}\"${(ititle ? (' title=\"' + ititle + '\"') : '')} />` : `![${r(token)}]`;\n case MARKDOWN_TYPES.Italic:\n return `<i>${r(token)}</i>`;\n case MARKDOWN_TYPES.StrikeThrough:\n return `<s>${r(token)}</s>`;\n case MARKDOWN_TYPES.Quote:\n return `<q>${r(token)}</q>`;\n case MARKDOWN_TYPES.LineBreak:\n return '<br />' + R;\n case MARKDOWN_TYPES.OrderedList:\n return `<ol start=\"${token['start']}\">\\n${r(token)}</ol>${R}`;\n case MARKDOWN_TYPES.UnorderedList:\n return `<ul>\\n${r(token)}</ul>${R}`;\n case MARKDOWN_TYPES.ListItem:\n return `\\t<li>${r(token)}</li>${R}`;\n case MARKDOWN_TYPES.Link:\n case MARKDOWN_TYPES.LinkLike:\n const atk = token;\n let ahref = atk.href, atitle = '';\n const aref = atk.ref;\n if (!ahref && aref) {\n const areftk = allTokens.find(t => t.type === MARKDOWN_TYPES.Reference && t['image'] !== true && t['id']?.toLowerCase() === aref.toLowerCase());\n if (areftk) {\n ahref = areftk.url;\n atitle = areftk.title ?? '';\n }\n }\n return ahref ? `<a href=\"${ahref}\"${(atitle ? (' title=\"' + atitle + '\"') : '')}>${r(token)}</a>` : `[${r(token)}]`;\n case MARKDOWN_TYPES.Paragraph:\n return `<p>${r(token)}</p>${R}`;\n case MARKDOWN_TYPES.Text:\n case MARKDOWN_TYPES.Space:\n return token.text;\n }\n return this._extraItemRender(token, allTokens);\n }\n _render(tree) {\n let acc = '';\n for (let token of tree || []) {\n acc += this._rendeItem(token, tree);\n }\n return acc;\n }\n render(tree) {\n return trim(this._render(tree));\n }\n}\n/** Renders a Markdown token tree as a JSON array of tokens, mainly useful for debugging/inspection. */\nclass TokenRenderer {\n _render(token) {\n return NullChecker.isNullOrEmpty(token) ? '' : JSON.stringify(token);\n }\n render(tree) {\n return '[' + tree.filter(i => !NullChecker.isNullOrEmpty(i)).map(this._render).join(',') + ']';\n }\n}\nfunction isRenderer(obj) {\n return obj && typeof obj === 'object' && typeof obj.render === 'function';\n}\n/** Markdown parser: tokenizes Markdown source and renders it to HTML (or another format via a custom {@link Compile.Renderer}). */\nexport class Parser extends Compile.Parser {\n /**\n * Parses Markdown `input` and renders it to an HTML string.\n * @param input Markdown source.\n * @param extraGrammar Additional grammar rules to extend the built-in Markdown syntax.\n * @param extraItemRenderer Fallback renderer invoked for token types not natively handled (e.g. tokens produced by `extraGrammar`); defaults to returning the token's `text`.\n * @returns The rendered HTML string.\n */\n toHtml(input, extraGrammar, extraItemRenderer) {\n const renderer = new HtmlRenderer(extraItemRenderer);\n if (NullChecker.isNullOrEmpty(extraGrammar)) {\n return this.parse(input, renderer);\n }\n return this.parse(input, getGrammar(extraGrammar), renderer);\n }\n /**\n * Parses Markdown `input` and returns its token tree as a plain (JSON-serializable) array, useful for inspection/debugging.\n * @param input Markdown source.\n * @param extraGrammar Additional grammar rules to extend the built-in Markdown syntax.\n * @returns The parsed token tree.\n */\n tokenize(input, extraGrammar) {\n const json = this.parse(input, getGrammar(extraGrammar), new TokenRenderer());\n return JSON.parse(json);\n }\n parse(input, grammarOrRenderer = getGrammar(), renderer = new HtmlRenderer()) {\n if (isRenderer(grammarOrRenderer)) {\n return super.parse(input, getGrammar(), grammarOrRenderer);\n }\n else {\n return super.parse(input, grammarOrRenderer, renderer);\n }\n }\n}\n//}\n","import * as Output from './index';\nOutput.DeepMerger.merge(Output);\n"],"names":["Compile.Parser","Output.DeepMerger"],"mappings":"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"}
|