Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9fdf065c1d | |||
| 4a697ab790 | |||
| 29144f8844 | |||
| 74b9bf57c8 | |||
| 5402c343fa | |||
| 5569da07c1 | |||
| 38abeb3b49 | |||
| eb0db21d29 | |||
| 393b653cca | |||
| e87004652f | |||
| 8c84663472 | |||
| 38f9f087d1 | |||
| dcbc1c73f5 | |||
| f9c4495610 | |||
| 638022339e | |||
| 20fbaf05e1 | |||
| ed7681a293 | |||
| b26da614f0 | |||
| 1eed905e8b | |||
| 7769959135 | |||
| 3506858c96 | |||
| 61d7495ec9 | |||
| d486f6f381 | |||
| f67799db30 |
@@ -0,0 +1,55 @@
|
|||||||
|
# Agent - La Fabrik
|
||||||
|
|
||||||
|
You are working on **La Fabrik**, an interactive 3D web experience built with React Three Fiber.
|
||||||
|
|
||||||
|
## Read This First
|
||||||
|
|
||||||
|
- `docs/technical/architecture.md` describes the code that exists today.
|
||||||
|
- `docs/technical/target-architecture.md` describes the intended target-state.
|
||||||
|
- Do not assume target-state systems already exist.
|
||||||
|
|
||||||
|
## Current Implementation
|
||||||
|
|
||||||
|
- Stack: React 19, Three.js, `@react-three/fiber`, `@react-three/drei`, `@react-three/rapier`, TypeScript, Vite
|
||||||
|
- No external global state library is used.
|
||||||
|
- Current singleton-style services are limited to:
|
||||||
|
- `InteractionManager`
|
||||||
|
- `AudioManager`
|
||||||
|
- `Debug`
|
||||||
|
- Current gameplay scope is still prototype-level:
|
||||||
|
- player movement
|
||||||
|
- trigger/grab interactions
|
||||||
|
- debug camera and scene switching
|
||||||
|
- simple audio playback
|
||||||
|
|
||||||
|
## Current Architecture Rules
|
||||||
|
|
||||||
|
- Scene objects live in `src/world/` and `src/components/3d/`.
|
||||||
|
- HTML overlays live in `src/components/ui/`.
|
||||||
|
- Shared static config lives in `src/data/`.
|
||||||
|
- Debug tooling lives in `src/utils/debug/` and `src/hooks/debug/`.
|
||||||
|
- Use the `@/` alias for imports from `src/`.
|
||||||
|
- Prefer small, direct changes over adding new abstraction layers.
|
||||||
|
- Shared types should live close to their domain and only move outward when they gain multiple real consumers.
|
||||||
|
|
||||||
|
## Target-State Guidance
|
||||||
|
|
||||||
|
The project may later grow toward a manager-driven gameplay architecture with clearer separation between:
|
||||||
|
|
||||||
|
- production world code
|
||||||
|
- gameplay orchestration
|
||||||
|
- UI overlays
|
||||||
|
- debug tooling
|
||||||
|
|
||||||
|
That target-state is aspirational until the matching code exists. If a target-state rule conflicts with the current implementation, treat the current code as the source of truth and improve it incrementally.
|
||||||
|
|
||||||
|
## Do Not Assume
|
||||||
|
|
||||||
|
- There is no `GameManager` in the current codebase.
|
||||||
|
- There are no implemented mission, zone, cinematic, or dialogue systems yet.
|
||||||
|
- Dependency versions are not pinned today; do not rewrite dependency strategy unless explicitly asked.
|
||||||
|
- The old `# route path ...` file header convention is not in use.
|
||||||
|
|
||||||
|
## Skills
|
||||||
|
|
||||||
|
Files in `.agent/skills/` are supplemental patterns and examples. Some describe target-state or generic practices rather than the exact current implementation, so verify against the code before applying them.
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
# Agent — La Fabrik
|
|
||||||
|
|
||||||
You are working on **La Fabrik**, an interactive 3D web experience built with React Three Fiber. The player steps into the role of a technician in Altera (2050) and completes missions: repairing an e-bike, fixing a power grid, upgrading a vertical farm.
|
|
||||||
|
|
||||||
## Project Identity
|
|
||||||
|
|
||||||
- **Stack:** React 19, Three.js, @react-three/fiber 9, @react-three/drei, @react-three/rapier, GSAP, TypeScript, Vite
|
|
||||||
- **No external state lib.** State is managed by a custom `GameManager` singleton with a subscribe/getState pattern.
|
|
||||||
- **No Zustand, no Redux, no Context for global state.**
|
|
||||||
- **Versions are pinned** (no `^` in dependencies). Do not upgrade packages without explicit request.
|
|
||||||
|
|
||||||
## Architecture Rules
|
|
||||||
|
|
||||||
### Two patterns coexist
|
|
||||||
|
|
||||||
1. **Singleton manager classes** — for orchestration, audio, cinematics, zone detection, debug
|
|
||||||
2. **Declarative React components** — for all 3D scene objects (map, zones, lights, player, postprocessing)
|
|
||||||
|
|
||||||
Scene objects are **never** singleton classes. Managers are **never** React components.
|
|
||||||
|
|
||||||
### State ownership
|
|
||||||
|
|
||||||
- `GameManager` is the single source of truth for durable gameplay state (phase, zone, mission, input lock, dialogue)
|
|
||||||
- Other managers (`CinematicManager`, `AudioManager`, `ZoneManager`) handle side effects only — they read from GameManager but do not duplicate its state
|
|
||||||
- React components subscribe to GameManager through `useGameState()` hook
|
|
||||||
- **High-frequency values** (movement, camera interpolation, physics) stay in `useRef` + `useFrame` — never in React state
|
|
||||||
|
|
||||||
### File conventions
|
|
||||||
|
|
||||||
- Every file starts with a comment: `# route path <relative_path>` (e.g. `# route path src/world/Map.tsx`)
|
|
||||||
- Scene components live in `src/world/` and `src/components/3d/`
|
|
||||||
- UI overlays live in `src/components/ui/`
|
|
||||||
- Managers live in `src/stateManager/`
|
|
||||||
- Hooks live in `src/hooks/`
|
|
||||||
- Static data lives in `src/data/`
|
|
||||||
- Shaders live in `src/shaders/`
|
|
||||||
- Utilities live in `src/utils/`
|
|
||||||
|
|
||||||
### Import paths
|
|
||||||
|
|
||||||
Use `@/` alias for imports from `src/`:
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import { GameManager } from "@/stateManager/GameManager";
|
|
||||||
import { useGameState } from "@/hooks/useGameState";
|
|
||||||
```
|
|
||||||
|
|
||||||
### Memory management
|
|
||||||
|
|
||||||
- Dispose only what you own (custom materials, render targets, manual clones)
|
|
||||||
- Never blindly deep-dispose shared/cached assets (drei loaders cache models)
|
|
||||||
- Use `Dispose.material()`, `Dispose.mesh()`, `Dispose.renderTarget()` from `src/utils/Dispose.ts`
|
|
||||||
|
|
||||||
### Debug
|
|
||||||
|
|
||||||
- Debug panel activates with `?debug` in URL
|
|
||||||
- All debug logic goes through `Debug.getInstance()` from `src/utils/Debug.ts`
|
|
||||||
- Never scatter `if (isDev)` blocks across files
|
|
||||||
- `r3f-perf` is lazy-loaded only in debug mode via `src/components/3d/DebugPerf.tsx`
|
|
||||||
|
|
||||||
## Managers (4 max)
|
|
||||||
|
|
||||||
| Manager | Responsibility |
|
|
||||||
| ------------------ | ------------------------------------------------------------------- |
|
|
||||||
| `GameManager` | Phase, zone, mission, input lock, dialogue — single source of truth |
|
|
||||||
| `CinematicManager` | GSAP timelines, camera lock/unlock |
|
|
||||||
| `AudioManager` | Music, SFX, spatial audio |
|
|
||||||
| `ZoneManager` | Zone detection, LOD triggers |
|
|
||||||
|
|
||||||
## Do NOT
|
|
||||||
|
|
||||||
- Create new manager classes without explicit request
|
|
||||||
- Use Zustand, Redux, or React Context for global state
|
|
||||||
- Put high-frequency values in React state (`useState`)
|
|
||||||
- Import `CinematicManager`/`AudioManager`/`ZoneManager` directly from components — always go through `GameManager`
|
|
||||||
- Upgrade pinned dependency versions
|
|
||||||
- Create files outside the documented architecture without explicit request
|
|
||||||
|
|
||||||
## Skills
|
|
||||||
|
|
||||||
See `.agent/skills/` for detailed patterns per technology:
|
|
||||||
|
|
||||||
- `best-practices.md` — Code generation conventions (W3C, simple, scalable, modern)
|
|
||||||
- `r3f.md` — React Three Fiber component patterns
|
|
||||||
- `three.md` — Three.js conventions and AnimationMixer
|
|
||||||
- `gsap.md` — GSAP timeline and cinematic patterns
|
|
||||||
- `managers.md` — Singleton manager implementation
|
|
||||||
- `memory.md` — GPU memory and disposal rules
|
|
||||||
- `debug.md` — Debug utility and r3f-perf setup
|
|
||||||
@@ -8,10 +8,12 @@ Append `?debug` to the URL:
|
|||||||
http://localhost:5173?debug
|
http://localhost:5173?debug
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The free debug camera is toggled from the debug panel, not mounted permanently.
|
||||||
|
|
||||||
## Debug singleton
|
## Debug singleton
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
// src/utils/Debug.ts
|
// src/utils/debug/Debug.ts
|
||||||
import GUI from "lil-gui";
|
import GUI from "lil-gui";
|
||||||
|
|
||||||
export class Debug {
|
export class Debug {
|
||||||
@@ -56,14 +58,15 @@ if (debug.active) {
|
|||||||
r3f-perf is loaded only in debug mode to avoid dependency issues in production:
|
r3f-perf is loaded only in debug mode to avoid dependency issues in production:
|
||||||
|
|
||||||
```tsx
|
```tsx
|
||||||
// src/components/3d/DebugPerf.tsx
|
// src/utils/debug/DebugPerf.tsx
|
||||||
import { Suspense, lazy } from "react";
|
import { Suspense, lazy } from "react";
|
||||||
|
import { Debug } from "@/utils/debug/Debug";
|
||||||
|
|
||||||
const Perf = lazy(() => import("r3f-perf").then((m) => ({ default: m.Perf })));
|
const Perf = lazy(() => import("r3f-perf").then((m) => ({ default: m.Perf })));
|
||||||
|
|
||||||
export function DebugPerf() {
|
export function DebugPerf() {
|
||||||
const debug = new URLSearchParams(window.location.search).has("debug");
|
const debug = Debug.getInstance();
|
||||||
if (!debug) return null;
|
if (!debug.active) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Suspense fallback={null}>
|
<Suspense fallback={null}>
|
||||||
|
|||||||
@@ -3,8 +3,12 @@ name: 🔍 Lint
|
|||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
types: [opened, synchronize, reopened]
|
types: [opened, synchronize, reopened]
|
||||||
|
branches: [develop, main]
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches:
|
||||||
|
- main
|
||||||
|
- develop
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
@@ -71,6 +75,8 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: ⬇️ Checkout
|
- name: ⬇️ Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
lfs: true
|
||||||
|
|
||||||
- name: 🧰 Setup Node
|
- name: 🧰 Setup Node
|
||||||
uses: actions/setup-node@v6
|
uses: actions/setup-node@v6
|
||||||
|
|||||||
@@ -3,8 +3,12 @@ name: 📊 Quality
|
|||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
types: [opened, synchronize, reopened]
|
types: [opened, synchronize, reopened]
|
||||||
|
branches: [develop, main]
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches:
|
||||||
|
- main
|
||||||
|
- develop
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
security:
|
security:
|
||||||
@@ -53,6 +57,8 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: ⬇️ Checkout
|
- name: ⬇️ Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
lfs: true
|
||||||
|
|
||||||
- name: 🧰 Setup Node
|
- name: 🧰 Setup Node
|
||||||
uses: actions/setup-node@v6
|
uses: actions/setup-node@v6
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
dist
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
public/models
|
||||||
|
public/**/*.glb
|
||||||
|
public/**/*.gltf
|
||||||
|
public/**/*.png
|
||||||
|
public/**/*.jpg
|
||||||
|
public/**/*.jpeg
|
||||||
|
public/**/*.webp
|
||||||
|
public/**/*.hdr
|
||||||
|
public/**/*.exr
|
||||||
|
public/**/*.ktx
|
||||||
|
public/**/*.ktx2
|
||||||
|
public/**/*.mp3
|
||||||
|
public/**/*.wav
|
||||||
|
public/**/*.ogg
|
||||||
|
public/**/*.mp4
|
||||||
|
public/**/*.webm
|
||||||
@@ -8,31 +8,31 @@ Built with React, Three.js, and Vite. Runs in the browser, no installation requi
|
|||||||
|
|
||||||
### Build & Language
|
### Build & Language
|
||||||
|
|
||||||
| Package | Doc |
|
| Package |
|
||||||
| -------------------------------------------------- | ------------------------------------ |
|
| -------------------------------------------------- |
|
||||||
| [TypeScript](https://www.typescriptlang.org/docs/) | https://www.typescriptlang.org/docs/ |
|
| [TypeScript](https://www.typescriptlang.org/docs/) |
|
||||||
| [React](https://react.dev/learn) | https://react.dev/learn |
|
| [React](https://react.dev/learn) |
|
||||||
| [Vite](https://vite.dev/guide/) | https://vite.dev/guide/ |
|
| [Vite](https://vite.dev/guide/) |
|
||||||
| [ESLint](https://eslint.org/docs/latest/) | https://eslint.org/docs/latest/ |
|
| [ESLint](https://eslint.org/docs/latest/) |
|
||||||
| [Prettier](https://prettier.io/docs/) | https://prettier.io/docs/ |
|
| [Prettier](https://prettier.io/docs/) |
|
||||||
|
|
||||||
### 3D Engine
|
### 3D Engine
|
||||||
|
|
||||||
| Package | Doc |
|
| Package |
|
||||||
| ----------------------------------------------------------------------------------------- | ---------------------------------------------- |
|
| ----------------------------------------------------------------------------------------- |
|
||||||
| [Three.js](https://threejs.org/docs/) | https://threejs.org/docs/ |
|
| [Three.js](https://threejs.org/docs/) |
|
||||||
| [@react-three/fiber](https://docs.pmnd.rs/react-three-fiber/getting-started/introduction) | https://docs.pmnd.rs/react-three-fiber |
|
| [@react-three/fiber](https://docs.pmnd.rs/react-three-fiber/getting-started/introduction) |
|
||||||
| [@react-three/drei](https://pmndrs.github.io/drei) | https://pmndrs.github.io/drei |
|
| [@react-three/drei](https://pmndrs.github.io/drei) |
|
||||||
| [@react-three/rapier](https://rapier.rs/docs/) | https://rapier.rs/docs/user_guides/javascript/ |
|
| [@react-three/rapier](https://rapier.rs/docs/) |
|
||||||
| [@react-three/postprocessing](https://github.com/pmndrs/postprocessing) | https://github.com/pmndrs/postprocessing |
|
| [@react-three/postprocessing](https://github.com/pmndrs/postprocessing) |
|
||||||
| [GSAP](https://gsap.com/docs/v3/Installation/) | https://gsap.com/docs/v3/ |
|
| [GSAP](https://gsap.com/docs/v3/Installation/) |
|
||||||
|
|
||||||
### Performance & Effects
|
### Performance & Effects
|
||||||
|
|
||||||
| Package | Doc |
|
| Package |
|
||||||
| --------------------------------------------------------------------------- | --------------------------------------------------------- |
|
| --------------------------------------------------------------------------- |
|
||||||
| [r3f-perf](https://github.com/utsuboco/r3f-perf) | https://github.com/utsuboco/r3f-perf |
|
| [r3f-perf](https://github.com/utsuboco/r3f-perf) |
|
||||||
| [AnimationMixer](https://threejs.org/docs/#api/en/animation/AnimationMixer) | https://threejs.org/docs/#api/en/animation/AnimationMixer |
|
| [AnimationMixer](https://threejs.org/docs/#api/en/animation/AnimationMixer) |
|
||||||
|
|
||||||
## 🗂 Project Structure
|
## 🗂 Project Structure
|
||||||
|
|
||||||
@@ -49,6 +49,7 @@ la-fabrik/
|
|||||||
│
|
│
|
||||||
└── src/
|
└── src/
|
||||||
├── world/ # Single persistent 3D world
|
├── world/ # Single persistent 3D world
|
||||||
|
│ ├── World.tsx # Main scene composition
|
||||||
│ ├── Map.tsx # Base map, always mounted
|
│ ├── Map.tsx # Base map, always mounted
|
||||||
│ ├── Lighting.tsx # Ambient, directional, point lights
|
│ ├── Lighting.tsx # Ambient, directional, point lights
|
||||||
│ ├── Environment.tsx # HDRI, fog, sky
|
│ ├── Environment.tsx # HDRI, fog, sky
|
||||||
@@ -98,11 +99,24 @@ la-fabrik/
|
|||||||
│ └── fragment.glsl
|
│ └── fragment.glsl
|
||||||
│
|
│
|
||||||
├── utils/
|
├── utils/
|
||||||
│ ├── Debug.ts # lil-gui panel
|
│ ├── EventEmitter.ts # Simple typed pub/sub utility
|
||||||
│ ├── EventEmitter.ts # Simple pub/sub for manager-to-manager events
|
│ ├── Sizes.ts # Viewport size tracking
|
||||||
│ └── Dispose.ts # traverse() + dispose() helper
|
│ ├── Time.ts # Animation frame timing utility
|
||||||
|
│ └── debug/ # Dev-only tools and scene inspection
|
||||||
|
│ ├── Debug.ts # Global lil-gui manager
|
||||||
|
│ ├── DebugPerf.tsx # r3f-perf overlay mounted in Canvas
|
||||||
|
│ ├── isDebugEnabled.ts # Debug query-string helper
|
||||||
|
│ └── scene/
|
||||||
|
│ ├── DebugHelpers.tsx # Grid + axes helpers shown in debug mode
|
||||||
|
│ └── DebugCameraControls.tsx # Free debug camera for map inspection
|
||||||
|
├── hooks/
|
||||||
|
│ └── debug/
|
||||||
|
│ ├── useCameraMode.ts
|
||||||
|
│ ├── useDebugFolder.ts
|
||||||
|
│ ├── useDebugStore.ts
|
||||||
|
│ └── useSceneMode.ts
|
||||||
│
|
│
|
||||||
├── App.tsx # Canvas + UI superimposed
|
├── App.tsx # Canvas bootstrap
|
||||||
└── main.tsx
|
└── main.tsx
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -115,8 +129,8 @@ npm install
|
|||||||
npm run dev
|
npm run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
Open `http://localhost:5173` — standard experience.
|
- app: `http://localhost:5173`
|
||||||
Open `http://localhost:5173?debug` — debug panel + r3f-perf overlay.
|
- debug mode: `http://localhost:5173?debug`
|
||||||
|
|
||||||
## 📜 License
|
## 📜 License
|
||||||
|
|
||||||
|
|||||||
+36
-370
@@ -1,381 +1,47 @@
|
|||||||
# Architecture Patterns
|
# Current Architecture
|
||||||
|
|
||||||
The project uses **two complementary patterns**:
|
This document describes the code that exists today in the repository.
|
||||||
|
|
||||||
- **Singleton service classes** for orchestration and side effects
|
## Runtime Structure
|
||||||
- **Declarative React components** for all 3D scene objects
|
|
||||||
|
|
||||||
This distinction is intentional. Scene elements such as the map, lights, environment, zones, and player are implemented as **React Three Fiber components** and mounted through `<Canvas>`.
|
- `src/App.tsx` mounts the `Canvas`, the 3D `World`, the debug perf overlay, and the HTML overlays.
|
||||||
Global systems such as gameplay flow, cinematics, audio, and debug tooling are implemented as **manager classes**.
|
- `src/world/World.tsx` composes the active scene, including:
|
||||||
|
- environment and lighting
|
||||||
|
- debug helpers and debug camera mode
|
||||||
|
- either the map scene or the debug physics test scene
|
||||||
|
- the player rig when the active camera mode is `player`
|
||||||
|
- `src/world/Map.tsx` loads the main map model and builds the collision octree.
|
||||||
|
- `src/world/debug/TestScene.tsx` provides a debug-oriented interaction and physics scene.
|
||||||
|
- `src/world/player/PlayerComponent.tsx` mounts the camera and controller.
|
||||||
|
- `src/world/player/PlayerController.tsx` owns pointer lock movement, jump handling, and interaction input.
|
||||||
|
|
||||||
Consistency matters, but the codebase does **not** force the same lifecycle pattern on scene components and global services.
|
## Interaction Model
|
||||||
|
|
||||||
---
|
- `src/stateManager/InteractionManager.ts` is the current interaction state source.
|
||||||
|
- `src/components/3d/InteractableObject.tsx` handles focus detection through distance and raycasting.
|
||||||
|
- `src/components/3d/TriggerObject.tsx` implements trigger-style interactions.
|
||||||
|
- `src/components/3d/GrabbableObject.tsx` implements hold-and-release interactions.
|
||||||
|
- `src/hooks/useInteraction.ts` exposes the interaction snapshot to React UI.
|
||||||
|
- `src/components/ui/InteractPrompt.tsx` shows the `E` prompt for trigger interactions.
|
||||||
|
|
||||||
## 1. Singleton Pattern for Global Managers Only
|
## Audio
|
||||||
|
|
||||||
Only cross-cutting services use the singleton pattern.
|
- `src/stateManager/AudioManager.ts` currently provides pooled one-shot sound playback.
|
||||||
|
- Trigger interactions may play audio directly through `AudioManager`.
|
||||||
|
|
||||||
Examples:
|
## Debug System
|
||||||
|
|
||||||
- `GameManager`
|
- Debug mode is enabled with `?debug`.
|
||||||
- `CinematicManager`
|
- `src/utils/debug/Debug.ts` owns the `lil-gui` instance and debug controls.
|
||||||
- `AudioManager`
|
- `src/hooks/debug/useCameraMode.ts` and `src/hooks/debug/useSceneMode.ts` subscribe to debug state.
|
||||||
- `ZoneManager`
|
- `src/utils/debug/DebugPerf.tsx` lazily mounts `r3f-perf` in debug mode.
|
||||||
- `Debug`
|
- `src/utils/debug/scene/DebugHelpers.tsx` mounts debug helpers.
|
||||||
- `EventEmitter`
|
- `src/utils/debug/scene/DebugCameraControls.tsx` mounts the free debug camera.
|
||||||
|
|
||||||
These services must exist once, be accessible from anywhere, and coordinate the experience globally.
|
## Current Limitations
|
||||||
|
|
||||||
```ts
|
- The repository is still a prototype, not the full intended game runtime.
|
||||||
// stateManager/GameManager.ts
|
- `src/world/debug/TestScene.tsx` is still part of the active scene composition.
|
||||||
export class GameManager {
|
- There is no central gameplay orchestrator such as `GameManager` yet.
|
||||||
private static _instance: GameManager | null = null;
|
- Missions, zones, cinematics, and dialogue systems are not implemented.
|
||||||
|
- The player uses octree collision and simple movement rules, not a complete gameplay physics stack.
|
||||||
cinematic!: CinematicManager;
|
|
||||||
audio!: AudioManager;
|
|
||||||
zone!: ZoneManager;
|
|
||||||
|
|
||||||
static getInstance(): GameManager {
|
|
||||||
if (!GameManager._instance) {
|
|
||||||
GameManager._instance = new GameManager();
|
|
||||||
}
|
|
||||||
return GameManager._instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private constructor() {
|
|
||||||
this.cinematic = CinematicManager.getInstance();
|
|
||||||
this.audio = AudioManager.getInstance();
|
|
||||||
this.zone = ZoneManager.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
destroy(): void {
|
|
||||||
this.cinematic.destroy();
|
|
||||||
this.audio.destroy();
|
|
||||||
this.zone.destroy();
|
|
||||||
GameManager._instance = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
|
|
||||||
```ts
|
|
||||||
const game = GameManager.getInstance();
|
|
||||||
game.startMission("workshop");
|
|
||||||
```
|
|
||||||
|
|
||||||
**Important:** scene objects such as `Map`, `WorkshopZone`, `Lighting`, or `Environment` are **not** singletons and must remain standard React components.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. Scene Objects Are React Components, Not Manager Classes
|
|
||||||
|
|
||||||
All 3D scene objects are implemented as **declarative React components**.
|
|
||||||
|
|
||||||
This includes:
|
|
||||||
|
|
||||||
- maps
|
|
||||||
- lights
|
|
||||||
- environments
|
|
||||||
- player controllers
|
|
||||||
- zones
|
|
||||||
- interactive props
|
|
||||||
- postprocessing layers
|
|
||||||
|
|
||||||
This keeps the code aligned with the R3F runtime instead of rebuilding a parallel imperative engine.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```tsx
|
|
||||||
// world/zones/WorkshopZone.tsx
|
|
||||||
import { useEffect, useRef } from "react";
|
|
||||||
import * as THREE from "three";
|
|
||||||
import { useFrame } from "@react-three/fiber";
|
|
||||||
import { useGLTF } from "@react-three/drei";
|
|
||||||
|
|
||||||
export function WorkshopZone() {
|
|
||||||
const root = useRef<THREE.Group>(null);
|
|
||||||
const gltf = useGLTF("/models/workshop/ebike.glb");
|
|
||||||
const mixer = useRef<THREE.AnimationMixer | null>(null);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
mixer.current = new THREE.AnimationMixer(gltf.scene);
|
|
||||||
|
|
||||||
return () => {
|
|
||||||
mixer.current?.stopAllAction();
|
|
||||||
mixer.current = null;
|
|
||||||
};
|
|
||||||
}, [gltf.scene]);
|
|
||||||
|
|
||||||
useFrame((_, delta) => {
|
|
||||||
mixer.current?.update(delta);
|
|
||||||
});
|
|
||||||
|
|
||||||
return <primitive ref={root} object={gltf.scene.clone()} />;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Per-frame values such as movement, interpolation, camera smoothing, and physics must stay in:
|
|
||||||
|
|
||||||
- `useRef`
|
|
||||||
- `useFrame`
|
|
||||||
- Rapier bodies
|
|
||||||
- other frame-based systems
|
|
||||||
|
|
||||||
They must **never** go through React state.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Single Source of Truth for Durable Gameplay State
|
|
||||||
|
|
||||||
The project uses a single authoritative `GameManager` for durable gameplay state.
|
|
||||||
|
|
||||||
React components subscribe to that state through thin hooks.
|
|
||||||
Other managers communicate through `GameManager`, which acts as the main gameplay orchestrator.
|
|
||||||
|
|
||||||
High-frequency values such as movement, camera interpolation, or physics never go through React state and stay in refs or frame-based systems.
|
|
||||||
|
|
||||||
```ts
|
|
||||||
// stateManager/GameManager.ts
|
|
||||||
type Phase = "loading" | "intro" | "exploring" | "cinematic" | "outro";
|
|
||||||
type ZoneId = "workshop" | "powerGrid" | "farm" | null;
|
|
||||||
|
|
||||||
type GameSnapshot = {
|
|
||||||
phase: Phase;
|
|
||||||
activeZone: ZoneId;
|
|
||||||
missionId: string | null;
|
|
||||||
missionStep: number;
|
|
||||||
inputLocked: boolean;
|
|
||||||
dialogueId: string | null;
|
|
||||||
};
|
|
||||||
|
|
||||||
export class GameManager {
|
|
||||||
private static _instance: GameManager | null = null;
|
|
||||||
private listeners = new Set<() => void>();
|
|
||||||
|
|
||||||
private state: GameSnapshot = {
|
|
||||||
phase: "loading",
|
|
||||||
activeZone: null,
|
|
||||||
missionId: null,
|
|
||||||
missionStep: 0,
|
|
||||||
inputLocked: false,
|
|
||||||
dialogueId: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
static getInstance(): GameManager {
|
|
||||||
if (!GameManager._instance) {
|
|
||||||
GameManager._instance = new GameManager();
|
|
||||||
}
|
|
||||||
return GameManager._instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
getState(): GameSnapshot {
|
|
||||||
return this.state;
|
|
||||||
}
|
|
||||||
|
|
||||||
subscribe(listener: () => void): () => void {
|
|
||||||
this.listeners.add(listener);
|
|
||||||
return () => this.listeners.delete(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
private emit(): void {
|
|
||||||
this.listeners.forEach((cb) => cb());
|
|
||||||
}
|
|
||||||
|
|
||||||
setPhase(phase: Phase): void {
|
|
||||||
this.state.phase = phase;
|
|
||||||
this.emit();
|
|
||||||
}
|
|
||||||
|
|
||||||
setActiveZone(zone: ZoneId): void {
|
|
||||||
this.state.activeZone = zone;
|
|
||||||
this.emit();
|
|
||||||
}
|
|
||||||
|
|
||||||
startMission(id: string): void {
|
|
||||||
this.state.missionId = id;
|
|
||||||
this.state.missionStep = 0;
|
|
||||||
this.emit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
```ts
|
|
||||||
// hooks/useGameState.ts
|
|
||||||
import { useEffect, useState } from "react";
|
|
||||||
import { GameManager } from "@/stateManager/GameManager";
|
|
||||||
|
|
||||||
export function useGameState() {
|
|
||||||
const game = GameManager.getInstance();
|
|
||||||
const [state, setState] = useState(game.getState());
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
return game.subscribe(() => {
|
|
||||||
setState({ ...game.getState() });
|
|
||||||
});
|
|
||||||
}, [game]);
|
|
||||||
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
This keeps the architecture simple:
|
|
||||||
|
|
||||||
- **GameManager** owns durable gameplay state
|
|
||||||
- **other managers** handle side effects
|
|
||||||
- **React components** render that state
|
|
||||||
- **R3F frame systems** handle fast-changing values
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. Side Effects Stay in Specialized Managers
|
|
||||||
|
|
||||||
Managers other than `GameManager` should not become secondary state stores.
|
|
||||||
|
|
||||||
Their role is to manage side effects and specialized runtime logic, such as:
|
|
||||||
|
|
||||||
- GSAP timelines
|
|
||||||
- audio playback
|
|
||||||
- zone entry detection
|
|
||||||
- interaction triggers
|
|
||||||
- camera lock/unlock
|
|
||||||
- temporary event coordination
|
|
||||||
|
|
||||||
They can read from `GameManager`, react to its state, or notify it of important transitions.
|
|
||||||
|
|
||||||
Example flow:
|
|
||||||
|
|
||||||
```
|
|
||||||
Component / Hook
|
|
||||||
↓
|
|
||||||
GameManager.getInstance()
|
|
||||||
├── startMission('workshop')
|
|
||||||
├── cinematic.play('intro_workshop')
|
|
||||||
├── audio.playAmbience('workshop')
|
|
||||||
└── zone.setActive('workshop')
|
|
||||||
```
|
|
||||||
|
|
||||||
This keeps the dependency graph understandable while avoiding duplicated durable state.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. Memory Management — Dispose Only What You Own
|
|
||||||
|
|
||||||
GPU memory must be cleaned carefully.
|
|
||||||
|
|
||||||
However, the project does **not** blindly deep-dispose every object on unmount.
|
|
||||||
Only resources explicitly created and owned by the current component or manager should be disposed.
|
|
||||||
|
|
||||||
This includes things like:
|
|
||||||
|
|
||||||
- custom materials
|
|
||||||
- render targets
|
|
||||||
- postprocessing passes
|
|
||||||
- manually created geometries
|
|
||||||
- manually created textures
|
|
||||||
- temporary clones with owned resources
|
|
||||||
|
|
||||||
Shared or cached assets must **not** be blindly disposed.
|
|
||||||
|
|
||||||
```ts
|
|
||||||
// utils/Dispose.ts
|
|
||||||
import * as THREE from "three";
|
|
||||||
|
|
||||||
export class Dispose {
|
|
||||||
static material(material: THREE.Material): void {
|
|
||||||
for (const value of Object.values(material)) {
|
|
||||||
if (value instanceof THREE.Texture) {
|
|
||||||
value.dispose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
material.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
static mesh(mesh: THREE.Mesh): void {
|
|
||||||
mesh.geometry?.dispose();
|
|
||||||
|
|
||||||
const materials = Array.isArray(mesh.material)
|
|
||||||
? mesh.material
|
|
||||||
: [mesh.material];
|
|
||||||
|
|
||||||
for (const material of materials) {
|
|
||||||
if (material) this.material(material);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static renderTarget(rt: THREE.WebGLRenderTarget): void {
|
|
||||||
rt.texture.dispose();
|
|
||||||
rt.dispose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Example usage:
|
|
||||||
|
|
||||||
```ts
|
|
||||||
useEffect(() => {
|
|
||||||
const material = new THREE.ShaderMaterial({
|
|
||||||
vertexShader,
|
|
||||||
fragmentShader,
|
|
||||||
});
|
|
||||||
|
|
||||||
meshRef.current.material = material;
|
|
||||||
|
|
||||||
return () => {
|
|
||||||
Dispose.material(material);
|
|
||||||
};
|
|
||||||
}, []);
|
|
||||||
```
|
|
||||||
|
|
||||||
**Rule:** disposal is ownership-based, not automatic and not blind.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. Debug Utility
|
|
||||||
|
|
||||||
The debug panel can be activated by appending `?debug` to the URL:
|
|
||||||
|
|
||||||
`http://localhost:5173?debug`
|
|
||||||
|
|
||||||
All debug logic is centralized in `Debug.ts`.
|
|
||||||
Do not scatter debug checks across the codebase.
|
|
||||||
|
|
||||||
```ts
|
|
||||||
// utils/Debug.ts
|
|
||||||
import GUI from "lil-gui";
|
|
||||||
|
|
||||||
export class Debug {
|
|
||||||
private static _instance: Debug | null = null;
|
|
||||||
|
|
||||||
readonly active: boolean;
|
|
||||||
gui: GUI | null = null;
|
|
||||||
|
|
||||||
static getInstance(): Debug {
|
|
||||||
if (!Debug._instance) Debug._instance = new Debug();
|
|
||||||
return Debug._instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private constructor() {
|
|
||||||
this.active = new URLSearchParams(window.location.search).has("debug");
|
|
||||||
if (this.active) {
|
|
||||||
this.gui = new GUI({ title: "La-Fabrik Debug" });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
destroy(): void {
|
|
||||||
this.gui?.destroy();
|
|
||||||
Debug._instance = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
|
|
||||||
```ts
|
|
||||||
const debug = Debug.getInstance();
|
|
||||||
|
|
||||||
if (debug.active) {
|
|
||||||
debug.gui!.add(params, "bloomIntensity", 0, 3).name("Bloom");
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|||||||
@@ -1,153 +0,0 @@
|
|||||||
# Best Practices
|
|
||||||
|
|
||||||
Generate code that is **simple**, **understandable**, **reviewable**, **scalable**, **optimized**, and **modern**. Follow W3C web standards and platform conventions.
|
|
||||||
|
|
||||||
## Naming Conventions
|
|
||||||
|
|
||||||
### Files
|
|
||||||
|
|
||||||
| Type | Convention | Example |
|
|
||||||
| ---------- | --------------------------- | -------------------- |
|
|
||||||
| Components | PascalCase | `WorkshopZone.tsx` |
|
|
||||||
| Hooks | camelCase with `use` prefix | `useGameState.ts` |
|
|
||||||
| Managers | PascalCase | `GameManager.ts` |
|
|
||||||
| Utils | PascalCase | `Dispose.ts` |
|
|
||||||
| Data | PascalCase | `missions.ts` |
|
|
||||||
| Shaders | kebab-case | `hologram.vert.glsl` |
|
|
||||||
|
|
||||||
### Variables & Functions
|
|
||||||
|
|
||||||
| Type | Convention | Example |
|
|
||||||
| ---------------- | -------------------- | ----------------------------------------- |
|
|
||||||
| Variables | camelCase | `activeZone`, `missionStep` |
|
|
||||||
| Functions | camelCase | `startMission()`, `setActiveZone()` |
|
|
||||||
| Constants | UPPER_SNAKE_CASE | `MAX_SPEED`, `DEFAULT_PHASE` |
|
|
||||||
| React components | PascalCase | `function WorkshopZone()` |
|
|
||||||
| React hooks | camelCase with `use` | `useGameState()`, `useFrame()` |
|
|
||||||
| Classes | PascalCase | `class GameManager` |
|
|
||||||
| Interfaces/Types | PascalCase | `type GameSnapshot`, `interface ZoneData` |
|
|
||||||
|
|
||||||
## Code Style
|
|
||||||
|
|
||||||
### Simplicity First
|
|
||||||
|
|
||||||
```ts
|
|
||||||
// Good — clear, direct
|
|
||||||
function getZoneRadius(zone: Zone): number {
|
|
||||||
return zone.radius;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bad — over-abstracted
|
|
||||||
function getZoneRadius(zone: Zone): number {
|
|
||||||
return zone[ZoneFields.RADIUS] ?? RADIUS_DEFAULTS[zone.type]?.default ?? 50;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Early Return
|
|
||||||
|
|
||||||
```ts
|
|
||||||
// Good
|
|
||||||
if (!gltf) return null;
|
|
||||||
if (!visible) return null;
|
|
||||||
|
|
||||||
return <primitive object={gltf.scene} />;
|
|
||||||
```
|
|
||||||
|
|
||||||
### Avoid Nested Callbacks
|
|
||||||
|
|
||||||
```ts
|
|
||||||
// Good — flat structure
|
|
||||||
useEffect(() => {
|
|
||||||
const mixer = new THREE.AnimationMixer(model);
|
|
||||||
|
|
||||||
return () => mixer.stopAllAction();
|
|
||||||
}, [model]);
|
|
||||||
```
|
|
||||||
|
|
||||||
## TypeScript Rules
|
|
||||||
|
|
||||||
### Explicit Types for Exports
|
|
||||||
|
|
||||||
```ts
|
|
||||||
export function useGameState(): GameSnapshot { ... }
|
|
||||||
|
|
||||||
export function setPhase(phase: Phase): void { ... }
|
|
||||||
```
|
|
||||||
|
|
||||||
### Never use `any`
|
|
||||||
|
|
||||||
```ts
|
|
||||||
// Good
|
|
||||||
const ref = useRef<THREE.Group>(null);
|
|
||||||
|
|
||||||
// Bad
|
|
||||||
const ref = useRef<any>(null);
|
|
||||||
```
|
|
||||||
|
|
||||||
## Performance
|
|
||||||
|
|
||||||
### useRef for Mutable Values
|
|
||||||
|
|
||||||
```ts
|
|
||||||
// Good — no re-render
|
|
||||||
const position = useRef(new THREE.Vector3());
|
|
||||||
|
|
||||||
// Bad — triggers re-render every frame
|
|
||||||
const [position, setPosition] = useState(new THREE.Vector3());
|
|
||||||
```
|
|
||||||
|
|
||||||
### Memoize Expensive Computations
|
|
||||||
|
|
||||||
```ts
|
|
||||||
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
|
|
||||||
```
|
|
||||||
|
|
||||||
## Scalability
|
|
||||||
|
|
||||||
### Single Responsibility
|
|
||||||
|
|
||||||
```ts
|
|
||||||
// Good — focused component
|
|
||||||
export function WorkshopZone() {
|
|
||||||
// Only handles workshop zone logic
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bad — does everything
|
|
||||||
export function WorkshopZone() {
|
|
||||||
// Handles zone logic + audio + cinematics + missions
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Constants for Magic Numbers
|
|
||||||
|
|
||||||
```ts
|
|
||||||
const DEFAULT_CAMERA_DISTANCE = 5;
|
|
||||||
const ZONE_DETECTION_RADIUS = 20;
|
|
||||||
```
|
|
||||||
|
|
||||||
## Accessibility (W3C)
|
|
||||||
|
|
||||||
### Semantic HTML
|
|
||||||
|
|
||||||
```tsx
|
|
||||||
// Good
|
|
||||||
<button onClick={handleInteract} aria-label="Interact with bike">
|
|
||||||
<Model />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
// Bad
|
|
||||||
<div onClick={handleInteract}>
|
|
||||||
<Model />
|
|
||||||
</div>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Rules
|
|
||||||
|
|
||||||
1. **Simplicity** — Every line of code must be justified.
|
|
||||||
2. **Readability** — Code is read 10x more than it's written.
|
|
||||||
3. **Reviewability** — PRs should be understandable in < 5 minutes.
|
|
||||||
4. **Scalability** — Architecture should support growth without refactoring.
|
|
||||||
5. **Performance** — Don't optimize prematurely, but don't introduce obvious bottlenecks.
|
|
||||||
6. **Modern** — Use ES2022+ features, TypeScript strict mode, React hooks.
|
|
||||||
7. **W3C** — Follow web standards: semantic HTML, ARIA, keyboard navigation.
|
|
||||||
8. **No Over-Engineering** — Avoid patterns that add complexity without benefit.
|
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
# Target Architecture
|
||||||
|
|
||||||
|
This document describes the intended medium-term architecture for the project.
|
||||||
|
|
||||||
|
## Relationship To The Current Code
|
||||||
|
|
||||||
|
- `docs/technical/architecture.md` is the source of truth for what exists now.
|
||||||
|
- This document is intentionally aspirational.
|
||||||
|
- If this document conflicts with the current implementation, the current implementation wins.
|
||||||
|
|
||||||
|
## Goals
|
||||||
|
|
||||||
|
- Keep `App.tsx` small and orchestration-oriented.
|
||||||
|
- Separate production world code from debug-only runtime paths.
|
||||||
|
- Keep one clear source of truth per concern.
|
||||||
|
- Grow gameplay systems incrementally instead of prebuilding empty architecture.
|
||||||
|
|
||||||
|
## Intended Layers
|
||||||
|
|
||||||
|
### App Layer
|
||||||
|
|
||||||
|
- `App.tsx` mounts the canvas scene and top-level HTML overlays.
|
||||||
|
- It should stay thin and avoid gameplay logic.
|
||||||
|
|
||||||
|
### World Layer
|
||||||
|
|
||||||
|
- `src/world/` should contain production scene composition and production scene objects.
|
||||||
|
- Expected responsibilities:
|
||||||
|
- world composition
|
||||||
|
- map, environment, lighting
|
||||||
|
- player controller
|
||||||
|
- production interaction anchors
|
||||||
|
- production post-processing, if needed
|
||||||
|
|
||||||
|
### Debug Layer
|
||||||
|
|
||||||
|
- Debug-only scenes and tooling should be isolated from the production world path.
|
||||||
|
- Expected responsibilities:
|
||||||
|
- `lil-gui`
|
||||||
|
- performance overlay
|
||||||
|
- scene helpers
|
||||||
|
- free camera and calibration controls
|
||||||
|
- temporary test scenes used during development
|
||||||
|
|
||||||
|
### UI Layer
|
||||||
|
|
||||||
|
- `src/components/ui/` should contain player-facing HTML overlays.
|
||||||
|
- Expected future examples:
|
||||||
|
- crosshair
|
||||||
|
- loading flow
|
||||||
|
- mission HUD
|
||||||
|
- narrative overlays
|
||||||
|
|
||||||
|
### Gameplay Layer
|
||||||
|
|
||||||
|
- As the project grows, gameplay state can move toward a clearer orchestration layer.
|
||||||
|
- Likely future concerns:
|
||||||
|
- missions
|
||||||
|
- zones
|
||||||
|
- cinematics
|
||||||
|
- dialogue
|
||||||
|
- audio
|
||||||
|
- interactions
|
||||||
|
|
||||||
|
## Rules
|
||||||
|
|
||||||
|
- Prefer direct, working code over speculative scaffolding.
|
||||||
|
- Shared types should stay close to their domain until they have multiple real consumers.
|
||||||
|
- Avoid creating new managers or service layers without an active runtime need.
|
||||||
|
- Debug-only runtime paths should be clearly marked and easy to remove later.
|
||||||
+48
-2
@@ -1,3 +1,49 @@
|
|||||||
# Features
|
# Implemented Features
|
||||||
|
|
||||||
TODO: Documenter les fonctionnalités du jeu.
|
This document lists features that are implemented in the current codebase.
|
||||||
|
|
||||||
|
## Scene
|
||||||
|
|
||||||
|
- Fullscreen React Three Fiber scene
|
||||||
|
- Main map scene loaded from `public/models/map/model.gltf`
|
||||||
|
- Debug physics test scene selectable from the debug panel
|
||||||
|
- Ambient and directional lighting
|
||||||
|
- Environment background setup
|
||||||
|
|
||||||
|
## Player
|
||||||
|
|
||||||
|
- Player camera mode
|
||||||
|
- Pointer lock mouse look
|
||||||
|
- Movement with `ZQSD`
|
||||||
|
- Jumping
|
||||||
|
- Octree-based collision against the loaded map
|
||||||
|
|
||||||
|
## Interactions
|
||||||
|
|
||||||
|
- Focus detection by distance and raycast
|
||||||
|
- Trigger interactions activated with `E`
|
||||||
|
- Grab interactions activated with the primary mouse button
|
||||||
|
- Interaction prompt shown for trigger interactions
|
||||||
|
|
||||||
|
## Audio
|
||||||
|
|
||||||
|
- One-shot sound playback for trigger interactions
|
||||||
|
- Simple per-sound pooling through `AudioManager`
|
||||||
|
|
||||||
|
## Debug Tooling
|
||||||
|
|
||||||
|
- `?debug` query param enables the debug panel
|
||||||
|
- `lil-gui` controls for camera mode, scene mode, and interaction spheres
|
||||||
|
- Debug scene helpers
|
||||||
|
- Free debug camera
|
||||||
|
- `r3f-perf` overlay
|
||||||
|
|
||||||
|
## Not Implemented Yet
|
||||||
|
|
||||||
|
- mission system
|
||||||
|
- zone system
|
||||||
|
- cinematic system
|
||||||
|
- dialogue system
|
||||||
|
- loading flow
|
||||||
|
- minimap and mission HUD
|
||||||
|
- full production separation between gameplay and debug scenes
|
||||||
|
|||||||
Generated
+212
-206
@@ -13,6 +13,7 @@
|
|||||||
"@react-three/postprocessing": "^3.0.4",
|
"@react-three/postprocessing": "^3.0.4",
|
||||||
"@react-three/rapier": "^2.2.0",
|
"@react-three/rapier": "^2.2.0",
|
||||||
"gsap": "^3.15.0",
|
"gsap": "^3.15.0",
|
||||||
|
"lil-gui": "^0.21.0",
|
||||||
"r3f-perf": "^7.2.3",
|
"r3f-perf": "^7.2.3",
|
||||||
"react": "^19.2.4",
|
"react": "^19.2.4",
|
||||||
"react-dom": "^19.2.4",
|
"react-dom": "^19.2.4",
|
||||||
@@ -30,7 +31,6 @@
|
|||||||
"eslint-plugin-react-hooks": "^7.0.1",
|
"eslint-plugin-react-hooks": "^7.0.1",
|
||||||
"eslint-plugin-react-refresh": "^0.5.2",
|
"eslint-plugin-react-refresh": "^0.5.2",
|
||||||
"globals": "^17.4.0",
|
"globals": "^17.4.0",
|
||||||
"lil-gui": "^0.21.0",
|
|
||||||
"prettier": "^3.8.2",
|
"prettier": "^3.8.2",
|
||||||
"typescript": "~6.0.2",
|
"typescript": "~6.0.2",
|
||||||
"typescript-eslint": "^8.58.0",
|
"typescript-eslint": "^8.58.0",
|
||||||
@@ -293,9 +293,9 @@
|
|||||||
"license": "Apache-2.0"
|
"license": "Apache-2.0"
|
||||||
},
|
},
|
||||||
"node_modules/@emnapi/core": {
|
"node_modules/@emnapi/core": {
|
||||||
"version": "1.9.2",
|
"version": "1.10.0",
|
||||||
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz",
|
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
|
||||||
"integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==",
|
"integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
@@ -305,9 +305,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@emnapi/runtime": {
|
"node_modules/@emnapi/runtime": {
|
||||||
"version": "1.9.2",
|
"version": "1.10.0",
|
||||||
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz",
|
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
|
||||||
"integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==",
|
"integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
@@ -484,29 +484,43 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@humanfs/core": {
|
"node_modules/@humanfs/core": {
|
||||||
"version": "0.19.1",
|
"version": "0.19.2",
|
||||||
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
|
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
|
||||||
"integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
|
"integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@humanfs/types": "^0.15.0"
|
||||||
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18.18.0"
|
"node": ">=18.18.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@humanfs/node": {
|
"node_modules/@humanfs/node": {
|
||||||
"version": "0.16.7",
|
"version": "0.16.8",
|
||||||
"resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz",
|
"resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
|
||||||
"integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
|
"integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@humanfs/core": "^0.19.1",
|
"@humanfs/core": "^0.19.2",
|
||||||
|
"@humanfs/types": "^0.15.0",
|
||||||
"@humanwhocodes/retry": "^0.4.0"
|
"@humanwhocodes/retry": "^0.4.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18.18.0"
|
"node": ">=18.18.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@humanfs/types": {
|
||||||
|
"version": "0.15.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
|
||||||
|
"integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18.18.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@humanwhocodes/module-importer": {
|
"node_modules/@humanwhocodes/module-importer": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
|
||||||
@@ -604,9 +618,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@napi-rs/wasm-runtime": {
|
"node_modules/@napi-rs/wasm-runtime": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz",
|
||||||
"integrity": "sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ==",
|
"integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
@@ -623,9 +637,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@oxc-project/types": {
|
"node_modules/@oxc-project/types": {
|
||||||
"version": "0.124.0",
|
"version": "0.127.0",
|
||||||
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.124.0.tgz",
|
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.127.0.tgz",
|
||||||
"integrity": "sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==",
|
"integrity": "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"funding": {
|
"funding": {
|
||||||
@@ -796,9 +810,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-android-arm64": {
|
"node_modules/@rolldown/binding-android-arm64": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==",
|
"integrity": "sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -813,9 +827,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-darwin-arm64": {
|
"node_modules/@rolldown/binding-darwin-arm64": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==",
|
"integrity": "sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -830,9 +844,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-darwin-x64": {
|
"node_modules/@rolldown/binding-darwin-x64": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==",
|
"integrity": "sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -847,9 +861,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-freebsd-x64": {
|
"node_modules/@rolldown/binding-freebsd-x64": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==",
|
"integrity": "sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -864,9 +878,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
|
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==",
|
"integrity": "sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -881,9 +895,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-arm64-gnu": {
|
"node_modules/@rolldown/binding-linux-arm64-gnu": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==",
|
"integrity": "sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -901,9 +915,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-arm64-musl": {
|
"node_modules/@rolldown/binding-linux-arm64-musl": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==",
|
"integrity": "sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -921,9 +935,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
|
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==",
|
"integrity": "sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@@ -941,9 +955,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-s390x-gnu": {
|
"node_modules/@rolldown/binding-linux-s390x-gnu": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==",
|
"integrity": "sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
@@ -961,9 +975,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-x64-gnu": {
|
"node_modules/@rolldown/binding-linux-x64-gnu": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==",
|
"integrity": "sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -981,9 +995,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-linux-x64-musl": {
|
"node_modules/@rolldown/binding-linux-x64-musl": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==",
|
"integrity": "sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1001,9 +1015,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-openharmony-arm64": {
|
"node_modules/@rolldown/binding-openharmony-arm64": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==",
|
"integrity": "sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1018,9 +1032,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-wasm32-wasi": {
|
"node_modules/@rolldown/binding-wasm32-wasi": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==",
|
"integrity": "sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"wasm32"
|
"wasm32"
|
||||||
],
|
],
|
||||||
@@ -1028,18 +1042,18 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emnapi/core": "1.9.2",
|
"@emnapi/core": "1.10.0",
|
||||||
"@emnapi/runtime": "1.9.2",
|
"@emnapi/runtime": "1.10.0",
|
||||||
"@napi-rs/wasm-runtime": "^1.1.3"
|
"@napi-rs/wasm-runtime": "^1.1.4"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.0.0"
|
"node": "^20.19.0 || >=22.12.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-win32-arm64-msvc": {
|
"node_modules/@rolldown/binding-win32-arm64-msvc": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==",
|
"integrity": "sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1054,9 +1068,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/binding-win32-x64-msvc": {
|
"node_modules/@rolldown/binding-win32-x64-msvc": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==",
|
"integrity": "sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1174,18 +1188,17 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/three": {
|
"node_modules/@types/three": {
|
||||||
"version": "0.183.1",
|
"version": "0.184.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/three/-/three-0.183.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/three/-/three-0.184.0.tgz",
|
||||||
"integrity": "sha512-f2Pu5Hrepfgavttdye3PsH5RWyY/AvdZQwIVhrc4uNtvF7nOWJacQKcoVJn0S4f0yYbmAE6AR+ve7xDcuYtMGw==",
|
"integrity": "sha512-4mY2tZAu0y0B0567w7013BBXSpsP0+Z48NJvmNo4Y/Pf76yCyz6Jw4P3tUVs10WuYNXXZ+wmHyGWpCek3amJxA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@dimforge/rapier3d-compat": "~0.12.0",
|
"@dimforge/rapier3d-compat": "~0.12.0",
|
||||||
"@tweenjs/tween.js": "~23.1.3",
|
"@tweenjs/tween.js": "~23.1.3",
|
||||||
"@types/stats.js": "*",
|
"@types/stats.js": "*",
|
||||||
"@types/webxr": ">=0.5.17",
|
"@types/webxr": ">=0.5.17",
|
||||||
"@webgpu/types": "*",
|
|
||||||
"fflate": "~0.8.2",
|
"fflate": "~0.8.2",
|
||||||
"meshoptimizer": "~1.0.1"
|
"meshoptimizer": "~1.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/three/node_modules/@dimforge/rapier3d-compat": {
|
"node_modules/@types/three/node_modules/@dimforge/rapier3d-compat": {
|
||||||
@@ -1201,17 +1214,17 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/eslint-plugin": {
|
"node_modules/@typescript-eslint/eslint-plugin": {
|
||||||
"version": "8.58.2",
|
"version": "8.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.2.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz",
|
||||||
"integrity": "sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==",
|
"integrity": "sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/regexpp": "^4.12.2",
|
"@eslint-community/regexpp": "^4.12.2",
|
||||||
"@typescript-eslint/scope-manager": "8.58.2",
|
"@typescript-eslint/scope-manager": "8.59.0",
|
||||||
"@typescript-eslint/type-utils": "8.58.2",
|
"@typescript-eslint/type-utils": "8.59.0",
|
||||||
"@typescript-eslint/utils": "8.58.2",
|
"@typescript-eslint/utils": "8.59.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.58.2",
|
"@typescript-eslint/visitor-keys": "8.59.0",
|
||||||
"ignore": "^7.0.5",
|
"ignore": "^7.0.5",
|
||||||
"natural-compare": "^1.4.0",
|
"natural-compare": "^1.4.0",
|
||||||
"ts-api-utils": "^2.5.0"
|
"ts-api-utils": "^2.5.0"
|
||||||
@@ -1224,7 +1237,7 @@
|
|||||||
"url": "https://opencollective.com/typescript-eslint"
|
"url": "https://opencollective.com/typescript-eslint"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@typescript-eslint/parser": "^8.58.2",
|
"@typescript-eslint/parser": "^8.59.0",
|
||||||
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
|
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
|
||||||
"typescript": ">=4.8.4 <6.1.0"
|
"typescript": ">=4.8.4 <6.1.0"
|
||||||
}
|
}
|
||||||
@@ -1240,16 +1253,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/parser": {
|
"node_modules/@typescript-eslint/parser": {
|
||||||
"version": "8.58.2",
|
"version": "8.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.2.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.0.tgz",
|
||||||
"integrity": "sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==",
|
"integrity": "sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/scope-manager": "8.58.2",
|
"@typescript-eslint/scope-manager": "8.59.0",
|
||||||
"@typescript-eslint/types": "8.58.2",
|
"@typescript-eslint/types": "8.59.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.58.2",
|
"@typescript-eslint/typescript-estree": "8.59.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.58.2",
|
"@typescript-eslint/visitor-keys": "8.59.0",
|
||||||
"debug": "^4.4.3"
|
"debug": "^4.4.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1265,14 +1278,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/project-service": {
|
"node_modules/@typescript-eslint/project-service": {
|
||||||
"version": "8.58.2",
|
"version": "8.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.2.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.0.tgz",
|
||||||
"integrity": "sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==",
|
"integrity": "sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/tsconfig-utils": "^8.58.2",
|
"@typescript-eslint/tsconfig-utils": "^8.59.0",
|
||||||
"@typescript-eslint/types": "^8.58.2",
|
"@typescript-eslint/types": "^8.59.0",
|
||||||
"debug": "^4.4.3"
|
"debug": "^4.4.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1287,14 +1300,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/scope-manager": {
|
"node_modules/@typescript-eslint/scope-manager": {
|
||||||
"version": "8.58.2",
|
"version": "8.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.2.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz",
|
||||||
"integrity": "sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==",
|
"integrity": "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.58.2",
|
"@typescript-eslint/types": "8.59.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.58.2"
|
"@typescript-eslint/visitor-keys": "8.59.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
@@ -1305,9 +1318,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/tsconfig-utils": {
|
"node_modules/@typescript-eslint/tsconfig-utils": {
|
||||||
"version": "8.58.2",
|
"version": "8.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.2.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz",
|
||||||
"integrity": "sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==",
|
"integrity": "sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1322,15 +1335,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/type-utils": {
|
"node_modules/@typescript-eslint/type-utils": {
|
||||||
"version": "8.58.2",
|
"version": "8.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.2.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz",
|
||||||
"integrity": "sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==",
|
"integrity": "sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.58.2",
|
"@typescript-eslint/types": "8.59.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.58.2",
|
"@typescript-eslint/typescript-estree": "8.59.0",
|
||||||
"@typescript-eslint/utils": "8.58.2",
|
"@typescript-eslint/utils": "8.59.0",
|
||||||
"debug": "^4.4.3",
|
"debug": "^4.4.3",
|
||||||
"ts-api-utils": "^2.5.0"
|
"ts-api-utils": "^2.5.0"
|
||||||
},
|
},
|
||||||
@@ -1347,9 +1360,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/types": {
|
"node_modules/@typescript-eslint/types": {
|
||||||
"version": "8.58.2",
|
"version": "8.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.2.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.0.tgz",
|
||||||
"integrity": "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==",
|
"integrity": "sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1361,16 +1374,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/typescript-estree": {
|
"node_modules/@typescript-eslint/typescript-estree": {
|
||||||
"version": "8.58.2",
|
"version": "8.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.2.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz",
|
||||||
"integrity": "sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==",
|
"integrity": "sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/project-service": "8.58.2",
|
"@typescript-eslint/project-service": "8.59.0",
|
||||||
"@typescript-eslint/tsconfig-utils": "8.58.2",
|
"@typescript-eslint/tsconfig-utils": "8.59.0",
|
||||||
"@typescript-eslint/types": "8.58.2",
|
"@typescript-eslint/types": "8.59.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.58.2",
|
"@typescript-eslint/visitor-keys": "8.59.0",
|
||||||
"debug": "^4.4.3",
|
"debug": "^4.4.3",
|
||||||
"minimatch": "^10.2.2",
|
"minimatch": "^10.2.2",
|
||||||
"semver": "^7.7.3",
|
"semver": "^7.7.3",
|
||||||
@@ -1441,16 +1454,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/utils": {
|
"node_modules/@typescript-eslint/utils": {
|
||||||
"version": "8.58.2",
|
"version": "8.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.2.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.0.tgz",
|
||||||
"integrity": "sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==",
|
"integrity": "sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.9.1",
|
"@eslint-community/eslint-utils": "^4.9.1",
|
||||||
"@typescript-eslint/scope-manager": "8.58.2",
|
"@typescript-eslint/scope-manager": "8.59.0",
|
||||||
"@typescript-eslint/types": "8.58.2",
|
"@typescript-eslint/types": "8.59.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.58.2"
|
"@typescript-eslint/typescript-estree": "8.59.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
@@ -1465,13 +1478,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/visitor-keys": {
|
"node_modules/@typescript-eslint/visitor-keys": {
|
||||||
"version": "8.58.2",
|
"version": "8.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.2.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz",
|
||||||
"integrity": "sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==",
|
"integrity": "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.58.2",
|
"@typescript-eslint/types": "8.59.0",
|
||||||
"eslint-visitor-keys": "^5.0.0"
|
"eslint-visitor-keys": "^5.0.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1556,12 +1569,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@webgpu/types": {
|
|
||||||
"version": "0.1.69",
|
|
||||||
"resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.69.tgz",
|
|
||||||
"integrity": "sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==",
|
|
||||||
"license": "BSD-3-Clause"
|
|
||||||
},
|
|
||||||
"node_modules/acorn": {
|
"node_modules/acorn": {
|
||||||
"version": "8.16.0",
|
"version": "8.16.0",
|
||||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
|
||||||
@@ -1586,9 +1593,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ajv": {
|
"node_modules/ajv": {
|
||||||
"version": "6.14.0",
|
"version": "6.15.0",
|
||||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
|
||||||
"integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
|
"integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -1653,9 +1660,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/baseline-browser-mapping": {
|
"node_modules/baseline-browser-mapping": {
|
||||||
"version": "2.10.18",
|
"version": "2.10.23",
|
||||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.18.tgz",
|
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.23.tgz",
|
||||||
"integrity": "sha512-VSnGQAOLtP5mib/DPyg2/t+Tlv65NTBz83BJBJvmLVHHuKJVaDOBvJJykiT5TR++em5nfAySPccDZDa4oSrn8A==",
|
"integrity": "sha512-xwVXGqevyKPsiuQdLj+dZMVjidjJV508TBqexND5HrF89cGdCYCJFB3qhcxRHSeMctdCfbR1jrxBajhDy7o29g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -1767,9 +1774,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001788",
|
"version": "1.0.30001791",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz",
|
||||||
"integrity": "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==",
|
"integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1927,9 +1934,9 @@
|
|||||||
"license": "Apache-2.0"
|
"license": "Apache-2.0"
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.5.336",
|
"version": "1.5.344",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.336.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz",
|
||||||
"integrity": "sha512-AbH9q9J455r/nLmdNZes0G0ZKcRX73FicwowalLs6ijwOmCJSRRrLX63lcAlzy9ux3dWK1w1+1nsBJEWN11hcQ==",
|
"integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
@@ -2064,9 +2071,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-react-hooks": {
|
"node_modules/eslint-plugin-react-hooks": {
|
||||||
"version": "7.0.1",
|
"version": "7.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz",
|
||||||
"integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==",
|
"integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -2080,7 +2087,7 @@
|
|||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
|
"eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-react-refresh": {
|
"node_modules/eslint-plugin-react-refresh": {
|
||||||
@@ -2878,7 +2885,6 @@
|
|||||||
"version": "0.21.0",
|
"version": "0.21.0",
|
||||||
"resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.21.0.tgz",
|
"resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.21.0.tgz",
|
||||||
"integrity": "sha512-tpvxN7v1GvE/Tv+GRopfOp0W7fVEjF4PltkuX8vOCIfim22rD1ztvfkoEMcv9lzQeuNUSeIrUmUjBwmlW/oUew==",
|
"integrity": "sha512-tpvxN7v1GvE/Tv+GRopfOp0W7fVEjF4PltkuX8vOCIfim22rD1ztvfkoEMcv9lzQeuNUSeIrUmUjBwmlW/oUew==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/locate-path": {
|
"node_modules/locate-path": {
|
||||||
@@ -2946,9 +2952,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/meshoptimizer": {
|
"node_modules/meshoptimizer": {
|
||||||
"version": "1.0.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-1.1.1.tgz",
|
||||||
"integrity": "sha512-Vix+QlA1YYT3FwmBBZ+49cE5y/b+pRrcXKqGpS5ouh33d3lSp2PoTpCw19E0cKDFWalembrHnIaZetf27a+W2g==",
|
"integrity": "sha512-oRFNWJRDA/WTrVj7NWvqa5HqE1t9MYDj2VaWirQCzCCrAd2GHrqR/sQezCxiWATPNlKTcRaPRHPJwIRoPBAp5g==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/minimatch": {
|
"node_modules/minimatch": {
|
||||||
@@ -3008,9 +3014,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/node-releases": {
|
"node_modules/node-releases": {
|
||||||
"version": "2.0.37",
|
"version": "2.0.38",
|
||||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz",
|
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz",
|
||||||
"integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==",
|
"integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -3126,9 +3132,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.5.9",
|
"version": "8.5.12",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.9.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz",
|
||||||
"integrity": "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==",
|
"integrity": "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -3155,12 +3161,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/postprocessing": {
|
"node_modules/postprocessing": {
|
||||||
"version": "6.39.0",
|
"version": "6.39.1",
|
||||||
"resolved": "https://registry.npmjs.org/postprocessing/-/postprocessing-6.39.0.tgz",
|
"resolved": "https://registry.npmjs.org/postprocessing/-/postprocessing-6.39.1.tgz",
|
||||||
"integrity": "sha512-/G6JY8hs426lcto/pBZlnFSkyEo1fHsh4gy7FPJtq1SaSUOzJgDW6f6f1K/+aMOYzK/eQEefyOb3++jPPIUeDA==",
|
"integrity": "sha512-R2dG2zy+BAx3USl5EHw+PvnrlbT5PKnZVp3se0HCR0pWH8WQdh742yNG4YWOsq6c0bFpffk0Gd2RqPeoP/wKng==",
|
||||||
"license": "Zlib",
|
"license": "Zlib",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"three": ">= 0.168.0 < 0.184.0"
|
"three": ">= 0.168.0 < 0.185.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/potpack": {
|
"node_modules/potpack": {
|
||||||
@@ -3180,9 +3186,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/prettier": {
|
"node_modules/prettier": {
|
||||||
"version": "3.8.2",
|
"version": "3.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.2.tgz",
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz",
|
||||||
"integrity": "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q==",
|
"integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -3521,14 +3527,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rolldown": {
|
"node_modules/rolldown": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==",
|
"integrity": "sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@oxc-project/types": "=0.124.0",
|
"@oxc-project/types": "=0.127.0",
|
||||||
"@rolldown/pluginutils": "1.0.0-rc.15"
|
"@rolldown/pluginutils": "1.0.0-rc.17"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"rolldown": "bin/cli.mjs"
|
"rolldown": "bin/cli.mjs"
|
||||||
@@ -3537,27 +3543,27 @@
|
|||||||
"node": "^20.19.0 || >=22.12.0"
|
"node": "^20.19.0 || >=22.12.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@rolldown/binding-android-arm64": "1.0.0-rc.15",
|
"@rolldown/binding-android-arm64": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-darwin-arm64": "1.0.0-rc.15",
|
"@rolldown/binding-darwin-arm64": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-darwin-x64": "1.0.0-rc.15",
|
"@rolldown/binding-darwin-x64": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-freebsd-x64": "1.0.0-rc.15",
|
"@rolldown/binding-freebsd-x64": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.15",
|
"@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.15",
|
"@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-arm64-musl": "1.0.0-rc.15",
|
"@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.15",
|
"@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.15",
|
"@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-x64-gnu": "1.0.0-rc.15",
|
"@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-linux-x64-musl": "1.0.0-rc.15",
|
"@rolldown/binding-linux-x64-musl": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-openharmony-arm64": "1.0.0-rc.15",
|
"@rolldown/binding-openharmony-arm64": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-wasm32-wasi": "1.0.0-rc.15",
|
"@rolldown/binding-wasm32-wasi": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.15",
|
"@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17",
|
||||||
"@rolldown/binding-win32-x64-msvc": "1.0.0-rc.15"
|
"@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rolldown/node_modules/@rolldown/pluginutils": {
|
"node_modules/rolldown/node_modules/@rolldown/pluginutils": {
|
||||||
"version": "1.0.0-rc.15",
|
"version": "1.0.0-rc.17",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.15.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.17.tgz",
|
||||||
"integrity": "sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==",
|
"integrity": "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -3842,9 +3848,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/typescript": {
|
"node_modules/typescript": {
|
||||||
"version": "6.0.2",
|
"version": "6.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz",
|
||||||
"integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==",
|
"integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -3856,16 +3862,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/typescript-eslint": {
|
"node_modules/typescript-eslint": {
|
||||||
"version": "8.58.2",
|
"version": "8.59.0",
|
||||||
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.58.2.tgz",
|
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.0.tgz",
|
||||||
"integrity": "sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ==",
|
"integrity": "sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/eslint-plugin": "8.58.2",
|
"@typescript-eslint/eslint-plugin": "8.59.0",
|
||||||
"@typescript-eslint/parser": "8.58.2",
|
"@typescript-eslint/parser": "8.59.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.58.2",
|
"@typescript-eslint/typescript-estree": "8.59.0",
|
||||||
"@typescript-eslint/utils": "8.58.2"
|
"@typescript-eslint/utils": "8.59.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
@@ -3946,17 +3952,17 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "8.0.8",
|
"version": "8.0.10",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-8.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-8.0.10.tgz",
|
||||||
"integrity": "sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==",
|
"integrity": "sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"lightningcss": "^1.32.0",
|
"lightningcss": "^1.32.0",
|
||||||
"picomatch": "^4.0.4",
|
"picomatch": "^4.0.4",
|
||||||
"postcss": "^8.5.8",
|
"postcss": "^8.5.10",
|
||||||
"rolldown": "1.0.0-rc.15",
|
"rolldown": "1.0.0-rc.17",
|
||||||
"tinyglobby": "^0.2.15"
|
"tinyglobby": "^0.2.16"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"vite": "bin/vite.js"
|
"vite": "bin/vite.js"
|
||||||
|
|||||||
+1
-1
@@ -19,6 +19,7 @@
|
|||||||
"@react-three/postprocessing": "^3.0.4",
|
"@react-three/postprocessing": "^3.0.4",
|
||||||
"@react-three/rapier": "^2.2.0",
|
"@react-three/rapier": "^2.2.0",
|
||||||
"gsap": "^3.15.0",
|
"gsap": "^3.15.0",
|
||||||
|
"lil-gui": "^0.21.0",
|
||||||
"r3f-perf": "^7.2.3",
|
"r3f-perf": "^7.2.3",
|
||||||
"react": "^19.2.4",
|
"react": "^19.2.4",
|
||||||
"react-dom": "^19.2.4",
|
"react-dom": "^19.2.4",
|
||||||
@@ -36,7 +37,6 @@
|
|||||||
"eslint-plugin-react-hooks": "^7.0.1",
|
"eslint-plugin-react-hooks": "^7.0.1",
|
||||||
"eslint-plugin-react-refresh": "^0.5.2",
|
"eslint-plugin-react-refresh": "^0.5.2",
|
||||||
"globals": "^17.4.0",
|
"globals": "^17.4.0",
|
||||||
"lil-gui": "^0.21.0",
|
|
||||||
"prettier": "^3.8.2",
|
"prettier": "^3.8.2",
|
||||||
"typescript": "~6.0.2",
|
"typescript": "~6.0.2",
|
||||||
"typescript-eslint": "^8.58.0",
|
"typescript-eslint": "^8.58.0",
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
# public/models/environment/\*
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
# public/models/farm/\*
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
# public/models/general/\*
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:cc33b99b9334f9db2ec496f20b73b503e4aa50d88bec2e8c98579856d69cd7a0
|
|
||||||
size 11654940
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:311989a67f7ffd19bf30bb5ea2faabd4d2d58c33b6cb0cf9af1bf6ce1ec24bcf
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3dbf4a607d88f01b1ccb6702c5600876ae9339ed6ef017b44f04da18045cb3ec
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:43b2e1ee941e3a640c8d010073e777d84d49080fc2da0a94673b5bf27f3bf932
|
|
||||||
size 15766
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:b520c353a2bee68749ab5b3bcfc8790cab6c6d768b84f8140acd9b4137b46ddb
|
|
||||||
size 504386
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:6dd80b377721e70c5721f67e8241036179e27cd3d432d72f7c6022e97c586bd0
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:cac93257ca84d489a73a4a132d7c128f7d8f17130c2c0f366e3e758323294527
|
|
||||||
size 327465
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:9bc92d22231f432b9daef4887d29cffb76f5df323bd963618c64b215b711164f
|
|
||||||
size 15766
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:993c755409766ef7cb048ada6d22b0558c089542fb062fa74ac2e7e4238c3ec1
|
|
||||||
size 847081
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3dbf4a607d88f01b1ccb6702c5600876ae9339ed6ef017b44f04da18045cb3ec
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:0e1d69c50347120c0c95c001482653c59c0a3c47deae20c552543d1b92d37c5d
|
|
||||||
size 12332
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:2f472061035616b0d31e3623fd89ea515deef730211701418d7dd230e8862d37
|
|
||||||
size 757042
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:32ca15471c5de27853efc168fe194efbae69b5e6ae9e8ea4afb24b43488ff6c9
|
|
||||||
size 298418
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:1073fc36eebaf28b13640845ff6de475fda4ebf86e05cf7a99eec7ed6dde4aba
|
|
||||||
size 439434
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:4ff25c8213d9810f20fc8fd19e89d4000621df2beefc2d42b4ef0097940b78b5
|
|
||||||
size 182316
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:fd679eb6797a1238b8cb6a0a67d667a1dd20f9fb48632a7d8657af8a7dafe0d2
|
|
||||||
size 1267604
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3dbf4a607d88f01b1ccb6702c5600876ae9339ed6ef017b44f04da18045cb3ec
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:0e1d69c50347120c0c95c001482653c59c0a3c47deae20c552543d1b92d37c5d
|
|
||||||
size 12332
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:cdbd33ac4eb90e5b545812c2ac380a8584980bb2d0ee882ecbc2e758c93e6899
|
|
||||||
size 400516
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:f9524a636fc86db283ac992df8e703cfb5a5e7eaded75cfabfd98b6560016818
|
|
||||||
size 254027
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:f9524a636fc86db283ac992df8e703cfb5a5e7eaded75cfabfd98b6560016818
|
|
||||||
size 254027
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:d6b64adf48e75d5eb0c2afdf75898ba78158a78f29b33ef1c7b9b53803fe7c4b
|
|
||||||
size 29747
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:c6cf0a3ea97ec0a9645e11ddbd757d15d3bdfda540bade8f26bb1bed1773226e
|
|
||||||
size 15766
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3dbf4a607d88f01b1ccb6702c5600876ae9339ed6ef017b44f04da18045cb3ec
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:0e1d69c50347120c0c95c001482653c59c0a3c47deae20c552543d1b92d37c5d
|
|
||||||
size 12332
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:543df1f679770de0c3f9185083526c03a726b8278cc9282fbcef0063caee6ed5
|
|
||||||
size 712996
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:6dd80b377721e70c5721f67e8241036179e27cd3d432d72f7c6022e97c586bd0
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:6dd80b377721e70c5721f67e8241036179e27cd3d432d72f7c6022e97c586bd0
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:9bc92d22231f432b9daef4887d29cffb76f5df323bd963618c64b215b711164f
|
|
||||||
size 15766
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:76723e5bc7d8fe5ab954f316613a27ff8d0796a19dfb2aef13d7530d74c3c6d9
|
|
||||||
size 233964
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3dbf4a607d88f01b1ccb6702c5600876ae9339ed6ef017b44f04da18045cb3ec
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:0e1d69c50347120c0c95c001482653c59c0a3c47deae20c552543d1b92d37c5d
|
|
||||||
size 12332
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:a7c35f3309eceb828a87207b23c36fefad59a6c89d18f38c5f2eb386d47be06e
|
|
||||||
size 319800
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:6dd80b377721e70c5721f67e8241036179e27cd3d432d72f7c6022e97c586bd0
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:4d7eb1095d25a9c7e9aa58373478ba9c783216e4e32eb056d1f53c42002edea0
|
|
||||||
size 16802
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:9bc92d22231f432b9daef4887d29cffb76f5df323bd963618c64b215b711164f
|
|
||||||
size 15766
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:9c2c9b5498fab82f7d2ea60d25ea55892d826f5de1549a391f74ccd99fce67cc
|
|
||||||
size 195872
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:9b97d8b8d019d246924f6731aa03ed8f36169f75e1d5b98d09c09e7f96b08eb9
|
|
||||||
size 752957
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3dbf4a607d88f01b1ccb6702c5600876ae9339ed6ef017b44f04da18045cb3ec
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:0e1d69c50347120c0c95c001482653c59c0a3c47deae20c552543d1b92d37c5d
|
|
||||||
size 12332
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:d7ac13a3a383243a991c7bace0de4c3a1a57e2d1f76fc5ae78419bdf4192715b
|
|
||||||
size 948507
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:efd017718813e29db22cf18d3caad987aa631b7c6500f1dbb03731d01d590787
|
|
||||||
size 117180
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:f1e604806defcd692e1b8b1dde2df3d74dab111cad818caee6587f6ddff825ce
|
|
||||||
size 487294
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:81d4cbb54f7cf13737e53f8a2dbef07bea84f5d91305e67f289f0a57193fd2be
|
|
||||||
size 25110
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:51bd212f1786589fe327011e317d06a87ac1753c97f783a58d5dd829e61fb150
|
|
||||||
size 761672
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3dbf4a607d88f01b1ccb6702c5600876ae9339ed6ef017b44f04da18045cb3ec
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:0e1d69c50347120c0c95c001482653c59c0a3c47deae20c552543d1b92d37c5d
|
|
||||||
size 12332
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:ec5e374fdf53803274f3db4f99a0ff73dd8ff98c9d39e00ada3df17e161de16d
|
|
||||||
size 517383
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:6ee5ae4da883ed21807192e3ab78a327b3b32f7ac4fd7625f7c0027191a2db8a
|
|
||||||
size 167195
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:eb9948e4d989471eb977e172fff0fa8e26545f64915847d7b29c80da4d31e480
|
|
||||||
size 167040
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:f7f1b8d05ddf8991d200d55ee2a51e8ec194ed3c25d4e365d841197639521165
|
|
||||||
size 33325
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:84e69fbc325447188e4561b2709bc6b7f494b2eb942d3f292533c7d65eb1c301
|
|
||||||
size 350884
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3dbf4a607d88f01b1ccb6702c5600876ae9339ed6ef017b44f04da18045cb3ec
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:0e1d69c50347120c0c95c001482653c59c0a3c47deae20c552543d1b92d37c5d
|
|
||||||
size 12332
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:0d2f0cb413ff44ab6235c318ca9640afde4f67122efd75c01bd44a70135ded23
|
|
||||||
size 556212
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:dcb2a2e534e728bc6937d5c984cd4c63dd226e432c52d0973b5ffc53fab331fc
|
|
||||||
size 126366
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:2528c1e7b076b11bf6462215a6a797ee468c96648b6b213edc976f8e10483b26
|
|
||||||
size 167854
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:954e6b09f05c3848e26f5fc4a68f8419a387d38456698c2137682d1a854d950c
|
|
||||||
size 75784
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:14e25fcf300b7895a17fbe073fd4ef58e9ffda6cf6913ffa9b5c86f2d636f43e
|
|
||||||
size 59105
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3dbf4a607d88f01b1ccb6702c5600876ae9339ed6ef017b44f04da18045cb3ec
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:2c6fc8e0d3d23d39b9293e6cf95b641c2458ea9d1b140e51f3cfd0d8b6ba1788
|
|
||||||
size 48818
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:37faa3d88ee97556f2935c13feb309f06551042f94e02878cca65c1bf0edc893
|
|
||||||
size 13356
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:5f1be2118699edd31eb3e4657a79c1c998d08f03f679e33545dd603ddee498d6
|
|
||||||
size 30651
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:7419843e9e57550f2e7dbf8762f350451b455c3ab9a379d1b281184212df5182
|
|
||||||
size 30663
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:d2648942081ffd0c83d4415fd34941963d8d5d05eb838113bd1a56306475a07b
|
|
||||||
size 24392
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:4d4609e73fec0d94e7efc65521239647bf37c511489c7656e1925c1875744810
|
|
||||||
size 577758
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3dbf4a607d88f01b1ccb6702c5600876ae9339ed6ef017b44f04da18045cb3ec
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:449adbe29cd7e8e3d82a370a32ba7b12bbb3917905a1edb596561226530d7e5a
|
|
||||||
size 622323
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:895da1639025b6a6f8c59479b1b3072efcadc69d8bc5611fee4acb5ef6ffc048
|
|
||||||
size 622271
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:6dd80b377721e70c5721f67e8241036179e27cd3d432d72f7c6022e97c586bd0
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:db6363d6084d38f6d4069aef511d6257d13bfea67a975d89bf0a4d92deac5d6d
|
|
||||||
size 46781
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:9bc92d22231f432b9daef4887d29cffb76f5df323bd963618c64b215b711164f
|
|
||||||
size 15766
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:0776d12627439322b2458fbce6c2aaae2c6422a5a5cd9deb32de3e2d2f7822c3
|
|
||||||
size 177663
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3dbf4a607d88f01b1ccb6702c5600876ae9339ed6ef017b44f04da18045cb3ec
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:0e1d69c50347120c0c95c001482653c59c0a3c47deae20c552543d1b92d37c5d
|
|
||||||
size 12332
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:8658f2823df81f5dda08e939b468983a4fc5582ce01f6bc9321cacfa1744886d
|
|
||||||
size 120683
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:6dd80b377721e70c5721f67e8241036179e27cd3d432d72f7c6022e97c586bd0
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:5e7bc0a43f8e143d496d56637ec13698d34577545600c3f2f744247a13044d9b
|
|
||||||
size 25158
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:9bc92d22231f432b9daef4887d29cffb76f5df323bd963618c64b215b711164f
|
|
||||||
size 15766
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:233f40c0998656f6e70091e7139247ae36f360b584a084bd4125917cef5e304d
|
|
||||||
size 427658
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3dbf4a607d88f01b1ccb6702c5600876ae9339ed6ef017b44f04da18045cb3ec
|
|
||||||
size 15765
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:0e1d69c50347120c0c95c001482653c59c0a3c47deae20c552543d1b92d37c5d
|
|
||||||
size 12332
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:5ace65b5f3f368f98bb729b65b218d993c3dffb6b60a45429b8da2ca85ca691b
|
|
||||||
size 353895
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user