{"version":3,"file":"math-world.cjs","sources":["../src/constants/tailwindcss.ts","../src/classes/vector-2d.ts","../src/classes/paint.ts","../src/classes/math-world.ts"],"sourcesContent":["import { TailwindColorName, TailwindColorValue } from \"../types/tailwind\";\n\nexport const TAILWIND_COLORS: { [key in TailwindColorName]: { [key in TailwindColorValue]: number[] } } = {\n    Amber: {\n        50: [255, 251, 235],\n        100: [254, 243, 199],\n        200: [253, 230, 138],\n        300: [252, 211, 77],\n        400: [251, 191, 36],\n        500: [245, 158, 11],\n        600: [217, 119, 6],\n        700: [180, 83, 9],\n        800: [146, 64, 14],\n        900: [120, 53, 15],\n        950: [69, 26, 3],\n    },\n    Blue: {\n        50: [239, 246, 255],\n        100: [219, 234, 254],\n        200: [191, 219, 254],\n        300: [147, 197, 253],\n        400: [96, 165, 250],\n        500: [59, 130, 246],\n        600: [37, 99, 235],\n        700: [29, 78, 216],\n        800: [30, 64, 175],\n        900: [30, 58, 138],\n        950: [23, 37, 84],\n    },\n    Cyan: {\n        50: [236, 254, 255],\n        100: [207, 250, 254],\n        200: [165, 243, 252],\n        300: [103, 232, 249],\n        400: [34, 211, 238],\n        500: [6, 182, 212],\n        600: [8, 145, 178],\n        700: [14, 116, 144],\n        800: [21, 94, 117],\n        900: [22, 78, 99],\n        950: [8, 51, 68],\n    },\n    Emerald: {\n        50: [236, 253, 245],\n        100: [209, 250, 229],\n        200: [167, 243, 208],\n        300: [110, 231, 183],\n        400: [52, 211, 153],\n        500: [16, 185, 129],\n        600: [5, 150, 105],\n        700: [4, 120, 87],\n        800: [6, 95, 70],\n        900: [6, 78, 59],\n        950: [2, 44, 34],\n    },\n    Fuchsia: {\n        50: [253, 244, 255],\n        100: [250, 232, 255],\n        200: [245, 208, 254],\n        300: [240, 171, 252],\n        400: [232, 121, 249],\n        500: [217, 70, 239],\n        600: [192, 38, 211],\n        700: [162, 28, 175],\n        800: [134, 25, 143],\n        900: [112, 26, 117],\n        950: [74, 4, 78],\n    },\n    Gray: {\n        50: [249, 250, 251],\n        100: [243, 244, 246],\n        200: [229, 231, 235],\n        300: [209, 213, 219],\n        400: [156, 163, 175],\n        500: [107, 114, 128],\n        600: [75, 85, 99],\n        700: [55, 65, 81],\n        800: [31, 41, 55],\n        900: [17, 24, 39],\n        950: [3, 7, 18],\n    },\n    Green: {\n        50: [240, 253, 244],\n        100: [220, 252, 231],\n        200: [187, 247, 208],\n        300: [134, 239, 172],\n        400: [74, 222, 128],\n        500: [34, 197, 94],\n        600: [22, 163, 74],\n        700: [21, 128, 61],\n        800: [22, 101, 52],\n        900: [20, 83, 45],\n        950: [5, 46, 22],\n    },\n    Indigo: {\n        50: [238, 242, 255],\n        100: [224, 231, 255],\n        200: [199, 210, 254],\n        300: [165, 180, 252],\n        400: [129, 140, 248],\n        500: [99, 102, 241],\n        600: [79, 70, 229],\n        700: [67, 56, 202],\n        800: [55, 48, 163],\n        900: [49, 46, 129],\n        950: [30, 27, 75],\n    },\n    Lime: {\n        50: [247, 254, 231],\n        100: [236, 252, 203],\n        200: [217, 249, 157],\n        300: [190, 242, 100],\n        400: [163, 230, 53],\n        500: [132, 204, 22],\n        600: [101, 163, 13],\n        700: [77, 124, 15],\n        800: [63, 98, 18],\n        900: [54, 83, 20],\n        950: [26, 46, 5],\n    },\n    Neutral: {\n        50: [250, 250, 250],\n        100: [245, 245, 245],\n        200: [229, 229, 229],\n        300: [212, 212, 212],\n        400: [163, 163, 163],\n        500: [115, 115, 115],\n        600: [82, 82, 82],\n        700: [64, 64, 64],\n        800: [38, 38, 38],\n        900: [23, 23, 23],\n        950: [10, 10, 10],\n    },\n    Orange: {\n        50: [255, 247, 237],\n        100: [255, 237, 213],\n        200: [254, 215, 170],\n        300: [253, 186, 116],\n        400: [251, 146, 60],\n        500: [249, 115, 22],\n        600: [234, 88, 12],\n        700: [194, 65, 12],\n        800: [154, 52, 18],\n        900: [124, 45, 18],\n        950: [67, 20, 7],\n    },\n    Pink: {\n        50: [253, 242, 248],\n        100: [252, 231, 243],\n        200: [251, 207, 232],\n        300: [249, 168, 212],\n        400: [244, 114, 182],\n        500: [236, 72, 153],\n        600: [219, 39, 119],\n        700: [190, 24, 93],\n        800: [157, 23, 77],\n        900: [131, 24, 67],\n        950: [80, 7, 36],\n    },\n    Purple: {\n        50: [250, 245, 255],\n        100: [243, 232, 255],\n        200: [233, 213, 255],\n        300: [216, 180, 254],\n        400: [192, 132, 252],\n        500: [168, 85, 247],\n        600: [147, 51, 234],\n        700: [126, 34, 206],\n        800: [107, 33, 168],\n        900: [88, 28, 135],\n        950: [59, 7, 100],\n    },\n    Red: {\n        50: [254, 242, 242],\n        100: [254, 226, 226],\n        200: [254, 202, 202],\n        300: [252, 165, 165],\n        400: [248, 113, 113],\n        500: [239, 68, 68],\n        600: [220, 38, 38],\n        700: [185, 28, 28],\n        800: [153, 27, 27],\n        900: [127, 29, 29],\n        950: [69, 10, 10],\n    },\n    Rose: {\n        50: [255, 241, 242],\n        100: [255, 228, 230],\n        200: [254, 205, 211],\n        300: [253, 164, 175],\n        400: [251, 113, 133],\n        500: [244, 63, 94],\n        600: [225, 29, 72],\n        700: [190, 18, 60],\n        800: [159, 18, 57],\n        900: [136, 19, 55],\n        950: [76, 5, 25],\n    },\n    Sky: {\n        50: [240, 249, 255],\n        100: [224, 242, 254],\n        200: [186, 230, 253],\n        300: [125, 211, 252],\n        400: [56, 189, 248],\n        500: [14, 165, 233],\n        600: [2, 132, 199],\n        700: [3, 105, 161],\n        800: [7, 89, 133],\n        900: [12, 74, 110],\n        950: [8, 47, 73],\n    },\n    Slate: {\n        50: [248, 250, 252],\n        100: [241, 245, 249],\n        200: [226, 232, 240],\n        300: [203, 213, 225],\n        400: [148, 163, 184],\n        500: [100, 116, 139],\n        600: [71, 85, 105],\n        700: [51, 65, 85],\n        800: [30, 41, 59],\n        900: [15, 23, 42],\n        950: [2, 6, 23],\n    },\n    Stone: {\n        50: [250, 250, 249],\n        100: [245, 245, 244],\n        200: [231, 229, 228],\n        300: [214, 211, 209],\n        400: [168, 162, 158],\n        500: [120, 113, 108],\n        600: [87, 83, 78],\n        700: [68, 64, 60],\n        800: [41, 37, 36],\n        900: [28, 25, 23],\n        950: [12, 10, 9],\n    },\n    Teal: {\n        50: [240, 253, 250],\n        100: [204, 251, 241],\n        200: [153, 246, 228],\n        300: [94, 234, 212],\n        400: [45, 212, 191],\n        500: [20, 184, 166],\n        600: [13, 148, 136],\n        700: [15, 118, 110],\n        800: [17, 94, 89],\n        900: [19, 78, 74],\n        950: [4, 47, 46],\n    },\n    Violet: {\n        50: [245, 243, 255],\n        100: [237, 233, 254],\n        200: [221, 214, 254],\n        300: [196, 181, 253],\n        400: [167, 139, 250],\n        500: [139, 92, 246],\n        600: [124, 58, 237],\n        700: [109, 40, 217],\n        800: [91, 33, 182],\n        900: [76, 29, 149],\n        950: [46, 16, 101],\n    },\n    Yellow: {\n        50: [254, 252, 232],\n        100: [254, 249, 195],\n        200: [254, 240, 138],\n        300: [253, 224, 71],\n        400: [250, 204, 21],\n        500: [234, 179, 8],\n        600: [202, 138, 4],\n        700: [161, 98, 7],\n        800: [133, 77, 14],\n        900: [113, 63, 18],\n        950: [66, 32, 6],\n    },\n    Zinc: {\n        50: [250, 250, 250],\n        100: [244, 244, 245],\n        200: [228, 228, 231],\n        300: [212, 212, 216],\n        400: [161, 161, 170],\n        500: [113, 113, 122],\n        600: [82, 82, 91],\n        700: [63, 63, 70],\n        800: [39, 39, 42],\n        900: [24, 24, 27],\n        950: [9, 9, 11],\n    },\n};\n","import Vector2DContract from \"../contracts/vector2d-base\";\nimport { Point } from \"../types/others\";\n\nexport class Vector2D implements Vector2DContract {\n    private _x: number;\n    private _y: number;\n\n    public constructor(x = 0, y = 0) {\n        this._x = x;\n        this._y = y;\n    }\n\n    public get x(): number {\n        return this._x;\n    }\n\n    public get y(): number {\n        return this._y;\n    }\n\n    public getX(): number {\n        return this._x;\n    }\n\n    public getY(): number {\n        return this._y;\n    }\n\n    public setX(x: number): this {\n        this._x = x;\n        return this;\n    }\n\n    public setY(y: number): this {\n        this._y = y;\n        return this;\n    }\n\n    public magnitude(): number {\n        return Math.hypot(this._x, this._y);\n    }\n\n    public direction(): number {\n        return Math.atan2(this._y, this._x);\n    }\n\n    public angleInRadians(): number {\n        return Math.atan2(this._y, this._x);\n    }\n\n    public angleInDegrees(): number {\n        const rad = Math.atan2(this._y, this._x);\n        if (rad < 0) return 360.0 + rad * (180 / Math.PI);\n        return rad * (180 / Math.PI);\n    }\n\n    public normalize(): this {\n        this.div(this.magnitude());\n        return this;\n    }\n\n    public normalized(): Vector2D {\n        return this.clone().normalize();\n    }\n\n    public add(value: Vector2D | Point): this {\n        this._x += value.x;\n        this._y += value.y;\n        return this;\n    }\n\n    public added(value: Vector2D | Point): Vector2D {\n        return this.clone().add(value);\n    }\n\n    public addX(value: number): this {\n        this._x = this.x + value;\n        return this;\n    }\n\n    public addedX(value: number): Vector2D {\n        return this.clone().addX(value);\n    }\n\n    public subX(value: number): this {\n        this._x = this.x - value;\n        return this;\n    }\n\n    public subtractedX(value: number): Vector2D {\n        return this.clone().subX(value);\n    }\n\n    public addY(value: number): this {\n        this._y = this.y + value;\n        return this;\n    }\n\n    public addedY(value: number): Vector2D {\n        return this.clone().addY(value);\n    }\n\n    public subY(value: number): this {\n        this._y = this.y - value;\n        return this;\n    }\n\n    public subtractedY(value: number): Vector2D {\n        return this.clone().subY(value);\n    }\n\n    public sub(value: Vector2D | Point): this {\n        this._x -= value.x;\n        this._y -= value.y;\n        return this;\n    }\n\n    public subtracted(value: Vector2D | Point): Vector2D {\n        return this.clone().sub(value);\n    }\n\n    public mult(value: number): this {\n        this._x *= value;\n        this._y *= value;\n        return this;\n    }\n\n    public scale(scalar: number): this {\n        return this.mult(scalar);\n    }\n\n    public scaled(scalar: number): Vector2D {\n        return this.clone().scale(scalar);\n    }\n\n    public div(value: number): this {\n        this._x /= value;\n        this._y /= value;\n        return this;\n    }\n\n    public divided(value: number): Vector2D {\n        return this.clone().div(value);\n    }\n\n    public dot(value: Vector2D | Point): number {\n        return this._x * value.x + this._y * value.y;\n    }\n\n    public clone(): Vector2D {\n        return new Vector2D(this._x, this._y);\n    }\n\n    public round(): this {\n        this._x = Math.round(this._x);\n        this._y = Math.round(this._y);\n        return this;\n    }\n\n    public rounded(): Vector2D {\n        return this.clone().round();\n    }\n\n    public fix(fractionDigits?: number | undefined): this {\n        this._x = parseFloat(this._x.toFixed(fractionDigits));\n        this._y = parseFloat(this._y.toFixed(fractionDigits));\n        return this;\n    }\n\n    public fixed(fractionDigits?: number | undefined): Vector2D {\n        return this.clone().fix(fractionDigits);\n    }\n\n    public isEqual(value: Vector2D | Point): boolean {\n        return this._x === value.x && this._y === value.y;\n    }\n\n    public set(x: number, y: number): this {\n        this._x = x;\n        this._y = y;\n        return this;\n    }\n\n    public toString(fractionDigits?: number | undefined): string {\n        return `(${this._x.toFixed(fractionDigits)},${this._y.toFixed(fractionDigits)})`;\n    }\n\n    public log(): void {\n        console.log(\"X -> \" + this._x + \"\\n Y -> \" + this._y);\n    }\n\n    public toPoint(): Point {\n        return { x: this._x, y: this._y };\n    }\n\n    public fromPoint(point: Point): Vector2D {\n        return new Vector2D(point.x, point.y);\n    }\n\n    public static fromPoint(point: Point): Vector2D {\n        return new Vector2D(point.x, point.y);\n    }\n}\n","import { TAILWIND_COLORS } from \"../constants/tailwindcss\";\nimport MathWorldContract from \"../contracts/math-world-base\";\nimport PaintContract from \"../contracts/paint-base\";\nimport { PaintDrawMode, Point } from \"../types/others\";\nimport { ArcDraw, CapsuleDraw, CircleDraw, LineDraw, PointDraw, RectDraw, TextDraw } from \"../types/shapes\";\nimport { TailwindColorName, TailwindColorValue } from \"../types/tailwind\";\nimport { Vector2D } from \"./vector-2d\";\n\nexport class Paint implements PaintContract {\n    private draw_mode: PaintDrawMode = \"off\";\n\n    constructor(private world_math: MathWorldContract) {}\n\n    public mode(draw_mode: PaintDrawMode): void {\n        this.draw_mode = draw_mode;\n    }\n\n    public off(): void {\n        this.draw_mode = \"off\";\n    }\n\n    public screen(): void {\n        this.draw_mode = \"screen\";\n    }\n\n    public world(): void {\n        this.draw_mode = \"world\";\n    }\n\n    public cartesian(): void {\n        this.draw_mode = \"cartesian\";\n    }\n\n    // arc\n    public arc({ point, radius, startAngle = 0, endAngle = Math.PI * 2, startAngleForHumans, endAngleForHumans, lineWidth = 1, strokeColor = \"white\", fillColor, clockwise = false, lineDash, rotate, lineToCenter }: ArcDraw): this {\n        const ctx = this.world_math.getContext();\n\n        point = this.getPointByDrawMode(point);\n        radius = this.draw_mode === \"cartesian\" ? radius * this.world_math.getGridSize() : radius;\n        startAngle = startAngleForHumans ? -this.angleInRadians(startAngleForHumans) : startAngle;\n        endAngle = endAngleForHumans ? -this.angleInRadians(endAngleForHumans) : endAngle;\n        lineToCenter = lineToCenter ?? true;\n\n        if (this.draw_mode === \"screen\" || rotate) ctx.save();\n        if (this.draw_mode === \"screen\") ctx.resetTransform();\n\n        if (rotate) {\n            ctx.translate(point.x, point.y);\n            ctx.rotate(rotate);\n            ctx.translate(-point.x, -point.y);\n        }\n\n        ctx.beginPath();\n        if (lineDash) ctx.setLineDash(lineDash);\n        if (lineToCenter) ctx.lineTo(point.x, point.y);\n        ctx.arc(point.x, point.y, radius, startAngle, endAngle, endAngleForHumans ? true : clockwise);\n        ctx.strokeStyle = strokeColor;\n        ctx.lineWidth = lineWidth;\n        if (lineToCenter) ctx.lineTo(point.x, point.y);\n        ctx.stroke();\n        if (fillColor) {\n            ctx.fillStyle = fillColor;\n            ctx.fill();\n        }\n        if (lineDash) ctx.setLineDash([]);\n        ctx.closePath();\n        if (this.draw_mode === \"screen\" || rotate) ctx.restore();\n\n        return this;\n    }\n\n    // circle\n    public circle({ point, radius, startAngle = 0, endAngle = Math.PI * 2, startAngleForHumans, endAngleForHumans, lineWidth = 1, strokeColor = \"white\", fillColor, clockwise = false, lineDash, rotate, lineToCenter }: CircleDraw): this {\n        const ctx = this.world_math.getContext();\n\n        point = this.getPointByDrawMode(point);\n        radius = this.draw_mode === \"cartesian\" ? radius * this.world_math.getGridSize() : radius;\n        startAngle = startAngleForHumans ? -this.angleInRadians(startAngleForHumans) : startAngle;\n        endAngle = endAngleForHumans ? -this.angleInRadians(endAngleForHumans) : endAngle;\n        lineToCenter = lineToCenter ?? true;\n\n        if (this.draw_mode === \"screen\" || rotate) ctx.save();\n        if (this.draw_mode === \"screen\") ctx.resetTransform();\n\n        if (rotate) {\n            ctx.translate(point.x, point.y);\n            ctx.rotate(rotate);\n            ctx.translate(-point.x, -point.y);\n        }\n\n        ctx.beginPath();\n        if (lineDash) ctx.setLineDash(lineDash);\n        if (lineToCenter) ctx.lineTo(point.x, point.y);\n        ctx.arc(point.x, point.y, radius, startAngle, endAngle, endAngleForHumans ? true : clockwise);\n        ctx.strokeStyle = strokeColor;\n        ctx.lineWidth = lineWidth;\n        if (lineToCenter) ctx.lineTo(point.x, point.y);\n        ctx.stroke();\n        if (fillColor) {\n            ctx.fillStyle = fillColor;\n            ctx.fill();\n        }\n        if (lineDash) ctx.setLineDash([]);\n        ctx.closePath();\n        if (this.draw_mode === \"screen\" || rotate) ctx.restore();\n\n        return this;\n    }\n\n    // capsule\n    public capsule({ start, end, radius, lineWidth = 1, strokeColor = \"white\", fillColor, lineDash, rotate }: CapsuleDraw): this {\n        start = this.getPointByDrawMode(start);\n        end = this.getPointByDrawMode(end);\n        radius = this.draw_mode === \"cartesian\" ? radius * this.world_math.getGridSize() : radius;\n        const center = new Vector2D((Math.min(start.x, end.x) + Math.max(start.x, end.x)) / 2, (Math.min(start.y, end.y) + Math.max(start.y, end.y)) / 2);\n        const angleRadians = Math.atan2(end.y - start.y, end.x - start.x);\n        const ctx = this.world_math.getContext();\n\n        if (this.draw_mode === \"screen\" || rotate) ctx.save();\n        if (this.draw_mode === \"screen\") ctx.resetTransform();\n\n        if (rotate) {\n            ctx.translate(center.x, center.y);\n            ctx.rotate(rotate);\n            ctx.translate(-center.x, -center.y);\n        }\n        ctx.beginPath();\n        if (lineDash) ctx.setLineDash(lineDash);\n\n        ctx.arc(start.x, start.y, radius, angleRadians + Math.PI / 2, angleRadians - Math.PI / 2);\n        ctx.arc(end.x, end.y, radius, angleRadians - Math.PI / 2, angleRadians + Math.PI / 2);\n\n        const cos = Math.cos(angleRadians + Math.PI / 2);\n        const sin = Math.sin(angleRadians + Math.PI / 2);\n        const A = { x: start.x + cos * radius, y: start.y + sin * radius };\n        const B = { x: end.x + cos * radius, y: end.y + sin * radius };\n\n        ctx.moveTo(A.x, A.y);\n        ctx.lineTo(B.x, B.y);\n\n        ctx.strokeStyle = strokeColor;\n        ctx.lineWidth = lineWidth;\n        ctx.stroke();\n\n        if (fillColor) {\n            ctx.fillStyle = fillColor;\n            ctx.fill();\n        }\n        if (lineDash) ctx.setLineDash([]);\n        ctx.closePath();\n        if (this.draw_mode === \"screen\" || rotate) ctx.restore();\n\n        return this;\n    }\n\n    // line\n    public line({ startPoint, endPoint, lineWidth = 1, strokeColor = \"white\", lineDash, rotate, rotateInCenter }: LineDraw): this {\n        const ctx = this.world_math.getContext();\n\n        startPoint = this.getPointByDrawMode(startPoint);\n        endPoint = this.getPointByDrawMode(endPoint);\n\n        if (this.draw_mode === \"screen\" || rotate || rotateInCenter) ctx.save();\n        if (this.draw_mode === \"screen\") ctx.resetTransform();\n\n        if (rotateInCenter) {\n            const midPoint = {\n                x: startPoint.x * 0.5 + endPoint.x * 0.5,\n                y: startPoint.y * 0.5 + endPoint.y * 0.5,\n            };\n            ctx.save();\n            ctx.translate(midPoint.x, midPoint.y);\n            ctx.rotate(rotateInCenter);\n            ctx.translate(-midPoint.x, -midPoint.y);\n        }\n\n        if (rotate && !rotateInCenter) {\n            ctx.save();\n            ctx.rotate(rotate);\n        }\n\n        ctx.beginPath();\n        if (lineDash) ctx.setLineDash(lineDash);\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = strokeColor;\n        ctx.moveTo(startPoint.x, startPoint.y);\n        ctx.lineTo(endPoint.x, endPoint.y);\n        ctx.stroke();\n        if (lineDash) ctx.setLineDash([]);\n        ctx.closePath();\n        if (this.draw_mode === \"screen\" || rotate || rotateInCenter) ctx.restore();\n\n        return this;\n    }\n\n    // text\n    public text({ point, text, textAlign = \"center\", strokeWidth = 1, strokeColor, textColor = \"white\", textBaseline = \"middle\", textSize = 16, rotate }: TextDraw): this {\n        const ctx = this.world_math.getContext();\n\n        point = this.getPointByDrawMode(point);\n\n        if (this.draw_mode === \"screen\" || rotate) ctx.save();\n        if (this.draw_mode === \"screen\") ctx.resetTransform();\n\n        if (rotate) {\n            ctx.translate(point.x, point.y);\n            ctx.rotate(rotate);\n            ctx.translate(-point.x, -point.y);\n        }\n\n        ctx.beginPath();\n        ctx.fillStyle = textColor;\n        ctx.textAlign = textAlign;\n        ctx.textBaseline = textBaseline;\n        ctx.font = \"bold \" + textSize + \"px arial\";\n        if (strokeColor) {\n            ctx.strokeStyle = strokeColor;\n            ctx.lineWidth = strokeWidth;\n            ctx.strokeText(text, point.x, point.y);\n        }\n        ctx.fillText(text, point.x, point.y);\n        ctx.closePath();\n\n        if (this.draw_mode === \"screen\" || rotate) ctx.restore();\n\n        return this;\n    }\n\n    // point\n    public point({ point, radius, text, color = \"white\", fillColor = this.world_math.getBackgroundColor(), textSize = 16, borderWidth = 4, lineDash, rotate }: PointDraw): this {\n        const ctx = this.world_math.getContext();\n\n        radius = this.draw_mode === \"cartesian\" ? radius * this.world_math.getGridSize() : radius;\n        point = this.getPointByDrawMode(point);\n\n        if (this.draw_mode === \"screen\" || rotate) ctx.save();\n        if (this.draw_mode === \"screen\") ctx.resetTransform();\n\n        if (rotate) {\n            ctx.save();\n            ctx.translate(point.x, point.y);\n            ctx.rotate(rotate);\n            ctx.translate(-point.x, -point.y);\n        }\n\n        ctx.beginPath();\n        if (lineDash) ctx.setLineDash(lineDash);\n        ctx.strokeStyle = color;\n        ctx.fillStyle = fillColor;\n        ctx.lineWidth = borderWidth;\n        ctx.arc(point.x, point.y, radius, 0, Math.PI * 2);\n        ctx.fill();\n        if (borderWidth) ctx.stroke();\n        if (text) {\n            ctx.fillStyle = color;\n            ctx.textAlign = \"center\";\n            ctx.textBaseline = \"middle\";\n            ctx.font = \"bold \" + textSize + \"px arial\";\n            ctx.fillText(text, point.x, point.y);\n        }\n        if (lineDash) ctx.setLineDash([]);\n        ctx.closePath();\n        if (this.draw_mode === \"screen\" || rotate) ctx.restore();\n\n        return this;\n    }\n\n    // rect\n    public rect({ point, width, height, lineWidth = 1, strokeColor = \"white\", lineDash, fillColor, rotate, rotateInCenter }: RectDraw): this {\n        const ctx = this.world_math.getContext();\n\n        point = this.getPointByDrawMode(point);\n        width = this.draw_mode === \"cartesian\" ? width * this.world_math.getGridSize() : width;\n        height = this.draw_mode === \"cartesian\" ? height * this.world_math.getGridSize() : height;\n\n        if (this.draw_mode === \"screen\" || rotate || rotateInCenter) ctx.save();\n        if (this.draw_mode === \"screen\") ctx.resetTransform();\n\n        if (rotateInCenter) {\n            ctx.save();\n            ctx.translate(point.x + width / 2, point.y + height / 2);\n            ctx.rotate(rotateInCenter);\n            ctx.translate(-(point.x + width / 2), -(point.y + height / 2));\n        }\n\n        if (rotate && !rotateInCenter) {\n            ctx.save();\n            ctx.rotate(rotate);\n        }\n\n        ctx.beginPath();\n        ctx.rect(point.x, point.y, width, height);\n        if (lineDash) ctx.setLineDash(lineDash);\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = strokeColor;\n        ctx.stroke();\n        if (fillColor) {\n            ctx.fillStyle = fillColor;\n            ctx.fill();\n        }\n        if (lineDash) ctx.setLineDash([]);\n        ctx.closePath();\n        if (this.draw_mode === \"screen\" || rotate || rotateInCenter) ctx.restore();\n\n        return this;\n    }\n\n    public getPointByDrawMode(point: Vector2D | Point): Vector2D | Point {\n        if (this.draw_mode === \"off\" || this.draw_mode === \"screen\") return point;\n        if (this.draw_mode === \"cartesian\") return this.world_math.toCartesian(point);\n        if (this.draw_mode === \"world\") return this.world_math.toWorld(point);\n        return point;\n    }\n\n    public getTailwindColor(name: TailwindColorName, value: TailwindColorValue = \"500\", opacity = 100): string {\n        if (opacity < 0 || opacity > 100) throw new Error(\"Opacidade é um valor de porcentagem portando deve estar entre 0% e 100%\");\n        opacity = opacity / 100;\n\n        const color = TAILWIND_COLORS[name][value];\n\n        return `rgba(${color[0]},${color[1]},${color[2]},${opacity})`;\n    }\n\n    public angleInRadians(degrees: number): number {\n        return degrees * (Math.PI / 180);\n    }\n\n    public angleInRadians360(degrees: number): number {\n        return degrees * (Math.PI / 360);\n    }\n}\n","import MathWorldContract from \"../contracts/math-world-base\";\nimport { DebugMouseMode, Point } from \"../types/others\";\nimport { Paint } from \"./paint\";\nimport { Vector2D } from \"./vector-2d\";\n\nexport class MathWorld implements MathWorldContract {\n    private camera_is_zoomable = true;\n    private camera_is_draggable = true;\n    private camera_zoom_max = 500; // 500%\n    private camera_zoom_min = 25; // 25%\n    private camera_zoom_current = 100; // 100% - sem zoom\n    private camera_zoom_factor = 10; //10%\n    private camera_is_dragging = false;\n    private camera_dragging_point = new Vector2D();\n    private camera_offset = new Vector2D();\n    private camera_screen_origin = new Vector2D();\n    private camera_middle_screen = new Vector2D();\n\n    private mouse_current_point = new Vector2D();\n    private mouse_current_point_in_world = new Vector2D();\n    private mouse_current_point_in_cartesian_plane = new Vector2D();\n    private mouse_current_point_in_screen = new Vector2D();\n    private mouse_debug_mode: DebugMouseMode = \"screen\";\n\n    private world_time_is_paused = false;\n    private world_time_scale = 4;\n    private world_last_timestamp = 0;\n    private world_time = 0;\n    private world_time_tolerance = 0.015;\n    private world_time_precision_mode = false;\n    private world_time_precision_frame = 1000;\n    private world_time_precision_frame_delay = 1000;\n    private world_before_tab_is_running = true;\n\n    private canvas_id: string;\n    private canvas_element: HTMLCanvasElement;\n    private canvas_element_original: Node;\n    private canvas_context: CanvasRenderingContext2D;\n    private canvas_time = 0;\n    private canvas_is_running = true;\n    private canvas_background = \"#111827\";\n    private canvas_width;\n    private canvas_height;\n    private canvas_fps = 0;\n    private canvas_max_fps: number | null = null;\n    private canvas_fps_interval = 1;\n    private canvas_last_frame_time = 0;\n    private canvas_draw_info = true;\n    private canvas_paint: Paint;\n    private canvas_fullscreen = false;\n\n    private cartesian_plane_grid_size = 32;\n    private cartesian_plane_negativeX = 0;\n    private cartesian_plane_positiveX = 0;\n    private cartesian_plane_negativeY = 0;\n    private cartesian_plane_positiveY = 0;\n    private cartesian_plane_edgeMaxX = 0 + this.cartesian_plane_positiveX * this.getGridSize();\n    private cartesian_plane_edgeMinX = 0 - this.cartesian_plane_negativeX * this.getGridSize();\n    private cartesian_plane_edgeMaxY = 0 + this.cartesian_plane_negativeY * this.getGridSize();\n    private cartesian_plane_edgeMinY = 0 - this.cartesian_plane_positiveY * this.getGridSize();\n    private cartesian_plane_draw_grid = true;\n    private cartesian_plane_draw_axis = true;\n\n    private math_world_loop: ((world: this) => void) | null = null;\n\n    private on_start: ((world: this) => void)[] = [];\n    private on_play: ((world: this) => void)[] = [];\n    private on_pause: ((world: this) => void)[] = [];\n    private on_reset: ((world: this) => void)[] = [];\n    private on_stop: ((world: this) => void)[] = [];\n\n    private on_key_down: { key: string; callbacks: ((e: KeyboardEvent) => void)[] }[] = [];\n    private on_key_up: { key: string; callbacks: ((e: KeyboardEvent) => void)[] }[] = [];\n\n    private on_left_click: ((e: MouseEvent) => void)[] = [];\n    private on_right_click: ((e: MouseEvent) => void)[] = [];\n    private on_mouse_move: ((e: MouseEvent) => void)[] = [];\n    private on_mouse_down: ((e: MouseEvent) => void)[] = [];\n    private on_mouse_up: ((e: MouseEvent) => void)[] = [];\n    private on_mouse_wheel: ((e: WheelEvent) => void)[] = [];\n\n    private pressed_keys: { code: string; key: string }[] = [];\n\n    private master_key = \"Alt\";\n\n    public constructor(canvasId: string) {\n        const canvasElement = document.querySelector<HTMLCanvasElement>(\"#\" + canvasId);\n        if (!canvasElement) throw new Error(\"Não existe nenhum canvas com o id: \" + canvasId);\n        this.canvas_id = canvasId;\n        this.canvas_element = canvasElement;\n        this.canvas_element_original = canvasElement.cloneNode(true);\n        this.canvas_context = this.canvas_element.getContext(\"2d\") as CanvasRenderingContext2D;\n        this.canvas_width = this.canvas_element.width;\n        this.canvas_height = this.canvas_element.height;\n        this.camera_middle_screen.set(this.canvas_width / 2, this.canvas_height / 2);\n        this.canvas_element.style.backgroundColor = this.canvas_background;\n        this.moveCameraOffsetToCenter();\n        this.setCartesianPlaneToFullScreen();\n        this.canvas_paint = new Paint(this);\n        this.calculateScreenOrigin();\n        this.setupEvents();\n    }\n\n    // Math World\n\n    public start(): void {\n        this.canvasPlay();\n        this.update();\n        this.on_start.map((callback) => callback(this));\n    }\n\n    public play(): void {\n        this.playWorldTime();\n        this.on_play.map((callback) => callback(this));\n        this.world_before_tab_is_running = true;\n    }\n\n    public pause(): void {\n        this.pauseWorldTime();\n        this.on_pause.map((callback) => callback(this));\n        this.world_before_tab_is_running = false;\n    }\n\n    public stop(): void {\n        this.pauseWorldTime();\n        this.canvasStop();\n        this.on_stop.map((callback) => callback(this));\n    }\n\n    public reset(): void {\n        this.resetWorldTime();\n        this.on_reset.map((callback) => callback(this));\n    }\n\n    public loop(loop: (world: this) => void): void {\n        this.math_world_loop = loop;\n    }\n\n    public default(): this {\n        this.setFullScreen();\n        this.moveCameraOffsetToCenter();\n        this.setDebugMouseMode(\"screen\");\n        this.drawAxis(true);\n        this.drawGrid(true);\n        this.drawInformation(true);\n        this.setGridSize(32);\n        this.setCartesianPlaneToFullScreen();\n        this.setCameraMinZoom(25);\n        this.setCameraMaxZoom(500);\n        this.setWorldTimeScale(4);\n        return this;\n    }\n\n    public setMasterKey(key: string): this {\n        this.master_key = key;\n        return this;\n    }\n\n    public isPaused(): boolean {\n        return this.world_time_is_paused;\n    }\n\n    public toScreen(point: Vector2D | Point): Vector2D | Point {\n        const realPoint = { x: (point.x - this.getCameraOffset().getX()) / this.getCameraZoomInDecimal(), y: (point.y - this.getCameraOffset().getY()) / this.getCameraZoomInDecimal() };\n        if (point instanceof Vector2D) return Vector2D.fromPoint(realPoint);\n        return realPoint;\n    }\n\n    public toWorld(point: Vector2D | Point): Vector2D | Point {\n        const realPoint = { x: point.x, y: -point.y };\n        if (point instanceof Vector2D) return Vector2D.fromPoint(realPoint);\n        return realPoint;\n    }\n\n    public toCartesian(point: Vector2D | Point): Vector2D | Point {\n        const realPoint = { x: point.x * this.getGridSize(), y: point.y * -this.getGridSize() };\n        if (point instanceof Vector2D) return Vector2D.fromPoint(realPoint);\n        return realPoint;\n    }\n\n    // * CAMERA\n\n    public isDraggable(is = true): this {\n        this.camera_is_draggable = is;\n        return this;\n    }\n\n    public isZoomable(is = true): this {\n        this.camera_is_zoomable = is;\n        return this;\n    }\n\n    public getScreenOrigin(): Vector2D {\n        return this.camera_screen_origin;\n    }\n\n    public getCameraOffset(): Vector2D {\n        return this.camera_offset;\n    }\n\n    public setCameraOffsetToCenter(): this {\n        this.setCameraOffsetTo({ x: this.canvas_width / 2, y: this.canvas_height / 2 });\n        return this;\n    }\n\n    public moveCameraOffsetToCenter(): this {\n        this.setCameraOffsetTo({ x: this.canvas_width / 2, y: this.canvas_height / 2 });\n        return this;\n    }\n\n    public getCameraZoom(): number {\n        return this.camera_zoom_current;\n    }\n\n    public getCameraMaxZoom(): number {\n        return this.camera_zoom_max;\n    }\n\n    public setCameraMaxZoom(zoom: number): this {\n        if (zoom < this.camera_zoom_min) throw new Error(\"O zoom máximo deve ser maior que o zoom minímo\");\n        this.camera_zoom_max = zoom;\n        return this;\n    }\n\n    public getCameraMinZoom(): number {\n        return this.camera_zoom_min;\n    }\n\n    public setCameraMinZoom(zoom: number): this {\n        if (zoom > this.camera_zoom_max) throw new Error(\"O zoom minímo deve ser menor que o zoom máximo\");\n        this.camera_zoom_min = zoom;\n        return this;\n    }\n\n    public getCameraZoomFactor(): number {\n        return this.camera_zoom_factor;\n    }\n\n    public getCameraZoomFactorInDecimal(): number {\n        return this.camera_zoom_current / 100;\n    }\n\n    public setCameraZoomFactor(factor: number): this {\n        if (factor > 100 || factor < 0) throw new Error(\"O fator de zoom é uma porcentagem e deve ser um número entre 0 e 100\");\n        this.camera_zoom_factor = factor;\n        return this;\n    }\n\n    public setCameraZoomAt(amount: number, point: Vector2D | Point): this {\n        return this.zoomAt(amount, point);\n    }\n\n    public zoom(amount: number): this {\n        this.zoomAt(amount, this.camera_offset);\n        return this;\n    }\n\n    public zoomAt(amount: number, point: Vector2D | Point): this {\n        this.zoomAtWithDecimal(amount / 100, point);\n        return this;\n    }\n\n    public setCameraOffsetTo(point: Vector2D | Point): this {\n        this.camera_offset.setX(point.x).setY(point.y);\n        return this;\n    }\n\n    public moveCameraToCartesianPlane(point: Vector2D | Point): this {\n        this.camera_offset.setX(-point.x * this.getGridSize() * this.getCameraZoomInDecimal() + this.getMiddleScreen().getX());\n        this.camera_offset.setY(point.y * this.getGridSize() * this.getCameraZoomInDecimal() + this.getMiddleScreen().getY());\n\n        return this;\n    }\n\n    public moveCameraToWorld(point: Vector2D | Point): this {\n        this.camera_offset.setX(-point.x * this.getCameraZoomInDecimal() + this.getMiddleScreen().getX());\n        this.camera_offset.setY(point.y * this.getCameraZoomInDecimal() + this.getMiddleScreen().getY());\n\n        return this;\n    }\n\n    public getMiddleScreen(): Vector2D {\n        return this.camera_middle_screen;\n    }\n\n    public moveCameraTo(point: Vector2D | Point): this {\n        this.setCameraOffsetTo(point);\n        return this;\n    }\n\n    public getCameraZoomInDecimal(): number {\n        return this.camera_zoom_current / 100;\n    }\n\n    public setCameraZoom(amount: number): this {\n        if (!this.camera_is_dragging) {\n            if (amount < this.camera_zoom_min || amount > this.camera_zoom_max) {\n                throw new Error(`O zoom deve estar entre o mínimo: ${this.camera_zoom_min}% e o máximo: ${this.camera_zoom_max}%.`);\n            }\n\n            this.camera_zoom_current = amount;\n            this.getCameraOffset().setX(this.getCameraOffset().getX());\n            this.getCameraOffset().setY(this.getCameraOffset().getY());\n        }\n\n        return this;\n    }\n\n    private zoomAtWithDecimal(decimalAmount: number, point: Vector2D | Point) {\n        if (!this.camera_is_dragging) {\n            let newZoom = this.camera_zoom_current * decimalAmount;\n\n            if (newZoom > this.camera_zoom_max) {\n                decimalAmount = this.camera_zoom_max / this.camera_zoom_current;\n                newZoom = this.camera_zoom_current * decimalAmount;\n            }\n\n            if (newZoom < this.camera_zoom_min) {\n                decimalAmount = this.camera_zoom_min / this.camera_zoom_current;\n                newZoom = this.camera_zoom_current * decimalAmount;\n            }\n\n            this.camera_zoom_current = newZoom;\n            this.getCameraOffset().setX(point.x - (point.x - this.getCameraOffset().getX()) * decimalAmount);\n            this.getCameraOffset().setY(point.y - (point.y - this.getCameraOffset().getY()) * decimalAmount);\n        }\n    }\n\n    // * HAS POINTER\n    public getMousePosition(): Vector2D {\n        return this.mouse_current_point;\n    }\n\n    public getMousePositionInCartesian(): Vector2D {\n        return this.mouse_current_point_in_cartesian_plane;\n    }\n\n    public getMousePositionInScreen(): Vector2D {\n        return this.mouse_current_point_in_screen;\n    }\n\n    public getMousePositionInWorld(): Vector2D {\n        return this.mouse_current_point_in_world;\n    }\n\n    public setDebugMouseMode(mode: DebugMouseMode): this {\n        this.mouse_debug_mode = mode;\n        return this;\n    }\n\n    public getMoudeDebugMode(): DebugMouseMode {\n        return this.mouse_debug_mode;\n    }\n\n    // * WORLD\n\n    public getWorldTime(): number {\n        return this.getWorldTimeInTicks();\n    }\n\n    public getWorldTimeInTicks(): number {\n        return this.world_time / 1000;\n    }\n\n    public getWorldTimeInHoursMinutesAndSeconds(): string {\n        const sec = Math.floor(this.world_time / 1000) % 60;\n        const min = Math.floor(this.world_time / 60000) % 60;\n        const hour = Math.floor(this.world_time / 3600000) % 24;\n        return `${hour}:${min}:${sec}`.replace(/\\b\\d\\b/g, \"0$&\");\n    }\n\n    public getPaint(): Paint {\n        return this.canvas_paint;\n    }\n\n    public worldTimeIsPaused(): boolean {\n        return this.world_time_is_paused;\n    }\n\n    public setWorldTimeScale(scale: number): this {\n        this.world_time_scale = scale;\n        return this;\n    }\n\n    public pauseWorldTime(): this {\n        this.world_time_is_paused = true;\n        return this;\n    }\n\n    public resetWorldTime(): this {\n        this.world_time = 0;\n        return this;\n    }\n\n    public playWorldTime(): this {\n        this.world_time_is_paused = false;\n        this.world_last_timestamp = performance.now();\n        return this;\n    }\n\n    public worldTimeInMiniTimesIs(time: number): boolean {\n        return this.getWorldInMiniTimes() >= time && this.getWorldInMiniTimes() < time + this.world_time_tolerance;\n    }\n\n    public worldTimeInTicksIs(time: number): boolean {\n        return this.getWorldTimeInTicks() >= time && this.getWorldTimeInTicks() < time + this.world_time_tolerance;\n    }\n\n    public worldTimeIs(time: number, tolerance = false): boolean {\n        if (tolerance) return this.getWorldTime() >= time && this.getWorldTime() < time + this.world_time_tolerance;\n        return this.getWorldTime() === time;\n    }\n\n    public setWorldTimeTolerance(time: number): this {\n        this.world_time_tolerance = time;\n        return this;\n    }\n\n    public enableWorldPrecisionTimeMode(resetTime = true): this {\n        this.world_time_precision_mode = true;\n        if (resetTime) this.world_time = 0;\n        return this;\n    }\n\n    public disableWorldPrecisionTimeMode(): this {\n        this.world_time_precision_mode = false;\n        this.world_time = 0;\n        return this;\n    }\n\n    public setWorldPrecisionTimeFrameInFraction(fraction: number): this {\n        if (this.world_time_precision_mode) {\n            if (100 % fraction > 0) throw new Error(\"A fração de tempo deve ser um número que seja divisor perfeito de 100\");\n            this.world_time_precision_frame = 1000 * fraction;\n        }\n\n        return this;\n    }\n\n    public getWorldPrecisionTimeFrameInFraction(): number {\n        return 1000 / this.world_time_precision_frame;\n    }\n\n    public getWorldPrecisionTimeFrameInMiniTime(): number {\n        return this.world_time_precision_frame;\n    }\n\n    public setWorldPrecisionTimeFrameInMiniTimes(minitimes: number): this {\n        this.world_time_precision_frame = minitimes;\n        return this;\n    }\n\n    public setWorldPrecisionTimeFrameDelay(seconds: number): this {\n        this.world_time_precision_frame_delay = seconds * 1000;\n        return this;\n    }\n\n    public nextWorldTime(): this {\n        this.world_time = (Math.floor(this.world_time / 1000) + 1) * 1000;\n        return this;\n    }\n\n    public nextFrameWorldTime(): this {\n        this.world_time += this.world_time_precision_frame;\n        return this;\n    }\n\n    public backWoldTime(): this {\n        const newTime = (this.world_time = (Math.ceil(this.world_time / 1000) - 1) * 1000);\n        this.world_time = newTime > 0 ? newTime : 0;\n        return this;\n    }\n\n    public backFrameWorldTime(): this {\n        const newTime = this.world_time - this.world_time_precision_frame;\n        this.world_time = newTime > 0 ? newTime : 0;\n        return this;\n    }\n\n    public setWorldPrecisionTimeInMinitimes(minitimes: number): this {\n        this.world_time = minitimes;\n        return this;\n    }\n\n    public setWorldPrecisionTimeInSecondsMinutesAndHours(seconds: number, minutes = 0, hours = 0): this {\n        let minitimes = 0;\n\n        minitimes += seconds * 1000;\n        minitimes += minutes * 60 * 1000;\n        minitimes += hours * 60 * 60 * 1000;\n\n        this.world_time = minitimes;\n        return this;\n    }\n\n    public getWorldInMiniTimes(): number {\n        return this.world_time;\n    }\n\n    // * CANVAS\n\n    public getWidth(): number {\n        return this.canvas_width;\n    }\n\n    public setWidth(width: number): this {\n        this.canvas_width = this.canvas_element.width = width;\n        this.camera_middle_screen.set(this.canvas_width / 2, this.canvas_height / 2);\n        return this;\n    }\n\n    public getHeight(): number {\n        return this.canvas_height;\n    }\n\n    public setHeight(height: number): this {\n        this.canvas_height = this.canvas_element.height = height;\n        this.camera_middle_screen.set(this.canvas_width / 2, this.canvas_height / 2);\n        return this;\n    }\n\n    public getCanvas(): HTMLCanvasElement {\n        return this.canvas_element;\n    }\n\n    public getContext(): CanvasRenderingContext2D {\n        return this.canvas_context;\n    }\n\n    public getCanvasTime(): number {\n        return this.canvas_time;\n    }\n\n    public getCnvasTimeInTicks(): number {\n        return this.canvas_time / 1000;\n    }\n\n    public getCanvasTimeInHoursMinutesAndSeconds(): string {\n        const sec = Math.floor(this.canvas_time / 1000) % 60;\n        const min = Math.floor(this.canvas_time / 60000) % 60;\n        const hour = Math.floor(this.canvas_time / 3600000) % 24;\n        return `${hour}:${min}:${sec}`.replace(/\\b\\d\\b/g, \"0$&\");\n    }\n\n    public canvasIsRunning(): boolean {\n        return this.canvas_is_running;\n    }\n\n    public canvasPlay(): this {\n        this.canvas_is_running = true;\n        return this;\n    }\n\n    public canvasStop(): this {\n        this.canvas_is_running = false;\n        return this;\n    }\n\n    public getBackgroundColor(): string {\n        return this.canvas_background;\n    }\n\n    public setBackgroundColor(background_color: string): this {\n        this.canvas_background = this.canvas_element.style.backgroundColor = background_color;\n        return this;\n    }\n\n    public getFPS(): number {\n        return this.canvas_fps;\n    }\n\n    public setMaxFPS(fps: number): this {\n        this.canvas_max_fps = fps;\n        this.canvas_fps_interval = 1000 / this.canvas_max_fps;\n        return this;\n    }\n\n    public drawInformation(draw = true): this {\n        this.canvas_draw_info = draw;\n        return this;\n    }\n\n    public setFullScreen(): this {\n        this.canvas_element.style.position = \"fixed\";\n        this.canvas_element.style.top = \"0px\";\n        this.canvas_element.style.left = \"0px\";\n        this.canvas_element.style.padding = \"0px\";\n        this.canvas_element.style.margin = \"0px\";\n\n        this.setWidth(window.innerWidth).setHeight(window.innerHeight);\n        this.calculateScreenOrigin();\n\n        this.canvas_fullscreen = true;\n\n        return this;\n    }\n\n    public resetFullScreen(): this {\n        const parent = this.canvas_element.parentNode;\n\n        if (parent) {\n            this.canvas_element.remove();\n            // this.canvas_element = this.canvas_element_original.cloneNode();\n            const clone = this.canvas_element_original.cloneNode(true);\n\n            parent?.append(clone);\n            this.canvas_element = document.getElementById(this.canvas_id) as HTMLCanvasElement;\n\n            this.canvas_context = this.canvas_element.getContext(\"2d\") as CanvasRenderingContext2D;\n            this.canvas_width = this.canvas_element.width;\n            this.canvas_height = this.canvas_element.height;\n            this.camera_middle_screen.set(this.canvas_width / 2, this.canvas_height / 2);\n            this.canvas_element.style.backgroundColor = this.canvas_background;\n            // this.moveCameraOffsetToCenter();\n            this.setCartesianPlaneToFullScreen();\n            this.canvas_paint = new Paint(this);\n            this.setupEvents();\n        }\n        return this;\n    }\n\n    // * CARTESIAN PLANE\n\n    public getGridSize(): number {\n        return this.cartesian_plane_grid_size;\n    }\n\n    public setGridSize(grid_size: number): this {\n        this.cartesian_plane_grid_size = grid_size;\n        return this;\n    }\n\n    public setNegativeX(x: number): this {\n        this.cartesian_plane_negativeX = Math.round(Math.abs(x));\n        this.cartesian_plane_edgeMinX = 0 - this.cartesian_plane_negativeX * this.getGridSize();\n        return this;\n    }\n\n    public getNegativeX(): number {\n        return this.cartesian_plane_negativeX;\n    }\n\n    public setPositiveX(x: number): this {\n        this.cartesian_plane_positiveX = Math.round(Math.abs(x));\n        this.cartesian_plane_edgeMaxX = 0 + this.cartesian_plane_positiveX * this.getGridSize();\n        return this;\n    }\n\n    public getPositiveX(): number {\n        return this.cartesian_plane_positiveX;\n    }\n\n    public setNegativeY(y: number): this {\n        this.cartesian_plane_negativeY = Math.round(Math.abs(y));\n        this.cartesian_plane_edgeMaxY = 0 + this.cartesian_plane_negativeY * this.getGridSize();\n        return this;\n    }\n\n    public getNegativeY(): number {\n        return this.cartesian_plane_negativeY;\n    }\n\n    public setPositiveY(y: number): this {\n        this.cartesian_plane_positiveY = Math.round(Math.abs(y));\n        this.cartesian_plane_edgeMinY = 0 - this.cartesian_plane_positiveY * this.getGridSize();\n        return this;\n    }\n\n    public getPositiveY(): number {\n        return this.cartesian_plane_positiveY;\n    }\n\n    public setAxisLimits(minX: number, maxX: number, minY: number, maxY: number): this {\n        this.setNegativeX(minX);\n        this.setPositiveX(maxX);\n        this.setNegativeY(minY);\n        this.setPositiveY(maxY);\n        return this;\n    }\n\n    public setCartesianPlaneToFullScreen(): this {\n        let maxXLines = Math.floor(this.canvas_width / this.cartesian_plane_grid_size);\n        let maxYLines = Math.floor(this.canvas_height / this.cartesian_plane_grid_size);\n\n        maxXLines = maxXLines % 2 === 0 && maxXLines * this.cartesian_plane_grid_size >= this.canvas_width ? maxXLines : maxXLines + 1;\n        maxYLines = maxYLines % 2 === 0 && maxYLines * this.cartesian_plane_grid_size >= this.canvas_height ? maxYLines : maxYLines + 1;\n\n        this.setNegativeX(maxXLines / 2).setPositiveX(maxXLines / 2);\n        this.setNegativeY(maxYLines / 2).setPositiveY(maxYLines / 2);\n\n        return this;\n    }\n\n    public drawGrid(draw: boolean): this {\n        this.cartesian_plane_draw_grid = draw;\n        return this;\n    }\n\n    public drawAxis(draw: boolean): this {\n        this.cartesian_plane_draw_axis = draw;\n        return this;\n    }\n\n    // * Has Events\n\n    public onStart(...callback: ((world: this) => void)[]): this {\n        this.on_start.push(...callback);\n        return this;\n    }\n\n    public onPlay(...callback: ((world: this) => void)[]): this {\n        this.on_play.push(...callback);\n        return this;\n    }\n\n    public onPause(...callback: ((world: this) => void)[]): this {\n        this.on_pause.push(...callback);\n        return this;\n    }\n\n    public onReset(...callback: ((world: this) => void)[]): this {\n        this.resetWorldTime();\n        this.on_reset.push(...callback);\n        return this;\n    }\n\n    public onStop(...callback: ((world: this) => void)[]): this {\n        this.on_stop.push(...callback);\n        return this;\n    }\n\n    // * Has Mouse And Keyboard\n\n    public onKeyUp(key: string, ...callback: ((e: KeyboardEvent) => void)[]): this {\n        const keyAndCallbacks = this.on_key_up.find((k) => k.key === key);\n        if (keyAndCallbacks) keyAndCallbacks.callbacks.push(...callback);\n        if (!keyAndCallbacks) this.on_key_up.push({ key, callbacks: callback });\n        return this;\n    }\n\n    public onKeyDown(key: string, ...callback: ((e: KeyboardEvent) => void)[]): this {\n        const keyAndCallbacks = this.on_key_down.find((k) => k.key === key);\n        if (keyAndCallbacks) keyAndCallbacks.callbacks.push(...callback);\n        if (!keyAndCallbacks) this.on_key_down.push({ key, callbacks: callback });\n        return this;\n    }\n\n    public onLeftCLick(...callback: ((e: MouseEvent) => void)[]): this {\n        this.on_left_click.push(...callback);\n        return this;\n    }\n\n    public onRightClick(...callback: ((e: MouseEvent) => void)[]): this {\n        this.on_right_click.push(...callback);\n        return this;\n    }\n\n    public onMouseMove(...callback: ((e: MouseEvent) => void)[]): this {\n        this.on_mouse_move.push(...callback);\n        return this;\n    }\n\n    public onMouseUp(...callback: ((e: MouseEvent) => void)[]): this {\n        this.on_mouse_up.push(...callback);\n        return this;\n    }\n\n    public onMouseDown(...callback: ((e: MouseEvent) => void)[]): this {\n        this.on_mouse_down.push(...callback);\n        return this;\n    }\n\n    public onMouseWheel(...callback: ((e: WheelEvent) => void)[]): this {\n        this.on_mouse_wheel.push(...callback);\n        return this;\n    }\n\n    public getPressedKeys(): { code: string; key: string }[] {\n        return this.pressed_keys;\n    }\n\n    public keyIsPressed(key: string): boolean {\n        return this.pressed_keys.find((k) => k.key === key || k.code === key) ? true : false;\n    }\n\n    // PRIVATE\n\n    private drawCartesianPlan() {\n        // número de linhas horizontais e verticais que o espaço terá\n        const numLinesHorizontal = this.cartesian_plane_negativeY + this.cartesian_plane_positiveY;\n        const numLinesVertical = this.cartesian_plane_negativeX + this.cartesian_plane_positiveX;\n\n        const ctx = this.getContext();\n\n        if (this.cartesian_plane_draw_grid) {\n            for (let i = 0; i <= numLinesHorizontal; i++) {\n                ctx.beginPath();\n                ctx.lineWidth = 1;\n                ctx.strokeStyle = \"rgba(255, 255, 255, 0.1)\";\n\n                if (i == numLinesHorizontal) {\n                    ctx.moveTo(this.cartesian_plane_edgeMinX, this.cartesian_plane_edgeMinY + this.getGridSize() * i);\n                    ctx.lineTo(this.cartesian_plane_edgeMaxX, this.cartesian_plane_edgeMinY + this.getGridSize() * i);\n                } else {\n                    ctx.moveTo(this.cartesian_plane_edgeMinX, this.cartesian_plane_edgeMinY + this.getGridSize() * i + 0.5);\n                    ctx.lineTo(this.cartesian_plane_edgeMaxX, this.cartesian_plane_edgeMinY + this.getGridSize() * i + 0.5);\n                }\n                ctx.stroke();\n            }\n\n            for (let i = 0; i <= numLinesVertical; i++) {\n                ctx.beginPath();\n                ctx.lineWidth = 1;\n                ctx.strokeStyle = \"rgba(255, 255, 255, 0.1)\";\n\n                if (i == numLinesVertical) {\n                    ctx.moveTo(this.cartesian_plane_edgeMinX + this.getGridSize() * i, this.cartesian_plane_edgeMinY);\n                    ctx.lineTo(this.cartesian_plane_edgeMinX + this.getGridSize() * i, this.cartesian_plane_edgeMaxY);\n                } else {\n                    ctx.moveTo(this.cartesian_plane_edgeMinX + this.getGridSize() * i + 0.5, this.cartesian_plane_edgeMinY);\n                    ctx.lineTo(this.cartesian_plane_edgeMinX + this.getGridSize() * i + 0.5, this.cartesian_plane_edgeMaxY);\n                }\n\n                ctx.stroke();\n            }\n        }\n\n        if (this.cartesian_plane_draw_axis) {\n            // desenho das linhas que cruzam o x0, y0\n            ctx.beginPath();\n            ctx.lineWidth = 1;\n            ctx.strokeStyle = \"rgba(255, 255, 255, 0.5)\";\n            ctx.moveTo(this.cartesian_plane_edgeMinX, 0);\n            ctx.lineTo(this.cartesian_plane_edgeMaxX, 0);\n            ctx.moveTo(0, this.cartesian_plane_edgeMinY);\n            ctx.lineTo(0, this.cartesian_plane_edgeMaxY);\n            ctx.stroke();\n\n            let index = 0;\n\n            // Marcas de tiques ao longo do eixo X\n            for (let i = -this.cartesian_plane_negativeX; i <= this.cartesian_plane_positiveX; i++) {\n                ctx.beginPath();\n                ctx.lineWidth = 1;\n                ctx.strokeStyle = \"rgba(255, 255, 255, 0.5)\";\n\n                // Desenhe uma marca de 6px de comprimento (-3 a 3)\n                ctx.moveTo(this.cartesian_plane_edgeMinX + this.getGridSize() * index + 0.5, 0 - 3);\n                ctx.lineTo(this.cartesian_plane_edgeMinX + this.getGridSize() * index + 0.5, 0 + 3);\n                ctx.stroke();\n\n                // Valor do texto naquele ponto\n                if (i != 0) {\n                    ctx.font = \"16px Arial\";\n                    ctx.fillStyle = \"rgba(255, 255, 255, 0.5)\";\n                    ctx.textAlign = \"start\";\n                    ctx.fillText(i.toString(), this.cartesian_plane_edgeMinX + this.getGridSize() * index - 2, 0 + 15);\n                }\n\n                index++;\n            }\n\n            index = 0;\n            // Marcas de tiques ao longo do eixo y\n            for (let i = this.cartesian_plane_positiveY; i >= -this.cartesian_plane_negativeY; i--) {\n                ctx.beginPath();\n                ctx.lineWidth = 1;\n                ctx.strokeStyle = \"rgba(255, 255, 255, 0.5)\";\n\n                // Desenhe uma marca de 6px de comprimento (-3 a 3)\n                ctx.moveTo(0 - 3, this.cartesian_plane_edgeMinY + this.getGridSize() * index + 0.5);\n                ctx.lineTo(0 + 3, this.cartesian_plane_edgeMinY + this.getGridSize() * index + 0.5);\n                ctx.stroke();\n\n                // Valor do texto naquele ponto\n                if (i != 0) {\n                    ctx.font = \"16px Arial\";\n                    ctx.fillStyle = \"rgba(255, 255, 255, 0.5)\";\n                    ctx.textAlign = \"start\";\n                    ctx.fillText(i.toString(), 0 + 15, this.cartesian_plane_edgeMinY + this.getGridSize() * index + 3);\n                }\n\n                index++;\n            }\n        }\n        // bolinha marcando o ponto 0,0\n        ctx.save();\n        ctx.beginPath();\n        ctx.fillStyle = \"white\";\n        ctx.arc(0, 0, 5, 0, Math.PI * 2);\n        ctx.fill();\n        ctx.restore();\n    }\n\n    private drawMouseDebug() {\n        if (this.mouse_debug_mode === \"off\") return;\n        const ctx = this.getContext();\n        const mouseinScreen = this.getMousePositionInScreen();\n        const mouseInWorld = this.getMousePositionInWorld();\n        const mouseInCartesian = this.getMousePositionInCartesian();\n        const point = this.mouse_debug_mode === \"point\" ? this.getMousePositionInScreen() : new Vector2D(this.canvas_width - 200, this.canvas_height);\n\n        ctx.save();\n        ctx.resetTransform();\n        ctx.beginPath();\n        ctx.strokeStyle = this.getBackgroundColor();\n        ctx.textAlign = \"start\";\n        ctx.textBaseline = \"middle\";\n        ctx.font = \"bold 16px arial\";\n        ctx.lineWidth = 7;\n        ctx.fillStyle = \"#5eead4\";\n        ctx.fillText(\"Screen \" + mouseinScreen.toString(1), point.getX(), point.getY() - 60);\n        ctx.fillStyle = \"#a5b4fc\";\n        ctx.fillText(\"Cartesian \" + mouseInCartesian.toString(1), point.getX(), point.getY() - 40);\n        ctx.fillStyle = \"#f0abfc\";\n        ctx.fillText(\"World \" + mouseInWorld.toString(1), point.getX(), point.getY() - 20);\n        ctx.closePath();\n        ctx.restore();\n    }\n\n    private drawInfo() {\n        if (!this.canvas_draw_info) return;\n        const ctx = this.getContext();\n\n        ctx.save();\n        ctx.resetTransform();\n        ctx.beginPath();\n        ctx.strokeStyle = this.getBackgroundColor();\n        ctx.textAlign = \"start\";\n        ctx.textBaseline = \"middle\";\n        ctx.font = \"bold 16px arial\";\n        ctx.lineWidth = 7;\n        ctx.fillStyle = \"white\";\n        ctx.fillText(\"FPS: \" + this.canvas_fps, 24, 16);\n        ctx.fillText(`World: ${this.getWorldTimeInHoursMinutesAndSeconds()}`, 100, 16);\n        ctx.fillText(`Canvas: ${this.getCanvasTimeInHoursMinutesAndSeconds()}`, 230, 16);\n        ctx.fillText(`Zoom: ${this.getCameraZoom().toFixed()}%`, 370, 16);\n        ctx.fillStyle = this.canvas_is_running ? \"green\" : \"red\";\n        ctx.arc(8, 14, 5, 0, Math.PI * 2);\n        ctx.fill();\n        ctx.closePath();\n        ctx.restore();\n    }\n\n    private keyUpHandler(e: KeyboardEvent) {\n        const index = this.pressed_keys.indexOf({ key: e.key, code: e.code });\n        if (index) this.pressed_keys.splice(index, 1);\n        const keyAndCallbacks = this.on_key_up.find((k) => k.key === e.key || k.key === e.code);\n        if (keyAndCallbacks) keyAndCallbacks.callbacks.map((callback) => callback(e));\n    }\n\n    private keyDownHandler(e: KeyboardEvent) {\n        if (!e.repeat) {\n            this.pressed_keys.push({ key: e.key, code: e.code });\n            const keyAndCallbacks = this.on_key_down.find((k) => k.key === e.key || k.key === e.code);\n            if (keyAndCallbacks) keyAndCallbacks.callbacks.map((callback) => callback(e));\n        }\n    }\n\n    private mouseWheelHandler(e: WheelEvent) {\n        if (this.camera_is_zoomable && this.keyIsPressed(this.master_key)) {\n            this.adjustZoomAtMousePoint(e);\n        } else {\n            this.on_mouse_wheel.map((callback) => callback(e));\n        }\n    }\n\n    private mouseDownHandler(e: MouseEvent) {\n        e.stopImmediatePropagation();\n        e.preventDefault();\n\n        if (this.camera_is_draggable && this.keyIsPressed(this.master_key)) {\n            this.camera_is_dragging = true;\n            this.camera_dragging_point.setX(e.x).setY(e.y);\n        } else {\n            if (e.button == 0 && this.on_left_click) this.on_left_click.map((callback) => callback(e));\n            if (e.button === 2 && this.on_right_click) this.on_right_click.map((callback) => callback(e));\n\n            this.on_mouse_down.map((callback) => callback(e));\n        }\n\n        return false;\n    }\n\n    private mouseUpHandler(e: MouseEvent) {\n        if (this.camera_is_draggable && this.camera_is_dragging) {\n            this.camera_is_dragging = false;\n        } else {\n            this.on_mouse_up.map((callback) => callback(e));\n        }\n    }\n\n    private mouseMoveHandler(e: MouseEvent) {\n        if (this.camera_is_draggable && this.camera_is_dragging) {\n            this.getCameraOffset().setX(this.getCameraOffset().getX() + e.clientX - this.camera_dragging_point.getX());\n            this.getCameraOffset().setY(this.getCameraOffset().getY() + e.clientY - this.camera_dragging_point.getY());\n            this.camera_dragging_point.setX(e.clientX).setY(e.clientY);\n        } else {\n            this.on_mouse_move.map((callback) => callback(e));\n        }\n    }\n\n    private adjustZoomAtMousePoint(e: WheelEvent) {\n        e.preventDefault();\n        const scale_factor = this.camera_zoom_factor / 100 + 1; // 10 / 100 + 1 = 1.1 = 110%\n        if (-e.deltaY > 0) this.zoomAtWithDecimal(scale_factor, this.getMousePositionInScreen());\n        else this.zoomAtWithDecimal(1 / scale_factor, this.getMousePositionInScreen());\n    }\n\n    private calculateScreenOrigin(): void {\n        const canvas_rect = this.canvas_element.getBoundingClientRect();\n        this.camera_screen_origin.set(canvas_rect.left + window.scrollX, canvas_rect.top + window.scrollY);\n    }\n\n    private setMousePosition(event: MouseEvent): void {\n        this.mouse_current_point.setX(event.x);\n        this.mouse_current_point.setY(event.y);\n\n        this.mouse_current_point_in_screen.setX(this.mouse_current_point.getX() - this.camera_screen_origin.getX());\n        this.mouse_current_point_in_screen.setY(this.mouse_current_point.getY() - this.camera_screen_origin.getY());\n\n        this.mouse_current_point_in_world.setX((this.mouse_current_point_in_screen.getX() - this.getCameraOffset().getX()) / this.getCameraZoomInDecimal());\n        this.mouse_current_point_in_world.setY(-(this.mouse_current_point_in_screen.getY() - this.getCameraOffset().getY()) / this.getCameraZoomInDecimal());\n\n        this.mouse_current_point_in_cartesian_plane.setX(this.mouse_current_point_in_world.getX() / this.getGridSize());\n        this.mouse_current_point_in_cartesian_plane.setY(this.mouse_current_point_in_world.getY() / this.getGridSize());\n    }\n\n    private resizeScreen() {\n        if (this.canvas_fullscreen) {\n            this.setWidth(window.innerWidth).setHeight(window.innerHeight);\n            this.calculateScreenOrigin();\n        }\n    }\n\n    private hiddenScreen() {\n        if (document.hidden) {\n            this.pauseWorldTime();\n            this.pressed_keys = [];\n        } else {\n            if (this.world_before_tab_is_running) this.playWorldTime();\n            this.pressed_keys = [];\n        }\n    }\n\n    private setupEvents(): void {\n        this.getCanvas().addEventListener(\"mousedown\", (e) => this.mouseDownHandler(e));\n        this.getCanvas().addEventListener(\"mousemove\", (e) => this.mouseMoveHandler(e));\n        this.getCanvas().addEventListener(\"mousemove\", (e) => this.setMousePosition(e));\n        this.getCanvas().addEventListener(\"mouseup\", (e) => this.mouseUpHandler(e));\n        this.getCanvas().addEventListener(\"wheel\", (e) => this.mouseWheelHandler(e));\n        document.addEventListener(\"keyup\", (e) => this.keyUpHandler(e));\n        document.addEventListener(\"keydown\", (e) => this.keyDownHandler(e));\n        document.addEventListener(\"visibilitychange\", () => this.hiddenScreen());\n        window.addEventListener(\"resize\", () => this.resizeScreen());\n    }\n\n    private update(timestamp = 0): void {\n        this.canvas_time = timestamp;\n        const current_time = performance.now();\n\n        if (!this.canvasIsRunning()) return;\n\n        if (!this.world_time_is_paused) {\n            if (this.world_time_precision_mode) {\n                if (current_time - this.world_last_timestamp >= this.world_time_precision_frame_delay) {\n                    this.world_time += this.world_time_precision_frame;\n                    this.world_last_timestamp = current_time;\n                }\n            } else {\n                this.world_time += (current_time - this.world_last_timestamp) * this.world_time_scale;\n                this.world_last_timestamp = current_time;\n            }\n        }\n\n        const elapsed = current_time - this.canvas_last_frame_time;\n\n        if (elapsed > this.canvas_fps_interval) {\n            this.canvas_fps = Math.round(1000 / elapsed);\n\n            this.canvas_last_frame_time = current_time;\n\n            const ctx = this.getContext();\n\n            ctx.resetTransform();\n\n            ctx.clearRect(0, 0, this.getWidth(), this.getHeight());\n\n            ctx.translate(this.getCameraOffset().getX(), this.getCameraOffset().getY());\n\n            ctx.setTransform(this.getCameraZoomInDecimal(), 0, 0, this.getCameraZoomInDecimal(), this.getCameraOffset().getX(), this.getCameraOffset().getY());\n\n            this.drawCartesianPlan();\n\n            if (this.math_world_loop) this.math_world_loop(this);\n\n            this.drawMouseDebug();\n\n            this.drawInfo();\n        }\n\n        requestAnimationFrame(this.update.bind(this));\n    }\n}\n"],"names":["TAILWIND_COLORS","Vector2D","x","y","__publicField","rad","value","scalar","fractionDigits","point","Paint","world_math","draw_mode","radius","startAngle","endAngle","startAngleForHumans","endAngleForHumans","lineWidth","strokeColor","fillColor","clockwise","lineDash","rotate","lineToCenter","ctx","start","end","center","angleRadians","cos","sin","A","B","startPoint","endPoint","rotateInCenter","midPoint","text","textAlign","strokeWidth","textColor","textBaseline","textSize","color","borderWidth","width","height","name","opacity","degrees","MathWorld","canvasId","canvasElement","callback","loop","key","realPoint","is","zoom","factor","amount","decimalAmount","newZoom","mode","sec","min","scale","time","tolerance","resetTime","fraction","minitimes","seconds","newTime","minutes","hours","background_color","fps","draw","parent","clone","grid_size","minX","maxX","minY","maxY","maxXLines","maxYLines","keyAndCallbacks","k","numLinesHorizontal","numLinesVertical","i","index","mouseinScreen","mouseInWorld","mouseInCartesian","scale_factor","canvas_rect","event","timestamp","current_time","elapsed"],"mappings":"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"}