larry babby and threejs for glsl

This commit is contained in:
Sam 2024-06-24 21:24:00 +12:00
parent 87d5dc634d
commit 907ebae4c0
6474 changed files with 1279596 additions and 8 deletions
Larry the snail
docs/js
webGl/my-threejs-test

View File

@ -0,0 +1,16 @@
{
"PolyTwistColourWidth": [
{ "type": "range", "min": 3, "max": 10, "defaultValue": 5, "property": "sides" },
{ "type": "range", "min": 1, "max": 600, "defaultValue": 300, "property": "width" },
{ "type": "range", "min": 1, "max": 100, "defaultValue": 50, "property": "depth" },
{ "type": "range", "min": 0, "max": 360, "defaultValue": 180, "property": "rotation" },
{ "type": "color", "defaultValue": "#4287f5", "property": "colour1" },
{ "type": "color", "defaultValue": "#42f57b", "property": "colour2" }
],
"FloralPhyllo": [
{ "type": "range", "min": 1, "max": 600, "defaultValue": 300, "property": "width" },
{ "type": "range", "min": 1, "max": 100, "defaultValue": 50, "property": "depth" },
{ "type": "color", "defaultValue": "#4287f5", "property": "colour1" },
{ "type": "color", "defaultValue": "#4287f5", "property": "colour2" }
]
}

View File

@ -0,0 +1,111 @@
body {
-webkit-box-sizing: border-box;
/* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box;
/* Firefox, other Gecko */
box-sizing: border-box;
/* Opera/IE 8+ */
height: 100%
}
p {
margin: 0px;
}
canvas {
position: absolute;
}
#toolbar {
display: flex;
flex-flow: column;
height: 100%;
position: absolute;
padding: 0px 20px 0px 20px;
width: 500px;
height: 100vh;
background-color: rgb(189, 189, 189);
}
#custom {
display: flex;
flex-flow: column;
height: 100%;
/* position: absolute; */
padding: 0px 20px 0px 20px;
/* width: 500px; */
/* height: 100vh; */
background-color: rgb(189, 189, 189);
}
.button {
display: block;
position: absolute;
right: 20px;
z-index: 100;
}
.controls {
display: flex;
margin: 8px 0px;
}
.controlFrameButton {
width: 8%;
}
.controlPauseButton {
width: 80%;
margin: auto;
}
/* <!-- HTML !-->
<button class="button-8" role="button">Button 8</button> */
/* CSS */
.button-8 {
background-color: #e1ecf4;
border-radius: 3px;
border: 1px solid #7aa7c7;
box-shadow: rgba(255, 255, 255, .7) 0 1px 0 0 inset;
box-sizing: border-box;
color: #1f3f55;
cursor: pointer;
display: inline-block;
/* font-family: -apple-system,system-ui,"Segoe UI","Liberation Sans",sans-serif; */
font-size: 13px;
font-weight: 400;
line-height: 1.15385;
/* margin: 0; */
outline: none;
padding: 8px .8em;
position: relative;
text-align: center;
text-decoration: none;
user-select: none;
-webkit-user-select: none;
touch-action: manipulation;
vertical-align: baseline;
white-space: nowrap;
}
.button-8:hover,
.button-8:focus {
background-color: #b3d3ea;
color: #2c5777;
}
.button-8:focus {
box-shadow: 0 0 0 4px rgba(0, 149, 255, .15);
}
.button-8:active {
background-color: #a0c7e4;
box-shadow: none;
color: #2c5777;
}
.buttonReset{
background-color: #f4e1e1;
}

View File

@ -0,0 +1,60 @@
<!DOCTYPE html>
<html>
<!-- ahhh -->
<head>
<title>Document</title>
<link rel="stylesheet" href="./css/styles.css">
</head>
<body style="margin:0;">
<canvas id="myCanvas" style="display: block;box-sizing: border-box;"></canvas>
<div id="toolbar">
<br>
<select id="shape-selector">
<option value="Larry">Larry</option>
<option value="NewWave">NewWave</option>
<option value="EyePrototype">EyePrototype</option>
<option value="Nodal_expanding">Nodal_expanding</option>
<option value="MaryFace">MaryFace</option>
<option value="CircleExpand">CircleExpand</option>
<option value="PolyTwistColourWidth">PolyTwistColourWidth</option>
<option value="FloralPhyllo">FloralPhyllo</option>
<option value="FloralPhyllo_Accident">FloralPhyllo_Accident</option>
<option value="Spiral1">Spiral1</option>
<option value="FloralAccident">FloralAccident</option>
<option value="Phyllotaxis">Phyllotaxis</option>
<option value="SquareTwist_angle">SquareTwist_angle</option>
</select>
<div id="custom"></div>
<br>
<p>Controls:</p>
<p>
Press "Space" to pause and start the animation
</p>
<p>
Press "P" to show/hide the control panel
</p>
<br>
<p>Speed</p>
<input type="text" id="inputDegPerSec" value="10" onchange="ChangeDegPerSec(this.value)">
<br>
<p>Controls</p>
<div class="controls">
<button class="controlFrameButton button-8" onclick="BackwardFrame()"><</button>
<button class="controlPauseButton button-8" id="pauseButton" onclick="TogglePause()">Play</button>
<button class="controlFrameButton button-8" onclick="ForwardFrame()">></button>
</div>
<button class="buttonReset button-8" id="resetButton" onclick="Reset()">Reset Rotation</button>
</div>
<div>
<button onclick="manualToggleSettings()" class="button">Show/hide</button>
</div>
</body>
<script src="./js/helper.js" type="text/javascript"></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="./js/math.js" type="text/javascript"></script>
<script src="./js/objects.js" type="text/javascript"></script>
<script src="./js/index.js"></script>
</html>

View File

@ -0,0 +1,407 @@
async function fetchConfig(className) {
// Configurations for different shapes
const config = {
Larry: [
{
type: "range",
min: 1,
max: 5,
defaultValue: 1,
property: "magnitude"
},
// Dropdown control to select food
{
type: "dropdown",
property: "selectedFood",
defaultValue: "lettuce",
options: [
{ value: "lettuce", label: "Lettuce" },
{ value: "apple", label: "Apple" },
{ value: "carrot", label: "Carrot" }
]
},
{
type: "range",
min: 0,
max: 20,
defaultValue: 2,
property: "eatSpeed"
},
{
type: "range",
min: 0,
max: 10000,
defaultValue: 3000,
property: "eatDuration"
},
// Button control to start eating
{
type: "button",
label: "Start Eating",
method: "startEating",
},
// Dropdown control to select hat
{
type: "dropdown",
property: "selectedHat",
defaultValue: "",
options: [
{ value: "", label: "None" },
{ value: "cap", label: "Cap" },
{ value: "top_hat", label: "Top Hat" },
{ value: "center_box_full", label: "Center Full" },
{ value: "center_box_hollow", label: "Center Hollow" },
]
},
// Button control to apply a hat
{
type: "button",
label: "Apply Hat",
method: "applyHat"
},
// Movement controls
{
type: "range",
min: 0,
max: 360,
defaultValue: 0,
property: "moveDirection"
},
{
type: "range",
min: 1,
max: 100,
defaultValue: 10,
property: "moveDistance"
},
{
type: "range",
min: 1,
max: 10,
defaultValue: 5,
property: "moveSpeed"
},
{
type: "button",
label: "Wander",
method: "wander"
},
// Appearance controls
{
type: "dropdown",
property: "selectedShell",
defaultValue: "default",
options: [
{ value: "default", label: "Default" },
{ value: "spiky", label: "Spiky" },
{ value: "striped", label: "Striped" }
]
},
{
type: "button",
label: "Apply Shell",
method: "applyShell"
},
// Background controls
{
type: "dropdown",
property: "selectedBackground",
defaultValue: "",
options: [
{ value: "", label: "None" },
{ value: "field_white", label: "Field Whtie" },
{ value: "field_blue", label: "Field Blue" },
{ value: "field_trans", label: "Field Trans" }
]
},
{
type: "button",
label: "Apply Background",
method: "applyBackground"
}
],
// Add other shape configurations here
};
return config[className];
}
function addControl(item, instance) {
let parentDiv = document.getElementById("custom");
let title = document.createElement("p");
title.innerText = item.property + ": " + item.defaultValue;
title.id = "elText" + item.property;
let control;
if (item.type === "range") {
control = document.createElement("input");
control.type = "range";
control.min = item.min;
control.max = item.max;
control.value = item.defaultValue;
control.addEventListener("input", (event) => {
const newValue = event.target.value;
instance[item.property] = parseInt(newValue, 10);
title.innerText = item.property + ": " + newValue;
});
} else if (item.type === "button") {
control = document.createElement("button");
control.innerText = item.label;
control.addEventListener("click", () => {
instance[item.method]();
});
} else if (item.type === "dropdown") {
control = document.createElement("select");
item.options.forEach(option => {
let optionElement = document.createElement("option");
optionElement.value = option.value;
optionElement.innerText = option.label;
control.appendChild(optionElement);
});
control.value = item.defaultValue;
control.addEventListener("change", (event) => {
const newValue = event.target.value;
instance[item.property] = newValue;
title.innerText = item.property + ": " + newValue;
});
}
control.className = "control";
control.id = "el" + item.property;
parentDiv.appendChild(title);
parentDiv.appendChild(control);
return { element: control };
}
function drawEyelid(width, x1, y1, colour) {
x1 -= centerX;
y1 -= centerY;
const angle = Math.atan2(y1, x1);
const cosAngle = Math.cos(angle);
const sinAngle = Math.sin(angle);
const x2 = cosAngle * width;
const y2 = sinAngle * width;
const x3Old = width / 2;
const y3Old = width / 2;
const x4Old = width / 2;
const y4Old = -width / 2;
const x3 = x3Old * cosAngle - y3Old * sinAngle;
const y3 = x3Old * sinAngle + y3Old * cosAngle;
const x4 = x4Old * cosAngle - y4Old * sinAngle;
const y4 = x4Old * sinAngle + y4Old * cosAngle;
x1 += centerX;
y1 += centerY;
const x2Final = x2 + x1;
const y2Final = y2 + y1;
const x3Final = x3 + x1;
const y3Final = y3 + y1;
const x4Final = x4 + x1;
const y4Final = y4 + y1;
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.quadraticCurveTo(x3Final, y3Final, x2Final, y2Final);
ctx.moveTo(x1, y1);
ctx.quadraticCurveTo(x4Final, y4Final, x2Final, y2Final);
ctx.fillStyle = colour;
ctx.fill();
ctx.lineWidth = 2;
ctx.strokeStyle = "black";
ctx.stroke();
}
function drawEyelidAccident(x1, y1) {
let leafWidth = 120;
let leafHeight = 60;
x1 -= centerX;
y1 -= centerY;
let angle = Math.atan(y1 / x1);
// if(angle >=Math.PI){
// angle -=Math.PI
// console.log("greater called")
// }
angle = Math.abs(angle);
let x2Old = 0 + leafWidth;
let y2Old = 0;
let x3Old = 0 + leafWidth / 2;
let y3Old = 0 + leafHeight / 2;
let x4Old = 0 + leafWidth / 2;
let y4Old = 0 - leafHeight / 2;
let x2 = x2Old * Math.cos(angle) - y2Old * Math.sin(angle);
let y2 = x2Old * Math.sin(angle) + y2Old * Math.cos(angle);
let x3 = x3Old * Math.cos(angle) - y3Old * Math.sin(angle);
let y3 = x3Old * Math.sin(angle) + y3Old * Math.cos(angle);
let x4 = x4Old * Math.cos(angle) - y4Old * Math.sin(angle);
let y4 = x4Old * Math.sin(angle) + y4Old * Math.cos(angle);
let oldx1 = x1;
let oldy1 = y1;
x1 += centerX; // +x2/2
y1 += centerY; // +x2/2
x2 += x1;
y2 += y1;
x3 += x1;
y3 += y1;
x4 += x1;
y4 += y1;
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.quadraticCurveTo(x3, y3, x2, y2);
ctx.moveTo(x1, y1);
ctx.quadraticCurveTo(x4, y4, x2, y2);
ctx.fillStyle = "black";
ctx.fill();
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.quadraticCurveTo(x3, y3, x2, y2);
ctx.moveTo(x1, y1);
ctx.quadraticCurveTo(x4, y4, x2, y2);
ctx.strokeStyle = "orange";
ctx.stroke();
}
function DrawPolygon(sides, width, rotation, colour, line_width) {
ctx.beginPath();
ctx.moveTo(
centerX + width * Math.cos((rotation * Math.PI) / 180),
centerY + width * Math.sin((rotation * Math.PI) / 180)
);
for (var i = 1; i <= sides; i += 1) {
ctx.lineTo(
centerX +
width *
Math.cos((i * 2 * Math.PI) / sides + (rotation * Math.PI) / 180),
centerY +
width * Math.sin((i * 2 * Math.PI) / sides + (rotation * Math.PI) / 180)
);
}
ctx.strokeStyle = colour;
ctx.lineWidth = line_width;
ctx.stroke();
}
function rad(degrees) {
return (degrees * Math.PI) / 180;
}
function colourToText(colour) {
return "rgb(" + colour[0] + "," + colour[1] + "," + colour[2] + ")";
}
function waveNormal(x, max) {
let val = Math.sin((x / max) * Math.PI * 2 - max * (Math.PI / (max * 2))) / 2 + 0.5
return val
}
function LerpHex(a, b, amount) {
var ah = parseInt(a.replace(/#/g, ""), 16),
ar = ah >> 16,
ag = (ah >> 8) & 0xff,
ab = ah & 0xff,
bh = parseInt(b.replace(/#/g, ""), 16),
br = bh >> 16,
bg = (bh >> 8) & 0xff,
bb = bh & 0xff,
rr = ar + amount * (br - ar),
rg = ag + amount * (bg - ag),
rb = ab + amount * (bb - ab);
return (
"#" + (((1 << 24) + (rr << 16) + (rg << 8) + rb) | 0).toString(16).slice(1)
);
}
function LerpRGB(a, b, t) {
if (t < 0) {
t *= -1;
}
var newColor = [0, 0, 0];
newColor[0] = a[0] + (b[0] - a[0]) * t;
newColor[1] = a[1] + (b[1] - a[1]) * t;
newColor[2] = a[2] + (b[2] - a[2]) * t;
return newColor;
}
function lerpRGB(a, b, t) {
const result = [0, 0, 0];
for (let i = 0; i < 3; i++) {
result[i] = (1 - t) * a[i] + t * b[i];
}
return result;
}
function drawCenter(width) {
// console.log("center?")
ctx.strokeStyle = "pink";
ctx.lineWidth = 1
ctx.beginPath();
ctx.moveTo(centerX - width, centerY);
ctx.lineTo(centerX + width, centerY);
ctx.closePath();
ctx.stroke();
ctx.beginPath();
ctx.moveTo(centerX, centerY - width);
ctx.lineTo(centerX, centerY + width);
ctx.closePath();
ctx.stroke();
}
function render_clear() {
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
ctx.fillStyle = "black";
ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
}
function rotatePointTmp(x, y, centerXX, centerYY, rotation) {
let xFromC = x - centerXX;
let yFromC = y - centerYY;
let d = (xFromC ** 2 + yFromC ** 2) ** 0.5
// let orgAngle = Math.atan2(yFromC/xFromC)
let orgAngle = Math.atan2(xFromC, yFromC)
let tmp = Math.cos(rad(orgAngle - rotation)) * d
// console.log(Math.cos((-90)*(Math.PI/180)))
console.log(orgAngle)
console.log(rad(rotation))
console.log(Math.cos(orgAngle - rad(rotation)) * d)
console.log(d)
// console.log(d)
let newPointX = Math.cos(orgAngle - rad(rotation + 90)) * d + centerXX;
let newPointY = Math.sin(orgAngle - rad(rotation + 90)) * d + centerYY;
return [newPointX, newPointY]
}
function rotatePoint(x, y, rotation) {
let nCos = Math.cos(rad(rotation))
// console.log(nCos*(180/Math.PI))
// console.log(rad(rotation))
let nSin = Math.sin(rad(rotation))
let newX = x * nCos - y * nSin
let newY = y * nCos + x * nSin
return [newX, newY]
}

154
Larry the snail/js/index.js Normal file
View File

@ -0,0 +1,154 @@
//jshint esversion:8
let c = document.getElementById("myCanvas");
let ctx = c.getContext("2d");
ctx.canvas.width = window.innerWidth;
ctx.canvas.height = window.innerHeight;
centerX = ctx.canvas.width / 2;
centerY = ctx.canvas.height / 2;
ctx.imageSmoothingEnabled = false;
let deg_per_sec = 10;
let targetFps = 60;
let frameDuration = 1000 / targetFps;
let rotation = 0; //was = j = angle
let paused = true;
render_clear();
let drawObj = null;
function createInstance(className, args) {
const classMap = {
Larry: Larry,
NewWave: NewWave,
PolyTwistColourWidth: PolyTwistColourWidth,
FloralPhyllo: FloralPhyllo,
Spiral1: Spiral1,
FloralAccident: FloralAccident,
FloralPhyllo_Accident: FloralPhyllo_Accident,
Nodal_expanding: Nodal_expanding,
Phyllotaxis:Phyllotaxis,
SquareTwist_angle:SquareTwist_angle,
EyePrototype:EyePrototype,
CircleExpand:CircleExpand,
MaryFace:MaryFace,
// Add more class constructors here as needed
};
if (classMap.hasOwnProperty(className)) {
return new classMap[className](...args);
} else {
throw new Error(`Unknown class name: ${className}`);
}
}
async function updateDrawObj() {
const shapeSelector = document.getElementById("shape-selector");
const selectedShape = shapeSelector.value;
const config = await fetchConfig(selectedShape);
if (drawObj) {
drawObj.remove(); // Remove the previous instance
}
// Initialize the instance without configuration
drawObj = createInstance(selectedShape, []);
// Set up controls and then update instance properties
drawObj.initialise(config);
// Update instance properties based on control values
config.forEach(item => {
if (item.type === "range" || item.type === "dropdown") {
const control = document.getElementById("el" + item.property);
drawObj[item.property] = control.value;
}
});
console.log(drawObj);
}
updateDrawObj();
function render() {
setTimeout(() => {
requestAnimationFrame(() => {
render_clear();
if (drawObj) {
drawObj.draw(rotation);
}
if (!paused) {
rotation += deg_per_sec / targetFps;
}
drawCenter(300)
});
render();
}, frameDuration);
}
document
.getElementById("shape-selector")
.addEventListener("change", updateDrawObj);
let toolbarShowing = true;
document.addEventListener("keydown", toggleSettings);
function manualToggleSettings(){
console.log("hi")
toolbarShowing = !toolbarShowing;
let tb = document.getElementById("toolbar");
if (toolbarShowing) {
tb.style.display = "flex";
} else {
tb.style.display = "none";
}
}
function toggleSettings(e) {
if (e.key == "p") {
toolbarShowing = !toolbarShowing;
}
if (e.code === "Space") {
paused = !paused;
}
let tb = document.getElementById("toolbar");
if (toolbarShowing) {
tb.style.display = "flex";
} else {
tb.style.display = "none";
}
}
function TogglePause() {
let pb = document.getElementById("pauseButton");
paused = !paused;
if (paused) {
pb.textContent = "Play";
} else {
pb.textContent = "Pause";
}
}
function Reset() {
rotation = 0; //was = j = angle
currentFrame = 0;
}
function ForwardFrame() {
rotation += deg_per_sec / fps; // was = j = innerRotation, now = rotation
currentFrame += 1; // was = i
}
function BackwardFrame() {
rotation -= deg_per_sec / fps; // was = j = innerRotation, now = rotation
currentFrame -= 1; // was = i
}
function ChangeDegPerSec(newValue) {
deg_per_sec = newValue;
}
window.onload = render;

View File

@ -0,0 +1,77 @@
function rotateMatrix2d(p, angle) {
// cos0 sin0
// -sin0 cos0
const angleD = rad(angle);
const r = [
[Math.cos(angleD), Math.sin(angleD)],
[-Math.sin(angleD), Math.cos(angleD)],
];
const newPoint = [
p[0] * r[0][0] + p[1] * r[0][1],
p[0] * r[1][0] + p[1] * r[1][1],
];
return newPoint;
}
function rotateMatrix3dX(p, angle) {
// cos0 sin0
// -sin0 cos0
const angleD = rad(angle);
const r = [
[1, 0, 0],
[0, Math.cos(angleD), -Math.sin(angleD)],
[0, Math.sin(angleD), Math.cos(angleD)],
];
const newPoint = [
p[0] * r[0][0] + p[1] * r[0][1] + p[2] * r[0][2],
p[0] * r[1][0] + p[1] * r[1][1] + p[2] * r[1][2],
p[0] * r[2][0] + p[1] * r[2][1] + p[2] * r[2][2],
];
return newPoint;
}
function rotateMatrix3dY(p, angle) {
// cos0 sin0
// -sin0 cos0
const angleD = rad(angle);
const r = [
[Math.cos(angleD), 0, Math.sin(angleD)],
[0, 1, 0],
[-Math.sin(angleD), 0, Math.cos(angleD)],
];
const newPoint = [
p[0] * r[0][0] + p[1] * r[0][1] + p[2] * r[0][2],
p[0] * r[1][0] + p[1] * r[1][1] + p[2] * r[1][2],
p[0] * r[2][0] + p[1] * r[2][1] + p[2] * r[2][2],
];
return newPoint;
}
function rotateMatrix3dZ(p, angle) {
// cos0 sin0
// -sin0 cos0
const angleD = rad(angle);
const r = [
[Math.cos(angleD), -Math.sin(angleD), 0],
[Math.sin(angleD), Math.cos(angleD), 0],
[0, 0, 1],
];
const newPoint = [
p[0] * r[0][0] + p[1] * r[0][1] + p[2] * r[0][2],
p[0] * r[1][0] + p[1] * r[1][1] + p[2] * r[1][2],
p[0] * r[2][0] + p[1] * r[2][1] + p[2] * r[2][2],
];
return newPoint;
}
function projectionOrth(v) {
const p = [
[1, 0, 0],
[0, 1, 0],
];
const nPoint = [
p[0][0] * v[0] + p[0][1] * v[1] + p[0][2] * v[2],
p[1][0] * v[0] + p[1][1] * v[1] + p[1][2] * v[2],
];
return nPoint;
}

View File

@ -0,0 +1,808 @@
class BaseShape {
constructor() {
this.controls = []; // Keep track of created elements and event listeners
this.speedMultiplier = 100;
}
initialise(config) {
for (let item of config) {
const { element, listener } = addControl(item, this);
this.controls.push({ element, listener });
}
// Add a default speed multiplier control
const { element, listener } = addControl({
type: "range",
min: 1,
max: 500,
defaultValue: 100,
property: "speedMultiplier",
}, this);
this.controls.push({ element, listener });
}
remove() {
this.controls.forEach(({ element, listener }) => {
if (element && listener) {
element.removeEventListener("input", listener);
}
if (element && element.parentElement) {
element.parentElement.removeChild(element);
const titleElement = document.getElementById("elText" + element.id.slice(2));
if (titleElement) {
titleElement.parentElement.removeChild(titleElement);
}
}
});
this.controls = [];
}
draw() {
throw new Error("Draw function not implemented");
}
}
class Larry extends BaseShape {
constructor(eatSpeed, eatDuration) {
super();
this.magnitude = 1;
this.bodyWidth = 64;
this.bodyHeight = 64;
this.headWidth = 21;
this.headHeight = 24;
this.headOffsetX = 54 - this.headWidth * this.magnitude / 2;
this.headOffsetY = this.bodyHeight * this.magnitude - 7; // Bottom of the body minus 7 pixels
this.globalX = centerX;
this.globalY = centerY;
this.localX = 0;
this.localY = 0;
this.speedMultiplier = 100;
this.isEating = false;
this.eatDuration = eatDuration;
this.eatSpeed = eatSpeed;
this.bodyImage = new Image();
this.headImage = new Image();
this.hatImage = new Image();
this.shellImage = new Image();
this.backgroundImage = new Image();
this.bodyImage.src = 'larry_photos/body.png';
this.headImage.src = 'larry_photos/head.png';
this.hatImage.src = '';
this.shellImage.src = '';
this.backgroundImage.src = '';
}
draw(timestamp) {
timestamp *= (this.speedMultiplier / 100);
// Draw background
if (this.backgroundImage.src) {
console.log("drawing background: " + this.backgroundImage.src)
ctx.drawImage(this.backgroundImage, centerX- (this.backgroundImage.width), centerY -this.backgroundImage.height,this.backgroundImage.width*2,this.backgroundImage.height*2);
}
// Draw body at its anchor point (center-bottom)
const bodyX = this.globalX - (this.bodyWidth * this.magnitude / 2);
const bodyY = this.globalY - this.bodyHeight * this.magnitude;
ctx.drawImage(this.bodyImage, bodyX, bodyY, this.bodyWidth * this.magnitude, this.bodyHeight * this.magnitude);
// Draw head aligned with body
// const headX = bodyX + this.headOffsetX;
// let headY = bodyY + this.headOffsetY - this.headHeight;
const headX = bodyX + (54 * this.magnitude - this.headWidth * this.magnitude / 2);
let headY = bodyY + (this.bodyHeight * this.magnitude - 7* this.magnitude) - this.headHeight * this.magnitude;
if (this.isEating === true) {
const eatMaxHeight = 20;
const eatingYOffset = ((Math.sin((timestamp * 2 * Math.PI * this.eatSpeed * 0.1) - Math.PI / 2) + 1) / 2) * eatMaxHeight;
headY -= eatingYOffset;
}
ctx.drawImage(this.headImage, headX, headY, this.headWidth * this.magnitude, this.headHeight * this.magnitude);
// Draw hat if any
if (this.hatImage.src) {
let hatXoffset = (this.headWidth*this.magnitude)/2 -(this.hatImage.width*this.magnitude)/2 + (2*this.magnitude);
let hatYoffset = (this.headHeight*this.magnitude) - (this.hatImage.height*this.magnitude) + (-11 * this.magnitude);
if(document.getElementById('elselectedHat').value === "cap"){
hatXoffset += this.magnitude*1.5
}
this.drawCrosshair(headX,headY,20)
ctx.drawImage(this.hatImage, headX + hatXoffset, headY + hatYoffset,this.hatImage.width*this.magnitude,this.hatImage.height*this.magnitude);
}
// Draw shell if any
if (this.shellImage.src) {
ctx.drawImage(this.shellImage, bodyX, bodyY, this.bodyWidth, this.bodyHeight);
}
}
drawCrosshair(x,y,size){
ctx.beginPath();
ctx.moveTo(x-size,y);
ctx.lineTo(x+size,y);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(x,y-size);
ctx.lineTo(x,y+size);
ctx.stroke();
}
startEating() {
console.log("Larry starts eating");
console.log(this.eatDuration)
this.isEating = true;
setTimeout(() => {
this.isEating = false;
console.log("Larry stops eating");
}, this.eatDuration); // Adjust duration as needed
}
applyHat() {
const hatSelection = document.getElementById('elselectedHat').value;
if (hatSelection === "") {
this.hatImage.src = ``;
}
else {
this.hatImage.src = `larry_photos/hats/${hatSelection}.png`;
}
}
wander() {
console.log("Larry starts wandering");
// Implement wandering logic here
}
applyShell() {
const shellSelection = document.getElementById('elselectedShell').value;
this.shellImage.src = `larry_photos/shells/${shellSelection}.png`;
}
applyBackground() {
const backgroundSelection = document.getElementById('elselectedBackground').value;
this.backgroundImage.src = `larry_photos/backgrounds/${backgroundSelection}.png`;
}
}
class PolyTwistColourWidth extends BaseShape {
constructor(sides, width, line_width, depth, rotation, speedMultiplier, colour1, colour2) {
super();
this.sides = sides;
this.width = width;
this.line_width = line_width;
this.depth = depth;
this.rotation = rotation;
this.speedMultiplier = speedMultiplier;
this.colour1 = colour1;
this.colour2 = colour2;
}
draw(rotation) {
rotation *= (this.speedMultiplier / 100)
let out_angle = 0;
const innerAngle = 180 - ((this.sides - 2) * 180) / this.sides;
const scopeAngle = rotation - (innerAngle * Math.floor(rotation / innerAngle));
if (scopeAngle < innerAngle / 2) {
out_angle = innerAngle / (2 * Math.cos((2 * Math.PI * scopeAngle) / (3 * innerAngle))) - innerAngle / 2;
} else {
out_angle = -innerAngle / (2 * Math.cos(((2 * Math.PI) / 3) - ((2 * Math.PI * scopeAngle) / (3 * innerAngle)))) + (innerAngle * 3) / 2;
}
let minWidth = Math.sin(rad(innerAngle / 2)) * (0.5 / Math.tan(rad(innerAngle / 2))) * 2;
let widthMultiplier = minWidth / Math.sin(Math.PI / 180 * (90 + innerAngle / 2 - out_angle + innerAngle * Math.floor(out_angle / innerAngle)));
for (let i = 0; i < this.depth; i++) {
const fraction = i / this.depth;
const ncolour = LerpHex(this.colour1, this.colour2, fraction);
DrawPolygon(this.sides, this.width * widthMultiplier ** i, out_angle * i + this.rotation, ncolour, this.line_width);
}
}
}
class FloralPhyllo extends BaseShape {
constructor(width, depth, start, colour1, colour2) {
super();
this.width = width;
this.depth = depth;
this.start = start;
this.colour1 = colour1;
this.colour2 = colour2;
this.speedMultiplier = 500;
}
draw(rotation) {
rotation *= (this.speedMultiplier / 500)
rotation += this.start
// var c = 24; //something to do with width. but not width
var c = 1; //something to do with width. but not width
//dont make larger than 270 unless altering the number of colours in lerpedColours
for (let n = this.depth; n > 0; n -= 1) {
let colVal = waveNormal(n, this.depth)
let ncolour = LerpHex(this.colour1, this.colour2, n / this.depth);
const a = n * rotation / 1000; //137.5;
const r = c * Math.sqrt(n);
const x = r * Math.cos(a) + centerX;
const y = r * Math.sin(a) + centerY;
drawEyelid(n * 2.4 + 40, x, y, ncolour);
}
}
}
class Spiral1 extends BaseShape {
constructor(sides, width, colour) {
super();
this.sides = sides;
this.width = width;
this.colour = colour;
}
draw(rotation) {
rotation *= (this.speedMultiplier / 100)
var rot = Math.round((this.sides - 2) * 180 / this.sides * 2)
var piv = 360 / this.sides;
var stt = 0.5 * Math.PI - rad(rot) //+ rad(rotation);
var end = 0;
var n = this.width / ((this.width / 10) * (this.width / 10)) //pixel correction for mid leaf
for (let i = 1; i < this.sides + 1; i++) {
end = stt + rad(rot);
ctx.lineWidth = 5
ctx.beginPath();
ctx.arc(centerX + Math.cos(rad(90 + piv * i + rotation)) * this.width, centerY + Math.sin(rad(90 + piv * i + rotation)) * this.width, this.width, stt + rad(rotation) - (stt - end) / 2, end + rad(rotation) + rad(n), 0);
ctx.strokeStyle = this.colour;
ctx.stroke();
ctx.beginPath();
ctx.arc(centerX + Math.cos(rad(90 + piv * i - rotation)) * this.width, centerY + Math.sin(rad(90 + piv * i - rotation)) * this.width, this.width, stt - rad(rotation), end - (end - stt) / 2 + rad(n) - rad(rotation), 0);
ctx.strokeStyle = this.colour;
ctx.stroke();
stt = end + -(rad(rot - piv)) //+rad(30);
}
}
}
class FloralAccident extends BaseShape {
constructor(sides, width, colour) {
super();
this.sides = sides;
this.width = width;
this.colour = colour;
}
draw(rotation) {
rotation *= (this.speedMultiplier / 100)
var rot = Math.round((this.sides - 2) * 180 / this.sides * 2)
var piv = 360 / this.sides;
var stt = 0.5 * Math.PI - rad(rot) //+ rad(rotation);
var end = 0;
var n = this.width / ((this.width / 10) * (this.width / 10)) //pixel correction for mid leaf
for (let i = 1; i < this.sides + 1; i++) {
end = stt + rad(rot);
ctx.beginPath();
ctx.arc(centerX + Math.cos(rad(90 + piv * i + rotation)) * this.width, centerY + Math.sin(rad(90 + piv * i + rotation)) * this.width, this.width, stt - (stt - end + rad(rotation)) / 2, end + rad(n), 0);
ctx.strokeStyle = this.colour;
ctx.stroke();
ctx.beginPath();
ctx.arc(centerX + Math.cos(rad(90 + piv * i - rotation)) * this.width, centerY + Math.sin(rad(90 + piv * i - rotation)) * this.width, this.width, stt, end - (end - stt - rad(rotation)) / 2 + rad(n), 0);
ctx.strokeStyle = this.colour;
ctx.stroke();
stt = end + -(rad(rot - piv)) //+rad(30);
}
}
}
class FloralPhyllo_Accident extends BaseShape {
constructor(sides, width, colour1, colour2) {
super();
this.sides = sides;
this.width = width;
this.colour1 = colour1;
this.colour2 = colour2;
}
draw(rotation) {
rotation *= (this.speedMultiplier / 100)
var c = 24; //something to do with width. but not width
for (let n = 0; n < 300; n += 1) {
let ncolour = LerpHex(this.colour1, this.colour2, Math.cos(rad(n / 2)));
let a = n * (rotation / 1000 + 100); //137.5;
let r = c * Math.sqrt(n);
let x = r * Math.cos(a) + centerX;
let y = r * Math.sin(a) + centerY;
drawEyelidAccident(x, y);
}
}
}
class Nodal_expanding extends BaseShape {
constructor(expand, points, start, line_width, colour1, colour2, colour_change) {
super();
this.expand = expand;
this.points = points;
this.start = start;
this.line_width = line_width;
this.colour1 = colour1;
this.colour2 = colour2;
this.colour_change = colour_change
}
draw(rotation) {
rotation *= (this.speedMultiplier / 1000)
var angle = (360 / 3000 * rotation) + this.start //2000 controls speed
var length = this.expand;
for (let z = 1; z <= this.points; z++) { //why specifically 2500
ctx.beginPath();
let ncolour = LerpHex(this.colour1, this.colour2, z / this.points);
ctx.moveTo(centerX + (Math.cos(rad(angle * (z - 1) + 0)) * (length - this.expand)), centerY + (Math.sin(rad(angle * (z - 1) + 0)) * (length - this.expand)));
ctx.lineTo(centerX + (Math.cos(rad(angle * z + 0)) * length), centerY + (Math.sin(rad(angle * z + 0)) * length));
length += this.expand;
ctx.lineWidth = this.line_width;//try 1
ctx.strokeStyle = ncolour;
ctx.lineCap = "round"
// ctx.strokeStyle = colourToText(ncolour);
console.log(ncolour)
ctx.stroke();
}
}
}
class Phyllotaxis extends BaseShape {
constructor(width, start, nMax, wave, colour1, colour2) {
super();
this.width = width;
this.start = start;
this.nMax = nMax;
this.wave = wave;
this.colour1 = colour1;
this.colour2 = colour2;
}
drawWave(angle) {
angle /= 1000
const startColor = [45, 129, 252];
const endColor = [252, 3, 98];
const distanceMultiplier = 3;
const maxIterations = 200;
// angle=0;
for (let n = 0; n < maxIterations; n++) {
ctx.beginPath();
const nColor = lerpRGB(startColor, endColor, Math.cos(rad(n / 2)));
// const nAngle = n* angle ;
// const nAngle = n*angle+ Math.sin(rad(n*1+angle*4000))/1 ;
const nAngle = n * angle + Math.sin(rad(n * 1 + angle * 40000)) / 2;
const radius = distanceMultiplier * n;
const xCoord = radius * Math.cos(nAngle) + centerX;
const yCoord = radius * Math.sin(nAngle) + centerY;
ctx.arc(xCoord, yCoord, 8, 0, 2 * Math.PI);
ctx.fillStyle = colourToText(nColor);
ctx.fill();
}
}
drawSpiral(angle) {
angle /= 5000
const startColor = [45, 129, 252];
const endColor = [252, 3, 98];
const distanceMultiplier = 2;
const maxIterations = 1000;
for (let n = 0; n < maxIterations; n++) {
const nColor = lerpRGB(startColor, endColor, Math.cos(rad(n / 2)));
const nAngle = n * angle + Math.sin(angle * n * 2);
const radius = distanceMultiplier * n;
const xCoord = radius * Math.cos(nAngle) + centerX;
const yCoord = radius * Math.sin(nAngle) + centerY;
ctx.beginPath();
ctx.arc(xCoord, yCoord, 8, 0, 2 * Math.PI);
ctx.fillStyle = colourToText(nColor);
ctx.fill();
}
}
// Draw_nodal(300, 100, 31, rotation, "blue");
draw(rotation) {
rotation *= (this.speedMultiplier / 300)
rotation += this.start
const sizeMultiplier = this.nMax / (5 - 3)
if (this.wave === 1) {
this.drawWave(rotation)
}
else if (this.wave === 2) {
this.drawSpiral(rotation)
}
else {
for (let n = 0; n < this.nMax; n += 1) {
const ncolour = LerpHex(this.colour1, this.colour2, n / this.nMax);
// const ncolour = LerpHex(this.colour1, this.colour2, (n/this.nMax)**2);
const a = n * (rotation / 1000)//137.5;
const r = this.width * Math.sqrt(n);
const x = r * Math.cos(a) + centerX;
const y = r * Math.sin(a) + centerY;
ctx.beginPath();
ctx.arc(x, y, (n / sizeMultiplier) + 3, 0, 2 * Math.PI);
ctx.fillStyle = ncolour;
// ctx.fillStyle = colourToText(ncolour);
ctx.fill();
// console.log(this.c)
}
}
}
}
class SquareTwist_angle extends BaseShape {
constructor(width, line_width, colour1) {
super();
this.width = width;
this.line_width = line_width;
this.colour1 = colour1;
}
drawSquare(angle, size, colour) {
ctx.save();
ctx.translate(centerX, centerY)//-(Math.sin(rad(angle)) *centerX));
ctx.rotate(rad(angle + 180));
ctx.beginPath();
ctx.strokeStyle = colour;
ctx.lineWidth = this.line_width;
ctx.rect(-size / 2, -size / 2, size, size);
ctx.stroke();
ctx.restore();
}
// DrawSquareTwist_angle(400,0,rotation,"red")
draw(rotation) {
rotation *= (this.speedMultiplier / 100)
let out_angle = rotation;
let widthMultiplier = 1 / (2 * Math.sin(Math.PI / 180 * (130 - out_angle + 90 * Math.floor(out_angle / 90)))) + 0.5
for (let i = 0; i < 25; i++) {
this.drawSquare(rotation * i, this.width * widthMultiplier ** i, this.colour1)
}
}
}
class CircleExpand extends BaseShape {
constructor(nCircles, gap, linear, heart, colour1, colour2) {
super();
this.nCircles = nCircles;
this.gap = gap;
this.linear = linear;
this.heart = heart;
this.colour1 = colour1;
this.colour2 = colour2
}
lerpColor(a, b, amount) {
var ah = +a.replace('#', '0x'),
ar = ah >> 16, ag = ah >> 8 & 0xff, ab = ah & 0xff,
bh = +b.replace('#', '0x'),
br = bh >> 16, bg = bh >> 8 & 0xff, bb = bh & 0xff,
rr = ar + amount * (br - ar),
rg = ag + amount * (bg - ag),
rb = ab + amount * (bb - ab);
return '#' + ((1 << 24) + (rr << 16) + (rg << 8) + rb | 0).toString(16).slice(1);
}
arraySort(x, y) {
if (x.r > y.r) {
return 1;
}
if (x.r < y.r) {
return -1;
}
return 0;
}
drawHeart(w, colour) {
// var w = 200
ctx.strokeStyle = "black";
ctx.fillStyle = colour;
ctx.lineWidth = 1;
var x = centerX - w / 2;
let y = centerY - w / 2
ctx.beginPath();
ctx.moveTo(x, y + w / 4);
ctx.quadraticCurveTo(x, y, x + w / 4, y);
ctx.quadraticCurveTo(x + w / 2, y, x + w / 2, y + w / 5);
ctx.quadraticCurveTo(x + w / 2, y, x + w * 3 / 4, y);
ctx.quadraticCurveTo(x + w, y, x + w, y + w / 4);
ctx.quadraticCurveTo(x + w, y + w / 2, x + w * 3 / 4, y + w * 3 / 4);
ctx.lineTo(x + w / 2, y + w);
ctx.lineTo(x + w / 4, y + w * 3 / 4);
ctx.quadraticCurveTo(x, y + w / 2, x, y + w / 4);
ctx.stroke();
ctx.fill();
}
draw(rotation) {
rotation *= (0.9)
ctx.strokeWeight = 1;
ctx.lineWidth = 1;
let arrOfWidths = []
let arrOfco = []
let intRot;
if (this.linear) {
intRot = Math.floor(rotation * 30) / 100
}
else {
intRot = Math.sin(rad(Math.floor(rotation * 30) / 4)) + rotation / 4
}
for (let i = 0; i < this.nCircles; i++) {
const width = this.gap * ((intRot + i) % this.nCircles);
const colour = (Math.sin(rad(i * (360 / this.nCircles) - 90)) + 1) / 2
arrOfWidths.push({ r: width, c: colour });
}
let newArr = arrOfWidths.sort(this.arraySort)
for (let i = this.nCircles - 1; i >= 0; i--) {
let newColour = this.lerpColor(this.colour1, this.colour2, newArr[i].c)
if (this.heart) {
this.drawHeart(newArr[i].r, newColour)
}
else {
ctx.beginPath();
ctx.arc(centerX, centerY, newArr[i].r, 0, 2 * Math.PI);
ctx.fillStyle = newColour;
ctx.fill();
ctx.stokeStyle = "black";
ctx.stroke();
}
}
}
}
class EyePrototype extends BaseShape {
constructor(x, y, rotate, flip, width, blink_speed, draw_spiral, spiral_full, draw_pupil, draw_expand, draw_hypno, line_width, colourPupil, colourSpiral, colourExpand) {
super();
this.x = x;
this.y = y;
this.rotate = rotate;
this.flip = flip
this.width = width;
this.blink_speed = blink_speed;
this.line_width = line_width;
this.step = 0;
this.opening = true;
this.counter = 0;
this.cooldown = 0;
this.draw_spiral = draw_spiral;
this.spiral_full = spiral_full;
this.draw_pupil = draw_pupil;
this.draw_expand = draw_expand;
this.draw_hypno = draw_hypno;
this.colourPupil = colourPupil;
this.colourSpiral = colourSpiral;
this.colourExpand = colourExpand;
this.centerPulse = new CircleExpand(10, 30, 1, 0, "#2D81FC", "#FC0362")
}
drawEyelid(rotation) {
ctx.strokeStyle = "orange";
let relCenterX = centerX + this.x;
let relCenterY = centerY + this.y;
rotation *= (this.speedMultiplier / 100)
ctx.lineWidth = 1;
ctx.beginPath();
let newPoint = 0
let newPoint1 = 0
let addedRotate = this.flip ? 90 : 0
newPoint = rotatePoint(- this.width / 2, 0, this.rotate + addedRotate)
ctx.moveTo(relCenterX + newPoint[0], relCenterY + newPoint[1]);
newPoint = rotatePoint(0, - rotation / 400 * this.width, this.rotate + addedRotate)
newPoint1 = rotatePoint(this.width / 2, 0, this.rotate + addedRotate)
ctx.quadraticCurveTo(relCenterX + newPoint[0], relCenterY + newPoint[1], relCenterX + newPoint1[0], relCenterY + newPoint1[1]);
newPoint = rotatePoint(- this.width / 2, 0, this.rotate + addedRotate)
ctx.moveTo(relCenterX + newPoint[0], relCenterY + newPoint[1]);
newPoint = rotatePoint(0, + rotation / 400 * this.width, this.rotate + addedRotate)
newPoint1 = rotatePoint(this.width / 2, 0, this.rotate + addedRotate)
ctx.quadraticCurveTo(relCenterX + newPoint[0], relCenterY + newPoint[1], relCenterX + newPoint1[0], relCenterY + newPoint1[1]);
ctx.stroke();
}
eyelidCut(rotation) {
let relCenterX = centerX + this.x;
let relCenterY = centerY + this.y;
let newPoint = 0
let newPoint1 = 0
let addedRotate = this.flip ? 90 : 0
// ctx.lineWidth = 1;
let squarePath = new Path2D();
newPoint = rotatePoint(- this.width / 2, 0, this.rotate + addedRotate)
squarePath.moveTo(relCenterX + newPoint[0], relCenterY + newPoint[1]);
newPoint = rotatePoint(0, - rotation / 400 * this.width, this.rotate + addedRotate)
newPoint1 = rotatePoint(this.width / 2, 0, this.rotate + addedRotate)
squarePath.quadraticCurveTo(relCenterX + newPoint[0], relCenterY + newPoint[1], relCenterX + newPoint1[0], relCenterY + newPoint1[1]);
newPoint = rotatePoint(- this.width / 2, 0, this.rotate + addedRotate)
squarePath.moveTo(relCenterX + newPoint[0], relCenterY + newPoint[1]);
newPoint = rotatePoint(0, + rotation / 400 * this.width, this.rotate + addedRotate)
newPoint1 = rotatePoint(this.width / 2, 0, this.rotate + addedRotate)
squarePath.quadraticCurveTo(relCenterX + newPoint[0], relCenterY + newPoint[1], relCenterX + newPoint1[0], relCenterY + newPoint1[1]);
ctx.clip(squarePath);
}
drawGrowEye(step) {
// console.log(step)
ctx.strokeStyle = this.colourExpand
ctx.beginPath();
ctx.lineWidth = 5;
ctx.arc(centerX + this.x, centerY + this.y, step, 0, 2 * Math.PI);
ctx.stroke();
}
drawCircle(step) {
ctx.strokeStyle = this.colourPupil
ctx.beginPath();
ctx.lineWidth = 5;
ctx.arc(centerX + this.x, centerY + this.y, step, 0, 2 * Math.PI);
ctx.stroke();
}
drawSpiral(step) {
ctx.strokeStyle = this.colourSpiral;
let a = 1
let b = 5
ctx.moveTo(centerX, centerY);
ctx.beginPath();
let max = this.spiral_full ? this.width : this.width / 2
for (let i = 0; i < max; i++) {
let angle = 0.1 * i;
let x = centerX + (a + b * angle) * Math.cos(angle + step / 2);
let y = centerY + (a + b * angle) * Math.sin(angle + step / 2);
ctx.lineTo(x + this.x, y + this.y);
}
ctx.lineWidth = 3;
ctx.stroke();
}
stepFunc() {
if (this.cooldown != 0) {
this.cooldown--;
} else {
if (this.opening == true) {
if (this.step >= 200) {
this.cooldown = 200;
this.opening = false;
this.step -= this.blink_speed;
} else {
this.step += this.blink_speed;
}
} else {
if (this.step <= 0) {
this.opening = true;
this.step += this.blink_speed;
} else {
this.step -= this.blink_speed;
}
}
}
}
draw(rotation) {
let speedMult = 50
console.log(this.blink_speed)
let waitTime = this.blink_speed
let cap = 200
let d = waitTime * speedMult * 10
let a = cap * 2 + d
let outputRotation = Math.min(Math.abs((Math.floor(rotation * speedMult) % a) - a / 2 - d / 2), cap)
ctx.fillStyle = "black";
ctx.save();
this.drawEyelid(outputRotation);
// squareCut();
this.eyelidCut(outputRotation);
// console.log(Math.floor(this.counter % this.width / 2))
if (Math.floor(this.counter % (this.width / 4)) === 0) {
this.counter = 0;
}
ctx.fillStyle = "black";
ctx.fillRect(this.x - this.width / 2 + centerX, 0, this.width, ctx.canvas.height);
if (this.draw_expand) {
this.drawGrowEye(this.width / 4 + this.counter);
}
if (this.draw_hypno) {
this.centerPulse.draw(rotation)
}
if (this.draw_spiral) {
this.drawSpiral(rotation)
}
if (this.draw_pupil) {
this.drawCircle(this.width / 4);
}
ctx.restore();
this.stepFunc();
this.counter++;
}
}
class MaryFace extends BaseShape {
constructor(x1, y1, rotate1, width1, x2, y2, rotate2, width2) {
super();
this.x1 = x1;
this.y1 = y1;
this.rotate1 = rotate1;
this.width1 = width1;
this.x2 = x2;
this.y2 = y2;
this.rotate2 = rotate2;
this.width2 = width2;
this.eye1 = new EyePrototype(x1, y1, rotate1, 0, width1, 10, 1, 1, 0, 0, 0, 1, "#00fffb", "#00fffb", "#00fffb")
this.eye2 = new EyePrototype(x2, y2, rotate2, 0, width2, 10, 1, 1, 0, 0, 0, 1, "#00fffb", "#00fffb", "#00fffb")
// this.eye3 = new EyePrototype(112, -280, rotate2+2,1, width2, 10, 1, 1, 0, 0, 1, "#00fffb", "#00fffb", "#00fffb")
this.eye3 = new EyePrototype(110, -280, rotate2 + 2, 1, width2, 10, 1, 1, 0, 0, 0, 1, "#00fffb", "#00fffb", "#00fffb")//maybe
}
draw(rotation) {
let img = new Image();
img.src = "maryFace.png";
ctx.drawImage(img, centerX - img.width / 2, centerY - img.height / 2);
this.eye1.draw(rotation);
this.eye2.draw(rotation);
this.eye3.draw(rotation);
}
}
class NewWave extends BaseShape {
constructor(width, sides, step, lineWidth, limiter) {
super();
this.width = width
this.sides = sides;
this.step = step;
this.lineWidth = lineWidth;
this.limiter = limiter;
}
draw(rotation) {
rotation *= this.speedMultiplier / 400
ctx.lineWidth = this.lineWidth
for (let j = 0; j < this.sides; j++) {
const radRotation = rad(360 / this.sides * j)
const inverter = 1 - (j % 2) * 2
let lastX = centerX
let lastY = centerY
for (let i = 0; i < this.width; i += this.step) {
ctx.beginPath();
ctx.moveTo(lastX, lastY);
ctx.strokeStyle = colourToText(lerpRGB([255, 51, 170], [51, 170, 255], i / this.width))
const x = i
const y = (Math.sin(-i * inverter / 30 + rotation * inverter) * i / (this.limiter / 100))
const xRotated = x * Math.cos(radRotation) - y * Math.sin(radRotation)
const yRotated = x * Math.sin(radRotation) + y * Math.cos(radRotation)
lastX = centerX + xRotated;
lastY = centerY + yRotated;
ctx.lineTo(centerX + xRotated, centerY + yRotated);
ctx.stroke();
}
}
}
}

View File

@ -0,0 +1,359 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
<!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
<!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
<!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
<!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="750px" height="750px"
viewBox="0 0 750 750" style="enable-background:new 0 0 750 750;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#FB8604;}
.st2{fill:none;stroke:#FB8604;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st3{fill:none;stroke:#FB8604;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;}
.st4{fill:none;stroke:#FB8604;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1684,5.2807;}
.st5{fill:none;stroke:#FB8604;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0898,5.1496;}
.st6{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;}
.st7{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0028,7.0049;}
.st8{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0187,7.0327;}
.st9{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0037,7.0065;}
.st10{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9928,6.9873;}
.st11{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9957,6.9924;}
.st12{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9878,6.9786;}
.st13{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0054,7.0094;}
.st14{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9755,6.9571;}
.st15{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.972,6.9511;}
.st16{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0334,7.0584;}
.st17{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9725,6.9518;}
.st18{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0038,7.0066;}
.st19{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9879,6.9789;}
.st20{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9711,6.9495;}
.st21{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0154,7.027;}
.st22{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9691,6.946;}
.st23{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0146,7.0255;}
.st24{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9984,6.9972;}
.st25{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0136,7.0239;}
.st26{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0202,7.0354;}
.st27{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0512,7.0896;}
.st28{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.1218,7.2131;}
.st29{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.039,7.0682;}
.st30{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0036,7.0063;}
.st31{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0478,7.0836;}
.st32{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9687,6.9451;}
.st33{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0627,7.1098;}
.st34{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0819,7.1433;}
.st35{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9767,6.9593;}
.st36{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9929,6.9875;}
.st37{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.0173,7.0303;}
.st38{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.961,6.9318;}
.st39{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.947,6.9073;}
.st40{fill:none;stroke:#FB8604;stroke-width:3.25;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.9908,6.9839;}
.st41{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9966,4.9944;}
.st42{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;}
.st43{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9096,4.8493;}
.st44{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.3193,5.5322;}
.st45{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9558,4.9263;}
.st46{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.2618,5.4363;}
.st47{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0169,5.0281;}
.st48{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.5291,4.2151;}
.st49{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.103,5.1717;}
.st50{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9575,4.9292;}
.st51{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.3365,5.5609;}
.st52{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1424,5.2373;}
.st53{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1363,5.2272;}
.st54{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.7994,4.6656;}
.st55{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8999,4.8332;}
.st56{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0099,5.0165;}
.st57{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1.844,3.0734;}
.st58{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9022,4.8371;}
.st59{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.0395,3.3991;}
.st60{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1923,5.3205;}
.st61{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9539,4.9232;}
.st62{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0075,5.0125;}
.st63{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.3534,5.5889;}
.st64{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9667,4.9445;}
.st65{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1331,5.2219;}
.st66{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0872,5.1454;}
.st67{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8949,4.8248;}
.st68{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9725,4.9542;}
.st69{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0386,5.0643;}
.st70{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0094,5.0156;}
.st71{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0371,5.0618;}
.st72{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1062,5.177;}
.st73{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0125,5.0208;}
.st74{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9084,4.8473;}
.st75{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0296,5.0494;}
.st76{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9662,4.9437;}
.st77{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.2029,5.3381;}
.st78{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9909,4.9849;}
.st79{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.4809,5.8015;}
.st80{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.4766,5.7943;}
.st81{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1471,5.2451;}
.st82{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9268,4.878;}
.st83{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9785,4.9641;}
.st84{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0427,5.0712;}
.st85{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0948,5.1579;}
.st86{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0479,5.0798;}
.st87{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1288,5.2146;}
.st88{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0295,5.0492;}
.st89{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0562,5.0937;}
.st90{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0096,5.0161;}
.st91{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0214,5.0356;}
.st92{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9114,4.8524;}
.st93{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0352,5.0587;}
.st94{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.7643,4.6072;}
.st95{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.058,5.0966;}
.st96{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.7966,4.661;}
.st97{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1.7367,2.8946;}
.st98{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.7663,4.6105;}
.st99{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1.9235,3.2058;}
.st100{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0393,5.0655;}
.st101{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8203,4.7005;}
.st102{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9792,4.9653;}
.st103{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1822,5.3036;}
.st104{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0113,5.0189;}
.st105{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1551,5.2585;}
.st106{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.018,5.0301;}
.st107{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.4824,5.8041;}
.st108{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.3801,3.9668;}
.st109{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0129,5.0216;}
.st110{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1.625,2.7083;}
.st111{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1.9221,3.2035;}
.st112{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1124,5.1874;}
.st113{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0952,5.1586;}
.st114{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9708,4.9513;}
.st115{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.5755,4.2925;}
.st116{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0041,5.0068;}
.st117{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9986,4.9977;}
.st118{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1488,5.2479;}
.st119{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1057,5.1761;}
.st120{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9579,4.9299;}
.st121{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8749,4.7914;}
.st122{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0643,5.1071;}
.st123{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1274,5.2123;}
.st124{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1,5.1667;}
.st125{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8472,4.7454;}
.st126{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1118,5.1863;}
.st127{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0106,5.0177;}
.st128{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.7458,4.5763;}
.st129{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9343,4.8906;}
.st130{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.4131,5.6885;}
.st131{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.2838,5.473;}
.st132{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9369,4.8948;}
.st133{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.4913,4.1522;}
.st134{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0222,5.037;}
.st135{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1123,5.1871;}
.st136{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0602,5.1004;}
.st137{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1376,5.2294;}
.st138{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8568,4.7613;}
.st139{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.3279,3.8798;}
.st140{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1.5312,2.552;}
.st141{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9978,4.9963;}
.st142{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.3089,5.5148;}
.st143{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8474,4.7456;}
.st144{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.2084,5.3473;}
.st145{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8968,4.828;}
.st146{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1168,5.1947;}
.st147{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.981,4.9683;}
.st148{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9834,4.9723;}
.st149{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0096,5.016;}
.st150{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0425,5.0708;}
.st151{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.5109,4.1848;}
.st152{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9658,4.943;}
.st153{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8709,4.7848;}
.st154{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1073,5.1789;}
.st155{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.3657,5.6095;}
.st156{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.008,5.0134;}
.st157{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9888,4.9813;}
.st158{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8942,4.8236;}
.st159{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.2728,5.4547;}
.st160{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.717,4.5283;}
.st161{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.053,5.0883;}
.st162{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.084,5.14;}
.st163{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0483,5.0805;}
.st164{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9472,4.9121;}
.st165{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0489,5.0815;}
.st166{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.2105,5.3508;}
.st167{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1121,5.1868;}
.st168{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9144,4.8574;}
.st169{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.2099,5.3498;}
.st170{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0035,5.0059;}
.st171{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0979,5.1632;}
.st172{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0377,5.0628;}
.st173{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.895,4.825;}
.st174{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8221,4.7035;}
.st175{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0558,5.0931;}
.st176{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.28,5.4666;}
.st177{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0048,5.0079;}
.st178{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8024,4.6707;}
.st179{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9867,4.9779;}
.st180{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1426,5.2376;}
.st181{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.7353,4.5588;}
.st182{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.6394,4.399;}
.st183{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0205,5.0341;}
.st184{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.8833,4.8055;}
.st185{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.3253,5.5422;}
.st186{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.2789,5.4648;}
.st187{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.2975,3.8292;}
.st188{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.7364,4.5607;}
.st189{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9916,4.986;}
.st190{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.003,5.005;}
.st191{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9847,4.9746;}
.st192{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.1766,5.2943;}
.st193{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.7665,4.6108;}
.st194{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.6685,4.4475;}
.st195{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0516,5.0859;}
.st196{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.9141,4.8569;}
.st197{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.3649,5.6082;}
.st198{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.3143,5.5238;}
.st199{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.327,3.8783;}
.st200{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.7654,4.6089;}
.st201{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0036,5.006;}
.st202{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:3.0013,5.0021;}
.st203{fill:none;stroke:#FB8604;stroke-width:2.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st204{fill:none;stroke:#FB8604;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
</style>
<metadata>
<sfw xmlns="&ns_sfw;">
<slices></slices>
<sliceSourceBounds bottomLeftOrigin="true" height="13470.3" width="4626" x="-2000" y="-4314"></sliceSourceBounds>
</sfw>
</metadata>
<g id="FILL-BACKGROUND">
<rect class="st0" width="750" height="750"/>
</g>
<g id="N-DIMENSIONS">
</g>
<g id="N-TEXT">
</g>
<g id="_x32_D_x24_AG-DIAGRAM">
<g id="POLYLINE_00000019637509149587408630000017135930699805897140_">
<g>
<g>
<line class="st6" x1="64.63" y1="542.91" x2="66.63" y2="542.91"/>
<line class="st17" x1="73.58" y1="542.91" x2="583.55" y2="542.91"/>
<line class="st6" x1="587.02" y1="542.91" x2="589.02" y2="542.91"/>
</g>
</g>
</g>
</g>
<g id="_x32_D_x24_AG-DETAILS-DIAGRAM">
</g>
<g id="_x32_D_x24_AG-DETAILS">
</g>
<g id="_x32_D_x24_AG-ANIMALS">
<g id="POLYLINE_00000057124465893097847600000004400792138133572256_">
<path class="st203" d="M175.95,509.79c-6.98,1.19-14.84,2.26-21.88,2.95c-7.13,0.66-23.77,1.85-30.89,3.17
c-4.79,0.8-9.62,1.9-14.28,3.27c-4.03,1.18-8.09,2.6-11.92,4.33c-2.54,1.16-5.13,2.49-7.43,4.09c-2.78,1.92-5.31,4.28-7.19,7.1
c-1.04,1.57-1.92,3.29-2.34,5.14c0,0-0.03,0.14-0.03,0.14l-0.03,0.13c0,0-0.01,0.07-0.01,0.07s-0.01,0.06-0.01,0.06
s-0.01,0.06-0.01,0.06c-0.03,0.26-0.07,0.52-0.06,0.78c0,0,0,0.05,0,0.05s0,0.05,0,0.05s0,0.05,0,0.05s0,0.05,0,0.05
s0,0.05,0,0.05s0,0.02,0,0.02s0,0.02,0,0.02s0,0.02,0,0.02c0.02,0.13,0.04,0.26,0.08,0.38c0.09,0.3,0.29,0.56,0.55,0.73
c0.38,0.24,0.83,0.32,1.27,0.37c0.3,0.33,438.56-0.14,439.22,0.04c0,0,3.05-0.03,3.05-0.03s2.83-0.05,2.83-0.05l2.61-0.09
c3.51-0.16,7.14-0.43,10.56-1.31c1.4-0.34,2.8-0.81,4.16-1.28c0,0,9.84-3.51,9.84-3.51s0.98-0.37,0.98-0.37s1.01-0.39,1.01-0.39
s1.04-0.42,1.04-0.42s1.07-0.45,1.07-0.45c0.9-0.39,1.91-0.85,2.79-1.28c5.13-2.5,9.96-5.69,14.34-9.36
c7.45-6.22,13.56-13.99,18.32-22.43c3.91-6.93,7.09-14.35,9.28-22.01c3.33-11.18,3.67-24.31,5.98-35.7
c1.52-7.68,4.62-15.02,8.69-21.69c3.8-6.26,8.43-12.06,13.66-17.19c0,0,1.02-0.99,1.02-0.99s4.57-4.29,4.57-4.29
s0.79-0.76,0.79-0.76s0.38-0.37,0.38-0.37s0.37-0.37,0.37-0.37l0.36-0.37c0,0,0.34-0.36,0.34-0.36c1.12-1.2,2.17-2.53,2.92-3.99
c1.04-2,1.59-4.26,1.54-6.52c-0.03-1.86-0.48-3.69-1.16-5.41l-1.01-2.53c-0.57-1.51-1.12-3.22-0.55-4.81
c0.32-0.89,0.94-1.63,1.64-2.26c1.12-0.99,2.45-1.72,3.81-2.31c6.46-2.75,13.7-2.47,20.56-1.88c2.86,0.25,7.39,0.89,10.25,1.11
c0.62,0.04,1.27,0.07,1.89,0.05c0.72-0.03,1.47-0.12,2.12-0.46c0.58-0.3,1.02-0.83,1.25-1.45c0.3-0.8,0.29-1.68,0.15-2.52
c-0.18-1.02-0.61-2.05-1.41-2.74c-0.4-0.35-0.9-0.6-1.42-0.71c-0.55-0.12-1.13-0.13-1.7-0.12c-1.07,0.03-3.08,0.14-4.14,0.14
c-1.46,0.02-3.22-0.07-4.69-0.17c0,0-10.33-0.76-10.33-0.76c-1.4-0.11-12.11-0.53-13.77-0.6c-3.91-0.23-7.88-0.68-11.58-1.99
c-1.97-0.68-3.89-1.58-5.72-2.58c-3.08-1.64-11.58-7.14-14.66-9.04l-2.39-1.44l-3.66-2.11c0,0-0.38-0.22-0.38-0.22
s-0.37-0.23-0.37-0.23c-0.09-0.07-0.28-0.17-0.37-0.23c-0.48-0.32-0.96-0.66-1.4-1.04c-2.03-1.73-3.4-4.08-4.43-6.51
c-1.29-2.89-1.76-6.11-2.13-9.24c-0.44-3.81-0.81-9.21-1.06-13.08c-1-16.74-2.21-45.09-2.62-61.85
c-0.23-10.61-0.21-21.92,0.64-32.5c0.47-5.53,0.96-14.11,1.88-19.5c0.33-1.83,0.71-3.71,1.59-5.37c0.65-1.26,1.75-2.3,2.5-3.49
c0.35-0.57,0.55-1.2,0.43-1.88c-0.15-0.89-0.73-1.65-1.46-2.16c-0.6-0.42-1.3-0.68-2.02-0.84c-1.53-0.33-3.14-0.26-4.67,0.06
c-1,0.22-2.03,0.55-2.83,1.22c-0.53,0.44-0.9,1.06-1.08,1.73c-0.17,0.63-0.2,1.29-0.18,1.94c0.11,2.44,0.47,5,0.33,7.46
c-0.04,1.01-0.13,2.24-0.22,3.25c0,0-0.21,2.32-0.21,2.32s-7.26,68.08-7.26,68.08c-0.67,6.9-3.86,46.65-4.81,52.59
c-0.45,3.25-1.13,6.57-2.02,9.72c-0.69,2.36-2.28,7.94-3.02,10.2c-1.03,0.52-2.44,1.16-3.42,1.74c-1.58,0.97-3.14,2.04-4.59,3.19
c-1.95,1.54-3.79,3.26-5.42,5.14c-1.39,1.6-2.62,3.39-3.74,5.18l-8.61,14.2c-7.17,11.38-14.95,23.45-23.19,34.07
c-3.56,4.5-7.31,9.03-11.71,12.73c-1.93,1.6-4.05,3.05-6.38,3.99c-1.25,0.5-2.57,0.87-3.92,0.94c-1.71,0.11-3.43-0.29-4.98-1"/>
</g>
<g id="POLYLINE_00000000936520979570235080000002186263548217956789_">
<path class="st203" d="M286.34,500.59c3.59-1.43,7.67-3.52,11.3-4.85c4.16-1.52,11.23-3.24,15.55-4.45
c11.86-3.4,23.54-7.9,34.71-13.1c3.04-1.44,6.21-3.06,9.1-4.74c2.68-1.51,8.16-5.1,10.84-6.85c2.32-1.48,4.72-2.95,7.21-4.13
c2.35-1.12,4.85-2.04,7.34-2.8c3.1-0.96,6.45-1.76,9.62-2.44c11.64-2.5,34.71-6.3,46.71-8.33c3.58-0.64,7.75-1.42,11.28-2.24
c4.71-1.08,9.48-2.55,14.02-4.18c4.31-1.61,15.7-5.44,19.72-7.33c3.37-1.58,6.71-3.45,9.37-6.09c0.98-0.99,1.84-2.13,2.31-3.45
c0.32-0.87,0.46-1.81,0.38-2.74c-0.08-0.91-0.36-1.8-0.83-2.58c-0.88-1.49-2.37-2.47-3.81-3.35c-3.46-2-6.9-4.07-9.82-6.77
c-1.4-1.27-2.69-2.68-3.8-4.21c-0.86-1.19-1.63-2.5-2.28-3.82c-2.34-4.77-3.98-10.2-6.41-14.93c-3.32-6.71-7.72-12.99-12.29-18.91
c-8.12-10.26-16.82-20.44-26.36-29.41c-10.15-9.52-21.61-17.88-33.22-25.52c-8.81-5.76-18.16-11.38-27.51-16.21
c-8-4.1-16.38-7.75-25.04-10.2c-9.2-2.65-18.86-3.99-28.39-4.75c-12.59-0.95-25.46-0.97-38.05-0.07
c-8.33,0.61-16.85,1.77-24.99,3.63c-8.97,2.05-17.95,4.99-26.49,8.42c-11.43,4.64-22.66,10.26-32.72,17.41
c-8.19,5.79-15.67,12.74-22.37,20.2c-7.63,8.51-14.44,17.93-20.04,27.9c-6.47,11.5-11.46,23.99-14.17,36.92
c-5.04,23.84-2.95,49.25,6.23,71.85c3.31,8.08,7.57,15.89,12.8,22.9c3.03,4.05,6.38,7.93,10.16,11.3
c6.74,6.06,14.8,10.55,23.25,13.76c6.07,2.27,12.37,4.21,18.81,5.04c4.91,0.64,9.94,0.71,14.88,0.51c6.25-0.26,12.78-0.98,18.95-2
c11.33-1.92,22.74-4.93,32.67-10.88c6.87-4.07,12.91-9.48,18.25-15.38c4.44-4.9,8.57-10.2,12.25-15.7
c5.53-8.27,10.18-17.22,13.79-26.49c4.35-11.23,7.33-23.07,9.1-34.98c1.5-10.37,2.13-21.01,1.17-31.45
c-0.82-8.83-2.83-17.62-5.9-25.93c-1.96-5.3-4.38-10.53-7.13-15.47c-2.46-4.4-5.24-8.73-8.53-12.56
c-2.38-2.78-5.07-5.33-7.98-7.55c-4.66-3.55-9.91-6.35-15.31-8.6c-8.93-3.67-18.52-5.89-28.18-6.27
c-9.78-0.35-19.62,1.25-28.97,4.09c-15.4,4.72-30.1,12.79-41.01,24.8c-3.27,3.61-6.18,7.62-8.56,11.87
c-2.82,5.02-4.98,10.45-6.53,15.99c-2.28,8.25-3.31,16.96-2.33,25.49c0.55,4.75,1.71,9.49,3.65,13.87c1.5,3.38,3.5,6.57,6.1,9.21
c2.38,2.43,5.25,4.36,8.36,5.71c4.79,2.08,10.07,2.88,15.27,2.85c4.91-0.04,9.85-0.83,14.57-2.17
c6.94-1.98,13.53-5.34,19.04-10.04c3.8-3.22,7.05-7.08,9.83-11.21c3.3-4.93,6.02-10.32,8.05-15.89
c4.42-12.06,5.49-26.15-0.53-37.86c-1.85-3.57-4.39-6.81-7.55-9.3c-2.62-2.08-5.69-3.61-8.92-4.46
c-4.41-1.18-9.07-1.25-13.58-0.71c-4.75,0.59-9.46,1.83-13.89,3.64c-5.75,2.37-11.21,5.83-15.11,10.74
c-4.36,5.44-6.62,12.44-6.71,19.38c-0.01,2.8,0.34,5.65,1.42,8.25c1.01,2.49,2.79,4.68,5.11,6.06c1.92,1.16,4.14,1.78,6.37,2
c2.87,0.29,5.79-0.06,8.54-0.89c4.86-1.46,9.13-4.55,12.46-8.34c1.75-2.01,3.26-4.26,4.34-6.7c0.98-2.22,1.59-4.61,1.78-7.02
c0.26-3.43-0.23-7.07-2.09-10.02c-1.01-1.59-2.46-2.88-4.15-3.71c-1.46-0.72-3.08-1.12-4.7-1.28c-1.75-0.18-3.54-0.1-5.27,0.23
c-2.11,0.4-4.17,1.18-5.93,2.42c-1.77,1.26-3.2,2.95-4.28,4.82c-0.84,1.47-1.5,3.06-1.84,4.72c-0.27,1.35-0.31,2.81,0.22,4.11
c0.83,2.08,3.06,3.35,5.25,3.31c1.76-0.01,3.41-0.87,4.71-2.01c1.37-1.21,2.44-2.84,2.76-4.66c0.22-1.28,0.09-2.74-0.82-3.73
c-0.78-0.85-1.97-1.17-3.09-1.28"/>
</g>
<g id="POLYLINE_00000115514922511656778460000013334750149281772423_">
<path class="st203" d="M575.37,330.46c-1.99-3.36-3.79-7.59-5.3-11.22c-5.9-14.35-13.05-32.31-18.14-46.9
c-3.47-9.9-7.06-21.35-9.99-31.45c-1.27-4.59-3.15-10.91-4.05-15.54c-0.14-0.79-0.27-1.61-0.3-2.42
c-0.03-0.78,0.09-1.56,0.27-2.31c0.38-1.65,1.26-3.33,1.38-5.03c0.04-0.58-0.04-1.18-0.3-1.69c-0.64-1.21-2.01-1.82-3.32-1.99
c-1.19-0.15-2.41-0.01-3.56,0.32c-1.45,0.41-2.82,1.16-3.87,2.25c-0.74,0.76-1.29,1.74-1.22,2.83c0.03,0.67,0.26,1.32,0.54,1.92
c0.49,1.02,1.36,2.37,1.86,3.38c0.42,0.83,0.77,1.72,1.03,2.61c5.66,23.15,22.56,90.21,26.9,112.73c0.89,4.88,1.56,9.9,1.43,14.87
"/>
</g>
</g>
<g id="_x32_D_x24_AG-OUTLINE">
<g id="POLYLINE_00000154409289530670023290000013535996489216676241_">
<path class="st204" d="M175.95,509.79c-6.98,1.19-14.84,2.26-21.88,2.95c-7.13,0.66-23.77,1.85-30.89,3.17
c-4.79,0.8-9.62,1.9-14.28,3.27c-4.03,1.18-8.09,2.6-11.92,4.33c-2.54,1.16-5.13,2.49-7.43,4.09c-2.78,1.92-5.31,4.28-7.19,7.1
c-1.04,1.57-1.92,3.29-2.34,5.14c0,0-0.03,0.14-0.03,0.14l-0.03,0.13c0,0-0.01,0.07-0.01,0.07s-0.01,0.06-0.01,0.06
s-0.01,0.06-0.01,0.06c-0.03,0.26-0.07,0.52-0.06,0.78c0,0,0,0.05,0,0.05s0,0.05,0,0.05s0,0.05,0,0.05s0,0.05,0,0.05
s0,0.05,0,0.05s0,0.02,0,0.02s0,0.02,0,0.02s0,0.02,0,0.02c0.02,0.13,0.04,0.26,0.08,0.38c0.09,0.3,0.29,0.56,0.55,0.73
c0.38,0.24,0.83,0.32,1.27,0.37c0.3,0.33,438.56-0.14,439.22,0.04c0,0,3.05-0.03,3.05-0.03s2.83-0.05,2.83-0.05l2.61-0.09
c3.51-0.16,7.14-0.43,10.56-1.31c1.4-0.34,2.8-0.81,4.16-1.28c0,0,9.84-3.51,9.84-3.51s0.98-0.37,0.98-0.37s1.01-0.39,1.01-0.39
s1.04-0.42,1.04-0.42s1.07-0.45,1.07-0.45c0.9-0.39,1.91-0.85,2.79-1.28c5.13-2.5,9.96-5.69,14.34-9.36
c7.45-6.22,13.56-13.99,18.32-22.43c3.91-6.93,7.09-14.35,9.28-22.01c3.33-11.18,3.67-24.31,5.98-35.7
c1.52-7.68,4.62-15.02,8.69-21.69c3.8-6.26,8.43-12.06,13.66-17.19c0,0,1.02-0.99,1.02-0.99s4.57-4.29,4.57-4.29
s0.79-0.76,0.79-0.76s0.38-0.37,0.38-0.37s0.37-0.37,0.37-0.37l0.36-0.37c0,0,0.34-0.36,0.34-0.36c1.12-1.2,2.17-2.53,2.92-3.99
c1.04-2,1.59-4.26,1.54-6.52c-0.03-1.86-0.48-3.69-1.16-5.41l-1.01-2.53c-0.57-1.51-1.12-3.22-0.55-4.81
c0.32-0.89,0.94-1.63,1.64-2.26c1.12-0.99,2.45-1.72,3.81-2.31c6.46-2.75,13.7-2.47,20.56-1.88c2.86,0.25,7.39,0.89,10.25,1.11
c0.62,0.04,1.27,0.07,1.89,0.05c0.72-0.03,1.47-0.12,2.12-0.46c0.58-0.3,1.02-0.83,1.25-1.45c0.3-0.8,0.29-1.68,0.15-2.52
c-0.18-1.02-0.61-2.05-1.41-2.74c-0.4-0.35-0.9-0.6-1.42-0.71c-0.55-0.12-1.13-0.13-1.7-0.12c-1.07,0.03-3.08,0.14-4.14,0.14
c-1.46,0.02-3.22-0.07-4.69-0.17c0,0-10.33-0.76-10.33-0.76c-1.4-0.11-12.11-0.53-13.77-0.6c-3.91-0.23-7.88-0.68-11.58-1.99
c-1.97-0.68-3.89-1.58-5.72-2.58c-3.08-1.64-11.58-7.14-14.66-9.04l-2.39-1.44l-3.66-2.11c0,0-0.38-0.22-0.38-0.22
s-0.37-0.23-0.37-0.23c-0.09-0.07-0.28-0.17-0.37-0.23c-0.48-0.32-0.96-0.66-1.4-1.04c-2.03-1.73-3.4-4.08-4.43-6.51
c-1.29-2.89-1.76-6.11-2.13-9.24c-0.44-3.81-0.81-9.21-1.06-13.08c-1-16.74-2.21-45.09-2.62-61.85
c-0.23-10.61-0.21-21.92,0.64-32.5c0.47-5.53,0.96-14.11,1.88-19.5c0.33-1.83,0.71-3.71,1.59-5.37c0.65-1.26,1.75-2.3,2.5-3.49
c0.35-0.57,0.55-1.2,0.43-1.88c-0.15-0.89-0.73-1.65-1.46-2.16c-0.6-0.42-1.3-0.68-2.02-0.84c-1.53-0.33-3.14-0.26-4.67,0.06
c-1,0.22-2.03,0.55-2.83,1.22c-0.53,0.44-0.9,1.06-1.08,1.73c-0.17,0.63-0.2,1.29-0.18,1.94c0.11,2.44,0.47,5,0.33,7.46
c-0.04,1.01-0.13,2.24-0.22,3.25c0,0-0.21,2.32-0.21,2.32s-7.26,68.08-7.26,68.08c-0.71,7.27-3.84,46.7-4.87,53.03
c-0.33,2.26-0.77,4.56-1.34,6.77c-2.06-3.34-3.81-7.59-5.34-11.23c-5.9-14.35-13.05-32.31-18.14-46.9
c-4.9-14.18-9.7-29.49-13.4-44.04c-0.41-1.84-0.92-3.75-0.94-5.64c0-0.82,0.16-1.64,0.37-2.43c0.36-1.32,1.01-2.77,1.22-4.12
c0.09-0.58,0.1-1.2-0.07-1.77c-0.18-0.61-0.59-1.13-1.09-1.51c-0.96-0.73-2.2-1-3.39-0.99c-1.52,0.01-3.05,0.4-4.39,1.11
c-0.91,0.49-1.76,1.12-2.41,1.93c-0.32,0.4-0.59,0.86-0.74,1.36c-0.14,0.47-0.16,0.97-0.09,1.45c0.13,0.86,0.53,1.65,0.95,2.4
c0.84,1.44,1.8,3.05,2.28,4.64c0.32,0.99,0.71,2.52,0.98,3.54c0,0,19.65,80.58,19.65,80.58c2.4,10.49,5.72,23.63,7.26,34.25
c0.44,3.2,0.67,6.49,0.6,9.72c-1.54,1.71-2.89,3.65-4.11,5.6l-8.61,14.2c-7.17,11.38-14.95,23.45-23.19,34.07
c-3.56,4.5-7.31,9.03-11.71,12.73c-1.93,1.6-4.05,3.05-6.38,3.99c-1.25,0.5-2.57,0.87-3.92,0.94c-1.71,0.11-3.43-0.29-4.98-1
c0-1.32-0.46-2.64-1.27-3.68c-0.9-1.16-2.16-1.98-3.39-2.74c-2.81-1.63-5.67-3.32-8.16-5.35c-2.95-2.37-5.55-5.24-7.3-8.61
c-1.58-2.96-3.02-6.87-4.27-10.02c-1.04-2.59-2.26-5.23-3.57-7.69c-4.71-8.83-11.05-16.88-17.42-24.55
c-7.48-8.92-15.46-17.79-24.24-25.46c-9.99-8.81-21.12-16.68-32.31-23.88c-13.65-8.62-27.87-16.98-43.14-22.39
c-16.82-5.94-34.94-7.28-52.66-7.48c-14.26-0.04-28.75,0.82-42.73,3.76c-9.81,2.07-19.57,5.21-28.87,8.94
c-8.19,3.31-16.39,7.22-23.99,11.73c-15.4,9.05-28.54,21.67-39.34,35.83c-14.36,18.85-24.76,41.16-27.67,64.8
c-3.43,27.23,2.05,55.91,16.83,79.19c3.5,5.44,7.51,10.63,12.15,15.16C167.92,504.27,171.83,507.26,175.95,509.79z"/>
</g>
</g>
</svg>

After

(image error) Size: 38 KiB

Binary file not shown.

After

(image error) Size: 456 KiB

Binary file not shown.

After

(image error) Size: 441 KiB

Binary file not shown.

After

(image error) Size: 461 KiB

Binary file not shown.

After

(image error) Size: 1.1 KiB

Binary file not shown.

After

(image error) Size: 715 B

Binary file not shown.

After

(image error) Size: 727 B

Binary file not shown.

After

(image error) Size: 715 B

Binary file not shown.

After

(image error) Size: 1.3 KiB

Binary file not shown.

After

(image error) Size: 4.4 KiB

Binary file not shown.

After

(image error) Size: 4.1 KiB

Binary file not shown.

After

(image error) Size: 4.1 KiB

Binary file not shown.

After

(image error) Size: 4.2 KiB

Binary file not shown.

After

(image error) Size: 808 B

Binary file not shown.

After

(image error) Size: 585 B

Binary file not shown.

After

(image error) Size: 1.1 MiB

Binary file not shown.

After

(image error) Size: 1.3 MiB

View File

@ -635,7 +635,7 @@ class MaryFace extends BaseShape {
}
}
class NewWave extends BaseShape {
constructor(width,sides,step,lineWidth,limiter) {
constructor(width, sides, step, lineWidth, limiter) {
super();
this.width = width
this.sides = sides;
@ -645,25 +645,25 @@ class NewWave extends BaseShape {
}
draw(rotation) {
rotation *= this.speedMultiplier/400
rotation *= this.speedMultiplier / 400
ctx.lineWidth = this.lineWidth
for (let j = 0; j < this.sides; j++) {
const radRotation = rad(360/this.sides*j)
const inverter = 1-(j%2)*2
const radRotation = rad(360 / this.sides * j)
const inverter = 1 - (j % 2) * 2
let lastX = centerX
let lastY = centerY
for (let i = 0; i < this.width; i += this.step) {
ctx.beginPath();
ctx.moveTo(lastX, lastY);
ctx.strokeStyle = colourToText(lerpRGB([255,51,170],[51,170,255],i/this.width))
ctx.strokeStyle = colourToText(lerpRGB([255, 51, 170], [51, 170, 255], i / this.width))
const x = i
const y = (Math.sin(-i*inverter / 30 + rotation*inverter) * i/(this.limiter/100))
const y = (Math.sin(-i * inverter / 30 + rotation * inverter) * i / (this.limiter / 100))
const xRotated = x * Math.cos(radRotation) - y * Math.sin(radRotation)
const yRotated = x * Math.sin(radRotation) + y * Math.cos(radRotation)
lastX= centerX + xRotated;
lastY= centerY + yRotated;
lastX = centerX + xRotated;
lastY = centerY + yRotated;
ctx.lineTo(centerX + xRotated, centerY + yRotated);
ctx.stroke();
}

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

22
webGl/my-threejs-test/dist/index.html vendored Normal file
View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Phyllotaxis Animation with Three.js and ShaderMaterial</title>
<style>body {
margin: 0;
}
canvas {
display: block;
}
</style>
</head>
<body>
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script> -->
<script src="/index.975ef6c8.js" defer=""></script>
</body>
</html>

View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Phyllotaxis Animation with Three.js and ShaderMaterial</title>
<style>
body {
margin: 0;
}
canvas {
display: block;
}
</style>
</head>
<body>
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script> -->
<script src="./src/index.js" type="module"></script>
</body>
</html>

16
webGl/my-threejs-test/node_modules/.bin/browserslist generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../browserslist/cli.js" "$@"
else
exec node "$basedir/../browserslist/cli.js" "$@"
fi

View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\browserslist\cli.js" %*

View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../browserslist/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../browserslist/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../browserslist/cli.js" $args
} else {
& "node$exe" "$basedir/../browserslist/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
webGl/my-threejs-test/node_modules/.bin/detect-libc generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../detect-libc/bin/detect-libc.js" "$@"
else
exec node "$basedir/../detect-libc/bin/detect-libc.js" "$@"
fi

View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\detect-libc\bin\detect-libc.js" %*

View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../detect-libc/bin/detect-libc.js" $args
} else {
& "$basedir/node$exe" "$basedir/../detect-libc/bin/detect-libc.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../detect-libc/bin/detect-libc.js" $args
} else {
& "node$exe" "$basedir/../detect-libc/bin/detect-libc.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../lmdb/bin/download-prebuilds.js" "$@"
else
exec node "$basedir/../lmdb/bin/download-prebuilds.js" "$@"
fi

View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\lmdb\bin\download-prebuilds.js" %*

View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../lmdb/bin/download-prebuilds.js" $args
} else {
& "$basedir/node$exe" "$basedir/../lmdb/bin/download-prebuilds.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../lmdb/bin/download-prebuilds.js" $args
} else {
& "node$exe" "$basedir/../lmdb/bin/download-prebuilds.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../msgpackr-extract/bin/download-prebuilds.js" "$@"
else
exec node "$basedir/../msgpackr-extract/bin/download-prebuilds.js" "$@"
fi

View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\msgpackr-extract\bin\download-prebuilds.js" %*

View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../msgpackr-extract/bin/download-prebuilds.js" $args
} else {
& "$basedir/node$exe" "$basedir/../msgpackr-extract/bin/download-prebuilds.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../msgpackr-extract/bin/download-prebuilds.js" $args
} else {
& "node$exe" "$basedir/../msgpackr-extract/bin/download-prebuilds.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
webGl/my-threejs-test/node_modules/.bin/findup generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../@choojs/findup/bin/findup.js" "$@"
else
exec node "$basedir/../@choojs/findup/bin/findup.js" "$@"
fi

17
webGl/my-threejs-test/node_modules/.bin/findup.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\@choojs\findup\bin\findup.js" %*

28
webGl/my-threejs-test/node_modules/.bin/findup.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../@choojs/findup/bin/findup.js" $args
} else {
& "$basedir/node$exe" "$basedir/../@choojs/findup/bin/findup.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../@choojs/findup/bin/findup.js" $args
} else {
& "node$exe" "$basedir/../@choojs/findup/bin/findup.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
webGl/my-threejs-test/node_modules/.bin/js-yaml generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../js-yaml/bin/js-yaml.js" "$@"
else
exec node "$basedir/../js-yaml/bin/js-yaml.js" "$@"
fi

17
webGl/my-threejs-test/node_modules/.bin/js-yaml.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\js-yaml\bin\js-yaml.js" %*

28
webGl/my-threejs-test/node_modules/.bin/js-yaml.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
} else {
& "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
} else {
& "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
webGl/my-threejs-test/node_modules/.bin/json5 generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../json5/lib/cli.js" "$@"
else
exec node "$basedir/../json5/lib/cli.js" "$@"
fi

17
webGl/my-threejs-test/node_modules/.bin/json5.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\json5\lib\cli.js" %*

28
webGl/my-threejs-test/node_modules/.bin/json5.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../json5/lib/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../json5/lib/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../json5/lib/cli.js" $args
} else {
& "node$exe" "$basedir/../json5/lib/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../node-gyp-build-optional-packages/bin.js" "$@"
else
exec node "$basedir/../node-gyp-build-optional-packages/bin.js" "$@"
fi

View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../node-gyp-build-optional-packages/optional.js" "$@"
else
exec node "$basedir/../node-gyp-build-optional-packages/optional.js" "$@"
fi

View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\node-gyp-build-optional-packages\optional.js" %*

View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../node-gyp-build-optional-packages/optional.js" $args
} else {
& "$basedir/node$exe" "$basedir/../node-gyp-build-optional-packages/optional.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../node-gyp-build-optional-packages/optional.js" $args
} else {
& "node$exe" "$basedir/../node-gyp-build-optional-packages/optional.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../node-gyp-build-optional-packages/build-test.js" "$@"
else
exec node "$basedir/../node-gyp-build-optional-packages/build-test.js" "$@"
fi

View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\node-gyp-build-optional-packages\build-test.js" %*

View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../node-gyp-build-optional-packages/build-test.js" $args
} else {
& "$basedir/node$exe" "$basedir/../node-gyp-build-optional-packages/build-test.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../node-gyp-build-optional-packages/build-test.js" $args
} else {
& "node$exe" "$basedir/../node-gyp-build-optional-packages/build-test.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\node-gyp-build-optional-packages\bin.js" %*

View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../node-gyp-build-optional-packages/bin.js" $args
} else {
& "$basedir/node$exe" "$basedir/../node-gyp-build-optional-packages/bin.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../node-gyp-build-optional-packages/bin.js" $args
} else {
& "node$exe" "$basedir/../node-gyp-build-optional-packages/bin.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
webGl/my-threejs-test/node_modules/.bin/parcel generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../parcel/lib/bin.js" "$@"
else
exec node "$basedir/../parcel/lib/bin.js" "$@"
fi

17
webGl/my-threejs-test/node_modules/.bin/parcel.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\parcel\lib\bin.js" %*

28
webGl/my-threejs-test/node_modules/.bin/parcel.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../parcel/lib/bin.js" $args
} else {
& "$basedir/node$exe" "$basedir/../parcel/lib/bin.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../parcel/lib/bin.js" $args
} else {
& "node$exe" "$basedir/../parcel/lib/bin.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
webGl/my-threejs-test/node_modules/.bin/resolve generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../resolve/bin/resolve" "$@"
else
exec node "$basedir/../resolve/bin/resolve" "$@"
fi

17
webGl/my-threejs-test/node_modules/.bin/resolve.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\resolve\bin\resolve" %*

28
webGl/my-threejs-test/node_modules/.bin/resolve.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../resolve/bin/resolve" $args
} else {
& "$basedir/node$exe" "$basedir/../resolve/bin/resolve" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../resolve/bin/resolve" $args
} else {
& "node$exe" "$basedir/../resolve/bin/resolve" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
webGl/my-threejs-test/node_modules/.bin/semver generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@"
else
exec node "$basedir/../semver/bin/semver.js" "$@"
fi

17
webGl/my-threejs-test/node_modules/.bin/semver.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver.js" %*

28
webGl/my-threejs-test/node_modules/.bin/semver.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
} else {
& "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../semver/bin/semver.js" $args
} else {
& "node$exe" "$basedir/../semver/bin/semver.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

16
webGl/my-threejs-test/node_modules/.bin/svgo generated vendored Normal file
View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../svgo/bin/svgo" "$@"
else
exec node "$basedir/../svgo/bin/svgo" "$@"
fi

17
webGl/my-threejs-test/node_modules/.bin/svgo.cmd generated vendored Normal file
View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\svgo\bin\svgo" %*

28
webGl/my-threejs-test/node_modules/.bin/svgo.ps1 generated vendored Normal file
View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../svgo/bin/svgo" $args
} else {
& "$basedir/node$exe" "$basedir/../svgo/bin/svgo" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../svgo/bin/svgo" $args
} else {
& "node$exe" "$basedir/../svgo/bin/svgo" $args
}
$ret=$LASTEXITCODE
}
exit $ret

View File

@ -0,0 +1,16 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*|*MINGW*|*MSYS*)
if command -v cygpath > /dev/null 2>&1; then
basedir=`cygpath -w "$basedir"`
fi
;;
esac
if [ -x "$basedir/node" ]; then
exec "$basedir/node" "$basedir/../update-browserslist-db/cli.js" "$@"
else
exec node "$basedir/../update-browserslist-db/cli.js" "$@"
fi

View File

@ -0,0 +1,17 @@
@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\update-browserslist-db\cli.js" %*

View File

@ -0,0 +1,28 @@
#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
# Fix case when both the Windows and Linux builds of Node
# are installed in the same directory
$exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "$basedir/node$exe" "$basedir/../update-browserslist-db/cli.js" $args
} else {
& "$basedir/node$exe" "$basedir/../update-browserslist-db/cli.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
$input | & "node$exe" "$basedir/../update-browserslist-db/cli.js" $args
} else {
& "node$exe" "$basedir/../update-browserslist-db/cli.js" $args
}
$ret=$LASTEXITCODE
}
exit $ret

3077
webGl/my-threejs-test/node_modules/.package-lock.json generated vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,22 @@
MIT License
Copyright (c) 2014-present Sebastian McKenzie and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,19 @@
# @babel/code-frame
> Generate errors that contain a code frame that point to source locations.
See our website [@babel/code-frame](https://babeljs.io/docs/babel-code-frame) for more information.
## Install
Using npm:
```sh
npm install --save-dev @babel/code-frame
```
or using yarn:
```sh
yarn add @babel/code-frame --dev
```

View File

@ -0,0 +1,156 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.codeFrameColumns = codeFrameColumns;
exports.default = _default;
var _highlight = require("@babel/highlight");
var _picocolors = _interopRequireWildcard(require("picocolors"), true);
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
const colors = typeof process === "object" && (process.env.FORCE_COLOR === "0" || process.env.FORCE_COLOR === "false") ? (0, _picocolors.createColors)(false) : _picocolors.default;
const compose = (f, g) => v => f(g(v));
let pcWithForcedColor = undefined;
function getColors(forceColor) {
if (forceColor) {
var _pcWithForcedColor;
(_pcWithForcedColor = pcWithForcedColor) != null ? _pcWithForcedColor : pcWithForcedColor = (0, _picocolors.createColors)(true);
return pcWithForcedColor;
}
return colors;
}
let deprecationWarningShown = false;
function getDefs(colors) {
return {
gutter: colors.gray,
marker: compose(colors.red, colors.bold),
message: compose(colors.red, colors.bold)
};
}
const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
function getMarkerLines(loc, source, opts) {
const startLoc = Object.assign({
column: 0,
line: -1
}, loc.start);
const endLoc = Object.assign({}, startLoc, loc.end);
const {
linesAbove = 2,
linesBelow = 3
} = opts || {};
const startLine = startLoc.line;
const startColumn = startLoc.column;
const endLine = endLoc.line;
const endColumn = endLoc.column;
let start = Math.max(startLine - (linesAbove + 1), 0);
let end = Math.min(source.length, endLine + linesBelow);
if (startLine === -1) {
start = 0;
}
if (endLine === -1) {
end = source.length;
}
const lineDiff = endLine - startLine;
const markerLines = {};
if (lineDiff) {
for (let i = 0; i <= lineDiff; i++) {
const lineNumber = i + startLine;
if (!startColumn) {
markerLines[lineNumber] = true;
} else if (i === 0) {
const sourceLength = source[lineNumber - 1].length;
markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];
} else if (i === lineDiff) {
markerLines[lineNumber] = [0, endColumn];
} else {
const sourceLength = source[lineNumber - i].length;
markerLines[lineNumber] = [0, sourceLength];
}
}
} else {
if (startColumn === endColumn) {
if (startColumn) {
markerLines[startLine] = [startColumn, 0];
} else {
markerLines[startLine] = true;
}
} else {
markerLines[startLine] = [startColumn, endColumn - startColumn];
}
}
return {
start,
end,
markerLines
};
}
function codeFrameColumns(rawLines, loc, opts = {}) {
const highlighted = (opts.highlightCode || opts.forceColor) && (0, _highlight.shouldHighlight)(opts);
const colors = getColors(opts.forceColor);
const defs = getDefs(colors);
const maybeHighlight = (fmt, string) => {
return highlighted ? fmt(string) : string;
};
const lines = rawLines.split(NEWLINE);
const {
start,
end,
markerLines
} = getMarkerLines(loc, lines, opts);
const hasColumns = loc.start && typeof loc.start.column === "number";
const numberMaxWidth = String(end).length;
const highlightedLines = highlighted ? (0, _highlight.default)(rawLines, opts) : rawLines;
let frame = highlightedLines.split(NEWLINE, end).slice(start, end).map((line, index) => {
const number = start + 1 + index;
const paddedNumber = ` ${number}`.slice(-numberMaxWidth);
const gutter = ` ${paddedNumber} |`;
const hasMarker = markerLines[number];
const lastMarkerLine = !markerLines[number + 1];
if (hasMarker) {
let markerLine = "";
if (Array.isArray(hasMarker)) {
const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " ");
const numberOfMarkers = hasMarker[1] || 1;
markerLine = ["\n ", maybeHighlight(defs.gutter, gutter.replace(/\d/g, " ")), " ", markerSpacing, maybeHighlight(defs.marker, "^").repeat(numberOfMarkers)].join("");
if (lastMarkerLine && opts.message) {
markerLine += " " + maybeHighlight(defs.message, opts.message);
}
}
return [maybeHighlight(defs.marker, ">"), maybeHighlight(defs.gutter, gutter), line.length > 0 ? ` ${line}` : "", markerLine].join("");
} else {
return ` ${maybeHighlight(defs.gutter, gutter)}${line.length > 0 ? ` ${line}` : ""}`;
}
}).join("\n");
if (opts.message && !hasColumns) {
frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`;
}
if (highlighted) {
return colors.reset(frame);
} else {
return frame;
}
}
function _default(rawLines, lineNumber, colNumber, opts = {}) {
if (!deprecationWarningShown) {
deprecationWarningShown = true;
const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.";
if (process.emitWarning) {
process.emitWarning(message, "DeprecationWarning");
} else {
const deprecationError = new Error(message);
deprecationError.name = "DeprecationWarning";
console.warn(new Error(message));
}
}
colNumber = Math.max(colNumber, 0);
const location = {
start: {
column: colNumber,
line: lineNumber
}
};
return codeFrameColumns(rawLines, location, opts);
}
//# sourceMappingURL=index.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,30 @@
{
"name": "@babel/code-frame",
"version": "7.24.2",
"description": "Generate errors that contain a code frame that point to source locations.",
"author": "The Babel Team (https://babel.dev/team)",
"homepage": "https://babel.dev/docs/en/next/babel-code-frame",
"bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen",
"license": "MIT",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "https://github.com/babel/babel.git",
"directory": "packages/babel-code-frame"
},
"main": "./lib/index.js",
"dependencies": {
"@babel/highlight": "^7.24.2",
"picocolors": "^1.0.0"
},
"devDependencies": {
"import-meta-resolve": "^4.0.0",
"strip-ansi": "^4.0.0"
},
"engines": {
"node": ">=6.9.0"
},
"type": "commonjs"
}

View File

@ -0,0 +1,22 @@
MIT License
Copyright (c) 2014-present Sebastian McKenzie and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,19 @@
# @babel/helper-validator-identifier
> Validate identifier/keywords name
See our website [@babel/helper-validator-identifier](https://babeljs.io/docs/babel-helper-validator-identifier) for more information.
## Install
Using npm:
```sh
npm install --save @babel/helper-validator-identifier
```
or using yarn:
```sh
yarn add @babel/helper-validator-identifier
```

View File

@ -0,0 +1,70 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isIdentifierChar = isIdentifierChar;
exports.isIdentifierName = isIdentifierName;
exports.isIdentifierStart = isIdentifierStart;
let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\u30fb\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f\uff65";
const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];
const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
function isInAstralSet(code, set) {
let pos = 0x10000;
for (let i = 0, length = set.length; i < length; i += 2) {
pos += set[i];
if (pos > code) return false;
pos += set[i + 1];
if (pos >= code) return true;
}
return false;
}
function isIdentifierStart(code) {
if (code < 65) return code === 36;
if (code <= 90) return true;
if (code < 97) return code === 95;
if (code <= 122) return true;
if (code <= 0xffff) {
return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
}
return isInAstralSet(code, astralIdentifierStartCodes);
}
function isIdentifierChar(code) {
if (code < 48) return code === 36;
if (code < 58) return true;
if (code < 65) return false;
if (code <= 90) return true;
if (code < 97) return code === 95;
if (code <= 122) return true;
if (code <= 0xffff) {
return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
}
return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
}
function isIdentifierName(name) {
let isFirst = true;
for (let i = 0; i < name.length; i++) {
let cp = name.charCodeAt(i);
if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {
const trail = name.charCodeAt(++i);
if ((trail & 0xfc00) === 0xdc00) {
cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);
}
}
if (isFirst) {
isFirst = false;
if (!isIdentifierStart(cp)) {
return false;
}
} else if (!isIdentifierChar(cp)) {
return false;
}
}
return !isFirst;
}
//# sourceMappingURL=identifier.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,57 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "isIdentifierChar", {
enumerable: true,
get: function () {
return _identifier.isIdentifierChar;
}
});
Object.defineProperty(exports, "isIdentifierName", {
enumerable: true,
get: function () {
return _identifier.isIdentifierName;
}
});
Object.defineProperty(exports, "isIdentifierStart", {
enumerable: true,
get: function () {
return _identifier.isIdentifierStart;
}
});
Object.defineProperty(exports, "isKeyword", {
enumerable: true,
get: function () {
return _keyword.isKeyword;
}
});
Object.defineProperty(exports, "isReservedWord", {
enumerable: true,
get: function () {
return _keyword.isReservedWord;
}
});
Object.defineProperty(exports, "isStrictBindOnlyReservedWord", {
enumerable: true,
get: function () {
return _keyword.isStrictBindOnlyReservedWord;
}
});
Object.defineProperty(exports, "isStrictBindReservedWord", {
enumerable: true,
get: function () {
return _keyword.isStrictBindReservedWord;
}
});
Object.defineProperty(exports, "isStrictReservedWord", {
enumerable: true,
get: function () {
return _keyword.isStrictReservedWord;
}
});
var _identifier = require("./identifier.js");
var _keyword = require("./keyword.js");
//# sourceMappingURL=index.js.map

View File

@ -0,0 +1 @@
{"version":3,"names":["_identifier","require","_keyword"],"sources":["../src/index.ts"],"sourcesContent":["export {\n isIdentifierName,\n isIdentifierChar,\n isIdentifierStart,\n} from \"./identifier.ts\";\nexport {\n isReservedWord,\n isStrictBindOnlyReservedWord,\n isStrictBindReservedWord,\n isStrictReservedWord,\n isKeyword,\n} from \"./keyword.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA"}

View File

@ -0,0 +1,35 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isKeyword = isKeyword;
exports.isReservedWord = isReservedWord;
exports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord;
exports.isStrictBindReservedWord = isStrictBindReservedWord;
exports.isStrictReservedWord = isStrictReservedWord;
const reservedWords = {
keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"],
strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"],
strictBind: ["eval", "arguments"]
};
const keywords = new Set(reservedWords.keyword);
const reservedWordsStrictSet = new Set(reservedWords.strict);
const reservedWordsStrictBindSet = new Set(reservedWords.strictBind);
function isReservedWord(word, inModule) {
return inModule && word === "await" || word === "enum";
}
function isStrictReservedWord(word, inModule) {
return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);
}
function isStrictBindOnlyReservedWord(word) {
return reservedWordsStrictBindSet.has(word);
}
function isStrictBindReservedWord(word, inModule) {
return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);
}
function isKeyword(word) {
return keywords.has(word);
}
//# sourceMappingURL=keyword.js.map

View File

@ -0,0 +1 @@
{"version":3,"names":["reservedWords","keyword","strict","strictBind","keywords","Set","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword"],"sources":["../src/keyword.ts"],"sourcesContent":["const reservedWords = {\n keyword: [\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\",\n ],\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n ],\n strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n word: string,\n inModule: boolean,\n): boolean {\n return (\n isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n );\n}\n\nexport function isKeyword(word: string): boolean {\n return keywords.has(word);\n}\n"],"mappings":";;;;;;;;;;AAAA,MAAMA,aAAa,GAAG;EACpBC,OAAO,EAAE,CACP,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,QAAQ,CACT;EACDC,MAAM,EAAE,CACN,YAAY,EACZ,WAAW,EACX,KAAK,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,CACR;EACDC,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW;AAClC,CAAC;AACD,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAACL,aAAa,CAACC,OAAO,CAAC;AAC/C,MAAMK,sBAAsB,GAAG,IAAID,GAAG,CAACL,aAAa,CAACE,MAAM,CAAC;AAC5D,MAAMK,0BAA0B,GAAG,IAAIF,GAAG,CAACL,aAAa,CAACG,UAAU,CAAC;AAK7D,SAASK,cAAcA,CAACC,IAAY,EAAEC,QAAiB,EAAW;EACvE,OAAQA,QAAQ,IAAID,IAAI,KAAK,OAAO,IAAKA,IAAI,KAAK,MAAM;AAC1D;AAOO,SAASE,oBAAoBA,CAACF,IAAY,EAAEC,QAAiB,EAAW;EAC7E,OAAOF,cAAc,CAACC,IAAI,EAAEC,QAAQ,CAAC,IAAIJ,sBAAsB,CAACM,GAAG,CAACH,IAAI,CAAC;AAC3E;AAMO,SAASI,4BAA4BA,CAACJ,IAAY,EAAW;EAClE,OAAOF,0BAA0B,CAACK,GAAG,CAACH,IAAI,CAAC;AAC7C;AAOO,SAASK,wBAAwBA,CACtCL,IAAY,EACZC,QAAiB,EACR;EACT,OACEC,oBAAoB,CAACF,IAAI,EAAEC,QAAQ,CAAC,IAAIG,4BAA4B,CAACJ,IAAI,CAAC;AAE9E;AAEO,SAASM,SAASA,CAACN,IAAY,EAAW;EAC/C,OAAOL,QAAQ,CAACQ,GAAG,CAACH,IAAI,CAAC;AAC3B"}

View File

@ -0,0 +1,28 @@
{
"name": "@babel/helper-validator-identifier",
"version": "7.22.20",
"description": "Validate identifier/keywords name",
"repository": {
"type": "git",
"url": "https://github.com/babel/babel.git",
"directory": "packages/babel-helper-validator-identifier"
},
"license": "MIT",
"publishConfig": {
"access": "public"
},
"main": "./lib/index.js",
"exports": {
".": "./lib/index.js",
"./package.json": "./package.json"
},
"devDependencies": {
"@unicode/unicode-15.1.0": "^1.5.2",
"charcodes": "^0.2.0"
},
"engines": {
"node": ">=6.9.0"
},
"author": "The Babel Team (https://babel.dev/team)",
"type": "commonjs"
}

View File

@ -0,0 +1,73 @@
"use strict";
// Always use the latest available version of Unicode!
// https://tc39.github.io/ecma262/#sec-conformance
const version = "15.1.0";
const start = require(
"@unicode/unicode-" + version + "/Binary_Property/ID_Start/code-points.js"
).filter(function (ch) {
return ch > 0x7f;
});
let last = -1;
const cont = require(
"@unicode/unicode-" + version + "/Binary_Property/ID_Continue/code-points.js"
).filter(function (ch) {
return ch > 0x7f && search(start, ch, last + 1) == -1;
});
function search(arr, ch, starting) {
for (let i = starting; arr[i] <= ch && i < arr.length; last = i++) {
if (arr[i] === ch) return i;
}
return -1;
}
function pad(str, width) {
while (str.length < width) str = "0" + str;
return str;
}
function esc(code) {
const hex = code.toString(16);
if (hex.length <= 2) return "\\x" + pad(hex, 2);
else return "\\u" + pad(hex, 4);
}
function generate(chars) {
const astral = [];
let re = "";
for (let i = 0, at = 0x10000; i < chars.length; i++) {
const from = chars[i];
let to = from;
while (i < chars.length - 1 && chars[i + 1] == to + 1) {
i++;
to++;
}
if (to <= 0xffff) {
if (from == to) re += esc(from);
else if (from + 1 == to) re += esc(from) + esc(to);
else re += esc(from) + "-" + esc(to);
} else {
astral.push(from - at, to - from);
at = to;
}
}
return { nonASCII: re, astral: astral };
}
const startData = generate(start);
const contData = generate(cont);
console.log("/* prettier-ignore */");
console.log('let nonASCIIidentifierStartChars = "' + startData.nonASCII + '";');
console.log("/* prettier-ignore */");
console.log('let nonASCIIidentifierChars = "' + contData.nonASCII + '";');
console.log("/* prettier-ignore */");
console.log(
"const astralIdentifierStartCodes = " + JSON.stringify(startData.astral) + ";"
);
console.log("/* prettier-ignore */");
console.log(
"const astralIdentifierCodes = " + JSON.stringify(contData.astral) + ";"
);

View File

@ -0,0 +1,22 @@
MIT License
Copyright (c) 2014-present Sebastian McKenzie and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,19 @@
# @babel/highlight
> Syntax highlight JavaScript strings for output in terminals.
See our website [@babel/highlight](https://babeljs.io/docs/babel-highlight) for more information.
## Install
Using npm:
```sh
npm install --save-dev @babel/highlight
```
or using yarn:
```sh
yarn add @babel/highlight --dev
```

Some files were not shown because too many files have changed in this diff Show More