{"version":3,"file":"obliczeniowo-elementary-classes.mjs","sources":["../../../../projects/components/classes/colors/ColorRGB.ts","../../../../projects/components/classes/colors/ColorHSV.ts","../../../../projects/components/classes/dates/dates.class.ts","../../../../projects/components/classes/vectors/Point2D.ts","../../../../projects/components/classes/vectors/Point3D.ts","../../../../projects/components/classes/text-transform/text-transform.class.ts","../../../../projects/components/classes/linaar-function-2d/linear-function.2d.ts","../../../../projects/components/classes/domains/abstract-search-domain.ts","../../../../projects/components/classes/domains/default-search-domain.ts","../../../../projects/components/classes/geometries/rectangle.ts","../../../../projects/components/classes/geometries/polygon.ts","../../../../projects/components/classes/obliczeniowo-elementary-classes.ts"],"sourcesContent":["import { ElementaryMath } from '@obliczeniowo/elementary/math';\n\nexport class ColorRGB {\n  private r = 0;\n  private g = 0;\n  private b = 0;\n  protected a = 255;\n\n  /**\n   * Calculate color with linear interpolation using factor parameter\n   */\n  static proportionalColor(\n    firstColor: ColorRGB,\n    secondColor: ColorRGB,\n    factor: number\n  ): ColorRGB {\n    factor = Math.min(1, Math.max(0, factor));\n    return new ColorRGB(\n      firstColor.red * factor + secondColor.red * (1 - factor),\n      firstColor.green * factor + secondColor.green * (1 - factor),\n      firstColor.blue * factor + secondColor.blue * (1 - factor)\n    );\n  }\n\n  static fromHex(hexColor: string) {\n    const color = hexColor.slice(1);\n\n    const red = parseInt(color.substr(0, 2), 16);\n    const green = parseInt(color.substr(2, 2), 16);\n    const blue = parseInt(color.substr(4, 2), 16);\n\n    return new ColorRGB(red, green, blue);\n  }\n\n  static fromHtmlColor(htmlColor: string) {\n    const d = document.createElement('div');\n    d.style.color = htmlColor;\n    window.document.body.appendChild(d);\n    const parts = (window.getComputedStyle(d).color || '').match(/\\d+/g) || ['00' ,'00', '00'];\n    \n    const f = (n: string) => { return parseInt(n, 10); };\n    window.document.body.removeChild(d);\n    return new ColorRGB(f(parts[0]), f(parts[1]), f(parts[2]));\n  }\n\n  constructor(\n    red: number | string,\n    green: number | string,\n    blue: number | string,\n    alpha: number | string = 255\n  ) {\n    this.red = +red;\n    this.green = +green;\n    this.blue = +blue;\n    this.a = +alpha;\n  }\n\n  private getHex(value: number): string {\n    return ('0' + value.toString(16)).substr(-2);\n  }\n\n  /** set red value of color with handling min/max */\n  set red(red: number) {\n    this.r = ElementaryMath.minmax(Math.round(red), 0, 255);\n  }\n\n  get red(): number {\n    return this.r;\n  }\n\n  /** set green value of color with handling min/max */\n  set green(green: number) {\n    this.g = ElementaryMath.minmax(Math.round(green), 0, 255);\n  }\n\n  get green(): number {\n    return this.g;\n  }\n\n  /** set blue value of color with handling min/max */\n  set blue(blue: number) {\n    this.b = ElementaryMath.minmax(Math.round(blue), 0, 255);\n  }\n\n  get blue(): number {\n    return this.b;\n  }\n\n  get alpha(): number {\n    return this.a;\n  }\n\n  /** set alpha value of color with handling min/max */\n  set alpha(alpha: number) {\n    this.a = ElementaryMath.minmax(Math.floor(alpha), 0, 255);\n  }\n\n  /**\n   * Return color in hex format including transparency\n   * @return - format #ffccbbaa (last one is alpha)\n   */\n  get getHexColor(): string {\n    return this.getHexColorBase + this.getHex(Math.round(this.a));\n  }\n\n  /**\n   * Return hex format of color without alpha\n   * @return color in format: #ff00bb\n   */\n  get getHexColorBase(): string {\n    return '#' + this.getHex(this.r) + this.getHex(this.g) + this.getHex(this.b);\n  }\n\n  /**\n   * Return rgba(100, 200, 255, 0.5) color format as string\n   */\n  getRGBAColor(): string {\n    return 'rgba(' + this.r + ', ' + this.g + ', ' + this.b + ', ' + (this.a / 255).toString().substring(0, 5) + ')';\n  }\n\n  toString(): string {\n    return this.getHexColorBase;\n  }\n\n  /**\n   * create object copy\n   */\n  copy(): ColorRGB {\n    return new ColorRGB(this.red, this.green, this.blue, this.alpha);\n  }\n\n  /**\n   * Multiply every single value of colors by factor parameter with handling min/max cases\n   */\n  multiply(factor: number): ColorRGB {\n    return new ColorRGB(this.r * factor, this.g * factor, this.b * factor, this.alpha);\n  }\n\n  negative(): ColorRGB {\n    return new ColorRGB(255 - this.r, 255 - this.b, 255 - this.g, this.alpha);\n  }\n}\n","import { ColorRGB } from './ColorRGB';\n\nexport class ColorHSV {\n  h: number;\n  s: number;\n  v: number;\n\n  protected constructor(h: number, s: number, v: number) {\n    this.h = Math.max(Math.min(ColorHSV.fmod(h, 360), 360), 0);\n    this.s = Math.max(Math.min(s, 1), 0);\n    this.v = Math.max(Math.min(v, 255), 0);\n  }\n\n  /**\n   * Calculate color with linear interpolation using factor parameter\n   */\n     static proportionalColor(\n      firstColor: ColorHSV,\n      secondColor: ColorHSV,\n      factor: number\n    ): ColorHSV {\n      factor = Math.min(1, Math.max(0, factor));\n      return ColorHSV.createColorHSV(\n        firstColor.h * factor + secondColor.h * (1 - factor),\n        firstColor.s * factor + secondColor.s * (1 - factor),\n        firstColor.v * factor + secondColor.v * (1 - factor)\n      );\n    }\n\n  /**\n   * Static constructor for creating ColorHSV object\n   * @param h hue - value from 0 - 360 degrees\n   * @param s saturation - value from 0 - 1\n   * @param v value 0 - 255\n   * @returns ColorHSV object\n   */\n  static createColorHSV(h: number, s: number, v: number): ColorHSV {\n    return new ColorHSV(h, s, v);\n  }\n\n  static fmod(a: number, b: number): number {\n    return a - Math.floor(a / b) * b;\n  }\n\n  /**\n   * Static constructor for creating ColorHSV object\n   * @param colorRGB object of RGB color\n   * @returns brand, brand new object of ColorHSV\n   */\n  static createColorHSVfromRGB(colorRGB: ColorRGB): ColorHSV {\n    const x: number = Math.min(Math.min(colorRGB.red, colorRGB.green), colorRGB.blue);\n    let f: number;\n    let i: number;\n\n    const v = Math.max(Math.max(colorRGB.red, colorRGB.green), colorRGB.blue);\n    let h: number;\n    let s: number;\n    if (x === v) {\n      h = 0;\n      s = 0;\n    } else {\n      f =\n        colorRGB.red === x\n          ? colorRGB.green - colorRGB.blue\n          : colorRGB.green === x\n          ? colorRGB.blue - colorRGB.red\n          : colorRGB.red - colorRGB.green;\n      i = colorRGB.red === x ? 3 : colorRGB.green === x ? 5 : 1;\n      h = ColorHSV.fmod((i - f / (v - x)) * 60, 360);\n      s = (v - x) / v;\n    }\n\n    return new ColorHSV(h, s, v);\n  }\n\n  convertToRGB(): ColorRGB {\n    let i: number;\n    let f: number;\n    let p: number;\n    let q: number;\n    let t: number;\n    let r = 0;\n    let g = 0;\n    let b = 0;\n    let h = this.h;\n    const v = this.v;\n    const s = this.s;\n\n    if (v === 0) {\n      r = 0;\n      g = 0;\n    } else {\n      h /= 60;\n      i = Math.floor(h);\n      f = h - i;\n      p = v * (1 - s);\n      q = v * (1 - s * f);\n      t = v * (1 - s * (1 - f));\n      if (i === 0) {\n        r = v;\n        g = t;\n        b = p;\n      } else if (i === 1) {\n        r = q;\n        g = v;\n        b = p;\n      } else if (i === 2) {\n        r = p;\n        g = v;\n        b = t;\n      } else if (i === 3) {\n        r = p;\n        g = q;\n        b = v;\n      } else if (i === 4) {\n        r = t;\n        g = p;\n        b = v;\n      } else if (i === 5) {\n        r = v;\n        g = p;\n        b = q;\n      }\n    }\n    return new ColorRGB(r, g, b);\n  }\n\n  addHue(hue: number): ColorHSV {\n    return ColorHSV.createColorHSV(this.h + hue, this.s, this.v);\n  }\n\n  toString(): string {\n    return this.convertToRGB().toString();\n  }\n}\n","export type CompareOperators = '<' | '=' | '>' | '!=' | '<=' | '>=';\n\nexport class Dates {\n  static countDays(start: Date, end: Date): number {\n    let iterator = new Date(start);\n    let i = 0;\n\n    if (start.getTime() > end.getTime()) {\n      throw new Error('start date must be smaller then end date')\n    }\n\n    while (!Dates.equalToDayLevel(iterator, end)) {\n      // (24 hours * 60 min * 60 sec * 1000 ms * 2) in dividing part\n      const dt = Math.ceil((end.getTime() - iterator.getTime()) / 172800000);\n      iterator.setDate(iterator.getDate() + dt);\n      i += dt;\n    }\n\n    return i;\n  }\n\n  static countWeeks(start: Date, end: Date): number {\n    return (end.getTime() - start.getTime()) / 604800000;\n  }\n\n  static getWeekDate(date: Date, type: 'last' | 'first' = 'first', offset: number = 0): Date {\n    const weekDay = (date.getDay() + offset) % 7;\n\n    return new Date(date.getTime() + (type === 'first' ? -1 : 1) * 86400000 * weekDay);\n  }\n\n  static equalToDayLevel(first: Date, last: Date): boolean {\n    return first.getMonth() === last.getMonth() && first.getDate() === last.getDate() && first.getFullYear() === last.getFullYear();\n  }\n\n  static equalToTimeLevel(first: Date, last: Date): boolean {\n    return first.getHours() === last.getHours() && first.getMinutes() === last.getMinutes() && first.getSeconds() === last.getSeconds();\n  }\n\n  protected static compare(first: number, last: number, operator: CompareOperators, error: Error): boolean {\n    switch (operator) {\n      case '<':\n        return first < last;\n      case '<=':\n        return first <= last;\n      case '=':\n        return first === last;\n      case '>=':\n        return first >= last;\n      case '>':\n        return first > last;\n      case '!=':\n        return first !== last;\n      default:\n        throw error;\n    }\n  }\n\n  static compareToTimeLevel(first: Date, last: Date, operator: CompareOperators): boolean {\n    const f = Dates.setDateToZero(new Date(first)).getTime();\n    const l = Dates.setDateToZero(new Date(last)).getTime();\n\n    return Dates.compare(f, l, operator, new Error('Wrong operator in Dates.compareToTimeLevel method'));\n  }\n\n  /**\n   * Compare two dates on time level that consider only hours, minutes and seconds (no milliseconds)\n   */\n  static compareToDateLevel(first: Date, last: Date, operator: CompareOperators): boolean {\n    const f = Dates.setTimeToZero(new Date(first)).getTime();\n    const l = Dates.setTimeToZero(new Date(last)).getTime();\n\n    return Dates.compare(f, l, operator, new Error('Wrong operator in Dates.compareToDateLevel method'));\n  }\n\n  /**\n   * set date \n   */\n  static setTimeToZero(date: Date): Date {\n    return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n  }\n\n  /**\n   * clear date part and milliseconds part\n   */\n  static setDateToZero(date: Date): Date {\n    const copy = new Date(date);\n    copy.setTime(Math.floor((date.getTime() % 86400000) / 1000) * 1000);\n\n    return copy;\n  }\n\n  static timeFromArray(time: [number, number, number]): Date {\n    const date = new Date();\n\n    date.setTime(0);\n    date.setHours(time[0], time[1], time[2]);\n\n    return date;\n  }\n}\n","import { ColorType } from '../colors/color-interface';\n\nexport interface IPoint2D {\n  x: number;\n  y: number;\n}\n\nexport interface IDrawText {\n  drawText: (\n    text: string,\n    handlePosition: Point2D,\n    color: ColorType,\n    angle: number,\n    options?: any\n  ) => void;\n\n  setFontSize: (size: number) => void;\n}\n\nexport class Point2D implements IPoint2D {\n  x: number;\n  y: number;\n\n  static isCorrectPoint(point: IPoint2D): boolean {\n    return (\n      // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n      point &&\n      point.x !== undefined &&\n      point.y !== undefined &&\n      point.x !== null &&\n      point.y !== null\n    );\n  }\n\n  static fromInterface(iPoint: IPoint2D): Point2D {\n    return new Point2D(iPoint.x, iPoint.y);\n  }\n\n  /**\n   * Check if two lines described by pairs of points intersects with each other\n   * @param pt1 first line start point\n   * @param pt2 first line end point\n   * @param pt3 second line start point\n   * @param pt4 second line end point\n   * @returns true if intersection exist\n   */\n  static linesIntersect(pt1: Point2D, pt2: Point2D, pt3: Point2D, pt4: Point2D) {\n    if (\n      Math.sign(pt1.subtract(pt2).determinant(pt3.subtract(pt2))) !==\n      Math.sign(pt1.subtract(pt2).determinant(pt4.subtract(pt2))) &&\n      Math.sign(pt3.subtract(pt4).determinant(pt1.subtract(pt4))) !==\n      Math.sign(pt3.subtract(pt4).determinant(pt2.subtract(pt4)))\n    ) {\n      return true;\n    }\n    return false;\n  }\n\n  constructor(x: number = 0, y: number = 0) {\n    this.x = x;\n    this.y = y;\n  }\n\n  get isZeroLength(): boolean {\n    return this.x === 0 && this.y === 0;\n  }\n\n  isPtInCircle(centralPoint: Point2D, ray: number): boolean {\n    return this.subtract(centralPoint).sickLength() < ray * ray;\n  }\n\n  isPtInRect(x: number, y: number, width: number, height: number) {\n    return this.x >= x && this.x <= x + width && this.y >= y && this.y <= y + height;\n  }\n\n  isEqual(point2D: Point2D): boolean {\n    return this.x === point2D.x && this.y === point2D.y;\n  }\n\n  multiply(value: number): Point2D {\n    return new Point2D(value * this.x, value * this.y);\n  }\n\n  scalarMultiple(other: Point2D): number {\n    return this.x * other.x + this.y * other.y;\n  }\n\n  determinant(other: Point2D): number {\n    return this.x * other.y - this.y * other.x;\n  }\n\n  scale(xs: number, ys: number): Point2D {\n    return new Point2D(this.x * xs, this.y * ys);\n  }\n\n  add(point: Point2D): Point2D {\n    return new Point2D(this.x + point.x, this.y + point.y);\n  }\n\n  subtract(point: Point2D): Point2D {\n    return new Point2D(this.x - point.x, this.y - point.y);\n  }\n\n  length(): number {\n    return Math.sqrt(this.scalarMultiple(this));\n  }\n\n  /**\n   * Set vector length\n   * @param length new length to set\n   * @returns new instance of Point2D with new length if current length of vector is !== 0 in this case\n   * return degenerated { x: 0, y: 0 } vector\n   */\n  setLength(length: number): Point2D {\n    const k = length / (this.length() || 1);\n\n    return new Point2D(k * this.x, k * this.y);\n  }\n\n  /**\n   * Calculate x * x + y * y = scalarMultiple(this)\n   * @returns return sick length that can be useful to compare distance between points without calculate sqrt.\n   * for example if you have two points P1, P2 then P1.sickLength() < P2.sickLength() means P1 is closer to beginning of\n   * x = 0, y = 0 point then P2 (not require calculate sqrt)\n   */\n  sickLength(): number {\n    return this.scalarMultiple(this);\n  }\n\n  angle(reverseX: boolean = false): number {\n    return Math.atan2(this.y, reverseX ? -this.x : this.x);\n  }\n\n  /**\n   * rotate point by angle\n   * @param angle - in radians\n   * @returns new Instance of Point2D\n   */\n  rotate(angle: number): Point2D {\n    const sin = Math.sin(angle);\n    const cos = Math.cos(angle);\n\n    return new Point2D(\n      this.x * cos - this.y * sin,\n      this.x * sin + this.y * cos\n    );\n  }\n\n  /**\n   * Calculate Point2D containing coordinates of point thrown perpendicularly on line\n   * @param startLinePoint first point of line\n   * @param endLinePoint last point of line\n   * @returns if points are equal then null, if not then new instance of Point2D containing coordinates of point thrown\n   * perpendicularly on line\n   */\n  getPointOnLine(startLinePoint: Point2D, endLinePoint: Point2D): Point2D | null {\n    if (startLinePoint.isEqual(endLinePoint)) {\n      return null;\n    }\n\n    const lineVector: Point2D = startLinePoint.subtract(endLinePoint);\n    const u: number =\n      this.subtract(startLinePoint).scalarMultiple(\n        startLinePoint.subtract(endLinePoint)\n      ) / lineVector.scalarMultiple(lineVector);\n\n    return startLinePoint.add(lineVector.multiply(u));\n  }\n\n  /**\n   * Method to draw point position using IDrawingInterface (require only DrawText method)\n   * @param ctx can be any IDrawingInterface or your own class containing drawing method\n   * @param options options to control drawing:\n   * x, y - position coordinates to display (can be different then coordinates)\n   * precision - 2 for value 2.3333 display 2.33\n   * color - of text\n   * angle - of text\n   */\n  drawPointPos(\n    ctx: IDrawText,\n    options: {\n      x?: number;\n      y?: number;\n      precision?: number;\n      color?: string;\n      angle?: number;\n      fontSize?: number;\n    }\n  ): void {\n    ctx.setFontSize(options?.fontSize || 5);\n    ctx.drawText(\n      `X: ${this.x.toFixed(options?.precision || 3)}; Y: ${this.y.toFixed(\n        options?.precision || 3\n      )}`,\n      new Point2D(options?.x || this.x, options?.y || this.y),\n      options?.color || 'black',\n      options?.angle || 0,\n    );\n  }\n\n  /**\n   * Make brand brand new copy of object\n   * @returns new instance\n   */\n  copy(): Point2D {\n    return new Point2D(this.x, this.y);\n  }\n\n  /**\n   * Simplify to interface\n   *\n   * @returns IPoint2D interface\n   */\n  toInterface(): IPoint2D {\n    return { x: this.x, y: this.y };\n  }\n\n  /**\n   * Convert to string\n   * @param separator separator to use for coordinates\n   * @returns string in format: ' 10, 23.5'\n   */\n  toString(separator: string = ','): string {\n    return ' ' + this.x + separator + this.y;\n  }\n\n  toCssTranslate(unit: '' | 'px' | 'rem' = '') {\n    return `translate(${this.x}${unit}, ${this.y}${unit})`\n  }\n}\n\nexport interface IPoint2DData<T = any> extends IPoint2D {\n  extData: T;\n}\n\nexport class Point2DData<T = any> extends Point2D {\n  extData?: T;\n\n  constructor(x: number = 0, y: number = 0, extData?: T) {\n    super(x, y);\n\n    this.extData = extData;\n  }\n}\n","export class Point3D {\n    x = 0;\n    y = 0;\n    z = 0;\n\n    constructor(x: number = 0, y: number = 0, z: number = 0) {\n        this.x = x;\n        this.y = y;\n        this.z = z;\n    }\n\n    add(point: Point3D): Point3D {\n        return new Point3D(\n            this.x + point.x,\n            this.y + point.y,\n            this.z + point.z\n        );\n    }\n\n    subtract(point: Point3D): Point3D {\n        return new Point3D(\n            this.x - point.x,\n            this.y - point.y,\n            this.z - point.z\n        );\n    }\n\n    sickLength(): number {\n        return this.x * this.x + this.y * this.y + this.z * this.z;\n    }\n\n    length(): number {\n        return Math.sqrt(this.sickLength());\n    }\n\n    copy(p3d: Point3D): Point3D {\n        return new Point3D(p3d.x, p3d.y, p3d.z);\n    }\n}\n","/* eslint-disable @typescript-eslint/non-nullable-type-assertion-style */\nexport class TextTransform {\n  /**\n   * Split text only on space sign and if length of more then 1 word in one line is greater then maxLength\n   * @param text - text to split\n   * @param maxLength - max length of line\n   * @returns table of splitted text\n   */\n  static splitByLengthAndWords(text: string, maxLength: number) {\n    const strings = text.split(' ');\n\n    const arr: string[] = [];\n\n    arr[0] = strings.shift() || '';\n\n    while (strings.length) {\n      if (arr[arr.length - 1].length + 1 + strings[0].length < maxLength) {\n        arr[arr.length - 1] = arr[arr.length - 1] + (strings.shift() as string);\n      } else {\n        arr.push(strings.shift() as string);\n      }\n    }\n\n    return arr;\n  }\n\n  /**\n   * Transform text `some text {to-replace-1}, by using other object {to-replace-2}` using object properties keys\n   * to replace in text by given properties object\n   * @param text - text with hidden {key} value\n   * @param properties - object properties\n   * {\n   *    'to-replace-1': 'replace',\n   *    'to-replace-2': 'replace 2'\n   * }\n   * @returns text with replaced by keys part, if key not exist in properties object then matching text is put there\n   */\n  static prepare(\n    text: string,\n    properties: { [key: string]: string },\n    prepareProps: (\n      key: string,\n      properties: { [key: string]: string }\n    ) => string | undefined = (\n      key: string,\n      properties: { [key: string]: string }\n    ) => properties[key]?.toString()\n  ) {\n    const pattern = /{(\\w+)}/g;\n\n    const replacePlaceholders = (match: any, fieldName: string) => {\n      const fieldValue = prepareProps(fieldName, properties);\n\n      return fieldValue !== undefined ? String(fieldValue) : match;\n    };\n\n    return text.replace(pattern, replacePlaceholders);\n  }\n\n  static splitByMathOperator(text: string): string[] {\n    const operators = ['+', '-', '*', '/', '%', '^', '(', ')'];\n    const operatorTable = [];\n\n    let currentFragment = '';\n    for (let i = 0; i < text.length; i++) {\n      const char = text.charAt(i);\n\n      if (operators.includes(char)) {\n        if (currentFragment !== '') {\n          operatorTable.push(currentFragment);\n          currentFragment = '';\n        }\n        operatorTable.push(char);\n      } else {\n        currentFragment += char;\n      }\n    }\n\n    if (currentFragment !== '') {\n      operatorTable.push(currentFragment);\n    }\n\n    return operatorTable;\n  }\n}\n","import { Point2D } from '../vectors/Point2D';\n\nexport class LinearFunction2D {\n  static fromTwoPoints(p1: Point2D, p2: Point2D): LinearFunction2D | undefined {\n    // if pt.x === p2.x then there is no way to define proper f(x) function\n    if (p1.x === p2.x) {\n      return undefined;\n    }\n\n    const a = (p2.y - p1.y) / (p2.x - p1.x);\n    const b = p1.y - a * p1.x;\n\n    return new LinearFunction2D(a, b);\n  }\n\n  constructor(public a: number, public b: number) {}\n\n  zeroPoint() {\n    const { a, b } = this;\n    return -b / a;\n  }\n\n  xPoint(y: number) {\n    const { a, b } = this;\n    return (y - b) / a;\n  }\n\n  yPoint(x: number) {\n    const { a, b } = this;\n    return x * a + b;\n  }\n}\n","export abstract class AbstractSearchDomain<T> {\n    items: T[] = [];\n    regExpOn = false;\n\n    filtered: T[] = [];\n    abstract search(filter: string): void;\n}\n","import { AbstractSearchDomain } from './abstract-search-domain';\n\nexport class DefaultSearchDomain<T extends { id: string | number; text: string }> extends AbstractSearchDomain<T> {\n  constructor(items: T[]) {\n    super();\n\n    this.items = items;\n    this.filtered = [...this.items];\n  }\n\n  search(filter: string): void {\n    if (filter?.length) {\n      filter = filter.toLowerCase();\n      if (this.regExpOn) {\n        const reg = new RegExp(filter, 'i');\n        this.filtered = this.items.filter(item => reg.test(item.text))\n      } else {\n        this.filtered = this.items.filter(item => item.text.toLocaleLowerCase().includes(filter));\n      }\n    } else {\n      this.filtered = [...this.items];\n    }\n  }\n}\n","import { ColorType } from '../colors/color-interface';\nimport { Point2D } from '../vectors/Point2D';\n\ninterface IDrawRectangle {\n  drawRect: (\n    x: number,\n    y: number,\n    width: number,\n    height: number,\n    stroke: number,\n    strokeColor: ColorType,\n    fillColor: ColorType,\n    options?: any\n  ) => void;\n}\n\nexport class Rectangle {\n  width = 0;\n  height = 0;\n  start!: Point2D;\n  end!: Point2D;\n  constructor(start = new Point2D(), width = 0, height = 0) {\n    Object.assign(this, { start, width, height });\n  }\n\n  get left() {\n    return this.start.x;\n  }\n\n  get bottom() {\n    return this.start.y;\n  }\n\n  get top() {\n    return this.start.y + this.height;\n  }\n\n  get right() {\n    return this.start.x + this.width;\n  }\n\n  isPointIn(point = new Point2D()) {\n    const { left, right, bottom, top } = this;\n    if (\n      point.x >= left &&\n      point.x <= right &&\n      point.y >= bottom &&\n      point.y <= top\n    ) {\n      return true;\n    }\n    return false;\n  }\n\n  isRectanglesOverlapping(rectangle = new Rectangle()) {\n    if (\n      this.isPointIn(rectangle.start) ||\n      this.isPointIn(new Point2D(rectangle.right, rectangle.bottom)) ||\n      this.isPointIn(new Point2D(rectangle.right, rectangle.top)) ||\n      this.isPointIn(new Point2D(rectangle.left, rectangle.top)) ||\n      rectangle.isPointIn(this.start) ||\n      rectangle.isPointIn(new Point2D(this.right, this.bottom)) ||\n      rectangle.isPointIn(new Point2D(this.right, this.top)) ||\n      rectangle.isPointIn(new Point2D(this.left, this.top)) ||\n      Point2D.linesIntersect(this.start, new Point2D(this.right, this.top), rectangle.start, new Point2D(rectangle.right, rectangle.top))\n    ) {\n      return true;\n    }\n    return false;\n  }\n\n  drawRectangle(ctx: IDrawRectangle, stroke: number, strokeColor: ColorType, fillColor: ColorType) {\n    const { start, width, height } = this;\n    ctx.drawRect(start.x, start.y, width, height, stroke, strokeColor, fillColor);\n  }\n}","import { ColorType } from '../colors/color-interface';\nimport { Point2D } from '../vectors/Point2D';\nimport { Rectangle } from './rectangle';\n\ninterface IDrawPolyline {\n  drawPolyline: (\n    points: Point2D[],\n    stroke: number,\n    color: ColorType,\n    options?: { close?: boolean, [key: string]: any }\n  ) => {}\n}\n\nexport class Polygon {\n  static random = (spaceWidth: number, spaceHeight: number, size = 20) => {\n    const maxRadius = size;\n    const points: Point2D[] = [];\n    const center = new Point2D(\n      Math.random() * (spaceWidth - 2 * maxRadius) + maxRadius,\n      Math.random() * (spaceHeight - 2 * maxRadius) + maxRadius\n    );\n\n    const nrOfPoints = Math.ceil(Math.random() * 5) + 5;\n\n    for (let i = 0; i < nrOfPoints; i++) {\n      const angle = (i / nrOfPoints) * Math.PI * 2;\n      const radius = Math.random() * maxRadius;\n      points.push(\n        new Point2D(\n          radius * Math.cos(angle) + center.x,\n          radius * Math.sin(angle) + center.y\n        )\n      );\n    }\n\n    return new Polygon(points);\n  };\n\n  points: Point2D[] = [];\n\n  constructor(points: Point2D[] = []) {\n    this.points = points;\n  }\n\n  getBondingRect() {\n    const polygon = this.points;\n\n    // detecting if in bounding box\n    let minX = polygon[0].x;\n    let maxX = polygon[0].x;\n    let minY = polygon[0].y;\n    let maxY = polygon[0].y;\n\n    for (let i = 1; i < polygon.length; i++) {\n      const q = polygon[i];\n      minX = Math.min(q.x, minX);\n      maxX = Math.max(q.x, maxX);\n      minY = Math.min(q.y, minY);\n      maxY = Math.max(q.y, maxY);\n    }\n\n    return new Rectangle(new Point2D(minX, minY), maxX - minX, maxY - minY);\n  }\n\n  isPointIn(point: Point2D) {\n    const polygon = this.points;\n\n    // detecting if in bounding box\n    let minX = polygon[0].x;\n    let maxX = polygon[0].x;\n    let minY = polygon[0].y;\n    let maxY = polygon[0].y;\n\n    for (let i = 1; i < polygon.length; i++) {\n      const q = polygon[i];\n      minX = Math.min(q.x, minX);\n      maxX = Math.max(q.x, maxX);\n      minY = Math.min(q.y, minY);\n      maxY = Math.max(q.y, maxY);\n    }\n\n    if (point.x < minX || point.x > maxX || point.y < minY || point.y > maxY) {\n      return false;\n    }\n\n    // https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n    let inside = false;\n    let j = polygon.length - 1;\n    for (let i = 0; i < polygon.length; j = i++) {\n      if (\n        polygon[i].y > point.y !== polygon[j].y > point.y &&\n        point.x <\n        ((polygon[j].x - polygon[i].x) * (point.y - polygon[i].y)) /\n        (polygon[j].y - polygon[i].y) +\n        polygon[i].x\n      ) {\n        inside = !inside;\n      }\n    }\n\n    return inside;\n  }\n\n  isIntersect(polygon = new Polygon()) {\n    const { points } = this;\n    const { points: pPoints } = polygon;\n\n    for (\n      let start = 0, end = points.length - 1;\n      start < points.length - 1;\n      end = start++\n    ) {\n      const fp = points[start];\n      const lp = points[end];\n      for (\n        let pStart = 0, pEnd = pPoints.length - 1;\n        pStart < pPoints.length - 1;\n        pEnd = pStart++\n      ) {\n        const pfp = pPoints[pStart];\n        const plp = pPoints[pEnd];\n        if (Point2D.linesIntersect(fp, lp, pfp, plp)) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  subtract(point: Point2D) {\n    return new Polygon(this.points.map((pt) => pt.subtract(point)));\n  }\n\n  multiply(scalar: number) {\n    return new Polygon(this.points.map((point) => point.multiply(scalar)));\n  }\n\n  drawPolygon(ctx: IDrawPolyline, stroke: number, color: ColorType) {\n    ctx.drawPolyline(this.points, stroke, color);\n  }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}