{"version":3,"sources":["../index.ts","../core/points/distance.ts","../core/points/collision.ts","../core/points/middle.ts","../core/points/pointWithoutCollision.ts","../core/points/collisionInArray.ts","../core/points/angle.ts","../core/randomization/randomNumber.ts","../core/points/randomPoints.ts","../core/points/triangleArea.ts","../core/points/area.ts","../core/points/randomPointInDistance.ts","../core/points/nearest.ts","../core/points/perimeter.ts","../core/points/positionInCircle.ts","../core/points/possibleConnections.ts","../core/points/circleArea.ts","../core/points/center.ts","../core/points/farthest.ts","../core/points/randomPoint.ts","../core/points/move.ts","../core/points/scale.ts","../core/points/inLine.ts","../core/points/getLine.ts","../core/points/cross.ts","../core/points/rotate.ts","../core/points/sort.ts","../core/points/square.ts","../core/points/rectangle.ts","../core/points/triangle.ts","../core/points/pentagon.ts","../core/points/lerp.ts","../core/math/inRange.ts","../core/math/roundToPrecision.ts","../core/math/degreesToRadians.ts","../core/math/radiansToDegrees.ts","../core/math/average.ts","../core/randomization/uniqueId.ts","../core/randomization/randomBoolean.ts","../core/arrays/intersection.ts","../core/arrays/difference.ts","../core/arrays/chunk.ts","../core/arrays/removeDuplicates.ts","../core/arrays/sample.ts","../utils/Point.ts"],"sourcesContent":["// points\nimport distance from \"./core/points/distance\";\nimport collision from \"./core/points/collision\";\nimport middle from \"./core/points/middle\";\nimport pointWithoutCollision from \"./core/points/pointWithoutCollision\";\nimport collisionInArray from \"./core/points/collisionInArray\";\nimport angle from \"./core/points/angle\";\nimport randomPoints from \"./core/points/randomPoints\";\nimport area from \"./core/points/area\";\nimport triangleArea from \"./core/points/triangleArea\";\nimport randomPointInDistance from \"./core/points/randomPointInDistance\";\nimport nearest from \"./core/points/nearest\";\nimport perimeter from \"./core/points/perimeter\";\nimport positionInCircle from \"./core/points/positionInCircle\";\nimport possibleConnections from \"./core/points/possibleConnections\";\nimport circleArea from \"./core/points/circleArea\";\nimport center from \"./core/points/center\";\nimport farthest from \"./core/points/farthest\";\nimport randomPoint from \"./core/points/randomPoint\";\nimport move from \"./core/points/move\";\nimport scale from \"./core/points/scale\";\nimport inLine from \"./core/points/inLine\";\nimport getLine from \"./core/points/getLine\";\nimport cross from \"./core/points/cross\";\nimport rotate from \"./core/points/rotate\";\nimport sort from \"./core/points/sort\";\nimport square from \"./core/points/square\";\nimport rectangle from \"./core/points/rectangle\";\nimport triangle from \"./core/points/triangle\";\nimport pentagon from \"./core/points/pentagon\";\nimport lerp from \"./core/points/lerp\";\n\n// math\nimport inRange from \"./core/math/inRange\";\nimport roundToPrecision from \"./core/math/roundToPrecision\";\nimport degreesToRadians from \"./core/math/degreesToRadians\";\nimport radiansToDegrees from \"./core/math/radiansToDegrees\";\nimport average from \"./core/math/average\";\n\n// randomization\nimport uniqueId from \"./core/randomization/uniqueId\";\nimport randomBoolean from \"./core/randomization/randomBoolean\";\nimport randomNumber from \"./core/randomization/randomNumber\";\n\n// arrays\nimport intersection from \"./core/arrays/intersection\";\nimport difference from \"./core/arrays/difference\";\nimport chunk from \"./core/arrays/chunk\";\nimport removeDuplicates from \"./core/arrays/removeDuplicates\";\nimport sample from \"./core/arrays/sample\";\n\n// utils\nimport Point from \"./utils/Point\";\n\n// types\nexport type { Point as PointType }; // ✅ class instance type\nexport type { Coordinate, Direction, Line, Bounds } from \"./types/global\";\n\n// named exports\nexport {\n    // points\n    Point,\n    distance,\n    middle,\n    collision,\n    pointWithoutCollision,\n    collisionInArray,\n    angle,\n    randomPoint,\n    randomPoints,\n    area,\n    triangleArea,\n    circleArea,\n    randomPointInDistance,\n    nearest,\n    farthest,\n    perimeter,\n    positionInCircle,\n    possibleConnections,\n    center,\n    inLine,\n    getLine,\n    rotate,\n    sort,\n    move,\n    scale,\n    cross,\n    square,\n    rectangle,\n    triangle,\n    pentagon,\n    lerp,\n\n    // randomization\n    uniqueId,\n    randomNumber,\n    randomBoolean,\n\n    // math\n    average,\n    inRange,\n    degreesToRadians,\n    radiansToDegrees,\n    roundToPrecision,\n\n    // arrays\n    intersection,\n    difference,\n    chunk,\n    removeDuplicates,\n    sample,\n};\n\n// default export\nexport default {\n    // points\n    Point,\n    distance,\n    middle,\n    collision,\n    pointWithoutCollision,\n    collisionInArray,\n    angle,\n    randomPoint,\n    randomPoints,\n    area,\n    triangleArea,\n    circleArea,\n    randomPointInDistance,\n    nearest,\n    farthest,\n    perimeter,\n    positionInCircle,\n    possibleConnections,\n    center,\n    inLine,\n    getLine,\n    rotate,\n    sort,\n    move,\n    scale,\n    cross,\n    square,\n    rectangle,\n    triangle,\n    pentagon,\n    lerp,\n\n    // randomization\n    uniqueId,\n    randomNumber,\n    randomBoolean,\n\n    // math\n    average,\n    inRange,\n    degreesToRadians,\n    radiansToDegrees,\n    roundToPrecision,\n\n    // arrays\n    intersection,\n    difference,\n    chunk,\n    removeDuplicates,\n    sample,\n};\n","import type { Point } from \"../../types/global\";\n\nconst distance = (point1: Point, point2: Point): number => {\n    const dx = point1.x - point2.x;\n    const dy = point1.y - point2.y;\n    return Math.sqrt(dx * dx + dy * dy);\n};\n\nexport default distance;\n","import type { Point } from \"../../types/global\";\n\nconst collision = (\n    point1: Point,\n    point2: Point,\n    collisionDistance: number,\n    callback?: () => void\n): boolean => {\n    const dx = point1.x - point2.x;\n    const dy = point1.y - point2.y;\n    const r = collisionDistance;\n    const collides = dx * dx + dy * dy <= r * r;\n\n    if (collides) {\n        callback?.();\n        return true;\n    }\n    return false;\n};\n\nexport default collision;\n","import type { Point } from \"../../types/global\";\n\nconst middle = (point1: Point, point2: Point): Point => {\n    const { x: x1, y: y1 } = point1;\n    const { x: x2, y: y2 } = point2;\n\n    const xDistance = Math.abs(x1 - x2);\n    const yDistance = Math.abs(y1 - y2);\n\n    const middleX = x2 >= x1 ? xDistance / 2 : -xDistance / 2;\n    const middleY = y2 >= y1 ? yDistance / 2 : -yDistance / 2;\n\n    return {\n        x: x1 + middleX,\n        y: y1 + middleY,\n    };\n};\n\nexport default middle;\n","import { distance, randomPoint } from \"../../index\";\nimport type { Bounds, Point } from \"../../types/global\";\n\nconst maxTryCount = 100;\n\nconst pointWithoutCollision = (\n    xBounds: Bounds,\n    yBounds: Bounds,\n    distanceBetweenPoints: number,\n    others: Point[],\n    currentTryCount = maxTryCount\n): Point | string => {\n    if (currentTryCount <= 1) {\n        return \"Couldn't get the point\";\n    }\n\n    const { min: minX, max: maxX } = xBounds;\n    const { min: minY, max: maxY } = yBounds;\n\n    const initialPoint = randomPoint(\n        { min: minX, max: maxX },\n        { min: minY, max: maxY }\n    );\n\n    let hasCollides = false;\n    others.forEach((point) => {\n        if (distance(initialPoint, point) < distanceBetweenPoints) {\n            hasCollides = true;\n        }\n    });\n\n    if (hasCollides) {\n        return pointWithoutCollision(\n            {\n                min: minX,\n                max: maxX,\n            },\n            {\n                min: minY,\n                max: maxY,\n            },\n            distanceBetweenPoints,\n            others,\n            currentTryCount - 1\n        );\n    } else {\n        return initialPoint;\n    }\n};\n\nexport default pointWithoutCollision;\n","import collision from \"./collision\";\nimport type { Point } from \"../../types/global\";\n\nconst collisionInArray = (\n    initialPoint: Point,\n    arr: Point[],\n    radius: number\n): Point[] => {\n    const collisionsArr: Point[] = [];\n\n    // Check for collision for every point in the array. If a collision is found store it to be used later.\n    arr.forEach((point: Point) => {\n        collision(initialPoint, point, radius, () => {\n            collisionsArr.push(point);\n        });\n    });\n\n    return collisionsArr;\n};\n\nexport default collisionInArray;\n","import type { Point } from \"../../types/global\";\n\nconst pi = Math.PI;\n\nconst angle = (point1: Point, point2: Point): number => {\n    const { x: startX, y: startY } = point1;\n    const { x: endX, y: endY } = point2;\n\n    // Check for coincident points to avoid division by zero\n    if (startX === endX && startY === endY) {\n        return 0;\n    }\n\n    // Use Math.atan2 for efficient and accurate angle calculation\n    const angleInRadians = Math.atan2(endY - startY, endX - startX);\n\n    // Adjust angle to correct quadrant if necessary\n    const quadrant = Math.ceil((Math.atan2(startY, startX) + 2 * pi) / pi / 2);\n    const adjustedAngle = angleInRadians + ((quadrant - 1) * pi) / 2;\n\n    return adjustedAngle;\n};\n\nexport default angle;\n","const randomNumber = (min: number, max: number): number => {\n    return Math.round(Math.random() * (max - min)) + min;\n};\n\nexport default randomNumber;\n","import getRandomNumber from \"../randomization/randomNumber\";\nimport type { Bounds, Point } from \"../../types/global\";\n\nconst randomPoints = (\n    xBounds: Bounds,\n    yBounds: Bounds,\n    quantity: number\n): Point[] => {\n    const { min: minX, max: maxX } = xBounds;\n    const { min: minY, max: maxY } = yBounds;\n\n    const points: Point[] = [];\n\n    for (let i = 0; i < quantity; i++) {\n        const x = getRandomNumber(minX, maxX);\n        const y = getRandomNumber(minY, maxY);\n\n        points.push({ x, y });\n    }\n\n    return points;\n};\n\nexport default randomPoints;\n","import type { Point } from \"../../types/global\";\n\nconst triangleArea = (\n    { x: x1, y: y1 }: Point,\n    { x: x2, y: y2 }: Point,\n    { x: x3, y: y3 }: Point\n) => Math.abs((x1 * y2 - x2 * y1 + x2 * y3 - x3 * y2 + x3 * y1 - x1 * y3) / 2);\n\nexport default triangleArea;\n","import triangleArea from \"./triangleArea\";\nimport type { Point } from \"../../types/global\";\n\nconst area = (points: Point[]): number => {\n    let area = 0;\n\n    // Calculate the area for every triangle inside the shape\n    for (let i = 2; i < points.length; i++) {\n        area += triangleArea(points[0], points[i - 1], points[i]);\n    }\n\n    return area;\n};\n\nexport default area;\n","import type { Point } from \"../../types/global\";\n\nconst randomPointInDistance = (point: Point, distance: number): Point => {\n    const angle = Math.random() * 2 * Math.PI;\n    const dx = distance * Math.cos(angle);\n    const dy = distance * Math.sin(angle);\n    return {\n        x: point.x + dx,\n        y: point.y + dy,\n    };\n};\n\nexport default randomPointInDistance;\n","import distance from \"./distance\";\nimport type { Point } from \"../../types/global\";\n\nconst nearest = (initialPoint: Point, points: Point[]): Point | null => {\n    if (!points.length) {\n        return null;\n    }\n\n    let minDistance = Infinity;\n    let nearestPoint = points[0];\n\n    for (const point of points) {\n        const distanceBetween = distance(initialPoint, point);\n        if (distanceBetween < minDistance) {\n            minDistance = distanceBetween;\n            nearestPoint = point;\n        }\n    }\n\n    return nearestPoint;\n};\n\nexport default nearest;\n","import distance from \"./distance\";\nimport type { Point } from \"../../types/global\";\n\nconst perimeter = (points: Point[]): number => {\n    let overallDistance = 0;\n    for (let i = 0; i < points.length; i++) {\n        overallDistance += distance(points[i], points[(i + 1) % points.length]);\n    }\n    return overallDistance;\n};\n\nexport default perimeter;\n","import type { Point } from \"../../types/global\";\n\nconst positionInCircle = (\n    centerPoint: Point,\n    radius: number,\n    angleInRadians: number\n): Point => {\n    const { x: centerX, y: centerY } = centerPoint;\n\n    const x = centerX + radius * Math.cos(angleInRadians);\n    const y = centerY + radius * Math.sin(angleInRadians);\n\n    return { x, y };\n};\n\nexport default positionInCircle;\n","const possibleConnections = (pointsCount: number) => {\n    return (pointsCount * (pointsCount - 1)) / 2;\n};\n\nexport default possibleConnections;\n","const circleArea = (radius: number): number => {\n    return Math.PI * radius ** 2;\n};\n\nexport default circleArea;\n","import type { Point } from \"../../types/global\";\n\nconst center = (points: Point[]): Point => {\n    let sumX = 0;\n    let sumY = 0;\n    const numPoints = points.length;\n\n    // Calculate the sum of x-coordinates and y-coordinates\n    for (let i = 0; i < numPoints; i++) {\n        const point = points[i];\n        sumX += point.x;\n        sumY += point.y;\n    }\n\n    // Find the average x and y coordinates\n    const centerX = sumX / numPoints;\n    const centerY = sumY / numPoints;\n\n    return { x: centerX, y: centerY };\n};\n\nexport default center;\n","import distance from \"./distance\";\nimport type { Point } from \"../../types/global\";\n\nconst farthest = (initialPoint: Point, points: Point[]) => {\n    let maxDistance = 0;\n    let farthestPoint: Point | null = null;\n    for (const point of points) {\n        const distanceBetween = distance(initialPoint, point);\n        if (distanceBetween > maxDistance) {\n            maxDistance = distanceBetween;\n            farthestPoint = point;\n        }\n    }\n\n    return farthestPoint;\n};\n\nexport default farthest;\n","import { randomNumber } from \"../../index\";\nimport type { Bounds, Point } from \"../../types/global\";\n\nconst randomPoint = (xBounds?: Bounds, yBounds?: Bounds): Point => {\n    const { min: minX, max: maxX } = xBounds || {};\n    const { min: minY, max: maxY } = yBounds || {};\n\n    return {\n        x: maxX ? randomNumber(minX || 0, maxX) : Math.random() * 100,\n        y: maxY ? randomNumber(minY || 0, maxY) : Math.random() * 100,\n    };\n};\n\nexport default randomPoint;\n","import type { Point } from \"../../types/global\";\n\nconst move = (initialPoint: Point, xStep: number, yStep: number): Point => {\n    const { x, y } = initialPoint;\n\n    return {\n        x: x + xStep,\n        y: y + yStep,\n    };\n};\n\nexport default move;\n","import type { Point } from \"../../types/global\";\n\nconst scale = (points: Point[], scaleFactorX: number, scaleFactorY: number) => {\n    return points.map(({ x, y }) => ({\n        x: x * scaleFactorX,\n        y: y * scaleFactorY,\n    }));\n};\n\nexport default scale;\n","import type { Line, Point } from \"../../types/global\";\n\nconst inLine = (point: Point, line: Line): boolean => {\n    const { x, y } = point;\n    const startPoint = line.start;\n    const endPoint = line.end;\n\n    const slope = (endPoint.y - startPoint.y) / (endPoint.x - startPoint.x);\n\n    return y - startPoint.y === slope * (x - startPoint.x);\n};\n\nexport default inLine;\n","import type { Line, Point } from \"../../types/global\";\n\nconst getLine = (point1: Point, point2: Point): Line => {\n    return {\n        start: point1,\n        end: point2,\n    };\n};\n\nexport default getLine;\n","import type { Line } from \"../../types/global\";\n\nconst cross = (line1: Line, line2: Line): boolean => {\n    const line1Start = line1.start;\n    const line1End = line1.end;\n    const line2Start = line2.start;\n    const line2End = line2.end;\n\n    // Calculate the direction vectors for both lines\n    const line1Dir = {\n        x: line1End.x - line1Start.x,\n        y: line1End.y - line1Start.y,\n    };\n    const line2Dir = {\n        x: line2End.x - line2Start.x,\n        y: line2End.y - line2Start.y,\n    };\n\n    // Calculate the cross product of the direction vectors\n    const crossProduct = line1Dir.x * line2Dir.y - line1Dir.y * line2Dir.x;\n\n    // If the cross product is zero, the lines are parallel or coincident\n    if (crossProduct === 0) {\n        return false;\n    }\n\n    // Calculate the signed areas of triangles formed by each point and the other line's endpoints\n    const area1 =\n        (line2End.x - line1Start.x) * (line2Start.y - line1Start.y) -\n        (line2Start.x - line1Start.x) * (line2End.y - line1Start.y);\n    const area2 =\n        (line1End.x - line2Start.x) * (line1Start.y - line2Start.y) -\n        (line1Start.x - line2Start.x) * (line1End.y - line2Start.y);\n\n    // If the signed areas have different signs, the lines intersect\n    return area1 * area2 < 0;\n};\n\nexport default cross;\n","import type { Point } from \"../../types/global\";\n\nconst rotate = (\n    points: Point[],\n    centerPoint: Point,\n    angleInRadians: number\n) => {\n    const { x: centerX, y: centerY } = centerPoint;\n    return points.map((point) => {\n        const x =\n            centerX +\n            (point.x - centerX) * Math.cos(angleInRadians) -\n            (point.y - centerY) * Math.sin(angleInRadians);\n        const y =\n            centerY +\n            (point.x - centerX) * Math.sin(angleInRadians) +\n            (point.y - centerY) * Math.cos(angleInRadians);\n        return { x, y };\n    });\n};\n\nexport default rotate;\n","import type { Point, Coordinate } from \"../../types/global\";\n\n// Helper function to compare points based on the given coordinate\nconst compareFunction = (\n    point1: Point,\n    point2: Point,\n    coordinate?: Coordinate\n) => {\n    const { x: x1, y: y1 } = point1;\n    const { x: x2, y: y2 } = point2;\n\n    if (coordinate === \"x\" || !coordinate) {\n        return x1 - x2;\n    }\n    if (coordinate === \"y\" || !coordinate) {\n        return y1 - y2;\n    }\n    return 0;\n};\n\nconst sort = (points: Point[], coordinate?: Coordinate) => {\n    // Sort the points array using the compare function\n    return points.sort((point1, point2) =>\n        compareFunction(point1, point2, coordinate)\n    ); // Return the sorted array\n};\n\nexport default sort;\n","import type { Direction, Point } from \"../../types/global\";\n\nconst sequence: Direction[] = [\"right\", \"down\", \"left\", \"up\"];\n\nconst steps = {\n    left: [-1, 0],\n    right: [1, 0],\n    up: [0, 1],\n    down: [0, -1],\n};\n\nconst square = (\n    initialPoint: Point,\n    size: number,\n    direction: Direction = \"right\"\n) => {\n    const points: Point[] = [initialPoint];\n    let { x, y } = initialPoint;\n\n    for (let i = 0; i < 3; i++) {\n        const nextStep = steps[direction];\n        x += nextStep[0] * size;\n        y += nextStep[1] * size;\n        points.push({ x, y });\n        const nextDirectionIndex =\n            sequence.indexOf(direction) + 1 < sequence.length\n                ? sequence.indexOf(direction) + 1\n                : 0;\n        direction = sequence[nextDirectionIndex]; // cyclic rotation\n    }\n\n    return points;\n};\n\nexport default square;\n","import type { Direction, Point } from \"../../types/global\";\n\nconst sequence: Direction[] = [\"right\", \"down\", \"left\", \"up\"];\nconst steps = {\n    left: [-1, 0],\n    right: [1, 0],\n    up: [0, 1],\n    down: [0, -1],\n};\n\nconst rectangle = (\n    initialPoint: Point,\n    width: number,\n    height: number,\n    direction: Direction = \"right\"\n) => {\n    const points: Point[] = [initialPoint];\n    let { x, y } = initialPoint;\n\n    for (let i = 0; i < 3; i++) {\n        const nextStep = steps[direction];\n        x += nextStep[0] * width;\n        y += nextStep[1] * height;\n        points.push({ x, y });\n\n        const nextDirectionIndex =\n            sequence.indexOf(direction) + 1 < sequence.length\n                ? sequence.indexOf(direction) + 1\n                : 0;\n        direction = sequence[nextDirectionIndex]; // cyclic rotation\n    }\n\n    return points;\n};\n\nexport default rectangle;\n","import type { Direction, Point } from \"../../types/global\";\n\nconst steps = {\n    left: [-1, 0],\n    right: [1, 0],\n    up: [0, 1],\n    down: [0, -1],\n};\n\nconst triangle = (\n    initialPoint: Point,\n    size: number,\n    direction: Direction = \"left\"\n): Point[] => {\n    const height = (Math.sqrt(3) / 2) * size;\n    const nextStep = steps[direction];\n\n    const points: Point[] = [initialPoint];\n    let { x, y } = initialPoint;\n\n    for (let i = 0; i < 2; i++) {\n        if (i === 0) {\n            x += nextStep[0] * size;\n            y += nextStep[1] * size; // The second point should have a y increment of 0\n        } else {\n            x += nextStep[0] ? size / 2 : height;\n            y += nextStep[1] ? size / 2 : height;\n        }\n        points.push({ x, y });\n    }\n\n    return points;\n};\n\nexport default triangle;\n","import type { Point } from \"../../types/global\";\n\nconst pentagon = (centerPoint: Point, radius: number, angle: number = 0) => {\n    const points = [];\n    const numberOfSides = 5;\n    const { x: centerX, y: centerY } = centerPoint;\n\n    const angleRad = (angle % 360) * (Math.PI / 180);\n\n    for (let i = 0; i < numberOfSides; i++) {\n        const currentAngle = angleRad + (i * (2 * Math.PI)) / numberOfSides;\n        const x = centerX + radius * Math.cos(currentAngle);\n        const y = centerY + radius * Math.sin(currentAngle);\n        points.push({ x, y });\n    }\n\n    return points;\n};\n\nexport default pentagon;\n","import type { Point } from \"../../types/global\";\n\nconst lerp = (point1: Point, point2: Point, t: number): Point => ({\n    x: point1.x + (point2.x - point1.x) * t,\n    y: point1.y + (point2.y - point1.y) * t,\n});\n\nexport default lerp;\n","const inRange = (\n    number: number,\n    minLimit: number,\n    maxLimit: number\n): boolean => {\n    return number >= minLimit && number <= maxLimit;\n};\n\nexport default inRange;\n","const roundToPrecision = (number: number, precision: number): number => {\n    const multiplier = 10 ** precision;\n\n    return (\n        Math.round(number * multiplier) / // round using Math.round\n        multiplier\n    ); // scale back the decimal\n};\n\nexport default roundToPrecision;\n","const degreesToRadians = (degrees: number): number => {\n    return (degrees * Math.PI) / 180;\n};\n\nexport default degreesToRadians;\n","const radiansToDegrees = (radians: number): number => {\n    return (radians * 180) / Math.PI;\n};\n\nexport default radiansToDegrees;\n","const average = (numbers: number[]): number => {\n    return numbers.reduce((a, b) => a + b) / numbers.length;\n};\n\nexport default average;\n","const uniqueId = (others?: string[]): string => {\n    const newId = crypto.randomUUID();\n    if (others) {\n        let isTaken: boolean = false;\n        // Check if the  id exists in others array, if so generate a new one until it's not taken anymore\n        others.forEach((id) => {\n            if (newId === id) isTaken = true;\n        });\n        if (isTaken) return uniqueId(others);\n        return newId;\n    }\n    return newId;\n};\n\nexport default uniqueId;\n","const randomBoolean = () => {\n    return Boolean(Math.round(Math.random()));\n};\n\nexport default randomBoolean;\n","const intersection = (arr1: unknown[], arr2: unknown[]) => {\n    return arr1.filter((value) => arr2.includes(value));\n};\n\nexport default intersection;\n","const difference = (arr1: unknown[], arr2: unknown[]): unknown[] => {\n    return arr1.filter((value) => !arr2.includes(value));\n};\n\nexport default difference;\n","const chunk = (array: unknown[], perChunk: number) => {\n    const chunks = [];\n    for (let i = 0; i < array.length / perChunk; i++) {\n        const startIndex = i * perChunk;\n        const newChunk = array.slice(startIndex, startIndex + perChunk);\n        chunks.push(newChunk);\n    }\n    return chunks;\n};\n\nexport default chunk;\n","const removeDuplicates = (arr: unknown[]) => {\n    return [...new Set(arr)];\n};\n\nexport default removeDuplicates;\n","import randomNumber from \"../randomization/randomNumber\";\n\nconst sample = (arr: unknown[], size: number = 1) => {\n    if (size > arr.length)\n        throw new Error(\"Sample size is larger than the array length\");\n    if (size <= 0) throw new Error(\"Size must be a positive integer\");\n    if (size === 1) {\n        const randomStart = randomNumber(0, arr.length - 1);\n        return arr[randomStart];\n    }\n    const randomStart = randomNumber(0, arr.length - size);\n    return arr.slice(randomStart, randomStart + size);\n};\n\nexport default sample;\n","import distance from \"../core/points/distance\";\nimport collision from \"../core/points/collision\";\nimport middle from \"../core/points/middle\";\nimport angle from \"../core/points/angle\";\nimport move from \"../core/points/move\";\nimport farthest from \"../core/points/farthest\";\nimport nearest from \"../core/points/nearest\";\nimport collisionInArray from \"../core/points/collisionInArray\";\nimport inLine from \"../core/points/inLine\";\nimport getLine from \"../core/points/getLine\";\nimport lerpFn from \"../core/points/lerp\";\nimport rotateFn from \"../core/points/rotate\";\nimport type { Line, Point as PointType } from \"../types/global\";\n\nexport class Point implements PointType {\n    constructor(\n        public x: number,\n        public y: number\n    ) {}\n\n    static from(point: PointType): Point {\n        return new Point(point.x, point.y);\n    }\n\n    clone(): Point {\n        return new Point(this.x, this.y);\n    }\n\n    equals(other: PointType): boolean {\n        return this.x === other.x && this.y === other.y;\n    }\n\n    toString(): string {\n        return `Point(${this.x}, ${this.y})`;\n    }\n\n    distanceTo(other: PointType): ReturnType<typeof distance> {\n        return distance(this, other);\n    }\n\n    isCollidingWith(\n        other: PointType,\n        collisionDistance: number\n    ): ReturnType<typeof collision> {\n        return collision(this, other, collisionDistance);\n    }\n\n    isCollidingWithAny(\n        points: PointType[],\n        collisionDistance: number\n    ): ReturnType<typeof collisionInArray> {\n        return collisionInArray(this, points, collisionDistance);\n    }\n\n    middleTo(other: PointType): Point {\n        const mid = middle(this, other);\n        return new Point(mid.x, mid.y);\n    }\n\n    angleTo(other: PointType): ReturnType<typeof angle> {\n        return angle(this, other);\n    }\n\n    move(x: number, y: number): Point {\n        const moved = move(this, x, y);\n        return new Point(moved.x, moved.y);\n    }\n\n    lerp(other: PointType, t: number): Point {\n        const p = lerpFn(this, other, t);\n        return new Point(p.x, p.y);\n    }\n\n    rotateAround(center: PointType, angleRad: number): Point {\n        const pts = rotateFn([this], center, angleRad);\n        return new Point(pts[0].x, pts[0].y);\n    }\n\n    nearestFromPoints(points: PointType[]): Point | null {\n        const near = nearest(this, points);\n        return near ? new Point(near.x, near.y) : null;\n    }\n\n    farthestFromPoints(points: PointType[]): Point | null {\n        const far = farthest(this, points);\n        return far ? new Point(far.x, far.y) : null;\n    }\n\n    isInLine(line: Line): ReturnType<typeof inLine> {\n        return inLine(this, line);\n    }\n\n    buildLineWith(point: PointType): ReturnType<typeof getLine> {\n        return getLine(this, point);\n    }\n}\n\nexport default Point;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,IAAM,WAAW,CAAC,QAAe,WAA0B;AACvD,QAAM,KAAK,OAAO,IAAI,OAAO;AAC7B,QAAM,KAAK,OAAO,IAAI,OAAO;AAC7B,SAAO,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AACtC;AAEA,IAAO,mBAAQ;;;ACNf,IAAM,YAAY,CACd,QACA,QACA,mBACA,aACU;AACV,QAAM,KAAK,OAAO,IAAI,OAAO;AAC7B,QAAM,KAAK,OAAO,IAAI,OAAO;AAC7B,QAAM,IAAI;AACV,QAAM,WAAW,KAAK,KAAK,KAAK,MAAM,IAAI;AAE1C,MAAI,UAAU;AACV,eAAW;AACX,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAEA,IAAO,oBAAQ;;;AClBf,IAAM,SAAS,CAAC,QAAe,WAAyB;AACpD,QAAM,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI;AACzB,QAAM,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI;AAEzB,QAAM,YAAY,KAAK,IAAI,KAAK,EAAE;AAClC,QAAM,YAAY,KAAK,IAAI,KAAK,EAAE;AAElC,QAAM,UAAU,MAAM,KAAK,YAAY,IAAI,CAAC,YAAY;AACxD,QAAM,UAAU,MAAM,KAAK,YAAY,IAAI,CAAC,YAAY;AAExD,SAAO;AAAA,IACH,GAAG,KAAK;AAAA,IACR,GAAG,KAAK;AAAA,EACZ;AACJ;AAEA,IAAO,iBAAQ;;;ACff,IAAM,cAAc;AAEpB,IAAM,wBAAwB,CAC1B,SACA,SACA,uBACA,QACA,kBAAkB,gBACD;AACjB,MAAI,mBAAmB,GAAG;AACtB,WAAO;AAAA,EACX;AAEA,QAAM,EAAE,KAAK,MAAM,KAAK,KAAK,IAAI;AACjC,QAAM,EAAE,KAAK,MAAM,KAAK,KAAK,IAAI;AAEjC,QAAM,eAAe;AAAA,IACjB,EAAE,KAAK,MAAM,KAAK,KAAK;AAAA,IACvB,EAAE,KAAK,MAAM,KAAK,KAAK;AAAA,EAC3B;AAEA,MAAI,cAAc;AAClB,SAAO,QAAQ,CAAC,UAAU;AACtB,QAAI,iBAAS,cAAc,KAAK,IAAI,uBAAuB;AACvD,oBAAc;AAAA,IAClB;AAAA,EACJ,CAAC;AAED,MAAI,aAAa;AACb,WAAO;AAAA,MACH;AAAA,QACI,KAAK;AAAA,QACL,KAAK;AAAA,MACT;AAAA,MACA;AAAA,QACI,KAAK;AAAA,QACL,KAAK;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,IACtB;AAAA,EACJ,OAAO;AACH,WAAO;AAAA,EACX;AACJ;AAEA,IAAO,gCAAQ;;;AC/Cf,IAAM,mBAAmB,CACrB,cACA,KACA,WACU;AACV,QAAM,gBAAyB,CAAC;AAGhC,MAAI,QAAQ,CAAC,UAAiB;AAC1B,sBAAU,cAAc,OAAO,QAAQ,MAAM;AACzC,oBAAc,KAAK,KAAK;AAAA,IAC5B,CAAC;AAAA,EACL,CAAC;AAED,SAAO;AACX;AAEA,IAAO,2BAAQ;;;AClBf,IAAM,KAAK,KAAK;AAEhB,IAAM,QAAQ,CAAC,QAAe,WAA0B;AACpD,QAAM,EAAE,GAAG,QAAQ,GAAG,OAAO,IAAI;AACjC,QAAM,EAAE,GAAG,MAAM,GAAG,KAAK,IAAI;AAG7B,MAAI,WAAW,QAAQ,WAAW,MAAM;AACpC,WAAO;AAAA,EACX;AAGA,QAAM,iBAAiB,KAAK,MAAM,OAAO,QAAQ,OAAO,MAAM;AAG9D,QAAM,WAAW,KAAK,MAAM,KAAK,MAAM,QAAQ,MAAM,IAAI,IAAI,MAAM,KAAK,CAAC;AACzE,QAAM,gBAAgB,kBAAmB,WAAW,KAAK,KAAM;AAE/D,SAAO;AACX;AAEA,IAAO,gBAAQ;;;ACvBf,IAAM,eAAe,CAAC,KAAa,QAAwB;AACvD,SAAO,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,IAAI,IAAI;AACrD;AAEA,IAAO,uBAAQ;;;ACDf,IAAM,eAAe,CACjB,SACA,SACA,aACU;AACV,QAAM,EAAE,KAAK,MAAM,KAAK,KAAK,IAAI;AACjC,QAAM,EAAE,KAAK,MAAM,KAAK,KAAK,IAAI;AAEjC,QAAM,SAAkB,CAAC;AAEzB,WAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AAC/B,UAAM,IAAI,qBAAgB,MAAM,IAAI;AACpC,UAAM,IAAI,qBAAgB,MAAM,IAAI;AAEpC,WAAO,KAAK,EAAE,GAAG,EAAE,CAAC;AAAA,EACxB;AAEA,SAAO;AACX;AAEA,IAAO,uBAAQ;;;ACrBf,IAAM,eAAe,CACjB,EAAE,GAAG,IAAI,GAAG,GAAG,GACf,EAAE,GAAG,IAAI,GAAG,GAAG,GACf,EAAE,GAAG,IAAI,GAAG,GAAG,MACd,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,CAAC;AAE7E,IAAO,uBAAQ;;;ACLf,IAAM,OAAO,CAAC,WAA4B;AACtC,MAAIA,QAAO;AAGX,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,IAAAA,SAAQ,qBAAa,OAAO,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,EAC5D;AAEA,SAAOA;AACX;AAEA,IAAO,eAAQ;;;ACZf,IAAM,wBAAwB,CAAC,OAAcC,cAA4B;AACrE,QAAMC,SAAQ,KAAK,OAAO,IAAI,IAAI,KAAK;AACvC,QAAM,KAAKD,YAAW,KAAK,IAAIC,MAAK;AACpC,QAAM,KAAKD,YAAW,KAAK,IAAIC,MAAK;AACpC,SAAO;AAAA,IACH,GAAG,MAAM,IAAI;AAAA,IACb,GAAG,MAAM,IAAI;AAAA,EACjB;AACJ;AAEA,IAAO,gCAAQ;;;ACTf,IAAM,UAAU,CAAC,cAAqB,WAAkC;AACpE,MAAI,CAAC,OAAO,QAAQ;AAChB,WAAO;AAAA,EACX;AAEA,MAAI,cAAc;AAClB,MAAI,eAAe,OAAO,CAAC;AAE3B,aAAW,SAAS,QAAQ;AACxB,UAAM,kBAAkB,iBAAS,cAAc,KAAK;AACpD,QAAI,kBAAkB,aAAa;AAC/B,oBAAc;AACd,qBAAe;AAAA,IACnB;AAAA,EACJ;AAEA,SAAO;AACX;AAEA,IAAO,kBAAQ;;;ACnBf,IAAM,YAAY,CAAC,WAA4B;AAC3C,MAAI,kBAAkB;AACtB,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,uBAAmB,iBAAS,OAAO,CAAC,GAAG,QAAQ,IAAI,KAAK,OAAO,MAAM,CAAC;AAAA,EAC1E;AACA,SAAO;AACX;AAEA,IAAO,oBAAQ;;;ACTf,IAAM,mBAAmB,CACrB,aACA,QACA,mBACQ;AACR,QAAM,EAAE,GAAG,SAAS,GAAG,QAAQ,IAAI;AAEnC,QAAM,IAAI,UAAU,SAAS,KAAK,IAAI,cAAc;AACpD,QAAM,IAAI,UAAU,SAAS,KAAK,IAAI,cAAc;AAEpD,SAAO,EAAE,GAAG,EAAE;AAClB;AAEA,IAAO,2BAAQ;;;ACff,IAAM,sBAAsB,CAAC,gBAAwB;AACjD,SAAQ,eAAe,cAAc,KAAM;AAC/C;AAEA,IAAO,8BAAQ;;;ACJf,IAAM,aAAa,CAAC,WAA2B;AAC3C,SAAO,KAAK,KAAK,UAAU;AAC/B;AAEA,IAAO,qBAAQ;;;ACFf,IAAM,SAAS,CAAC,WAA2B;AACvC,MAAI,OAAO;AACX,MAAI,OAAO;AACX,QAAM,YAAY,OAAO;AAGzB,WAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAChC,UAAM,QAAQ,OAAO,CAAC;AACtB,YAAQ,MAAM;AACd,YAAQ,MAAM;AAAA,EAClB;AAGA,QAAM,UAAU,OAAO;AACvB,QAAM,UAAU,OAAO;AAEvB,SAAO,EAAE,GAAG,SAAS,GAAG,QAAQ;AACpC;AAEA,IAAO,iBAAQ;;;AClBf,IAAM,WAAW,CAAC,cAAqB,WAAoB;AACvD,MAAI,cAAc;AAClB,MAAI,gBAA8B;AAClC,aAAW,SAAS,QAAQ;AACxB,UAAM,kBAAkB,iBAAS,cAAc,KAAK;AACpD,QAAI,kBAAkB,aAAa;AAC/B,oBAAc;AACd,sBAAgB;AAAA,IACpB;AAAA,EACJ;AAEA,SAAO;AACX;AAEA,IAAO,mBAAQ;;;ACdf,IAAM,cAAc,CAAC,SAAkB,YAA4B;AAC/D,QAAM,EAAE,KAAK,MAAM,KAAK,KAAK,IAAI,WAAW,CAAC;AAC7C,QAAM,EAAE,KAAK,MAAM,KAAK,KAAK,IAAI,WAAW,CAAC;AAE7C,SAAO;AAAA,IACH,GAAG,OAAO,qBAAa,QAAQ,GAAG,IAAI,IAAI,KAAK,OAAO,IAAI;AAAA,IAC1D,GAAG,OAAO,qBAAa,QAAQ,GAAG,IAAI,IAAI,KAAK,OAAO,IAAI;AAAA,EAC9D;AACJ;AAEA,IAAO,sBAAQ;;;ACXf,IAAM,OAAO,CAAC,cAAqB,OAAe,UAAyB;AACvE,QAAM,EAAE,GAAG,EAAE,IAAI;AAEjB,SAAO;AAAA,IACH,GAAG,IAAI;AAAA,IACP,GAAG,IAAI;AAAA,EACX;AACJ;AAEA,IAAO,eAAQ;;;ACTf,IAAM,QAAQ,CAAC,QAAiB,cAAsB,iBAAyB;AAC3E,SAAO,OAAO,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO;AAAA,IAC7B,GAAG,IAAI;AAAA,IACP,GAAG,IAAI;AAAA,EACX,EAAE;AACN;AAEA,IAAO,gBAAQ;;;ACPf,IAAM,SAAS,CAAC,OAAc,SAAwB;AAClD,QAAM,EAAE,GAAG,EAAE,IAAI;AACjB,QAAM,aAAa,KAAK;AACxB,QAAM,WAAW,KAAK;AAEtB,QAAM,SAAS,SAAS,IAAI,WAAW,MAAM,SAAS,IAAI,WAAW;AAErE,SAAO,IAAI,WAAW,MAAM,SAAS,IAAI,WAAW;AACxD;AAEA,IAAO,iBAAQ;;;ACVf,IAAM,UAAU,CAAC,QAAe,WAAwB;AACpD,SAAO;AAAA,IACH,OAAO;AAAA,IACP,KAAK;AAAA,EACT;AACJ;AAEA,IAAO,kBAAQ;;;ACPf,IAAM,QAAQ,CAAC,OAAa,UAAyB;AACjD,QAAM,aAAa,MAAM;AACzB,QAAM,WAAW,MAAM;AACvB,QAAM,aAAa,MAAM;AACzB,QAAM,WAAW,MAAM;AAGvB,QAAM,WAAW;AAAA,IACb,GAAG,SAAS,IAAI,WAAW;AAAA,IAC3B,GAAG,SAAS,IAAI,WAAW;AAAA,EAC/B;AACA,QAAM,WAAW;AAAA,IACb,GAAG,SAAS,IAAI,WAAW;AAAA,IAC3B,GAAG,SAAS,IAAI,WAAW;AAAA,EAC/B;AAGA,QAAM,eAAe,SAAS,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS;AAGrE,MAAI,iBAAiB,GAAG;AACpB,WAAO;AAAA,EACX;AAGA,QAAM,SACD,SAAS,IAAI,WAAW,MAAM,WAAW,IAAI,WAAW,MACxD,WAAW,IAAI,WAAW,MAAM,SAAS,IAAI,WAAW;AAC7D,QAAM,SACD,SAAS,IAAI,WAAW,MAAM,WAAW,IAAI,WAAW,MACxD,WAAW,IAAI,WAAW,MAAM,SAAS,IAAI,WAAW;AAG7D,SAAO,QAAQ,QAAQ;AAC3B;AAEA,IAAO,gBAAQ;;;ACpCf,IAAM,SAAS,CACX,QACA,aACA,mBACC;AACD,QAAM,EAAE,GAAG,SAAS,GAAG,QAAQ,IAAI;AACnC,SAAO,OAAO,IAAI,CAAC,UAAU;AACzB,UAAM,IACF,WACC,MAAM,IAAI,WAAW,KAAK,IAAI,cAAc,KAC5C,MAAM,IAAI,WAAW,KAAK,IAAI,cAAc;AACjD,UAAM,IACF,WACC,MAAM,IAAI,WAAW,KAAK,IAAI,cAAc,KAC5C,MAAM,IAAI,WAAW,KAAK,IAAI,cAAc;AACjD,WAAO,EAAE,GAAG,EAAE;AAAA,EAClB,CAAC;AACL;AAEA,IAAO,iBAAQ;;;AClBf,IAAM,kBAAkB,CACpB,QACA,QACA,eACC;AACD,QAAM,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI;AACzB,QAAM,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI;AAEzB,MAAI,eAAe,OAAO,CAAC,YAAY;AACnC,WAAO,KAAK;AAAA,EAChB;AACA,MAAI,eAAe,OAAO,CAAC,YAAY;AACnC,WAAO,KAAK;AAAA,EAChB;AACA,SAAO;AACX;AAEA,IAAM,OAAO,CAAC,QAAiB,eAA4B;AAEvD,SAAO,OAAO;AAAA,IAAK,CAAC,QAAQ,WACxB,gBAAgB,QAAQ,QAAQ,UAAU;AAAA,EAC9C;AACJ;AAEA,IAAO,eAAQ;;;ACzBf,IAAM,WAAwB,CAAC,SAAS,QAAQ,QAAQ,IAAI;AAE5D,IAAM,QAAQ;AAAA,EACV,MAAM,CAAC,IAAI,CAAC;AAAA,EACZ,OAAO,CAAC,GAAG,CAAC;AAAA,EACZ,IAAI,CAAC,GAAG,CAAC;AAAA,EACT,MAAM,CAAC,GAAG,EAAE;AAChB;AAEA,IAAM,SAAS,CACX,cACA,MACA,YAAuB,YACtB;AACD,QAAM,SAAkB,CAAC,YAAY;AACrC,MAAI,EAAE,GAAG,EAAE,IAAI;AAEf,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,UAAM,WAAW,MAAM,SAAS;AAChC,SAAK,SAAS,CAAC,IAAI;AACnB,SAAK,SAAS,CAAC,IAAI;AACnB,WAAO,KAAK,EAAE,GAAG,EAAE,CAAC;AACpB,UAAM,qBACF,SAAS,QAAQ,SAAS,IAAI,IAAI,SAAS,SACrC,SAAS,QAAQ,SAAS,IAAI,IAC9B;AACV,gBAAY,SAAS,kBAAkB;AAAA,EAC3C;AAEA,SAAO;AACX;AAEA,IAAO,iBAAQ;;;AChCf,IAAMC,YAAwB,CAAC,SAAS,QAAQ,QAAQ,IAAI;AAC5D,IAAMC,SAAQ;AAAA,EACV,MAAM,CAAC,IAAI,CAAC;AAAA,EACZ,OAAO,CAAC,GAAG,CAAC;AAAA,EACZ,IAAI,CAAC,GAAG,CAAC;AAAA,EACT,MAAM,CAAC,GAAG,EAAE;AAChB;AAEA,IAAM,YAAY,CACd,cACA,OACA,QACA,YAAuB,YACtB;AACD,QAAM,SAAkB,CAAC,YAAY;AACrC,MAAI,EAAE,GAAG,EAAE,IAAI;AAEf,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,UAAM,WAAWA,OAAM,SAAS;AAChC,SAAK,SAAS,CAAC,IAAI;AACnB,SAAK,SAAS,CAAC,IAAI;AACnB,WAAO,KAAK,EAAE,GAAG,EAAE,CAAC;AAEpB,UAAM,qBACFD,UAAS,QAAQ,SAAS,IAAI,IAAIA,UAAS,SACrCA,UAAS,QAAQ,SAAS,IAAI,IAC9B;AACV,gBAAYA,UAAS,kBAAkB;AAAA,EAC3C;AAEA,SAAO;AACX;AAEA,IAAO,oBAAQ;;;ACjCf,IAAME,SAAQ;AAAA,EACV,MAAM,CAAC,IAAI,CAAC;AAAA,EACZ,OAAO,CAAC,GAAG,CAAC;AAAA,EACZ,IAAI,CAAC,GAAG,CAAC;AAAA,EACT,MAAM,CAAC,GAAG,EAAE;AAChB;AAEA,IAAM,WAAW,CACb,cACA,MACA,YAAuB,WACb;AACV,QAAM,SAAU,KAAK,KAAK,CAAC,IAAI,IAAK;AACpC,QAAM,WAAWA,OAAM,SAAS;AAEhC,QAAM,SAAkB,CAAC,YAAY;AACrC,MAAI,EAAE,GAAG,EAAE,IAAI;AAEf,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,QAAI,MAAM,GAAG;AACT,WAAK,SAAS,CAAC,IAAI;AACnB,WAAK,SAAS,CAAC,IAAI;AAAA,IACvB,OAAO;AACH,WAAK,SAAS,CAAC,IAAI,OAAO,IAAI;AAC9B,WAAK,SAAS,CAAC,IAAI,OAAO,IAAI;AAAA,IAClC;AACA,WAAO,KAAK,EAAE,GAAG,EAAE,CAAC;AAAA,EACxB;AAEA,SAAO;AACX;AAEA,IAAO,mBAAQ;;;AChCf,IAAM,WAAW,CAAC,aAAoB,QAAgBC,SAAgB,MAAM;AACxE,QAAM,SAAS,CAAC;AAChB,QAAM,gBAAgB;AACtB,QAAM,EAAE,GAAG,SAAS,GAAG,QAAQ,IAAI;AAEnC,QAAM,WAAYA,SAAQ,OAAQ,KAAK,KAAK;AAE5C,WAAS,IAAI,GAAG,IAAI,eAAe,KAAK;AACpC,UAAM,eAAe,WAAY,KAAK,IAAI,KAAK,MAAO;AACtD,UAAM,IAAI,UAAU,SAAS,KAAK,IAAI,YAAY;AAClD,UAAM,IAAI,UAAU,SAAS,KAAK,IAAI,YAAY;AAClD,WAAO,KAAK,EAAE,GAAG,EAAE,CAAC;AAAA,EACxB;AAEA,SAAO;AACX;AAEA,IAAO,mBAAQ;;;ACjBf,IAAM,OAAO,CAAC,QAAe,QAAe,OAAsB;AAAA,EAC9D,GAAG,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK;AAAA,EACtC,GAAG,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK;AAC1C;AAEA,IAAO,eAAQ;;;ACPf,IAAM,UAAU,CACZ,QACA,UACA,aACU;AACV,SAAO,UAAU,YAAY,UAAU;AAC3C;AAEA,IAAO,kBAAQ;;;ACRf,IAAM,mBAAmB,CAAC,QAAgB,cAA8B;AACpE,QAAM,aAAa,MAAM;AAEzB,SACI,KAAK,MAAM,SAAS,UAAU;AAAA,EAC9B;AAER;AAEA,IAAO,2BAAQ;;;ACTf,IAAM,mBAAmB,CAAC,YAA4B;AAClD,SAAQ,UAAU,KAAK,KAAM;AACjC;AAEA,IAAO,2BAAQ;;;ACJf,IAAM,mBAAmB,CAAC,YAA4B;AAClD,SAAQ,UAAU,MAAO,KAAK;AAClC;AAEA,IAAO,2BAAQ;;;ACJf,IAAM,UAAU,CAAC,YAA8B;AAC3C,SAAO,QAAQ,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,QAAQ;AACrD;AAEA,IAAO,kBAAQ;;;ACJf,IAAM,WAAW,CAAC,WAA8B;AAC5C,QAAM,QAAQ,OAAO,WAAW;AAChC,MAAI,QAAQ;AACR,QAAI,UAAmB;AAEvB,WAAO,QAAQ,CAAC,OAAO;AACnB,UAAI,UAAU,GAAI,WAAU;AAAA,IAChC,CAAC;AACD,QAAI,QAAS,QAAO,SAAS,MAAM;AACnC,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAEA,IAAO,mBAAQ;;;ACdf,IAAM,gBAAgB,MAAM;AACxB,SAAO,QAAQ,KAAK,MAAM,KAAK,OAAO,CAAC,CAAC;AAC5C;AAEA,IAAO,wBAAQ;;;ACJf,IAAM,eAAe,CAAC,MAAiB,SAAoB;AACvD,SAAO,KAAK,OAAO,CAAC,UAAU,KAAK,SAAS,KAAK,CAAC;AACtD;AAEA,IAAO,uBAAQ;;;ACJf,IAAM,aAAa,CAAC,MAAiB,SAA+B;AAChE,SAAO,KAAK,OAAO,CAAC,UAAU,CAAC,KAAK,SAAS,KAAK,CAAC;AACvD;AAEA,IAAO,qBAAQ;;;ACJf,IAAM,QAAQ,CAAC,OAAkB,aAAqB;AAClD,QAAM,SAAS,CAAC;AAChB,WAAS,IAAI,GAAG,IAAI,MAAM,SAAS,UAAU,KAAK;AAC9C,UAAM,aAAa,IAAI;AACvB,UAAM,WAAW,MAAM,MAAM,YAAY,aAAa,QAAQ;AAC9D,WAAO,KAAK,QAAQ;AAAA,EACxB;AACA,SAAO;AACX;AAEA,IAAO,gBAAQ;;;ACVf,IAAM,mBAAmB,CAAC,QAAmB;AACzC,SAAO,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC;AAC3B;AAEA,IAAO,2BAAQ;;;ACFf,IAAM,SAAS,CAAC,KAAgB,OAAe,MAAM;AACjD,MAAI,OAAO,IAAI;AACX,UAAM,IAAI,MAAM,6CAA6C;AACjE,MAAI,QAAQ,EAAG,OAAM,IAAI,MAAM,iCAAiC;AAChE,MAAI,SAAS,GAAG;AACZ,UAAMC,eAAc,qBAAa,GAAG,IAAI,SAAS,CAAC;AAClD,WAAO,IAAIA,YAAW;AAAA,EAC1B;AACA,QAAM,cAAc,qBAAa,GAAG,IAAI,SAAS,IAAI;AACrD,SAAO,IAAI,MAAM,aAAa,cAAc,IAAI;AACpD;AAEA,IAAO,iBAAQ;;;ACAR,IAAM,QAAN,MAAM,OAA2B;AAAA,EACpC,YACW,GACA,GACT;AAFS;AACA;AAAA,EACR;AAAA,EAEH,OAAO,KAAK,OAAyB;AACjC,WAAO,IAAI,OAAM,MAAM,GAAG,MAAM,CAAC;AAAA,EACrC;AAAA,EAEA,QAAe;AACX,WAAO,IAAI,OAAM,KAAK,GAAG,KAAK,CAAC;AAAA,EACnC;AAAA,EAEA,OAAO,OAA2B;AAC9B,WAAO,KAAK,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM;AAAA,EAClD;AAAA,EAEA,WAAmB;AACf,WAAO,SAAS,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,EACrC;AAAA,EAEA,WAAW,OAA+C;AACtD,WAAO,iBAAS,MAAM,KAAK;AAAA,EAC/B;AAAA,EAEA,gBACI,OACA,mBAC4B;AAC5B,WAAO,kBAAU,MAAM,OAAO,iBAAiB;AAAA,EACnD;AAAA,EAEA,mBACI,QACA,mBACmC;AACnC,WAAO,yBAAiB,MAAM,QAAQ,iBAAiB;AAAA,EAC3D;AAAA,EAEA,SAAS,OAAyB;AAC9B,UAAM,MAAM,eAAO,MAAM,KAAK;AAC9B,WAAO,IAAI,OAAM,IAAI,GAAG,IAAI,CAAC;AAAA,EACjC;AAAA,EAEA,QAAQ,OAA4C;AAChD,WAAO,cAAM,MAAM,KAAK;AAAA,EAC5B;AAAA,EAEA,KAAK,GAAW,GAAkB;AAC9B,UAAM,QAAQ,aAAK,MAAM,GAAG,CAAC;AAC7B,WAAO,IAAI,OAAM,MAAM,GAAG,MAAM,CAAC;AAAA,EACrC;AAAA,EAEA,KAAK,OAAkB,GAAkB;AACrC,UAAM,IAAI,aAAO,MAAM,OAAO,CAAC;AAC/B,WAAO,IAAI,OAAM,EAAE,GAAG,EAAE,CAAC;AAAA,EAC7B;AAAA,EAEA,aAAaC,SAAmB,UAAyB;AACrD,UAAM,MAAM,eAAS,CAAC,IAAI,GAAGA,SAAQ,QAAQ;AAC7C,WAAO,IAAI,OAAM,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAAA,EACvC;AAAA,EAEA,kBAAkB,QAAmC;AACjD,UAAM,OAAO,gBAAQ,MAAM,MAAM;AACjC,WAAO,OAAO,IAAI,OAAM,KAAK,GAAG,KAAK,CAAC,IAAI;AAAA,EAC9C;AAAA,EAEA,mBAAmB,QAAmC;AAClD,UAAM,MAAM,iBAAS,MAAM,MAAM;AACjC,WAAO,MAAM,IAAI,OAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AAAA,EAC3C;AAAA,EAEA,SAAS,MAAuC;AAC5C,WAAO,eAAO,MAAM,IAAI;AAAA,EAC5B;AAAA,EAEA,cAAc,OAA8C;AACxD,WAAO,gBAAQ,MAAM,KAAK;AAAA,EAC9B;AACJ;AAEA,IAAO,gBAAQ;;;A5CiBf,IAAO,gBAAQ;AAAA;AAAA,EAEX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;","names":["area","distance","angle","sequence","steps","steps","angle","randomStart","center"]}