{"version":3,"file":"3dsource-utils.mjs","sources":["../../../../projects/3dsource/utils/src/lib/color/CMYKtoRGB.ts","../../../../projects/3dsource/utils/src/lib/color/HEXtoRGB.ts","../../../../projects/3dsource/utils/src/lib/color/rgb.ts","../../../../projects/3dsource/utils/src/lib/color/HSVtoRGB.ts","../../../../projects/3dsource/utils/src/lib/color/hsv.ts","../../../../projects/3dsource/utils/src/lib/color/toRGB.ts","../../../../projects/3dsource/utils/src/lib/color/max.ts","../../../../projects/3dsource/utils/src/lib/color/min.ts","../../../../projects/3dsource/utils/src/lib/color/overlay.ts","../../../../projects/3dsource/utils/src/lib/color/RGBtoCMYK.ts","../../../../projects/3dsource/utils/src/lib/color/RGBtoHEX.ts","../../../../projects/3dsource/utils/src/lib/color/RGBtoHSV.ts","../../../../projects/3dsource/utils/src/lib/color/sub.ts","../../../../projects/3dsource/utils/src/lib/color/subtract.ts","../../../../projects/3dsource/utils/src/lib/color/sum.ts","../../../../projects/3dsource/utils/src/lib/color/toRGBA.ts","../../../../projects/3dsource/utils/src/lib/constants/color-codes.constant.ts","../../../../projects/3dsource/utils/src/lib/constants/document-root.ts","../../../../projects/3dsource/utils/src/lib/csv/CSV2Array.ts","../../../../projects/3dsource/utils/src/lib/csv/CSV2Records.ts","../../../../projects/3dsource/utils/src/lib/csv/ObjectToCSV.ts","../../../../projects/3dsource/utils/src/lib/dev/dev3d.ts","../../../../projects/3dsource/utils/src/lib/strings/pad.ts","../../../../projects/3dsource/utils/src/lib/dev/timeToString.ts","../../../../projects/3dsource/utils/src/lib/predicates/operators.ts","../../../../projects/3dsource/utils/src/lib/predicates/textForSearch.ts","../../../../projects/3dsource/utils/src/lib/predicates/where.ts","../../../../projects/3dsource/utils/src/lib/dev/logger.ts","../../../../projects/3dsource/utils/src/lib/filenaming/cleanupFileName.ts","../../../../projects/3dsource/utils/src/lib/filenaming/makePath.ts","../../../../projects/3dsource/utils/src/lib/filenaming/normalizePath.ts","../../../../projects/3dsource/utils/src/lib/geom/expandOverRectangle.ts","../../../../projects/3dsource/utils/src/lib/geom/fitIntoRectangle.ts","../../../../projects/3dsource/utils/src/lib/image/getCanvasCached.ts","../../../../projects/3dsource/utils/src/lib/image/getSnapshot.ts","../../../../projects/3dsource/utils/src/lib/image/loadImage.ts","../../../../projects/3dsource/utils/src/lib/image/SaveImage.ts","../../../../projects/3dsource/utils/src/lib/helpers/BatchLoader.ts","../../../../projects/3dsource/utils/src/lib/helpers/debounce.ts","../../../../projects/3dsource/utils/src/lib/helpers/KeyboardNumericCode.ts","../../../../projects/3dsource/utils/src/lib/helpers/serialize.ts","../../../../projects/3dsource/utils/src/lib/helpers/save-to-local-drive.ts","../../../../projects/3dsource/utils/src/lib/helpers/sleep.ts","../../../../projects/3dsource/utils/src/lib/helpers/trimLastSlashFromUrl.ts","../../../../projects/3dsource/utils/src/lib/helpers/signal.ts","../../../../projects/3dsource/utils/src/lib/helpers/generate-uuid.ts","../../../../projects/3dsource/utils/src/lib/helpers/short-hash.ts","../../../../projects/3dsource/utils/src/lib/helpers/is-desktop.ts","../../../../projects/3dsource/utils/src/lib/helpers/media.ts","../../../../projects/3dsource/utils/src/lib/interfaces/image-output.ts","../../../../projects/3dsource/utils/src/lib/math/baseSortedIndex.ts","../../../../projects/3dsource/utils/src/lib/math/calculateMedian.ts","../../../../projects/3dsource/utils/src/lib/math/clampf.ts","../../../../projects/3dsource/utils/src/lib/math/circularIndex.ts","../../../../projects/3dsource/utils/src/lib/math/degrees.ts","../../../../projects/3dsource/utils/src/lib/math/floatCompare.ts","../../../../projects/3dsource/utils/src/lib/math/inverseLerp.ts","../../../../projects/3dsource/utils/src/lib/math/lerp.ts","../../../../projects/3dsource/utils/src/lib/mutex/Mutex.ts","../../../../projects/3dsource/utils/src/lib/mutex/Semaphore.ts","../../../../projects/3dsource/utils/src/lib/mutex/TaskRunner.ts","../../../../projects/3dsource/utils/src/lib/rxjs/leadingTrailingDebounceTime.ts","../../../../projects/3dsource/utils/src/lib/rxjs/smoothTransition.ts","../../../../projects/3dsource/utils/src/lib/rxjs/tapLog.ts","../../../../projects/3dsource/utils/src/3dsource-utils.ts"],"sourcesContent":["/**\n * RGB from each of the CMYK values to determine a return as an any[].\n * CMYK values are as follows.\n * C - a number between 0 and 255 representing cyan\n * M - number between 0 and 255 representing magenta\n * Y - number between 0 and 255 representing yellow\n * K - number between 0 and 255 representing black\n *\n **/\nexport function CMYKtoRGB(c: number, m: number, y: number, k: number): any[] {\n  c = 255 - c;\n  m = 255 - m;\n  y = 255 - y;\n  k = 255 - k;\n  return [\n    ((255 - c) * (255 - k)) / 255,\n    ((255 - m) * (255 - k)) / 255,\n    ((255 - y) * (255 - k)) / 255,\n  ];\n}\n","export function HEXtoRGB(color: number | string) {\n  if (typeof color === 'string') {\n    color = parseInt(color.replace('#', ''), 16);\n  }\n  const r = (color >> 16) & 255;\n  const g = (color >> 8) & 255;\n  const b = color & 255;\n  return { r: r, g: g, b: b };\n}\n","/**\n *  Values calculated from each RGB * RGB color value.\n * @ Param r the red (R) indicating the number (0-255)\n * @ Param g green (G) indicates the number (0-255)\n * @ Param b blue (B) shows the number (0-255)\n * @ Return obtained from the RGB color value for each indicating the number\n **/\nexport function rgb(r: number, g: number, b: number): number {\n  return (r << 16) | (g << 8) | b;\n}\n","/* eslint-disable prefer-const */\n/**\n * HSV from each of the RGB values to determine a return as an any[].\n * RGB values are as follows.\n * R - a number from 0 to 255\n * G - a number from 0 to 255\n * B - a number from 0 to 255\n *\n * HSV values are as follows.\n * H - a number between 360-0\n * S - number between 0 and 1.0\n * V - number between 0 and 1.0\n *\n * H is replaced with equivalent numbers in the range of the 360-0 that is out of range.\n * Cannot compute, including alpha.\n *\n * @ Param h hue (Hue) number that indicates (to 360-0)\n * @ Param s the saturation (Saturation) shows the number (0.0 to 1.0)\n * @ Param v lightness (Value) indicates the number (0.0 to 1.0)\n * @ Return RGB values into an any[] of [R, G, B]\n **/\n\nexport function HSVtoRGB(h: number, s: number, v: number): number[] {\n  let r = 0,\n    g = 0,\n    b = 0;\n  let i, x, y, z;\n  if (s < 0) {\n    s = 0;\n  }\n  if (s > 1) {\n    s = 1;\n  }\n  if (v < 0) {\n    v = 0;\n  }\n  if (v > 1) {\n    v = 1;\n  }\n  h = h % 360;\n  if (h < 0) {\n    h += 360;\n  }\n  h /= 60;\n  i = h >> 0;\n  x = v * (1 - s);\n  y = v * (1 - s * (h - i));\n  z = v * (1 - s * (1 - h + i));\n  switch (i) {\n    case 0:\n      r = v;\n      g = z;\n      b = x;\n      break;\n    case 1:\n      r = y;\n      g = v;\n      b = x;\n      break;\n    case 2:\n      r = x;\n      g = v;\n      b = z;\n      break;\n    case 3:\n      r = x;\n      g = y;\n      b = v;\n      break;\n    case 4:\n      r = z;\n      g = x;\n      b = v;\n      break;\n    case 5:\n      r = v;\n      g = x;\n      b = y;\n      break;\n  }\n  return [(r * 255) >> 0, (g * 255) >> 0, (b * 255) >> 0];\n}\n","/* eslint-disable prefer-spread */\n/**\n * HSV calculated from the numbers of each RGB color value.\n * @ Param h hue (Hue) number that indicates (to 360-0)\n * @ Param s the saturation (Saturation) shows the number (0.0 to 1.0)\n * @ Param v lightness (Value) indicates the number (0.0 to 1.0)\n * @ Return obtained from the RGB color value for each indicating the number\n **/\nimport { rgb } from './rgb';\nimport { HSVtoRGB } from './HSVtoRGB';\n\nexport function hsv(h: number, s: number, v: number): number {\n  return rgb.apply(null, HSVtoRGB(h, s, v) as any);\n}\n","/**\n * RGB figures show (0x000000 0xFFFFFF up from) the\n * R, G, B returns an any[] divided into a number from 0 to 255, respectively.\n *\n * @ Param rgb numbers show (0x000000 0xFFFFFF up from)\n * @ Return any[] indicates the value of each color [R, G, B]\n **/\nexport function toRGB(rgb: number): number[] {\n  const r: number = (rgb >> 16) & 0xff;\n  const g: number = (rgb >> 8) & 0xff;\n  const b: number = rgb & 0xff;\n\n  return [r, g, b];\n}\n","/**\n * Comparison (light).\n * 2 RGB single number that indicates (0x000000 0xFFFFFF up from) to compare,\n * RGB values combined with higher returns to their numbers.\n * @ Param col1 RGB numbers show (0x000000 0xFFFFFF up from)\n * @ Param col2 RGB numbers show (0x000000 0xFFFFFF up from)\n * @ Return comparison (light) value\n **/\nimport { toRGB } from './toRGB';\n\nexport function max(col1: number, col2: number): number {\n  const c1: any[] = toRGB(col1);\n  const c2: any[] = toRGB(col2);\n  const r: number = Math.max(c1[0], c2[0]);\n  const g: number = Math.max(c1[1], c2[1]);\n  const b: number = Math.max(c1[2], c2[2]);\n  return (r << 16) | (g << 8) | b;\n}\n","/**\n * Comparison (dark).\n * 2 RGB single numbers that indicate (0x000000 0xFFFFFF up from) to compare,\n * RGB lower combined returns a numeric value for each number.\n * @ Param col1 RGB numbers show (0x000000 0xFFFFFF up from)\n * @ Param col2 RGB numbers show (0x000000 0xFFFFFF up from)\n * @ Return comparison (dark) values\n **/\nimport { toRGB } from './toRGB';\n\nexport function min(col1: number, col2: number): number {\n  const c1: any[] = toRGB(col1);\n  const c2: any[] = toRGB(col2);\n  const r: number = Math.min(c1[0], c2[0]);\n  const g: number = Math.min(c1[1], c2[1]);\n  const b: number = Math.min(c1[2], c2[2]);\n  return (r << 16) | (g << 8) | b;\n}\n","/**\n *\n There are two part of formula:\n First part: If Lower Layer Value > 127.5, then do the following -\n Value Unit = (255-Lower Layer Value)/127.5\n Min Value = Lower Layer Value - (255-Lower Layer Value)\n Overlay = (Upper Layer Value * Value Unit) + Min Value\n Second part: If Lower Layer Value < 127.5, then do the following -\n Value Unit=Lower Layer Value/127.5\n\n Overlay = Upper Layer Value * Value Unit\n * @param {number} col1\n * @param {number} col2\n * @return {number}\n */\nimport { toRGB } from './toRGB';\n\nexport function overlay(col1: number, col2: number): number {\n  const c1: any[] = toRGB(col1);\n  const c2: any[] = toRGB(col2);\n  const r: number = Math.max(c1[0], c2[0]);\n  const g: number = Math.max(c1[1], c2[1]);\n  const b: number = Math.max(c1[2], c2[2]);\n  return (r << 16) | (g << 8) | b;\n}\n","/**\n * RGB from the respective figures, HSV sequences in terms of returns.\n * RGB values are as follows.\n * R - a number from 0 to 255\n * G - a number from 0 to 255\n * B - a number from 0 to 255\n *\n * CMYK values are as follows.\n * C - a number between 0 and 255 representing cyan\n * M - number between 0 and 255 representing magenta\n * Y - number between 0 and 255 representing yellow\n * K - number between 0 and 255 representing black\n *\n * Cannot compute, including alpha.\n * @ Param r the red (R) indicating the number (0x00 to 0xFF to)\n * @ Param g green (G) indicates the number (0x00 to 0xFF to)\n * @ Param b blue (B) shows the number (0x00 to 0xFF to)\n * @ Return CMYK values into an any[] of [H, S, V]\n **/\nexport function RGBtoCMYK(r: number, g: number, b: number): any[] {\n  let c = 0;\n  let m = 0;\n  let y = 0;\n  let k = 0;\n\n  c = 255 - r;\n  m = 255 - g;\n  y = 255 - b;\n  k = 255;\n\n  if (c < k) {\n    k = c;\n  }\n  if (m < k) {\n    k = m;\n  }\n  if (y < k) {\n    k = y;\n  }\n  if (k === 255) {\n    c = 0;\n    m = 0;\n    y = 0;\n  } else {\n    c = Math.round((255 * (c - k)) / (255 - k));\n    m = Math.round((255 * (m - k)) / (255 - k));\n    y = Math.round((255 * (y - k)) / (255 - k));\n  }\n  return [c, m, y, k];\n}\n","export function RGBtoHEX(r: number, g: number, b: number): string {\n  let redColor = r.toString(16);\n  let greenColor = g.toString(16);\n  let blackColor = b.toString(16);\n\n  if (redColor.length === 1) {\n    redColor = '0' + redColor;\n  }\n  if (greenColor.length === 1) {\n    greenColor = '0' + greenColor;\n  }\n  if (blackColor.length === 1) {\n    blackColor = '0' + blackColor;\n  }\n\n  return (redColor + greenColor + blackColor).toUpperCase();\n}\n","/**\n * RGB from the respective figures, HSV sequences in terms of returns.\n * RGB values are as follows.\n * R - a number from 0 to 255\n * G - a number from 0 to 255\n * B - a number from 0 to 255\n *\n * HSV values are as follows.\n * H - a number between 360-0\n * S - number between 0 and 1.0\n * V - number between 0 and 1.0\n *\n * Cannot compute, including alpha.\n * @ Param r the red (R) indicating the number (0x00 to 0xFF to)\n * @ Param g green (G) indicates the number (0x00 to 0xFF to)\n * @ Param b blue (B) shows the number (0x00 to 0xFF to)\n * @ Return HSV values into an any[] of [H, S, V]\n **/\nexport function RGBtoHSV(r: number, g: number, b: number): number[] {\n  r /= 255;\n  g /= 255;\n  b /= 255;\n  let h = 0,\n    s = 0,\n    v = 0;\n  let x: number, y: number;\n  if (r >= g) x = r;\n  else x = g;\n  if (b > x) x = b;\n  if (r <= g) y = r;\n  else y = g;\n  if (b < y) y = b;\n  v = x;\n  const c: number = x - y;\n  if (x === 0) s = 0;\n  else s = c / x;\n  if (s !== 0) {\n    if (r === x) {\n      h = (g - b) / c;\n    } else {\n      if (g === x) {\n        h = 2 + (b - r) / c;\n      } else {\n        if (b === x) {\n          h = 4 + (r - g) / c;\n        }\n      }\n    }\n    h = h * 60;\n    if (h < 0) h = h + 360;\n  }\n  return [h, s, v];\n}\n","/**\n * Subtractive.\n * 2 RGB single numbers that indicate (0x000000 0xFFFFFF up from) Return the value\n * of the subtractive color.\n * @ Param col1 RGB numbers show (0x000000 0xFFFFFF up from)\n * @ Param col2 RGB numbers show (0x000000 0xFFFFFF up from)\n * @ Return the subtractive\n **/\nimport { toRGB } from './toRGB';\n\nexport function sub(col1: number, col2: number): number {\n  const c1: any[] = toRGB(col1);\n  const c2: any[] = toRGB(col2);\n  const r: number = Math.max(c1[0] - c2[0], 0);\n  const g: number = Math.max(c1[1] - c2[1], 0);\n  const b: number = Math.max(c1[2] - c2[2], 0);\n  return (r << 16) | (g << 8) | b;\n}\n","/**\n * Subtraction.\n * 2 RGB single number that indicates (0x000000 0xFFFFFF up from) is subtracted\n * from the return numbers.\n * @ Param col1 RGB numbers show (0x000000 0xFFFFFF up from)\n * @ Param col2 RGB numbers show (0x000000 0xFFFFFF up from)\n * @ Return value subtracted Blend\n **/\nimport { toRGB } from './toRGB';\n\nexport function subtract(col1: number, col2: number): number {\n  const colA: any[] = toRGB(col1);\n  const colB: any[] = toRGB(col2);\n  const r: number = Math.max(\n    Math.max(colB[0] - (256 - colA[0]), colA[0] - (256 - colB[0])),\n    0,\n  );\n  const g: number = Math.max(\n    Math.max(colB[1] - (256 - colA[1]), colA[1] - (256 - colB[1])),\n    0,\n  );\n  const b: number = Math.max(\n    Math.max(colB[2] - (256 - colA[2]), colA[2] - (256 - colB[2])),\n    0,\n  );\n  return (r << 16) | (g << 8) | b;\n}\n","/**\n * Additive color.\n * 2 RGB single numbers that indicate (0x000000 0xFFFFFF up from) Return the value\n * of the additive mixture.\n * @ Param col1 RGB numbers show (0x000000 0xFFFFFF up from)\n * @ Param col2 RGB numbers show (0x000000 0xFFFFFF up from)\n * @ Return the additive color\n **/\nimport { toRGB } from './toRGB';\n\nexport function sum(col1: number, col2: number): number {\n  const c1: any[] = toRGB(col1);\n  const c2: any[] = toRGB(col2);\n  const r: number = Math.min(c1[0] + c2[0], 255);\n  const g: number = Math.min(c1[1] + c2[1], 255);\n  const b: number = Math.min(c1[2] + c2[2], 255);\n\n  return (r << 16) | (g << 8) | b;\n}\n","export function toRGBA(rgba: number): number[] {\n  const a: number = (rgba >> 24) & 0xff;\n  const r: number = (rgba >> 16) & 0xff;\n  const g: number = (rgba >> 8) & 0xff;\n  const b: number = rgba & 0xff;\n\n  return [r, g, b, a];\n}\n","export const COLOR_CODES = {\n  TO_UNREAL: ['#ffffff', '#005912', `UNREAL <-`],\n  TAP_LOG: ['#ffff00', '#1976d2', ' [TAPLOG]'],\n  FROM_UNREAL: ['#ffff00', '#898989', 'UNREAL ->'],\n  FROM_UNREAL_ERROR: ['#ffffff', '#ff0000', 'UNREAL ERROR ->'],\n  FROM_CIRRUS: ['#ffffff', '#ef702b', 'CIRRUS ->'],\n  FROM_CIRRUS_ERROR: ['#ffffff', '#ff0000', 'CIRRUS ->'],\n  TO_CIRRUS: ['#ffffff', '#3c9738', 'CIRRUS <-'],\n} as const;\n","/*\n * Copyright (c) 2025.\n * Sergii Karanda - All Rights Reserved\n */\n\nexport const DOCUMENT_ROOT = (window as any)['source3d_app_base'] || '';\n","export function CSV2Array(strData: any, strDelimiter?: string): any[] {\n  // Check to see if the delimiter is defined. If not,\n  // then default to comma.\n  strDelimiter = strDelimiter || ',';\n\n  // Create a regular expression to parse the CSV values.\n  const objPattern = new RegExp(\n    // Delimiters.\n    '(\\\\' +\n      strDelimiter +\n      '|\\\\r?\\\\n|\\\\r|^)' +\n      // Quoted fields.\n      '(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|' +\n      // Standard fields.\n      '([^\"\\\\' +\n      strDelimiter +\n      '\\\\r\\\\n]*))',\n    'gi',\n  );\n\n  // Create an array to hold our data. Give the array\n  // a default empty first row.\n  const arrData: any[] = [[]];\n\n  // Create an array to hold our individual pattern\n  // matching groups.\n  let arrMatches = null;\n\n  // Keep looping over the regular expression matches\n  // until we can no longer find a match.\n  while ((arrMatches = objPattern.exec(strData))) {\n    // Get the delimiter that was found.\n    const strMatchedDelimiter = arrMatches[1];\n\n    // Check to see if the given delimiter has a length\n    // (is not the start of string) and if it matches\n    // field delimiter. If idKey does not, then we know\n    // that this delimiter is a row delimiter.\n    if (strMatchedDelimiter.length && strMatchedDelimiter !== strDelimiter) {\n      // Since we have reached a new row of data,\n      // add an empty row to our data array.\n      arrData.push([]);\n    }\n\n    let strMatchedValue: any;\n\n    // Now that we have our delimiter out of the way,\n    // let's check to see which kind of value we\n    // captured (quoted or unquoted).\n    if (arrMatches[2]) {\n      // We found a quoted value. When we capture\n      // this value, unescape any double quotes.\n      strMatchedValue = arrMatches[2].replace(new RegExp('\"\"', 'g'), '\"');\n    } else {\n      // We found a non-quoted value.\n      strMatchedValue = arrMatches[3];\n    }\n\n    // Now that we have our value string, let's add\n    // it to the data array.\n    arrData[arrData.length - 1].push(strMatchedValue);\n  }\n\n  // Return the parsed data.\n  return arrData;\n}\n","import { CSV2Array } from './CSV2Array';\n\nconst booleanRegex = /^(true|false)$/i;\nconst trueRegex = /^(true)$/i;\nconst jsonRegex = /([\\d.]+)|(\\[])|(\\[.+])|({.+})/i;\n\nconst zipObject = (props: string[], values: any[]) =>\n  props.reduce(\n    (obj: any, prop, index) => ((obj[prop] = values[index]), obj),\n    {},\n  );\n\nconst toHead = (input: any): string => {\n  return String(input).trim();\n};\n\nconst toCorrectString = (input: any): any => {\n  if (typeof input === 'string') {\n    if (input.match(jsonRegex)) {\n      // optimization for use try-catch only after regex match. much faster than without regex\n      try {\n        return JSON.parse(input);\n      } catch {\n        /* empty */\n      }\n    }\n    if (input.match(booleanRegex)) {\n      return !!input.match(trueRegex);\n    }\n    return input.trim();\n  } else if (typeof input === 'number') {\n    return input;\n  }\n};\n\nexport function CSV2Records(\n  csv: string,\n  useRowAsHead = 0,\n  strDelimiter?: string,\n): any {\n  const arr = CSV2Array(csv, strDelimiter);\n  const total = arr.length;\n  const keys = arr[useRowAsHead].map(toHead);\n  const data: any[] = [];\n\n  let tmpSKU = 0;\n\n  for (let i = useRowAsHead + 1; i < total; i++) {\n    const obj = zipObject(keys, arr[i].map(toCorrectString));\n    data.push(obj);\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    tmpSKU++;\n  }\n\n  return data.filter(Boolean);\n}\n","export function ObjectToCSV<T extends object>(records: T[]) {\n  if (records.length === 0) {\n    return;\n  }\n\n  const uniqueFields = Array.from(\n    records.reduce((fields, record) => {\n      Object.keys(record).forEach((field: string) => fields.add(field));\n      return fields;\n    }, new Set<string>()),\n  );\n\n  const csvHeader = uniqueFields.join(',') + '\\n';\n  const csvRows = records\n    .map((record: any) =>\n      uniqueFields.map((field: any) => `\"${record[field] || ''}\"`).join(','),\n    )\n    .join('\\n');\n\n  return csvHeader + csvRows;\n}\n","export const isLocalhost = !!window.location.href.match(/localhost/gi);\n","/**\n * Adds required number of symbols before input\n * @param input input string\n * @param size amount of total symbols\n * @param symbol filler\n * @returns string\n */\nexport function pad(\n  input: number | string,\n  size: number,\n  symbol = '0',\n): string {\n  let s = input + '';\n  while (s.length < size) {\n    s = symbol + s;\n  }\n  return s.slice(-size);\n}\n","import { pad } from '../strings';\n\n/**\n * Create a string of the form 'HOURS.MINUTES.SECONDS.MILLISECONDS'.\n */\nexport function timeToString() {\n  const date = new Date();\n\n  return `${pad(date.getHours(), 2)}:${pad(date.getMinutes(), 2)}:${pad(date.getSeconds(), 2)}.${pad(date.getMilliseconds(), 3)}`;\n}\n\nexport function timeUTCToString() {\n  const date = new Date();\n\n  return `UTC:${pad(date.getUTCHours(), 2)}:${pad(date.getUTCMinutes(), 2)}:${pad(date.getUTCSeconds(), 2)}.${pad(date.getUTCMilliseconds(), 3)}`;\n}\n","type TruthyTypesOf<T> = T extends false | '' | 0 | null | undefined ? never : T;\ntype FalsyTypesOf<T> = T extends false | '' | 0 | null | undefined ? T : never;\ntype EmptyTypesOf<T> = T extends undefined | null | object | '' ? T : never;\ntype NonEmptyTypesOf<T> = T extends undefined | null | object | '' ? never : T;\n/**\n * The Boolean object represents a truth value: true or false.\n * @param value\n * @constructor\n * Returns:boolean\n */\nexport const Truthy: <T>(value: T) => value is TruthyTypesOf<T> = <T>(\n  value?: T,\n): value is TruthyTypesOf<T> =>\n  !!value && value !== 'false' && value !== 'undefined' && value !== 'null';\n\n/**\n * The Boolean object represents an INVERSE truth value: true or false.\n * @param value\n * @constructor\n * Returns:boolean\n */\nexport const Falsy: <T>(value: T) => value is FalsyTypesOf<T> = <T>(\n  value?: T,\n): value is FalsyTypesOf<T> => !Truthy(value);\n\n/**\n * Checks if a value is empty.\n *\n * @param {any} value - The value to check.\n * @return {boolean} Returns true if the value is empty, otherwise false.\n */\nexport const IsEmpty: <T>(value: T) => value is EmptyTypesOf<T> = <T>(\n  value: T,\n): value is EmptyTypesOf<T> => {\n  return (\n    value === undefined ||\n    value === null ||\n    (typeof value === 'object' && Object.keys(value).length === 0) ||\n    (typeof value === 'string' && value.trim().length === 0)\n  );\n};\n\nexport const NotEmpty: <T>(value: T) => value is NonEmptyTypesOf<T> = <T>(\n  value: T,\n): value is NonEmptyTypesOf<T> => {\n  return !IsEmpty(value);\n};\nexport const isDefined = <T>(arg: T | null | undefined): arg is T =>\n  arg !== null && arg !== undefined;\n\nexport const isNotDefined = <T>(\n  arg: T | null | undefined,\n): arg is null | undefined => arg === null || arg === undefined;\n\nexport const isJSON = (str: string): boolean => {\n  try {\n    JSON.parse(str);\n  } catch (e) {\n    console.warn(e);\n\n    return false;\n  }\n\n  return true;\n};\n\nexport const isEmpty = (value: any) =>\n  value === undefined ||\n  value === null ||\n  (typeof value === 'object' && Object.keys(value).length === 0) ||\n  (typeof value === 'string' && value.trim().length === 0);\n\nexport function isAllValuesTruthy<T extends string, K>(value: Record<T, K>) {\n  return Object.values(value).every(Truthy);\n}\n","const cache: Record<string, unknown> = {};\n\n/**\n * Converts a given value to a string suitable for search comparisons.\n * The resulting string is in lowercase, with consecutive spaces replaced by underscores.\n * The function uses a cache to improve performance by storing and reusing the results of previous conversions.\n *\n * @param {any} value - The value to be converted to a search-friendly string.\n * It can be of any type, but it will be coerced to a string if not already one.\n *\n * @param {boolean} caseSensitive - A flag indicating whether the comparison should be case-sensitive.\n * If set to true, the function will perform case-sensitive comparisons, preserving the original casing of input strings.\n * If set to false (default), the function will convert the input strings to lowercase for case-insensitive comparisons\n *\n * @returns {string} The processed string, which is trimmed, converted to lowercase (unless caseSensitive is true),\n * and has all sequences of spaces replaced with underscores. This string is either\n * retrieved from the cache or freshly computed and then cached.\n *\n */\nexport function textForSearch(value: unknown, caseSensitive = false): string {\n  const key = `${value}_${caseSensitive}`;\n  return (cache[key] ||\n    (() => {\n      let result = String(value).trim().replace(/ +/gi, '_');\n\n      if (!caseSensitive) {\n        result = result.toLowerCase();\n      }\n\n      cache[key] = result;\n\n      return result;\n    })()) as string;\n}\n","import { textForSearch } from './textForSearch';\n\n/**\n * Builds a predicate that checks whether a record matches **all** provided criteria.\n *\n * Behavior:\n * - Only keys with **defined** values in `criteria` are considered; keys with `undefined` are ignored.\n * - Both the criterion value and the corresponding record value are normalized using `textForSearch(value, caseSensitive)`,\n *   then compared for **equality** (not substring/contains).\n * - By default (`caseSensitive = false`), comparisons are case-insensitive and tolerant to extra spacing\n *   (per `textForSearch`). When `caseSensitive = true`, comparisons preserve original casing.\n * - If **no** criteria have defined values, the resulting predicate always returns **false**.\n *\n * @remarks\n * **Nested object stringification (runtime edge case):**\n * Although the TypeScript types constrain comparisons to primitive fields via `ISearchable<T>`,\n * at runtime any non-primitive value that slips through (e.g., due to loose typing) will be coerced to a string\n * before normalization. For example:\n *\n * ```ts\n * // Runtime behavior with nested objects (typing omitted for brevity)\n * const record = { age: 20, test: { hello: 'world' } } as any;\n * // textForSearch(record.test, false) => \"[object_object]\" (e.g., \"[object Object]\" normalized)\n * const criteria = { age: 20, test: \"[object_object]\" } as any;\n * const matches = where<any>(criteria)(record);\n * // matches === true\n * ```\n *\n * In other words, `{ hello: 'world' }` is interpreted as the string `\"[object_object]\"` after normalization,\n * so a criterion with `test: \"[object_object]\"` will successfully match.\n *\n * @typeParam T - The object type whose **primitive** fields are comparable via `ISearchable<T>`.\n *\n * @param criteria - A partial set of key–value pairs over `ISearchable<T>` to match against.\n *   Only keys with defined values participate in the comparison.\n * @param caseSensitive - Whether comparisons should be case-sensitive. Defaults to `false`.\n *\n * @returns A predicate `(record: ISearchable<T>) => boolean` that is `true` iff the record matches **all** criteria.\n *\n * @example\n * type Item = { name: string; category: string; note?: string };\n * const items: Item[] = [\n *   { name: \"Apple\",  category: \"Fruit\" },\n *   { name: \"Carrot\", category: \"Vegetable\" },\n *   { name: \"Banana\", category: \"Fruit\" }\n * ];\n *\n * // Case-insensitive equality match on category (\"fruit\" matches \"Fruit\")\n * const isFruit = where<Item>({ category: \"fruit\" });\n * const fruits = items.filter(isFruit);\n * // → [{ name: \"Apple\", category: \"Fruit\" }, { name: \"Banana\", category: \"Fruit\" }]\n *\n * // Empty criteria → predicate always false\n * const matchNothing = where<Item>({});\n * items.filter(matchNothing); // → []\n */\nexport function where<T extends object>(\n  criteria: Input<T>,\n  caseSensitive = false,\n): (record: ISearchable<T>) => boolean {\n  const preComputedEntries = Object.entries(criteria)\n    .filter(([, value]) => value !== undefined)\n    .map(([key, value]) => [key, textForSearch(value, caseSensitive)] as const);\n\n  return (record: ISearchable<T>): boolean => {\n    return (\n      preComputedEntries.length > 0 &&\n      preComputedEntries.every(([key, criterionValue]) => {\n        return (\n          textForSearch(\n            record[key as keyof ISearchable<T>] ?? '',\n            caseSensitive,\n          ) === criterionValue\n        );\n      })\n    );\n  };\n}\n\n/**\n * Builds a predicate that is the logical **negation** of `where`.\n *\n * Behavior mirrors `where(criteria, caseSensitive)` but returns `true` when a record **does not**\n * satisfy all criteria. Notable edge cases:\n * - If `criteria` has no defined values (i.e., `where` would always return `false`), this negated predicate\n *   will always return **true**.\n * - **Nested object stringification (runtime edge case):** If a nested object is compared against a criterion\n *   like `\"[object_object]\"` (after normalization), the original `where` would return `true`, so `whereNot` will return `false`.\n *\n * @typeParam T - The object type whose **primitive** fields are comparable via `ISearchable<T>`.\n *\n * @param criteria - Same as in `where`.\n * @param caseSensitive - Same as in `where`. Defaults to `false`.\n *\n * @returns A predicate `(record: ISearchable<T>) => boolean` that is `true` iff the record **fails** the `where` check.\n *\n * @example\n * type Item = { name: string; category: string };\n * const items: Item[] = [\n *   { name: \"Apple\",  category: \"Fruit\" },\n *   { name: \"Carrot\", category: \"Vegetable\" }\n * ];\n *\n * const isNotFruit = whereNot<Item>({ category: \"fruit\" });\n * items.filter(isNotFruit);\n * // → [{ name: \"Carrot\", category: \"Vegetable\" }]\n */\nexport function whereNot<T extends object>(\n  criteria: Input<T>,\n  caseSensitive = false,\n): (record: ISearchable<T>) => boolean {\n  const whereFunc = where(criteria, caseSensitive);\n  return (record: ISearchable<T>) => {\n    return !whereFunc(record);\n  };\n}\n\ntype HasPrimitivePartKeys<T> = {\n  [K in keyof T]: Extract<T[K], Primitive> extends never ? never : K;\n}[keyof T];\n\ntype ISearchable<T> = {\n  [K in HasPrimitivePartKeys<T>]: Extract<T[K], Primitive>;\n};\n\ntype Input<T> = Partial<TruthyTypesOf<ISearchable<T>>>;\ntype Primitive = string | number | bigint | boolean | symbol | null | undefined;\ntype TruthyTypesOf<T> = T extends Falsy ? never : T;\ntype Falsy = null | undefined | false | 0 | -0 | 0n | '';\n","import { timeUTCToString } from './timeToString';\nimport { Truthy } from '../predicates';\n\nexport class Logger {\n  static isDevMode = Truthy(localStorage.getItem('devMode'));\n\n  static colored(color: string, background: string, ...args: unknown[]) {\n    if (!Logger.isDevMode) {\n      return;\n    }\n\n    const [first, ...rest] = args;\n    console.log.apply(console, [\n      `%c ${timeUTCToString()} ${first} `,\n      `color: ${color}; background: ${background};`,\n      ...rest,\n    ]);\n  }\n\n  static log(...args: unknown[]) {\n    if (!Logger.isDevMode) {\n      return;\n    }\n\n    console.log.apply(console, [\n      `%c ${timeUTCToString()}  [ LOG  ] `,\n      'color: black; background: #80ff80;',\n      ...args,\n    ]);\n  }\n\n  static warn(...args: unknown[]) {\n    if (!Logger.isDevMode) {\n      return;\n    }\n\n    console.warn.apply(console, [\n      `%c ${timeUTCToString()} WARN `,\n      'color: black; background: #ffd500;',\n      ...args,\n    ]);\n  }\n\n  static info(...args: unknown[]) {\n    if (!Logger.isDevMode) {\n      return;\n    }\n\n    console.log.apply(console, [\n      `%c ${timeUTCToString()}  [ INFO ] `,\n      'color: white; background: blue;',\n      ...args,\n    ]);\n  }\n\n  static error(...args: unknown[]) {\n    if (!Logger.isDevMode) {\n      return;\n    }\n\n    console.error.apply(console, [\n      `%c ${timeUTCToString()} ERROR `,\n      'color: white; background: red;',\n      ...args,\n    ]);\n  }\n\n  static table(...args: unknown[]) {\n    if (!Logger.isDevMode) {\n      return;\n    }\n\n    // eslint-disable-next-line no-console\n    console.table.apply(console, [args]);\n  }\n\n  static time(...args: any) {\n    if (!Logger.isDevMode) {\n      return;\n    }\n\n    // eslint-disable-next-line no-console,prefer-spread\n    console.time.apply(console, args);\n  }\n\n  static timeEnd(...args: any) {\n    if (!Logger.isDevMode) {\n      return;\n    }\n\n    // eslint-disable-next-line no-console,prefer-spread\n    console.timeEnd.apply(console, args);\n  }\n}\n","export function cleanupFileName(value: string): string {\n  if (!value) {\n    return value;\n  }\n\n  value = value\n    .toString()\n    .replace(/undefined/g, '')\n    .trim()\n    .replace(/\\//g, '-')\n    .replace(/[-]+/g, '-')\n    .replace(/[^\\w^.-]+/gi, '_')\n    .replace(/[\\^]+/gi, '_');\n\n  value = value.split('_').filter(Boolean).join('_').toLowerCase();\n\n  return value;\n}\n","import { cleanupFileName } from './cleanupFileName';\n\nexport function makePath(...value: string[]): string {\n  return [...value].map((el) => cleanupFileName(el)).join('/');\n}\n","import { cleanupFileName } from './cleanupFileName';\n\nexport function normalizePath(value: string): string {\n  const re = new RegExp('[/\\\\\\\\]+', 'g');\n  return value\n    .split(re)\n    .map((el) => cleanupFileName(el))\n    .join('/');\n}\n","import type { Area, Rect } from './interfaces';\n\nexport function expandOverRectangle(objectRect: Rect, areaRect: Rect): Area {\n  const ratio: number = objectRect.w / objectRect.h;\n  const result: Area = { x: 0, y: 0, w: 0, h: 0, scale: 1 };\n  if (areaRect.w / ratio < areaRect.h) {\n    result.w = areaRect.h * ratio;\n    result.h = areaRect.h;\n  } else {\n    result.w = areaRect.w;\n    result.h = areaRect.w / ratio;\n  }\n  result.x = areaRect.x + (areaRect.w - result.w) / 2;\n  result.y = areaRect.y + (areaRect.h - result.h) / 2;\n  result.scale = result.w / objectRect.w;\n  return result;\n}\n","import type { Area, Rect } from './interfaces';\n\nexport function fitIntoRectangle(\n  objectRect: Rect,\n  areaRect: Rect,\n  round = true,\n  fixedRatio: number | null = null,\n): Area {\n  const result: Area = { x: 0, y: 0, w: 0, h: 0, scale: 1 };\n  const ratio: number = objectRect.h / objectRect.w;\n\n  if (objectRect.h > objectRect.w) {\n    result.h = areaRect.h;\n    result.w = areaRect.h / ratio;\n\n    if (result.w > areaRect.w) {\n      result.w = areaRect.w;\n      result.h = areaRect.w * ratio;\n    }\n  } else {\n    result.w = areaRect.w;\n    result.h = areaRect.w * ratio;\n\n    if (result.h > areaRect.h) {\n      result.h = areaRect.h;\n      result.w = areaRect.h / ratio;\n    }\n  }\n\n  if (fixedRatio) {\n    result.w = objectRect.w * fixedRatio;\n    result.h = objectRect.h * fixedRatio;\n  }\n  const wOut: number = round ? Math.floor(result.w) : result.w;\n  const hOut: number = round ? Math.floor(result.h) : result.h;\n  return {\n    x: areaRect.x + (areaRect.w - wOut) / 2,\n    y: areaRect.y + (areaRect.h - hOut) / 2,\n    w: wOut,\n    h: hOut,\n    scale: wOut / objectRect.w,\n  };\n}\n","const canvasCacheObj: any = {};\n\nexport function getCanvasCached(id: string): {\n  canvas: HTMLCanvasElement;\n  ctx: CanvasRenderingContext2D;\n} {\n  if (!canvasCacheObj[id]) {\n    const canvas = document.createElement('canvas');\n    canvasCacheObj[id] = {\n      canvas,\n      ctx: canvas.getContext('2d'),\n    };\n  }\n\n  return canvasCacheObj[id];\n}\n","import { fitIntoRectangle } from '../geom';\nimport type { ImageOutputValues } from '../interfaces';\n\nfunction getSnapshot2(\n  imageElement:\n    | HTMLImageElement\n    | HTMLCanvasElement\n    | HTMLVideoElement\n    | ImageBitmap,\n  maxWidth = 1024,\n  output: ImageOutputValues = 'image/png',\n  quality = 0.9,\n): HTMLCanvasElement | string {\n  const drawableImage = imageElement as any;\n  const canvasHelper: HTMLCanvasElement = document.createElement('canvas');\n  const drawCTX: CanvasRenderingContext2D = canvasHelper.getContext(\n    '2d',\n  ) as CanvasRenderingContext2D;\n\n  const prop = fitIntoRectangle(\n    {\n      x: 0,\n      y: 0,\n      w: drawableImage.naturalWidth || drawableImage.width,\n      h: drawableImage.naturalHeight || drawableImage.height,\n    },\n    {\n      x: 0,\n      y: 0,\n      w: maxWidth,\n      h: drawableImage.naturalHeight || drawableImage.height,\n    },\n  );\n\n  const width = prop.w;\n  const height = prop.h;\n  canvasHelper.width = width;\n  canvasHelper.height = height;\n\n  drawCTX.save();\n  drawCTX.clearRect(0, 0, width, height);\n  drawCTX.drawImage(drawableImage, 0, 0, width, height);\n  drawCTX.restore();\n\n  if (output === 'canvas') {\n    return canvasHelper;\n  }\n\n  return canvasHelper.toDataURL(output, quality);\n}\n\nexport function getSnapshot(\n  imageElement:\n    | HTMLImageElement\n    | HTMLCanvasElement\n    | HTMLVideoElement\n    | ImageBitmap,\n  maxWidth = 1024,\n  output: ImageOutputValues = 'image/png',\n  quality = 0.9,\n): HTMLCanvasElement | string {\n  const drawableImage = imageElement as any;\n  const canvasHelper: HTMLCanvasElement = document.createElement('canvas');\n  const drawCTX: CanvasRenderingContext2D = canvasHelper.getContext(\n    '2d',\n  ) as CanvasRenderingContext2D;\n\n  const prop = fitIntoRectangle(\n    {\n      x: 0,\n      y: 0,\n      w: drawableImage.naturalWidth || drawableImage.width,\n      h: drawableImage.naturalHeight || drawableImage.height,\n    },\n    {\n      x: 0,\n      y: 0,\n      w: (drawableImage.naturalWidth || drawableImage.width) / 2,\n      h: drawableImage.naturalHeight || drawableImage.height,\n    },\n  );\n\n  const width = prop.w;\n  const height = prop.h;\n  canvasHelper.width = width;\n  canvasHelper.height = height;\n\n  drawCTX.save();\n  drawCTX.clearRect(0, 0, width, height);\n  drawCTX.drawImage(drawableImage, 0, 0, width, height);\n\n  drawCTX.restore();\n\n  if (width > maxWidth * 2) {\n    return getSnapshot(canvasHelper, maxWidth, output, quality);\n  }\n\n  return getSnapshot2(drawableImage, maxWidth, output, quality);\n}\n","export function loadImage(url: string): Promise<HTMLImageElement> {\n  return new Promise((resolve: any, reject) => {\n    const img = new Image();\n    img.crossOrigin = 'anonymous';\n    img.onload = () => {\n      setTimeout(() => resolve(img), 1);\n    };\n    img.onerror = () => {\n      setTimeout(() => reject(null), 1);\n    };\n    img.src = url;\n  });\n}\n","import { getSnapshot } from './getSnapshot';\nimport type { ImageOutputValues } from '../interfaces';\n\n/**\n * USE DownloadImage instead!\n * @deprecated use DownloadImage instead!\n * @param imageSource\n * @param name\n * @param width\n * @param format\n */\nfunction SaveImage(\n  imageSource:\n    | HTMLImageElement\n    | HTMLCanvasElement\n    | HTMLVideoElement\n    | ImageBitmap\n    | string,\n  name: string,\n  width?: number,\n  format?: string | ImageOutputValues,\n): any {\n  let out;\n  const image: any = imageSource;\n\n  if (typeof image !== 'string') {\n    out = getSnapshot(image, width, format as ImageOutputValues);\n  } else {\n    out = image;\n  }\n\n  if ((navigator as any).msSaveBlob) {\n    // IE10+\n    try {\n      const blob = image.msToBlob();\n      return (navigator as any).msSaveBlob(blob, name);\n    } catch (e) {\n      console.warn(e);\n    }\n  } else {\n    const uri = out;\n    const link = document.createElement('a');\n    link.download = name;\n    link.href = uri as string;\n\n    document.body.appendChild(link);\n    if (link.click) {\n      link.click();\n    } else {\n      const event = document.createEvent('MouseEvents');\n      (event as any).initMouseEvent('click', true, true, window);\n      link.dispatchEvent(event);\n    }\n    document.body.removeChild(link);\n  }\n}\n\n/**\n * @param imageSource\n * @param string name\n * @param number width\n * @param string format\n */\nconst DownloadImage = SaveImage;\nexport { SaveImage, DownloadImage };\n","import type { LoadArgs, LoadArgsTmp } from '../interfaces';\nimport { loadImage } from '../image';\n\nexport class BatchLoader {\n  private maximumSlotsNumber = 1;\n  private queue: LoadArgsTmp[] = [];\n  private slots: LoadArgsTmp[] = [];\n  private _whenDone!: () => any;\n\n  clear() {\n    this.queue.forEach((item) => {\n      try {\n        if (item.img) {\n          item.img.src = '';\n        }\n      } catch (e) {\n        console.warn(e);\n      }\n\n      try {\n        item.xhr?.abort();\n      } catch (e) {\n        console.warn(e);\n      }\n    });\n\n    this.slots.forEach((item) => {\n      try {\n        if (item.img) {\n          item.img.src = '';\n        }\n      } catch (e) {\n        console.warn(e);\n      }\n\n      try {\n        item.xhr?.abort();\n      } catch (e) {\n        console.warn(e);\n      }\n    });\n    this.slots.length = 0;\n    this.queue.length = 0;\n  }\n\n  /**\n   * new settings\n   * you must pass new settings\n   * @param sett\n   */\n  setSettings(sett: any) {\n    this.maximumSlotsNumber =\n      sett.maximumSlotsNumber !== undefined\n        ? sett.maximumSlotsNumber\n        : this.maximumSlotsNumber;\n  }\n\n  /**\n   * execute with a chosen file\n   * @param id\n   * @param func\n   */\n  withItem(id: string, func: (item: LoadArgs) => any): boolean {\n    let item = this.getById(id);\n    if (!item) {\n      return false;\n    }\n    item = func(item);\n    this.queue.sort(this.sortByOrder);\n    return true;\n  }\n\n  remove(id: string): LoadArgs[] {\n    this.queue = this.queue.filter((arg) => arg.id !== id);\n    return this.queue;\n  }\n\n  /**\n   * executes when all files are downloaded\n   * @param cb\n   */\n  whenDone(cb: any) {\n    this._whenDone = cb;\n  }\n\n  // order {number} lower will execute first, default *100*\n  load(args: LoadArgs[]) {\n    const out: { path: string; self?: any; id: string }[] = args\n      .filter((arg) => !!arg.path)\n      .map((arg) => ({\n        path: arg.path,\n        id: this.add(arg),\n      }));\n\n    this.queue.sort(this.sortByOrder);\n    this.checkSlots();\n\n    return out;\n  }\n\n  /**\n   * operates with one file\n   * @param item\n   * @private\n   */\n  private add(item: LoadArgs): string {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const that = this;\n    const temp: LoadArgsTmp = {\n      id: item.id,\n      resolutionId: null,\n      useXhr: item.useXhr,\n      order: item.order !== undefined ? item.order : 100,\n      fallBack: item.fallBack,\n      path: item.path,\n      onLoadEnd: item.onLoadEnd,\n      onProgress: item.onProgress,\n      onLoadStart: item.onLoadStart,\n      extra: item.extra,\n    };\n\n    let retryCount = 1;\n    if (temp.useXhr) {\n      temp.xhr = this.getXmlHttp();\n      temp.xhr.onloadstart = (data: ProgressEvent) => item.onLoadStart(data);\n      temp.xhr.onprogress = (data: ProgressEvent) => item.onProgress(data);\n      temp.xhr.onreadystatechange = async function (data: any) {\n        if (this.readyState === 1 && this.status === 0) {\n          return;\n        }\n        if (\n          this.readyState === 4 &&\n          (this.status === 404 || this.status === 0)\n        ) {\n          temp.error = true;\n          that.loadEnd(temp);\n          return;\n        }\n        if (this.readyState === 4 && this.status === 200) {\n          const urlCreator = window.URL;\n          const imageUrl = urlCreator.createObjectURL(data.target.response);\n          temp.img = await loadImage(imageUrl);\n          that.loadEnd(temp);\n          return;\n        }\n      };\n    } else {\n      temp.img = new Image();\n      temp.img.crossOrigin = 'anonymous';\n      temp.img.onload = () => {\n        that.loadEnd(temp);\n      };\n      temp.img.onerror = () => {\n        if (temp.fallBack && retryCount-- > 0) {\n          console.warn('Fallback used =>', temp.path, '=>', temp.fallBack);\n          if (temp.img) {\n            temp.img.onload = null;\n            temp.img.src = temp.fallBack;\n          }\n\n          that.loadEnd(temp);\n        } else {\n          temp.error = true;\n          that.loadEnd(temp);\n        }\n      };\n    }\n    this.queue.push(temp);\n    return temp.id as string;\n  }\n\n  private sortByOrder(a: LoadArgs, b: LoadArgs): number {\n    return a.order > b.order ? 1 : a.order < b.order ? -1 : 0;\n  }\n\n  private loadEnd(item: LoadArgs) {\n    if (item.onLoadEnd !== undefined) {\n      for (let i = 0, len = this.slots.length; i < len; i += 1) {\n        if (this.slots[i].id === item.id) {\n          this.slots.splice(i, 1);\n          break;\n        }\n      }\n      item.onLoadEnd(item);\n    }\n    this.checkSlots();\n  }\n\n  private checkSlots() {\n    while (\n      (this.slots.length < this.maximumSlotsNumber ||\n        this.maximumSlotsNumber === -1) &&\n      this.queue.length\n    ) {\n      this.slots.push(this.queue.shift() as LoadArgsTmp);\n      const slot: LoadArgsTmp = this.slots[\n        this.slots.length - 1\n      ] as LoadArgsTmp;\n      if (slot.useXhr) {\n        slot.xhr?.open('GET', slot.path, true);\n        slot.xhr?.send(null);\n      } else {\n        if (slot.img) {\n          slot.img.src = slot.path;\n        }\n      }\n    }\n\n    if (\n      this.slots.length === 0 &&\n      this.queue.length === 0 &&\n      this._whenDone !== undefined\n    ) {\n      this._whenDone();\n    }\n  }\n\n  /**\n   * get Item By id for interaction with files in this.queue\n   * @param id\n   * @private\n   */\n  private getById(id: string): LoadArgs | null {\n    for (let i = 0, len = this.queue.length; i < len; i += 1) {\n      if (this.queue[i].id === id) {\n        return this.queue[i];\n      }\n    }\n    return null;\n  }\n\n  private getXmlHttp(): XMLHttpRequest {\n    let xhr = null;\n    try {\n      xhr = new XMLHttpRequest();\n      xhr.responseType = 'blob';\n    } catch (e) {\n      console.warn(e);\n    }\n\n    return xhr as any;\n  }\n}\n","export const debounce = <T extends (...args: any[]) => any>(\n  fn: T,\n  ms = 300,\n) => {\n  let timeoutId: ReturnType<typeof setTimeout>;\n  return function (this: any, ...args: any[]) {\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(() => fn.apply(this, args), ms);\n  };\n};\n","const KeyboardNumericCode = {\n  Backspace: 8,\n  Tab: 9,\n  Numpad5: 12,\n  NumpadEnter: 13,\n  ShiftRight: 16,\n  ControlRight: 17,\n  ControlLeft: 17,\n  AltRight: 18,\n  Escape: 27,\n  Space: 32,\n  Numpad9: 33,\n  Numpad3: 34,\n  Numpad1: 35,\n  Numpad7: 36,\n  Numpad4: 37,\n  Numpad8: 38,\n  Numpad6: 39,\n  Numpad2: 40,\n  Numpad0: 45,\n  NumpadDecimal: 46,\n  Digit0: 48,\n  Digit1: 49,\n  Digit2: 50,\n  Digit3: 51,\n  Digit4: 52,\n  Digit5: 53,\n  Digit6: 54,\n  Digit7: 55,\n  Digit8: 56,\n  Digit9: 57,\n  KeyA: 65,\n  KeyB: 66,\n  KeyC: 67,\n  KeyD: 68,\n  KeyE: 69,\n  KeyF: 70,\n  KeyG: 71,\n  KeyH: 72,\n  KeyI: 73,\n  KeyJ: 74,\n  KeyK: 75,\n  KeyL: 76,\n  KeyM: 77,\n  KeyN: 78,\n  KeyO: 79,\n  KeyP: 80,\n  KeyQ: 81,\n  KeyR: 82,\n  KeyS: 83,\n  KeyT: 84,\n  KeyU: 85,\n  KeyV: 86,\n  KeyW: 87,\n  KeyX: 88,\n  KeyY: 89,\n  KeyZ: 90,\n  MetaLeft: 91,\n  ContextMenu: 93,\n  NumpadMultiply: 106,\n  NumpadAdd: 107,\n  NumpadSubtract: 109,\n  NumpadDivide: 111,\n  F1: 112,\n  F2: 113,\n  F3: 114,\n  F4: 115,\n  F5: 116,\n  F6: 117,\n  F7: 118,\n  F8: 119,\n  F9: 120,\n  F10: 121,\n  F11: 122,\n  F12: 123,\n  NumLock: 144,\n  ScrollLock: 145,\n  Semicolon: 186,\n  Equal: 187,\n  Comma: 188,\n  Minus: 189,\n  Period: 190,\n  Slash: 191,\n  Backquote: 192,\n  BracketLeft: 219,\n  Backslash: 220,\n  BracketRight: 221,\n  Quote: 222,\n  IntlBackslash: 226,\n  ArrowUp: 38,\n  ArrowDown: 40,\n  ArrowLeft: 37,\n  ArrowRight: 39,\n} as const;\n\ntype IKeyName = keyof typeof KeyboardNumericCode;\ntype IKeyCode = (typeof KeyboardNumericCode)[IKeyName];\n\ntype InvertedKeyMapType = {\n  [K in IKeyName as (typeof KeyboardNumericCode)[K]]: K;\n};\nconst InvertedKeyMapValues = {} as { [K in IKeyCode]: IKeyName[K] };\n\n//For use for InvertedKeyMap[32] will return 'Space' and so on\nconst InvertedKeyMap = InvertedKeyMapValues as InvertedKeyMapType;\n\nconst KeyboardStringCode = {} as { [K in IKeyName]: K };\n\nObject.entries(KeyboardNumericCode).forEach(\n  // @ts-expect-error @typescript-eslint/ban-ts-comment\n  ([key, value]: [IKeyName, IKeyCode]) => {\n    InvertedKeyMapValues[value] = key;\n    // @ts-expect-error @typescript-eslint/ban-ts-comment\n    KeyboardStringCode[key] = key;\n  },\n);\nexport type { IKeyName, IKeyCode };\nexport { KeyboardStringCode, InvertedKeyMap, KeyboardNumericCode };\n","export function serialize(obj: any): string {\n  const str = [];\n\n  for (const p in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, p)) {\n      str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]));\n    }\n  }\n\n  return str.join('&');\n}\n","export const saveToLocalDrive = (uri: string, name: string) => {\n  if (!uri) {\n    return;\n  }\n\n  if ((navigator as any).msSaveBlob) {\n    // IE10+\n    try {\n      return (navigator as any).msSaveBlob(uri, name);\n    } catch (e) {\n      console.warn(e);\n    }\n  } else {\n    const link = document.createElement('a');\n    link.target = '_blank';\n    link.href = uri;\n    link.download = name;\n\n    document.body.appendChild(link);\n\n    if (link.click) {\n      link.click();\n    } else {\n      const event = document.createEvent('MouseEvents');\n      (event as any).initMouseEvent('click', true, true, window);\n      link.dispatchEvent(event);\n    }\n\n    document.body.removeChild(link);\n  }\n};\n","export function sleep(time: number) {\n  return new Promise((r) => setTimeout(r, time));\n}\n","export function trimLastSlashFromUrl(baseUrl: string) {\n  if (!baseUrl) {\n    return null;\n  } else if (baseUrl[baseUrl.length - 1] === '/') {\n    return baseUrl.substring(0, baseUrl.length - 1);\n  }\n\n  return;\n}\n","import type { Observable } from 'rxjs';\nimport { Subject } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\ninterface BroadcastEvent {\n  key: any;\n  data?: any;\n}\n\n/**\n * SingleTone Private class.\n * Event-Driving pattern for sending signals from component to component.\n */\nclass SignalClass {\n  private static eventBus: Subject<BroadcastEvent>;\n\n  constructor() {\n    if (SignalClass.eventBus) {\n      throw new Error(`Check that 'SignalClass' is not instantiated again!`);\n    }\n    SignalClass.eventBus = new Subject<BroadcastEvent>();\n  }\n\n  /**\n   * It is not recommended to use this class directly.\n   * use the sendSignal functions instead.\n   * those wrappers are more convenient and provide a better type safety.\n   */\n  broadcast<K, D>(key: K, data?: D) {\n    SignalClass.eventBus.next({ key, data });\n  }\n\n  /**\n   * It is not recommended to use this class directly.\n   * use the fromSignal functions instead.\n   * those wrappers are more convenient and provide a better type safety.\n   */\n  on<K, D = any>(key: K): Observable<D> {\n    return SignalClass.eventBus.asObservable().pipe(\n      filter((event) => event.key === key),\n      map((event) => event.data),\n    );\n  }\n}\n\nexport const Signal = new SignalClass();\n","import { v4 as uuidv4 } from 'uuid';\n\nexport function generateUuid() {\n  return uuidv4();\n}\n","import { Md5 } from 'ts-md5';\n\nexport function shortHash<T>(data: T, shorten?: boolean): string;\nexport function shortHash(data: null | undefined, shorten?: boolean): null;\nexport function shortHash<T>(\n  data: T | null | undefined,\n  shorten = true,\n): string | null {\n  if (!data) {\n    return null;\n  }\n\n  const stringify: string = Md5.hashStr(JSON.stringify(data));\n\n  if (shorten) {\n    return parseInt('0x' + stringify.substring(0, 10), 16).toString(32);\n  }\n\n  return stringify;\n}\n","export const isDesktop = () => {\n  // 1) Try the newer userAgentData API if available\n  const uaData = (navigator as any).userAgentData;\n  if (uaData && typeof uaData.mobile === 'boolean') {\n    return !uaData.mobile;\n  }\n\n  // 2) Fallback to a broader UA regex\n  const mobileRegex =\n    /Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile|Windows Phone|webOS|BlackBerry/i;\n  return !mobileRegex.test(navigator.userAgent);\n};\n","import { fromEvent, map, startWith } from 'rxjs';\n\nexport const media = (query: string) => {\n  const mediaQuery = window.matchMedia(query);\n  return fromEvent<MediaQueryList>(mediaQuery, 'change').pipe(\n    startWith(mediaQuery),\n    map((list: MediaQueryList) => list.matches),\n  );\n};\n","export const ImageOutput = {\n  CANVAS: 'canvas',\n  PNG: 'image/png',\n  WEBP: 'image/webp',\n  JPG: 'image/jpeg',\n} as const;\n\nexport type ImageOutputValues = (typeof ImageOutput)[keyof typeof ImageOutput];\n","/**\n * Calculates the index at which the `value` should be inserted into the `array` to maintain its\n * sorted order. This function performs a binary search with a complexity of O(log n), making it\n * efficient for large datasets. It assumes that the input array is sorted in ascending order and\n * contains comparable elements.\n *\n * Note: The function is designed to handle arrays with lengths up to a maximum of `HALF_MAX_ARRAY_LENGTH`\n * to ensure the search operation remains within JavaScript's maximum array index limit.\n *\n * @param {any[]} array The sorted array into which the value should be inserted. The array elements\n *                      should be comparable with the `value` using less-than and greater-than operations.\n * @param {number} value The value to insert into the array. This function assumes that `array` is sorted\n *                       in ascending order and will find the correct position for `value` accordingly.\n * @returns {number} The index at which the `value` should be inserted into `array` to maintain its sorted order.\n *                   If the `array` is empty or if `value` is less than or equal to all elements in `array`,\n *                   returns 0. If `value` is greater than all elements in `array`, returns the length of `array`.\n * @example\n * // returns 2\n * baseSortedIndex([1, 3, 4], 3);\n *\n * @example\n * // returns 1\n * baseSortedIndex([1, 2, 3], 2);\n */\nexport function baseSortedIndex(array: number[], value: number): number {\n  const MAX_ARRAY_LENGTH = 4294967295;\n  const HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n  let low = 0;\n  let high = array?.length || low;\n\n  if (high <= HALF_MAX_ARRAY_LENGTH) {\n    while (low < high) {\n      const mid = (low + high) >>> 1;\n      const computed = array[mid];\n      if (computed !== null && computed < value) {\n        low = mid + 1;\n      } else {\n        high = mid;\n      }\n    }\n  }\n  return high;\n}\n","/**\n * Calculates the median of an array of numbers.\n *\n * The median is the middle value of a sorted list of numbers. If the list has an even number\n * of elements, the median is the average of the two middle numbers.\n *\n * @param numbers - An array of numbers for which the median will be calculated.\n * @returns The median value as a number, or `null` if the array is empty.\n *\n * @example\n * ```typescript\n * const numbers = [3, 1, 4, 2];\n * const median = calculateMedian(numbers);\n * console.log(median); // Output: 2.5\n * ```\n */\nexport function calculateMedian(numbers: number[]): number {\n  if (numbers.length === 0) return 0;\n\n  // Sort the array in ascending order\n  const sorted = [...numbers].sort((a, b) => a - b);\n\n  const length = sorted.length;\n  const middle = Math.floor(length / 2);\n\n  // If the length is even, return the average of the two middle numbers\n  if (length % 2 === 0) {\n    return (sorted[middle - 1] + sorted[middle]) / 2;\n  }\n\n  // If the length is odd, return the middle number\n  return sorted[middle];\n}\n","/**\n * Clamps value between min and max;\n * @param min minValue\n * @param max maxValue\n * @param value inputValue\n * @returns number\n */\n\nexport function clampf(min: number, max: number, value: number): number {\n  if (min > max) {\n    return min;\n  }\n  return Math.min(max, Math.max(min, value));\n}\n","import { clampf } from './clampf';\n\n/**\n * Computes a circular index within a given range.\n *\n * This function ensures that the index wraps around within the range of 0 to `totalItems - 1`.\n * It uses the `clampf` function to clamp the result within the valid range.\n *\n * @param index - The current index to be wrapped.\n * @param totalItems - The total number of items in the range.\n * @returns The wrapped index within the range of 0 to `totalItems - 1`.\n *\n * @example\n * ```typescript\n * import { circularIndex } from './circularIndex';\n *\n * // Example 1: Basic usage\n * const index1 = circularIndex(5, 5);\n * console.log(index1); // Output: 0\n *\n * // Example 2: Index greater than totalItems\n * const index2 = circularIndex(6, 5);\n * console.log(index2); // Output: 1\n *\n * // Example 3: Negative index\n * const index3 = circularIndex(-2, 5);\n * console.log(index3); // Output: 3\n *\n * // Example 4: Large Negative index\n * const index4 = circularIndex(-6, 5);\n * console.log(index4); // Output: 4\n *\n * // Example 5: Index equal to totalItems\n * const index5 = circularIndex(1, 1);\n * console.log(index5); // Output: 0\n */\nexport function circularIndex(index: number, totalItems: number): number {\n  return clampf(0, totalItems - 1, (totalItems * 2 + index) % totalItems);\n}\n","export function degreesToRadians(degrees: number): number {\n  return degrees * (Math.PI / 180);\n}\n\nexport function radiansToDegrees(radians: number): number {\n  return radians * (180 / Math.PI);\n}\n","/**\n * A small epsilon value used for floating-point comparisons.\n *\n * @remarks\n * The value of `EPSILON` is `0.01`. This can be overridden in the comparison functions if needed.\n */\nconst EPSILON = 0.01;\n\n/**\n * Checks if floating-point number `A` is less than `B` considering a small margin of error.\n *\n * @param A - The first floating-point number to compare.\n * @param B - The second floating-point number to compare.\n * @param Epsilon - Optional custom epsilon value for comparison. Defaults to `EPSILON` if not provided.\n * @returns `true` if `A` is less than `B` considering the epsilon margin, otherwise `false`.\n *\n * @example\n * ```\n * const result = fpIsALessThanB(0.0034, 0.0066); // true\n * ```\n */\nexport function fpIsALessThanB(\n  A: number,\n  B: number,\n  Epsilon?: number,\n): boolean {\n  Epsilon = Epsilon || EPSILON;\n  return A - B < Epsilon && Math.abs(A - B) > Epsilon;\n}\n\n/**\n * Checks if floating-point number `A` is greater than `B` considering a small margin of error.\n *\n * @param A - The first floating-point number to compare.\n * @param B - The second floating-point number to compare.\n * @param Epsilon - Optional custom epsilon value for comparison. Defaults to `EPSILON` if not provided.\n * @returns `true` if `A` is greater than `B` considering the epsilon margin, otherwise `false`.\n *\n * @example\n * ```\n * const result = fpIsAGreaterThanB(0.0066, 0.0034); // true\n * ```\n */\nexport function fpIsAGreaterThanB(\n  A: number,\n  B: number,\n  Epsilon?: number,\n): boolean {\n  Epsilon = Epsilon || EPSILON;\n  return A - B > Epsilon && Math.abs(A - B) > Epsilon;\n}\n\n/**\n * Checks if floating-point number `A` is approximately the same as `B` considering a small margin of error.\n *\n * @param A - The first floating-point number to compare.\n * @param B - The second floating-point number to compare.\n * @param Epsilon - Optional custom epsilon value for comparison. Defaults to `EPSILON` if not provided.\n * @returns `true` if `A` is approximately equal to `B` considering the epsilon margin, otherwise `false`.\n *\n * @example\n * ```\n * const result = fpIsASameAsB(0.005, 0.0051); // true\n * ```\n */\nexport function fpIsASameAsB(A: number, B: number, Epsilon?: number): boolean {\n  Epsilon = Epsilon || EPSILON;\n  return Math.abs(A - B) < Epsilon;\n}\n","/**\n * Performs an inverse linear interpolation.\n *\n * Given a range defined by `min` and `max`, this function calculates the\n * interpolation factor (or percentage) of `value` within that range. Optionally,\n * it can clamp the result to be between 0 and 1 to ensure the return value is\n * within the range of a standard lerp operation.\n *\n * @param {number} min - The minimum value of the interpolation range.\n * @param {number} max - The maximum value of the interpolation range.\n * @param {number} value - The value to interpolate.\n * @param {boolean} [clampToNormal=false] - Whether to clamp the result between 0 and 1.\n * @returns {number} The interpolation factor of `value` between `min` and `max`.\n * If `clampToNormal` is true, the result is clamped between 0 and 1.\n * If the difference between `min` and `max` is 0, returns 1 to avoid division by zero.\n */\nexport function inverseLerp(\n  min: number,\n  max: number,\n  value: number,\n  clampToNormal = false,\n): number {\n  if (clampToNormal) {\n    value = Math.min(max, value);\n    value = Math.max(min, value);\n  }\n  const difference = max - min;\n\n  // Avoid JS division error\n  if (difference === 0) {\n    return 1;\n  }\n  const result = (value - min) / difference;\n  if (clampToNormal) {\n    return Math.min(1, Math.max(0, result));\n  }\n  return result;\n}\n","import { clampf } from './clampf';\n\n/**\n * @param min minimums\n * @param max maximums\n * @param value current float value in 0-1 range\n * @returns clamped value\n */\nexport function lerp(min: number, max: number, value: number): number {\n  value = clampf(0, 1, value);\n  return value * (max - min) + min;\n}\n","/**\n * A Mutex class to handle mutual exclusion locks, ensuring that only one asynchronous task can execute a critical section at a time.\n *\n * @example\n * const mutex = new Mutex();\n *\n * async function task(name: string, duration: number) {\n *   console.log(`${name} waiting to acquire mutex`);\n *   const release = await mutex.acquire();\n *   console.log(`${name} acquired mutex`);\n *   await new Promise(resolve => setTimeout(resolve, duration));\n *   console.log(`${name} releasing mutex`);\n *   release();\n * }\n *\n * task('Task 1', 1000);\n * task('Task 2', 2000);\n * task('Task 3', 1500);\n * task('Task 4', 500);\n *\n * Outputs\n * [LOG]: \"Task 1 waiting to acquire mutex\"\n * [LOG]: \"Task 2 waiting to acquire mutex\"\n * [LOG]: \"Task 3 waiting to acquire mutex\"\n * [LOG]: \"Task 4 waiting to acquire mutex\"\n * [LOG]: \"Task 1 acquired mutex\"\n * [LOG]: \"Task 1 releasing mutex\"\n * [LOG]: \"Task 2 acquired mutex\"\n * [LOG]: \"Task 2 releasing mutex\"\n * [LOG]: \"Task 3 acquired mutex\"\n * [LOG]: \"Task 3 releasing mutex\"\n * [LOG]: \"Task 4 acquired mutex\"\n * [LOG]: \"Task 4 releasing mutex\"\n */\nexport class Mutex {\n  private mutex = Promise.resolve();\n\n  /**\n   * Acquires the mutex, returning a promise that resolves when the mutex is acquired.\n   * The returned promise provides a release function that should be called to release the mutex.\n   * @returns A promise that resolves with a release function.\n   */\n  async acquire(): Promise<() => void> {\n    let release: () => void;\n    const previous = this.mutex;\n    this.mutex = new Promise<void>((resolve) => (release = resolve));\n    await previous;\n    return release!;\n  }\n}\n","/**\n * A Semaphore controls access to a resource that can handle a limited number of concurrent operations.\n *\n * @example\n * const semaphore = new Semaphore(2);\n *\n * async function task(name: string, duration: number) {\n *   console.log(`${name} waiting to acquire semaphore`);\n *   await semaphore.acquire();\n *   console.log(`${name} acquired semaphore`);\n *   await new Promise(resolve => setTimeout(resolve, duration));\n *   console.log(`${name} releasing semaphore`);\n *   semaphore.release();\n * }\n *\n * task('Task 1', 1000);\n * task('Task 2', 2000);\n * task('Task 3', 1500);\n * task('Task 4', 500);\n *\n * Outputs\n * [LOG]: \"Task 1 waiting to acquire semaphore\"\n * [LOG]: \"Task 2 waiting to acquire semaphore\"\n * [LOG]: \"Task 3 waiting to acquire semaphore\"\n * [LOG]: \"Task 4 waiting to acquire semaphore\"\n * [LOG]: \"Task 1 acquired semaphore\"\n * [LOG]: \"Task 2 acquired semaphore\"\n * [LOG]: \"Task 1 releasing semaphore\"\n * [LOG]: \"Task 3 acquired semaphore\"\n * [LOG]: \"Task 2 releasing semaphore\"\n * [LOG]: \"Task 4 acquired semaphore\"\n * [LOG]: \"Task 4 releasing semaphore\"\n * [LOG]: \"Task 3 releasing semaphore\"\n */\nexport class Semaphore {\n  private tasks: (() => void)[] = [];\n  private currentCount = 0;\n\n  constructor(private readonly maxConcurrency: number) {}\n\n  public acquire(): Promise<void> {\n    return new Promise((resolve) => {\n      if (this.currentCount < this.maxConcurrency) {\n        this.currentCount++;\n        resolve();\n      } else {\n        this.tasks.push(resolve);\n      }\n    });\n  }\n\n  public release(): void {\n    if (this.tasks.length > 0) {\n      const nextTask = this.tasks.shift();\n      if (nextTask) {\n        nextTask();\n      }\n    } else if (this.currentCount > 0) {\n      this.currentCount--;\n    }\n  }\n}\n","import type { Observable } from 'rxjs';\nimport { finalize, from, switchMap } from 'rxjs';\nimport { Logger } from '../dev';\nimport { Mutex } from './Mutex';\n\nexport class TaskRunner {\n  private mutex = new Mutex();\n\n  runTask(name: string, task: () => Observable<string | null>) {\n    // Log that the task is waiting to acquire the mutex\n    Logger.log(`${name} waiting to acquire mutex`);\n\n    return from(this.mutex.acquire()).pipe(\n      switchMap((release) => {\n        // Log that the mutex has been acquired\n        Logger.log(`${name} acquired mutex`);\n        return task().pipe(\n          finalize(() => {\n            Logger.log(`${name} releasing mutex`);\n            release();\n          }),\n        );\n      }),\n    );\n  }\n}\n","import type { SchedulerLike, Subscriber, Subscription } from 'rxjs';\nimport { asyncScheduler, Observable, timer } from 'rxjs';\n\n/**\n * Emits the most recent value emitted by the source Observable after a\n * specified time span has passed without another source emission.\n *\n * This is a combination of `debounceTime` and `auditTime` operators.\n *\n * The leading value is emitted immediately, and trailing values are debounced.\n *\n * @param dueTime The time to wait before emitting the last value.\n * @param scheduler The scheduler to use for the timeout.\n * @returns A function that returns an Observable that mirrors the source Observable, but applies the specified debouncing.\n */\nexport function leadingTrailingDebounceTime<T>(\n  dueTime: number,\n  scheduler: SchedulerLike = asyncScheduler,\n): (source: Observable<T>) => Observable<T> {\n  return (source: Observable<T>) =>\n    new Observable<T>((subscriber: Subscriber<T>) => {\n      let hasValue = false;\n      let lastValue: T | null = null;\n      let timerSubscription: Subscription | null = null;\n      let leading = true; // Controls whether we emit immediately.\n\n      const clearTimer = () => {\n        if (timerSubscription) {\n          timerSubscription.unsubscribe();\n          timerSubscription = null;\n        }\n      };\n\n      const resetValues = () => {\n        hasValue = false;\n        lastValue = null;\n        leading = true; // Reset so the next new value is immediate.\n      };\n\n      const emitLastValue = () => {\n        if (hasValue && lastValue !== null) {\n          subscriber.next(lastValue);\n          resetValues();\n        }\n      };\n\n      const sourceSubscription = source.subscribe({\n        next: (value) => {\n          // If we are \"leading\", emit immediately and switch leading off\n          if (leading) {\n            subscriber.next(value);\n            leading = false;\n            timerSubscription = timer(dueTime, scheduler).subscribe(() => {\n              resetValues();\n              clearTimer();\n            });\n            return;\n          }\n\n          // Otherwise, save the value and start (or restart) timer\n          hasValue = true;\n          lastValue = value;\n          clearTimer();\n          timerSubscription = timer(dueTime, scheduler).subscribe(() => {\n            emitLastValue();\n          });\n        },\n        error: (err: unknown) => {\n          clearTimer();\n          subscriber.error(err);\n        },\n        complete: () => {\n          // If there is a pending emission, emit it before completing\n          clearTimer();\n          emitLastValue();\n          subscriber.complete();\n        },\n      });\n\n      // Cleanup logic\n      return () => {\n        clearTimer();\n        sourceSubscription.unsubscribe();\n      };\n    });\n}\n","import type { Observable } from 'rxjs';\nimport { animationFrameScheduler, interval } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { clampf, lerp } from '../math';\n\n/**\n * Creates an observable that emits values transitioning smoothly from the start value to the end value over a specified duration.\n * The transition is performed using linear interpolation (lerp) and clamped to the range [0, 1].\n *\n * @param {number} start - The starting value of the transition.\n * @param {number} end - The ending value of the transition.\n * @param {number} duration - The duration of the transition in milliseconds.\n * @returns {Observable<number>} An observable that emits the interpolated values from start to end over the specified duration.\n */\nexport const smoothTransition = (\n  start: number,\n  end: number,\n  duration: number,\n): Observable<number> => {\n  const startTime = animationFrameScheduler.now();\n  return interval(0, animationFrameScheduler).pipe(\n    map(() => {\n      const elapsed = (animationFrameScheduler.now() - startTime) / duration;\n      return clampf(0, 1, elapsed);\n    }),\n    distinctUntilChanged(),\n    map((fraction) => lerp(start, end, fraction)),\n  );\n};\n","import { tap } from 'rxjs/operators';\nimport type { Observable } from 'rxjs';\nimport { Logger } from '../dev';\nimport { COLOR_CODES } from '../constants';\n\nexport const tapLog =\n  <T>(text: string, ...args: any): ((source: Observable<T>) => Observable<T>) =>\n  (source: Observable<T>) =>\n    source.pipe(\n      tap((data) => {\n        Logger.colored(...COLOR_CODES.TAP_LOG, text, data, ...args);\n      }),\n    );\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4","map"],"mappings":"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"}