project card effect
This commit is contained in:
parent
93008c34d3
commit
bf0111fe91
@ -1,26 +1,80 @@
|
|||||||
import { cn } from "@/lib/utils"
|
"use client";
|
||||||
import Link from "next/link"
|
|
||||||
|
import { AnimatePresence, motion } from "framer-motion";
|
||||||
|
import Image from "next/image";
|
||||||
|
import { useState } from "react";
|
||||||
|
import ProjectCardDropdown from "./dropdown";
|
||||||
|
import { Clock, Globe, Lock } from "lucide-react";
|
||||||
|
import { Sandbox } from "@/lib/types";
|
||||||
|
import { Card } from "@/components/ui/card";
|
||||||
|
|
||||||
export default function ProjectCard({
|
export default function ProjectCard({
|
||||||
children,
|
children,
|
||||||
id,
|
sandbox,
|
||||||
className,
|
onVisibilityChange,
|
||||||
|
onDelete,
|
||||||
}: {
|
}: {
|
||||||
children: React.ReactNode
|
children?: React.ReactNode;
|
||||||
id: string
|
sandbox: Sandbox;
|
||||||
className?: string
|
onVisibilityChange: (sandbox: Sandbox) => void;
|
||||||
|
onDelete: (sandbox: Sandbox) => void;
|
||||||
}) {
|
}) {
|
||||||
|
const [hovered, setHovered] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Link
|
<Card
|
||||||
href={`/code/${id}`}
|
onMouseEnter={() => setHovered(true)}
|
||||||
className={cn(
|
onMouseLeave={() => setHovered(false)}
|
||||||
className,
|
className="group/canvas-card p-4 h-48 flex flex-col justify-between items-start hover:border-foreground transition-all relative overflow-hidden"
|
||||||
"rounded-lg border bg-card text-card-foreground shadow h-48 p-[1px] gradient-project-card-bg cursor-pointer transition-all focus-visible:outline-none focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-ring"
|
>
|
||||||
)}
|
<AnimatePresence>
|
||||||
|
{hovered && (
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0 }}
|
||||||
|
animate={{ opacity: 1 }}
|
||||||
|
className="h-full w-full absolute inset-0"
|
||||||
>
|
>
|
||||||
<div className="rounded-[7px] p-4 h-full flex flex-col justify-between gradient-project-card">
|
|
||||||
{children}
|
{children}
|
||||||
|
</motion.div>
|
||||||
|
)}
|
||||||
|
</AnimatePresence>
|
||||||
|
|
||||||
|
<div className="space-x-2 flex items-center justify-start w-full z-10">
|
||||||
|
<Image
|
||||||
|
alt=""
|
||||||
|
src={
|
||||||
|
sandbox.type === "react"
|
||||||
|
? "/project-icons/react.svg"
|
||||||
|
: "/project-icons/node.svg"
|
||||||
|
}
|
||||||
|
width={20}
|
||||||
|
height={20}
|
||||||
|
/>
|
||||||
|
<div className="font-medium static whitespace-nowrap w-full text-ellipsis overflow-hidden">
|
||||||
|
{sandbox.name}
|
||||||
</div>
|
</div>
|
||||||
</Link>
|
<ProjectCardDropdown
|
||||||
)
|
sandbox={sandbox}
|
||||||
|
onVisibilityChange={onVisibilityChange}
|
||||||
|
onDelete={onDelete}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-col text-muted-foreground space-y-0.5 text-sm z-10">
|
||||||
|
<div className="flex items-center">
|
||||||
|
{sandbox.visibility === "private" ? (
|
||||||
|
<>
|
||||||
|
<Lock className="w-3 h-3 mr-2" /> Private
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
|
<Globe className="w-3 h-3 mr-2" /> Public
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<div className="flex items-center">
|
||||||
|
<Clock className="w-3 h-3 mr-2" /> 3d ago
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
304
frontend/components/dashboard/projectCard/revealEffect.tsx
Normal file
304
frontend/components/dashboard/projectCard/revealEffect.tsx
Normal file
@ -0,0 +1,304 @@
|
|||||||
|
"use client";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
import { Canvas, useFrame, useThree } from "@react-three/fiber";
|
||||||
|
import React, { useMemo, useRef } from "react";
|
||||||
|
import * as THREE from "three";
|
||||||
|
|
||||||
|
export const CanvasRevealEffect = ({
|
||||||
|
animationSpeed = 0.4,
|
||||||
|
opacities = [0.3, 0.3, 0.3, 0.5, 0.5, 0.5, 0.8, 0.8, 0.8, 1],
|
||||||
|
colors = [[0, 255, 255]],
|
||||||
|
containerClassName,
|
||||||
|
dotSize,
|
||||||
|
showGradient = true,
|
||||||
|
}: {
|
||||||
|
animationSpeed?: number;
|
||||||
|
opacities?: number[];
|
||||||
|
colors?: number[][];
|
||||||
|
containerClassName?: string;
|
||||||
|
dotSize?: number;
|
||||||
|
showGradient?: boolean;
|
||||||
|
}) => {
|
||||||
|
return (
|
||||||
|
<div className={cn("h-full relative bg-white w-full", containerClassName)}>
|
||||||
|
<div className="h-full w-full">
|
||||||
|
<DotMatrix
|
||||||
|
colors={colors ?? [[0, 255, 255]]}
|
||||||
|
dotSize={dotSize ?? 3}
|
||||||
|
opacities={
|
||||||
|
opacities ?? [0.3, 0.3, 0.3, 0.5, 0.5, 0.5, 0.8, 0.8, 0.8, 1]
|
||||||
|
}
|
||||||
|
shader={`
|
||||||
|
float animation_speed_factor = ${animationSpeed.toFixed(1)};
|
||||||
|
float intro_offset = distance(u_resolution / 2.0 / u_total_size, st2) * 0.01 + (random(st2) * 0.15);
|
||||||
|
opacity *= step(intro_offset, u_time * animation_speed_factor);
|
||||||
|
opacity *= clamp((1.0 - step(intro_offset + 0.1, u_time * animation_speed_factor)) * 1.25, 1.0, 1.25);
|
||||||
|
`}
|
||||||
|
center={["x", "y"]}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{showGradient && (
|
||||||
|
<div className="absolute inset-0 bg-gradient-to-t from-neutral-950 to-[84%]" />
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
interface DotMatrixProps {
|
||||||
|
colors?: number[][];
|
||||||
|
opacities?: number[];
|
||||||
|
totalSize?: number;
|
||||||
|
dotSize?: number;
|
||||||
|
shader?: string;
|
||||||
|
center?: ("x" | "y")[];
|
||||||
|
}
|
||||||
|
|
||||||
|
const DotMatrix: React.FC<DotMatrixProps> = ({
|
||||||
|
colors = [[0, 0, 0]],
|
||||||
|
opacities = [0.04, 0.04, 0.04, 0.04, 0.04, 0.08, 0.08, 0.08, 0.08, 0.14],
|
||||||
|
totalSize = 4,
|
||||||
|
dotSize = 2,
|
||||||
|
shader = "",
|
||||||
|
center = ["x", "y"],
|
||||||
|
}) => {
|
||||||
|
const uniforms = React.useMemo(() => {
|
||||||
|
let colorsArray = [
|
||||||
|
colors[0],
|
||||||
|
colors[0],
|
||||||
|
colors[0],
|
||||||
|
colors[0],
|
||||||
|
colors[0],
|
||||||
|
colors[0],
|
||||||
|
];
|
||||||
|
if (colors.length === 2) {
|
||||||
|
colorsArray = [
|
||||||
|
colors[0],
|
||||||
|
colors[0],
|
||||||
|
colors[0],
|
||||||
|
colors[1],
|
||||||
|
colors[1],
|
||||||
|
colors[1],
|
||||||
|
];
|
||||||
|
} else if (colors.length === 3) {
|
||||||
|
colorsArray = [
|
||||||
|
colors[0],
|
||||||
|
colors[0],
|
||||||
|
colors[1],
|
||||||
|
colors[1],
|
||||||
|
colors[2],
|
||||||
|
colors[2],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
u_colors: {
|
||||||
|
value: colorsArray.map((color) => [
|
||||||
|
color[0] / 255,
|
||||||
|
color[1] / 255,
|
||||||
|
color[2] / 255,
|
||||||
|
]),
|
||||||
|
type: "uniform3fv",
|
||||||
|
},
|
||||||
|
u_opacities: {
|
||||||
|
value: opacities,
|
||||||
|
type: "uniform1fv",
|
||||||
|
},
|
||||||
|
u_total_size: {
|
||||||
|
value: totalSize,
|
||||||
|
type: "uniform1f",
|
||||||
|
},
|
||||||
|
u_dot_size: {
|
||||||
|
value: dotSize,
|
||||||
|
type: "uniform1f",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}, [colors, opacities, totalSize, dotSize]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Shader
|
||||||
|
source={`
|
||||||
|
precision mediump float;
|
||||||
|
in vec2 fragCoord;
|
||||||
|
|
||||||
|
uniform float u_time;
|
||||||
|
uniform float u_opacities[10];
|
||||||
|
uniform vec3 u_colors[6];
|
||||||
|
uniform float u_total_size;
|
||||||
|
uniform float u_dot_size;
|
||||||
|
uniform vec2 u_resolution;
|
||||||
|
out vec4 fragColor;
|
||||||
|
float PHI = 1.61803398874989484820459;
|
||||||
|
float random(vec2 xy) {
|
||||||
|
return fract(tan(distance(xy * PHI, xy) * 0.5) * xy.x);
|
||||||
|
}
|
||||||
|
float map(float value, float min1, float max1, float min2, float max2) {
|
||||||
|
return min2 + (value - min1) * (max2 - min2) / (max1 - min1);
|
||||||
|
}
|
||||||
|
void main() {
|
||||||
|
vec2 st = fragCoord.xy;
|
||||||
|
${
|
||||||
|
center.includes("x")
|
||||||
|
? "st.x -= abs(floor((mod(u_resolution.x, u_total_size) - u_dot_size) * 0.5));"
|
||||||
|
: ""
|
||||||
|
}
|
||||||
|
${
|
||||||
|
center.includes("y")
|
||||||
|
? "st.y -= abs(floor((mod(u_resolution.y, u_total_size) - u_dot_size) * 0.5));"
|
||||||
|
: ""
|
||||||
|
}
|
||||||
|
float opacity = step(0.0, st.x);
|
||||||
|
opacity *= step(0.0, st.y);
|
||||||
|
|
||||||
|
vec2 st2 = vec2(int(st.x / u_total_size), int(st.y / u_total_size));
|
||||||
|
|
||||||
|
float frequency = 5.0;
|
||||||
|
float show_offset = random(st2);
|
||||||
|
float rand = random(st2 * floor((u_time / frequency) + show_offset + frequency) + 1.0);
|
||||||
|
opacity *= u_opacities[int(rand * 10.0)];
|
||||||
|
opacity *= 1.0 - step(u_dot_size / u_total_size, fract(st.x / u_total_size));
|
||||||
|
opacity *= 1.0 - step(u_dot_size / u_total_size, fract(st.y / u_total_size));
|
||||||
|
|
||||||
|
vec3 color = u_colors[int(show_offset * 6.0)];
|
||||||
|
|
||||||
|
${shader}
|
||||||
|
|
||||||
|
fragColor = vec4(color, opacity);
|
||||||
|
fragColor.rgb *= fragColor.a;
|
||||||
|
}`}
|
||||||
|
uniforms={uniforms}
|
||||||
|
maxFps={60}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
type Uniforms = {
|
||||||
|
[key: string]: {
|
||||||
|
value: number[] | number[][] | number;
|
||||||
|
type: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
const ShaderMaterial = ({
|
||||||
|
source,
|
||||||
|
uniforms,
|
||||||
|
maxFps = 60,
|
||||||
|
}: {
|
||||||
|
source: string;
|
||||||
|
hovered?: boolean;
|
||||||
|
maxFps?: number;
|
||||||
|
uniforms: Uniforms;
|
||||||
|
}) => {
|
||||||
|
const { size } = useThree();
|
||||||
|
const ref = useRef<THREE.Mesh>();
|
||||||
|
let lastFrameTime = 0;
|
||||||
|
|
||||||
|
useFrame(({ clock }) => {
|
||||||
|
if (!ref.current) return;
|
||||||
|
const timestamp = clock.getElapsedTime();
|
||||||
|
if (timestamp - lastFrameTime < 1 / maxFps) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
lastFrameTime = timestamp;
|
||||||
|
|
||||||
|
const material: any = ref.current.material;
|
||||||
|
const timeLocation = material.uniforms.u_time;
|
||||||
|
timeLocation.value = timestamp;
|
||||||
|
});
|
||||||
|
|
||||||
|
const getUniforms = () => {
|
||||||
|
const preparedUniforms: any = {};
|
||||||
|
|
||||||
|
for (const uniformName in uniforms) {
|
||||||
|
const uniform: any = uniforms[uniformName];
|
||||||
|
|
||||||
|
switch (uniform.type) {
|
||||||
|
case "uniform1f":
|
||||||
|
preparedUniforms[uniformName] = { value: uniform.value, type: "1f" };
|
||||||
|
break;
|
||||||
|
case "uniform3f":
|
||||||
|
preparedUniforms[uniformName] = {
|
||||||
|
value: new THREE.Vector3().fromArray(uniform.value),
|
||||||
|
type: "3f",
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case "uniform1fv":
|
||||||
|
preparedUniforms[uniformName] = { value: uniform.value, type: "1fv" };
|
||||||
|
break;
|
||||||
|
case "uniform3fv":
|
||||||
|
preparedUniforms[uniformName] = {
|
||||||
|
value: uniform.value.map((v: number[]) =>
|
||||||
|
new THREE.Vector3().fromArray(v)
|
||||||
|
),
|
||||||
|
type: "3fv",
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case "uniform2f":
|
||||||
|
preparedUniforms[uniformName] = {
|
||||||
|
value: new THREE.Vector2().fromArray(uniform.value),
|
||||||
|
type: "2f",
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
console.error(`Invalid uniform type for '${uniformName}'.`);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
preparedUniforms["u_time"] = { value: 0, type: "1f" };
|
||||||
|
preparedUniforms["u_resolution"] = {
|
||||||
|
value: new THREE.Vector2(size.width * 2, size.height * 2),
|
||||||
|
}; // Initialize u_resolution
|
||||||
|
return preparedUniforms;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Shader material
|
||||||
|
const material = useMemo(() => {
|
||||||
|
const materialObject = new THREE.ShaderMaterial({
|
||||||
|
vertexShader: `
|
||||||
|
precision mediump float;
|
||||||
|
in vec2 coordinates;
|
||||||
|
uniform vec2 u_resolution;
|
||||||
|
out vec2 fragCoord;
|
||||||
|
void main(){
|
||||||
|
float x = position.x;
|
||||||
|
float y = position.y;
|
||||||
|
gl_Position = vec4(x, y, 0.0, 1.0);
|
||||||
|
fragCoord = (position.xy + vec2(1.0)) * 0.5 * u_resolution;
|
||||||
|
fragCoord.y = u_resolution.y - fragCoord.y;
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
fragmentShader: source,
|
||||||
|
uniforms: getUniforms(),
|
||||||
|
glslVersion: THREE.GLSL3,
|
||||||
|
blending: THREE.CustomBlending,
|
||||||
|
blendSrc: THREE.SrcAlphaFactor,
|
||||||
|
blendDst: THREE.OneFactor,
|
||||||
|
});
|
||||||
|
|
||||||
|
return materialObject;
|
||||||
|
}, [size.width, size.height, source]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<mesh ref={ref as any}>
|
||||||
|
<planeGeometry args={[2, 2]} />
|
||||||
|
<primitive object={material} attach="material" />
|
||||||
|
</mesh>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const Shader: React.FC<ShaderProps> = ({ source, uniforms, maxFps = 60 }) => {
|
||||||
|
return (
|
||||||
|
<Canvas className="absolute inset-0 h-full w-full">
|
||||||
|
<ShaderMaterial source={source} uniforms={uniforms} maxFps={maxFps} />
|
||||||
|
</Canvas>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
interface ShaderProps {
|
||||||
|
source: string;
|
||||||
|
uniforms: {
|
||||||
|
[key: string]: {
|
||||||
|
value: number[] | number[][] | number;
|
||||||
|
type: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
maxFps?: number;
|
||||||
|
}
|
@ -10,6 +10,18 @@ import { Card } from "../ui/card";
|
|||||||
import { deleteSandbox, updateSandbox } from "@/lib/actions";
|
import { deleteSandbox, updateSandbox } from "@/lib/actions";
|
||||||
import { toast } from "sonner";
|
import { toast } from "sonner";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
import { CanvasRevealEffect } from "./projectCard/revealEffect";
|
||||||
|
|
||||||
|
const colors = {
|
||||||
|
react: [
|
||||||
|
[71, 207, 237],
|
||||||
|
[30, 126, 148],
|
||||||
|
],
|
||||||
|
node: [
|
||||||
|
[86, 184, 72],
|
||||||
|
[59, 112, 52],
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
export default function DashboardProjects({
|
export default function DashboardProjects({
|
||||||
sandboxes,
|
sandboxes,
|
||||||
@ -18,6 +30,7 @@ export default function DashboardProjects({
|
|||||||
sandboxes: Sandbox[];
|
sandboxes: Sandbox[];
|
||||||
q: string | null;
|
q: string | null;
|
||||||
}) {
|
}) {
|
||||||
|
const [focusedId, setFocusedId] = useState<string | null>(null);
|
||||||
const [deletingId, setDeletingId] = useState<string>("");
|
const [deletingId, setDeletingId] = useState<string>("");
|
||||||
|
|
||||||
const onDelete = async (sandbox: Sandbox) => {
|
const onDelete = async (sandbox: Sandbox) => {
|
||||||
@ -58,52 +71,26 @@ export default function DashboardProjects({
|
|||||||
<Link
|
<Link
|
||||||
key={sandbox.id}
|
key={sandbox.id}
|
||||||
href={`/code/${sandbox.id}`}
|
href={`/code/${sandbox.id}`}
|
||||||
|
onFocus={() => setFocusedId(sandbox.id)}
|
||||||
className={`${
|
className={`${
|
||||||
deletingId === sandbox.id
|
deletingId === sandbox.id
|
||||||
? "pointer-events-none opacity-50"
|
? "pointer-events-none opacity-50"
|
||||||
: ""
|
: ""
|
||||||
} cursor-pointer transition-all focus-visible:outline-none focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-ring rounded-lg`}
|
} cursor-pointer transition-all focus-visible:outline-none focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-ring rounded-lg`}
|
||||||
>
|
>
|
||||||
<Card className="p-4 h-48 flex flex-col justify-between items-start hover:border-foreground transition-all">
|
<ProjectCard
|
||||||
{/* <ProjectCard key={sandbox.id} id={sandbox.id}> */}
|
|
||||||
<div className="space-x-2 flex items-center justify-start w-full">
|
|
||||||
<Image
|
|
||||||
alt=""
|
|
||||||
src={
|
|
||||||
sandbox.type === "react"
|
|
||||||
? "/project-icons/react.svg"
|
|
||||||
: "/project-icons/node.svg"
|
|
||||||
}
|
|
||||||
width={20}
|
|
||||||
height={20}
|
|
||||||
/>
|
|
||||||
<div className="font-medium static whitespace-nowrap w-full text-ellipsis overflow-hidden">
|
|
||||||
{sandbox.name}
|
|
||||||
</div>
|
|
||||||
<ProjectCardDropdown
|
|
||||||
sandbox={sandbox}
|
sandbox={sandbox}
|
||||||
onVisibilityChange={onVisibilityChange}
|
onVisibilityChange={onVisibilityChange}
|
||||||
onDelete={onDelete}
|
onDelete={onDelete}
|
||||||
|
>
|
||||||
|
<CanvasRevealEffect
|
||||||
|
animationSpeed={3}
|
||||||
|
containerClassName="bg-black"
|
||||||
|
colors={colors[sandbox.type]}
|
||||||
|
dotSize={2}
|
||||||
/>
|
/>
|
||||||
</div>
|
<div className="absolute inset-0 [mask-image:radial-gradient(400px_at_center,white,transparent)] bg-background/75" />
|
||||||
<div className="flex flex-col text-muted-foreground space-y-0.5 text-sm">
|
</ProjectCard>
|
||||||
<div className="flex items-center">
|
|
||||||
{sandbox.visibility === "private" ? (
|
|
||||||
<>
|
|
||||||
<Lock className="w-3 h-3 mr-2" /> Private
|
|
||||||
</>
|
|
||||||
) : (
|
|
||||||
<>
|
|
||||||
<Globe className="w-3 h-3 mr-2" /> Public
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
<div className="flex items-center">
|
|
||||||
<Clock className="w-3 h-3 mr-2" /> 3d ago
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{/* </ProjectCard> */}
|
|
||||||
</Card>
|
|
||||||
</Link>
|
</Link>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
311
frontend/package-lock.json
generated
311
frontend/package-lock.json
generated
@ -27,11 +27,13 @@
|
|||||||
"@radix-ui/react-select": "^2.0.0",
|
"@radix-ui/react-select": "^2.0.0",
|
||||||
"@radix-ui/react-slot": "^1.0.2",
|
"@radix-ui/react-slot": "^1.0.2",
|
||||||
"@radix-ui/react-switch": "^1.0.3",
|
"@radix-ui/react-switch": "^1.0.3",
|
||||||
|
"@react-three/fiber": "^8.16.6",
|
||||||
"@vercel/analytics": "^1.2.2",
|
"@vercel/analytics": "^1.2.2",
|
||||||
"@xterm/addon-fit": "^0.10.0",
|
"@xterm/addon-fit": "^0.10.0",
|
||||||
"@xterm/xterm": "^5.5.0",
|
"@xterm/xterm": "^5.5.0",
|
||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
"clsx": "^2.1.0",
|
"clsx": "^2.1.1",
|
||||||
|
"framer-motion": "^11.2.3",
|
||||||
"geist": "^1.3.0",
|
"geist": "^1.3.0",
|
||||||
"lucide-react": "^0.365.0",
|
"lucide-react": "^0.365.0",
|
||||||
"monaco-themes": "^0.4.4",
|
"monaco-themes": "^0.4.4",
|
||||||
@ -43,8 +45,9 @@
|
|||||||
"react-resizable-panels": "^2.0.16",
|
"react-resizable-panels": "^2.0.16",
|
||||||
"socket.io-client": "^4.7.5",
|
"socket.io-client": "^4.7.5",
|
||||||
"sonner": "^1.4.41",
|
"sonner": "^1.4.41",
|
||||||
"tailwind-merge": "^2.2.2",
|
"tailwind-merge": "^2.3.0",
|
||||||
"tailwindcss-animate": "^1.0.7",
|
"tailwindcss-animate": "^1.0.7",
|
||||||
|
"three": "^0.164.1",
|
||||||
"vscode-icons-js": "^11.6.1",
|
"vscode-icons-js": "^11.6.1",
|
||||||
"y-monaco": "^0.1.5",
|
"y-monaco": "^0.1.5",
|
||||||
"y-protocols": "^1.0.6",
|
"y-protocols": "^1.0.6",
|
||||||
@ -55,6 +58,7 @@
|
|||||||
"@types/node": "^20",
|
"@types/node": "^20",
|
||||||
"@types/react": "^18",
|
"@types/react": "^18",
|
||||||
"@types/react-dom": "^18",
|
"@types/react-dom": "^18",
|
||||||
|
"@types/three": "^0.164.0",
|
||||||
"autoprefixer": "^10.0.1",
|
"autoprefixer": "^10.0.1",
|
||||||
"postcss": "^8",
|
"postcss": "^8",
|
||||||
"postcss-import": "^16.1.0",
|
"postcss-import": "^16.1.0",
|
||||||
@ -1490,6 +1494,62 @@
|
|||||||
"@babel/runtime": "^7.13.10"
|
"@babel/runtime": "^7.13.10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@react-three/fiber": {
|
||||||
|
"version": "8.16.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-8.16.6.tgz",
|
||||||
|
"integrity": "sha512-sKEqocYKRI3deW7z9CAVjedDID1an2i8FwxQVv2reMJxzIxIlyxCYXMIAqXBCgHTFtVX2hWGTZYhLL5nyne8kA==",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/runtime": "^7.17.8",
|
||||||
|
"@types/react-reconciler": "^0.26.7",
|
||||||
|
"@types/webxr": "*",
|
||||||
|
"base64-js": "^1.5.1",
|
||||||
|
"buffer": "^6.0.3",
|
||||||
|
"its-fine": "^1.0.6",
|
||||||
|
"react-reconciler": "^0.27.0",
|
||||||
|
"react-use-measure": "^2.1.1",
|
||||||
|
"scheduler": "^0.21.0",
|
||||||
|
"suspend-react": "^0.1.3",
|
||||||
|
"zustand": "^3.7.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"expo": ">=43.0",
|
||||||
|
"expo-asset": ">=8.4",
|
||||||
|
"expo-file-system": ">=11.0",
|
||||||
|
"expo-gl": ">=11.0",
|
||||||
|
"react": ">=18.0",
|
||||||
|
"react-dom": ">=18.0",
|
||||||
|
"react-native": ">=0.64",
|
||||||
|
"three": ">=0.133"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"expo": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"expo-asset": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"expo-file-system": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"expo-gl": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"react-dom": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"react-native": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@react-three/fiber/node_modules/scheduler": {
|
||||||
|
"version": "0.21.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz",
|
||||||
|
"integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"loose-envify": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@socket.io/component-emitter": {
|
"node_modules/@socket.io/component-emitter": {
|
||||||
"version": "3.1.2",
|
"version": "3.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
|
||||||
@ -1508,6 +1568,12 @@
|
|||||||
"tslib": "^2.4.0"
|
"tslib": "^2.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@tweenjs/tween.js": {
|
||||||
|
"version": "23.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.2.tgz",
|
||||||
|
"integrity": "sha512-kMCNaZCJugWI86xiEHaY338CU5JpD0B97p1j1IKNn/Zto8PgACjQx0UxbHjmOcLl/dDOBnItwD07KmCs75pxtQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/@types/body-parser": {
|
"node_modules/@types/body-parser": {
|
||||||
"version": "1.19.5",
|
"version": "1.19.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
|
||||||
@ -1598,8 +1664,7 @@
|
|||||||
"node_modules/@types/prop-types": {
|
"node_modules/@types/prop-types": {
|
||||||
"version": "15.7.11",
|
"version": "15.7.11",
|
||||||
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
|
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
|
||||||
"integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
|
"integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/@types/qs": {
|
"node_modules/@types/qs": {
|
||||||
"version": "6.9.14",
|
"version": "6.9.14",
|
||||||
@ -1615,7 +1680,6 @@
|
|||||||
"version": "18.2.67",
|
"version": "18.2.67",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.67.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.67.tgz",
|
||||||
"integrity": "sha512-vkIE2vTIMHQ/xL0rgmuoECBCkZFZeHr49HeWSc24AptMbNRo7pwSBvj73rlJJs9fGKj0koS+V7kQB1jHS0uCgw==",
|
"integrity": "sha512-vkIE2vTIMHQ/xL0rgmuoECBCkZFZeHr49HeWSc24AptMbNRo7pwSBvj73rlJJs9fGKj0koS+V7kQB1jHS0uCgw==",
|
||||||
"devOptional": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/prop-types": "*",
|
"@types/prop-types": "*",
|
||||||
"@types/scheduler": "*",
|
"@types/scheduler": "*",
|
||||||
@ -1631,11 +1695,18 @@
|
|||||||
"@types/react": "*"
|
"@types/react": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/react-reconciler": {
|
||||||
|
"version": "0.26.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.26.7.tgz",
|
||||||
|
"integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/react": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/scheduler": {
|
"node_modules/@types/scheduler": {
|
||||||
"version": "0.16.8",
|
"version": "0.16.8",
|
||||||
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
|
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
|
||||||
"integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
|
"integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/@types/send": {
|
"node_modules/@types/send": {
|
||||||
"version": "0.17.4",
|
"version": "0.17.4",
|
||||||
@ -1656,6 +1727,30 @@
|
|||||||
"@types/send": "*"
|
"@types/send": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/stats.js": {
|
||||||
|
"version": "0.17.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz",
|
||||||
|
"integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/@types/three": {
|
||||||
|
"version": "0.164.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/three/-/three-0.164.0.tgz",
|
||||||
|
"integrity": "sha512-SFDofn9dJVrE+1DKta7xj7lc4ru7B3S3yf10NsxOserW57aQlB6GxtAS1UK5To3LfEMN5HUHMu3n5v+M5rApgA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@tweenjs/tween.js": "~23.1.1",
|
||||||
|
"@types/stats.js": "*",
|
||||||
|
"@types/webxr": "*",
|
||||||
|
"fflate": "~0.8.2",
|
||||||
|
"meshoptimizer": "~0.18.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/webxr": {
|
||||||
|
"version": "0.5.16",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.16.tgz",
|
||||||
|
"integrity": "sha512-0E0Cl84FECtzrB4qG19TNTqpunw0F1YF0QZZnFMF6pDw1kNKJtrlTKlVB34stGIsHbZsYQ7H0tNjPfZftkHHoA=="
|
||||||
|
},
|
||||||
"node_modules/@vercel/analytics": {
|
"node_modules/@vercel/analytics": {
|
||||||
"version": "1.2.2",
|
"version": "1.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.2.2.tgz",
|
||||||
@ -1804,6 +1899,25 @@
|
|||||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||||
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
||||||
},
|
},
|
||||||
|
"node_modules/base64-js": {
|
||||||
|
"version": "1.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
||||||
|
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"node_modules/binary-extensions": {
|
"node_modules/binary-extensions": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
|
||||||
@ -1871,6 +1985,29 @@
|
|||||||
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
|
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/buffer": {
|
||||||
|
"version": "6.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
|
||||||
|
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"base64-js": "^1.3.1",
|
||||||
|
"ieee754": "^1.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/busboy": {
|
"node_modules/busboy": {
|
||||||
"version": "1.6.0",
|
"version": "1.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
|
||||||
@ -1992,9 +2129,9 @@
|
|||||||
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
|
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
|
||||||
},
|
},
|
||||||
"node_modules/clsx": {
|
"node_modules/clsx": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
|
||||||
"integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==",
|
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
@ -2069,8 +2206,12 @@
|
|||||||
"node_modules/csstype": {
|
"node_modules/csstype": {
|
||||||
"version": "3.1.3",
|
"version": "3.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
||||||
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
|
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
|
||||||
"devOptional": true
|
},
|
||||||
|
"node_modules/debounce": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug=="
|
||||||
},
|
},
|
||||||
"node_modules/debug": {
|
"node_modules/debug": {
|
||||||
"version": "4.3.4",
|
"version": "4.3.4",
|
||||||
@ -2217,6 +2358,12 @@
|
|||||||
"reusify": "^1.0.4"
|
"reusify": "^1.0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/fflate": {
|
||||||
|
"version": "0.8.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
|
||||||
|
"integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/fill-range": {
|
"node_modules/fill-range": {
|
||||||
"version": "7.0.1",
|
"version": "7.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||||
@ -2269,6 +2416,30 @@
|
|||||||
"url": "https://github.com/sponsors/rawify"
|
"url": "https://github.com/sponsors/rawify"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/framer-motion": {
|
||||||
|
"version": "11.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.2.3.tgz",
|
||||||
|
"integrity": "sha512-SKp4jSyRKo5bUzbHp5f/TLiYLxUthh5SpO0MJ5RFtuHa9h4UZlSxQDe7ydmemj2SOYHXwJhJ8DNQ3ZRz+ydkuw==",
|
||||||
|
"dependencies": {
|
||||||
|
"tslib": "^2.4.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@emotion/is-prop-valid": "*",
|
||||||
|
"react": "^18.0.0",
|
||||||
|
"react-dom": "^18.0.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@emotion/is-prop-valid": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"react": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"react-dom": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/fsevents": {
|
"node_modules/fsevents": {
|
||||||
"version": "2.3.3",
|
"version": "2.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
||||||
@ -2359,6 +2530,25 @@
|
|||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/ieee754": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"node_modules/invariant": {
|
"node_modules/invariant": {
|
||||||
"version": "2.2.4",
|
"version": "2.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
|
||||||
@ -2438,6 +2628,25 @@
|
|||||||
"url": "https://github.com/sponsors/dmonad"
|
"url": "https://github.com/sponsors/dmonad"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/its-fine": {
|
||||||
|
"version": "1.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/its-fine/-/its-fine-1.2.5.tgz",
|
||||||
|
"integrity": "sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/react-reconciler": "^0.28.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=18.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/its-fine/node_modules/@types/react-reconciler": {
|
||||||
|
"version": "0.28.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz",
|
||||||
|
"integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/react": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/jackspeak": {
|
"node_modules/jackspeak": {
|
||||||
"version": "2.3.6",
|
"version": "2.3.6",
|
||||||
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
|
||||||
@ -2568,6 +2777,12 @@
|
|||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/meshoptimizer": {
|
||||||
|
"version": "0.18.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz",
|
||||||
|
"integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/micromatch": {
|
"node_modules/micromatch": {
|
||||||
"version": "4.0.5",
|
"version": "4.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
|
||||||
@ -3140,6 +3355,29 @@
|
|||||||
"react": "^16.8.0 || ^17 || ^18"
|
"react": "^16.8.0 || ^17 || ^18"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/react-reconciler": {
|
||||||
|
"version": "0.27.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.27.0.tgz",
|
||||||
|
"integrity": "sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==",
|
||||||
|
"dependencies": {
|
||||||
|
"loose-envify": "^1.1.0",
|
||||||
|
"scheduler": "^0.21.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": "^18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/react-reconciler/node_modules/scheduler": {
|
||||||
|
"version": "0.21.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz",
|
||||||
|
"integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"loose-envify": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/react-remove-scroll": {
|
"node_modules/react-remove-scroll": {
|
||||||
"version": "2.5.5",
|
"version": "2.5.5",
|
||||||
"resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz",
|
"resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz",
|
||||||
@ -3216,6 +3454,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/react-use-measure": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==",
|
||||||
|
"dependencies": {
|
||||||
|
"debounce": "^1.2.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.13",
|
||||||
|
"react-dom": ">=16.13"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/read-cache": {
|
"node_modules/read-cache": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
||||||
@ -3550,6 +3800,14 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/suspend-react": {
|
||||||
|
"version": "0.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/suspend-react/-/suspend-react-0.1.3.tgz",
|
||||||
|
"integrity": "sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=17.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/swr": {
|
"node_modules/swr": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/swr/-/swr-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/swr/-/swr-2.2.0.tgz",
|
||||||
@ -3562,11 +3820,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tailwind-merge": {
|
"node_modules/tailwind-merge": {
|
||||||
"version": "2.2.2",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.3.0.tgz",
|
||||||
"integrity": "sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==",
|
"integrity": "sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.24.0"
|
"@babel/runtime": "^7.24.1"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"type": "github",
|
"type": "github",
|
||||||
@ -3652,6 +3910,11 @@
|
|||||||
"node": ">=0.8"
|
"node": ">=0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/three": {
|
||||||
|
"version": "0.164.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/three/-/three-0.164.1.tgz",
|
||||||
|
"integrity": "sha512-iC/hUBbl1vzFny7f5GtqzVXYjMJKaTPxiCxXfrvVdBi1Sf+jhd1CAkitiFwC7mIBFCo3MrDLJG97yisoaWig0w=="
|
||||||
|
},
|
||||||
"node_modules/to-no-case": {
|
"node_modules/to-no-case": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz",
|
||||||
@ -4041,6 +4304,22 @@
|
|||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/colinhacks"
|
"url": "https://github.com/sponsors/colinhacks"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"node_modules/zustand": {
|
||||||
|
"version": "3.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz",
|
||||||
|
"integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.7.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"react": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,11 +28,13 @@
|
|||||||
"@radix-ui/react-select": "^2.0.0",
|
"@radix-ui/react-select": "^2.0.0",
|
||||||
"@radix-ui/react-slot": "^1.0.2",
|
"@radix-ui/react-slot": "^1.0.2",
|
||||||
"@radix-ui/react-switch": "^1.0.3",
|
"@radix-ui/react-switch": "^1.0.3",
|
||||||
|
"@react-three/fiber": "^8.16.6",
|
||||||
"@vercel/analytics": "^1.2.2",
|
"@vercel/analytics": "^1.2.2",
|
||||||
"@xterm/addon-fit": "^0.10.0",
|
"@xterm/addon-fit": "^0.10.0",
|
||||||
"@xterm/xterm": "^5.5.0",
|
"@xterm/xterm": "^5.5.0",
|
||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
"clsx": "^2.1.0",
|
"clsx": "^2.1.1",
|
||||||
|
"framer-motion": "^11.2.3",
|
||||||
"geist": "^1.3.0",
|
"geist": "^1.3.0",
|
||||||
"lucide-react": "^0.365.0",
|
"lucide-react": "^0.365.0",
|
||||||
"monaco-themes": "^0.4.4",
|
"monaco-themes": "^0.4.4",
|
||||||
@ -44,8 +46,9 @@
|
|||||||
"react-resizable-panels": "^2.0.16",
|
"react-resizable-panels": "^2.0.16",
|
||||||
"socket.io-client": "^4.7.5",
|
"socket.io-client": "^4.7.5",
|
||||||
"sonner": "^1.4.41",
|
"sonner": "^1.4.41",
|
||||||
"tailwind-merge": "^2.2.2",
|
"tailwind-merge": "^2.3.0",
|
||||||
"tailwindcss-animate": "^1.0.7",
|
"tailwindcss-animate": "^1.0.7",
|
||||||
|
"three": "^0.164.1",
|
||||||
"vscode-icons-js": "^11.6.1",
|
"vscode-icons-js": "^11.6.1",
|
||||||
"y-monaco": "^0.1.5",
|
"y-monaco": "^0.1.5",
|
||||||
"y-protocols": "^1.0.6",
|
"y-protocols": "^1.0.6",
|
||||||
@ -56,6 +59,7 @@
|
|||||||
"@types/node": "^20",
|
"@types/node": "^20",
|
||||||
"@types/react": "^18",
|
"@types/react": "^18",
|
||||||
"@types/react-dom": "^18",
|
"@types/react-dom": "^18",
|
||||||
|
"@types/three": "^0.164.0",
|
||||||
"autoprefixer": "^10.0.1",
|
"autoprefixer": "^10.0.1",
|
||||||
"postcss": "^8",
|
"postcss": "^8",
|
||||||
"postcss-import": "^16.1.0",
|
"postcss-import": "^16.1.0",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user