From 1e6a04b641c53eaee6ec11e029be8c67f54e6506 Mon Sep 17 00:00:00 2001 From: anshk Date: Mon, 30 Mar 2026 19:52:56 +0530 Subject: [PATCH] feat: added object duplication and group duplication in r3f for task3 --- Week-1/Task-1/TaskNotes.md | 4 +- Week-1/Task-2/vanilla/index.html | 5 - Week-1/Task-3/TaskNotes.md | 137 ++++++++---- Week-1/Task-3/builder/BuilderNotes.md | 104 +++++++++ Week-1/Task-4/TaskNotes.md | 86 ++++---- Week-1/Task-4/builder/BuilderNotes.md | 73 ++++++ Week-1/Task-4/r3f/index.html | 15 ++ Week-1/Task-4/r3f/package.json | 18 +- Week-1/Task-4/r3f/src/App.jsx | 30 +++ Week-1/Task-4/r3f/src/index.css | 8 + Week-1/Task-4/r3f/src/main.jsx | 10 + Week-1/Task-4/r3f/vite.config.js | 6 + Week-1/Task-4/vanilla/index.html | 18 ++ Week-1/Task-4/vanilla/main.js | 25 +++ Week-1/Task-4/vanilla/package.json | 12 +- package-lock.json | 307 +++++++++++++++++++++++++- yarn.lock | 307 +++++++++++++++++++++++--- 17 files changed, 1038 insertions(+), 127 deletions(-) create mode 100644 Week-1/Task-3/builder/BuilderNotes.md create mode 100644 Week-1/Task-4/builder/BuilderNotes.md create mode 100644 Week-1/Task-4/r3f/index.html create mode 100644 Week-1/Task-4/r3f/src/App.jsx create mode 100644 Week-1/Task-4/r3f/src/index.css create mode 100644 Week-1/Task-4/r3f/src/main.jsx create mode 100644 Week-1/Task-4/r3f/vite.config.js create mode 100644 Week-1/Task-4/vanilla/index.html create mode 100644 Week-1/Task-4/vanilla/main.js diff --git a/Week-1/Task-1/TaskNotes.md b/Week-1/Task-1/TaskNotes.md index eb1f3c2..5af4a45 100644 --- a/Week-1/Task-1/TaskNotes.md +++ b/Week-1/Task-1/TaskNotes.md @@ -17,7 +17,7 @@ The objective was to create a simple 3D scene with two objects in a parent-child ## Thob Page Builder - Possible: Yes -- Notes: Implemented by putting the Earth mesh inside the Sun mesh (parent-child). Changing Sun position/scale also affects Earth as expected (Earth follows position and scale inheritance). However, when Earth position is changed directly, Earth shape appears to distort/stretch as it moves farther from Sun. +- Notes: Implemented by putting the Earth mesh inside the Sun mesh (parent-child). Changing Sun position/scale also affects Earth as expected (Earth follows position and scale inheritance). However, when Earth position is changed directly, Earth shape appears to distort/stretch as it moves farther from Sun but when POI controls are added and we move around a bit we can notice that the earth is correct in size and shape it is just appering distorted/stretched from certain positions/angels. - Builder steps: Create Sun mesh -> add Earth mesh as child of Sun -> test parent transform inheritance by changing Sun position/scale -> test child local transform by changing Earth position. - Complexity: Easy @@ -44,7 +44,7 @@ The objective was to create a simple 3D scene with two objects in a parent-child ## Workaround - Is there a workaround? - NO -- No, I tried a lot of different things, like many groupa and flex inside the parent mesh and different ways to place the components. +- No, I tried a lot of different things, like grouping and wraping in flex inside the parent mesh and different ways to place the components. ## Suggested Improvement - What should improve in Thob? diff --git a/Week-1/Task-2/vanilla/index.html b/Week-1/Task-2/vanilla/index.html index da84793..c264a24 100644 --- a/Week-1/Task-2/vanilla/index.html +++ b/Week-1/Task-2/vanilla/index.html @@ -14,11 +14,6 @@ overflow: hidden; } - canvas { - display: block; - width: 100%; - height: 100%; - } diff --git a/Week-1/Task-3/TaskNotes.md b/Week-1/Task-3/TaskNotes.md index e8be752..bf42a89 100644 --- a/Week-1/Task-3/TaskNotes.md +++ b/Week-1/Task-3/TaskNotes.md @@ -1,60 +1,121 @@ -# Task: [Feature Name] +# Task: Duplicate Object / Duplicate Group ## Objective -What is the feature trying to do? +Duplicate an object and, if possible, duplicate a grouped structure. + +## Test File Split +- Vanilla object duplication test: `main.js` +- Vanilla group duplication test: `group.js` +- R3F object duplication test: `src/App.jsx` +- R3F group duplication test: `src/Group.jsx` +- Run object test: default route +- Command (Vanilla object): `npm run dev:object` or `yarn dev:object` +- Command (Vanilla group): `npm run dev:group` or `yarn dev:group` ## Vanilla three.js --Possible: Yes / Partial / No --Notes: --Key concepts: --Complexity: Easy / Medium / Hard +- Possible: Yes +- Notes: +- Object duplication is in `main.js` using mesh clone. +- Group duplication is in `group.js` using `THREE.Group()` and group clone. +- Transforms preserved: Yes, duplicate keeps copied transform values and can be moved independently after duplication. +- Structure preserved: Yes, child hierarchy is preserved when duplicating a group. +- Linked or independent: Mostly independent transforms, but geometry and material are shared by default unless explicitly cloned. +- UX clean: Yes for developers, but requires code understanding. +- Key concepts: +- Object3D clone behavior +- Shared vs cloned geometry and material +- Complexity: Easy ## R3F --Possible: Yes / Partial / No --Notes: --What R3F abstracted: --Complexity: Easy / Medium / Hard +- Possible: Yes +- Notes: +- Object duplication is in `src/App.jsx` using repeated meshes with shared geometry/material. +- Group duplication is in `src/Group.jsx` by rendering the grouped component twice. +- Transforms preserved: Yes, each instance has its own position, rotation, and scale. +- Structure preserved: Yes, component tree/group structure is preserved. +- Linked or independent: Instance transforms are independent; geometry/material may be shared or isolated depending on how props/instances are created. +- UX clean: Yes, declarative and easier to scale. +- What R3F abstracted: +- Imperative clone calls become declarative repeated components/instances. +- Complexity: Easy ## Thob Page Builder --Possible: Yes / Partial / No --Notes: --Builder steps: --Complexity: Easy / Medium / Hard +- Possible: Yes +- Notes: +- There is a shortcut to duplicate objects. +- Observed behavior: duplicate creates a completely different object that cannot be linked to the original, unlike vanilla and R3F patterns where sharing/linking behavior can be controlled. +- Duplicate group behavior: Same as single object duplication, a complete copy is made with no linking. +- Transforms preserved: Yes. +- Structure preserved: Yes, as copy- paste duplication. +- Linked or independent: Independent only, with no linking behavior available. +- UX clean: Mixed. Shortcut is quick, but behavior is confusing because linked duplication is not possible. +- Builder steps: +- Create an object +- Use duplicate shortcut +- Duplicate a grouped structure and verify it is a full independent copy +- Complexity: Medium + +## What to Observe +- Are transforms preserved? +- Vanilla: Yes +- R3F: Yes +- Thob: Yes +- Does duplication preserve structure? +- Vanilla: Yes +- R3F: Yes +- Thob: Yes, as full copy- paste duplication +- Does the duplicate remain linked or independent? +- Vanilla: Transform- independent, data can be shared by default unless cloned +- R3F: Transform- independent, sharing depends on implementation +- Thob: Independent only, no linking behavior +- Is the UX clean? +- Vanilla: Technical but predictable +- R3F: Clean and scalable +- Thob: Fast shortcut, but ambiguous result for duplication semantics ## Comparison Summary --Possible in all 3? Yes / Partial / No --Main differences: --Where Thob is better: --Where Thob is weaker: --What feels awkward or unclear: +- Possible in all 3? Yes +- Main differences: +- Vanilla and R3F give clear control over sharing vs independence. +- Thob duplicate shortcut creates separate objects and does not support linked behavior. +- Where Thob is better: +- Fast editor action for simple duplication +- Where Thob is weaker: +- No linked duplication model +- No linked group duplication model +- What feels awkward or unclear: +- No option to keep duplicates linked for synchronized edits ## Limitation Type (if any) --[ ] Editor UX limitation --[ ] Runtime limitation --[ ] Schema / data model limitation --[ ] Component limitation --[ ] Event system limitation --[ ] Asset pipeline limitation --[ ] Unknown / needs investigation +- [x] Editor UX limitation +- [ ] Runtime limitation +- [x] Schema / data model limitation +- [ ] Component limitation +- [ ] Event system limitation +- [ ] Asset pipeline limitation +- [ ] Unknown / needs investigation ## Workaround --Is there a workaround? --If yes, what is it? +- Is there a workaround? +- Yes +- If yes, what is it? +- Use reusable components/prefabs and instantiate multiple independent copies. +- If linked behavior is required, use explicit shared data/component references where supported. ## Suggested Improvement --What should improve in Thob? --Is it: - -editor - -runtime - -component - -UX - -schema/data +- What should improve in Thob? +- Add explicit duplicate modes: independent duplicate and linked duplicate. +- Add reliable deep group duplication with clear hierarchy preview. +- it Is: +- editor +- schema/data +- UX ## Difficulty Estimate --Easy / Medium / Hard +- Medium ## Business Value --Low / Medium / High +- High ## Recommendation -Should Thob support this better? Why? \ No newline at end of file +Yes. Thob should support both independent and linked duplication because currently duplication works as copy-paste only, which limits synchronized workflows. \ No newline at end of file diff --git a/Week-1/Task-3/builder/BuilderNotes.md b/Week-1/Task-3/builder/BuilderNotes.md new file mode 100644 index 0000000..9185d60 --- /dev/null +++ b/Week-1/Task-3/builder/BuilderNotes.md @@ -0,0 +1,104 @@ +# Builder Notes (Thob) — Task 3: Duplicate Object / Duplicate Group + +## Thob Observations from Task Notes + +- **Possible:** Yes +- **Implementation used:** Duplicate shortcut for both single object and grouped structure. +- **What worked as expected:** + - Duplicating a single object creates a visible copy. + - Duplicating a group also creates a full copied hierarchy. + - Transforms are preserved at duplication time. +- **Key behavior observed:** + - Both object duplicate and group duplicate behave as copy-paste. + - Duplicates are independent; no linking/reference relationship is maintained with source. +- **UX quality:** + - Shortcut-based duplication is fast. + - Missing duplicate mode (linked vs independent) makes behavior limiting for synchronized edits. +- **Builder flow used:** + 1. Create base object. + 2. Duplicate object using editor shortcut. + 3. Create grouped hierarchy. + 4. Duplicate the group. + 5. Verify copied transforms/structure and check whether source and duplicate remain linked. +- **Complexity:** Medium +- **Main limitation signals:** Editor UX + Schema/Data model. +- **Workaround status:** Use independent duplicate copies only; no linked duplication path found. + +## Console Warnings/Errors Seen (Deduplicated) and Probable Meaning + +### warn: `Permissions-Policy header unrecognized feature ('browsing-topics')` +- **Type:** Browser/header compatibility warning. +- **Probable meaning:** Server sends a policy directive unsupported by current browser runtime. +- **Impact:** Usually low for duplication behavior; mostly environmental noise. + +### warn: `GetBindingData... method already registered` (many IDs) +- **Type:** Duplicate registration warning. +- **Probable meaning:** Binding handlers are re-registered on rerender/reconnect without cleanup. +- **Impact:** High log noise, duplicate callback execution risk, and possible unstable editor reactions. + +### warn: `resetPOI method already registered` +- **Type:** Duplicate command registration. +- **Probable meaning:** Camera/POI command pipeline attached multiple times. +- **Impact:** One user action may run multiple times, causing state drift. + +### warn: `update-static-component-prop method already registered` +- **Type:** Duplicate update-pipeline registration. +- **Probable meaning:** Static prop update handlers are mounted repeatedly. +- **Impact:** Duplicate writes and inconsistent property panel behavior. + +### warn: `Component changing from uncontrolled to controlled` (Popover / RadioGroup / undefined) +- **Type:** React form-state warning. +- **Probable meaning:** Controls mount with unstable/undefined value and later switch to controlled mode. +- **Impact:** UI flicker, unstable inspector controls, and harder-to-trust edit state. + +### error: `THREE.GLTFLoader: Invalid plugin found: missing name` +- **Type:** Asset loader/plugin configuration error. +- **Probable meaning:** GLTF plugin object shape is invalid or missing required metadata. +- **Impact:** Import pipeline may partially fail and generate secondary rendering issues. + +### warn: `THREE.MaterialLoader: Undefined texture null` +- **Type:** Asset/material reference warning. +- **Probable meaning:** Material references missing texture slot(s). +- **Impact:** Incorrect materials or degraded visual fidelity; usually non-fatal. + +### info/warn: `ReconnectingWebSocket reconnecting/open/syncing/...` +- **Type:** Transport/sync lifecycle logs. +- **Probable meaning:** Session reconnect and state sync handshakes are occurring. +- **Impact:** Usually informational, but repeated reconnects can amplify duplicate registration side effects. + +### error: `Cannot read properties of null (reading 'contentWindow')` +- **Type:** Runtime exception. +- **Probable meaning:** Message post attempted against iframe/window not mounted or already disposed. +- **Impact:** Preview communication can fail and editor state can desynchronize. + +### warn: `Icon component has been deprecated` +- **Type:** Deprecation warning. +- **Probable meaning:** Legacy UI API still in use. +- **Impact:** Low immediate risk; medium future maintenance risk. + +### error: `R3F: Div is not part of the THREE namespace` +- **Type:** Critical render-tree composition error. +- **Probable meaning:** DOM node rendered in R3F scene tree without proper bridge/extension. +- **Impact:** Scene subtree can fail rendering, affecting reliability of duplication validation. + +### error: `THREE.WebGLRenderer: Context Lost` +- **Type:** Graphics runtime error. +- **Probable meaning:** WebGL context dropped (resource pressure, repeated remounts, browser/GPU reset). +- **Impact:** Canvas interruptions and unreliable editor preview behavior. + +### error: `Failed to load resource: 404` +- **Type:** Network/resource error. +- **Probable meaning:** Asset/resource path missing or stale. +- **Impact:** Missing resources can cascade into loader/material warnings. + +### warn/error: `Konva has no node with type ambientLight/meshStandardMaterial/boxGeometry/mesh` and layer width/height warnings +- **Type:** Renderer mismatch/runtime warnings. +- **Probable meaning:** Non-Konva scene nodes are being interpreted in a Konva path; invalid layer size updates applied. +- **Impact:** Rendering fallback behavior and layout/render correctness risk. + +## Overall Read + +- Task objective is functionally reachable in builder: object and group duplication both produce full copies. +- Behavior is strictly independent copy-paste; no linked duplicate mode is currently available. +- Transform and structure preservation are acceptable at duplicate time, but advanced synchronized editing workflows are not supported. +- Console profile indicates substantial runtime/editor noise (duplicate registrations, state-control warnings, renderer/path mismatches), which can reduce confidence in complex scene editing even though basic duplication works. diff --git a/Week-1/Task-4/TaskNotes.md b/Week-1/Task-4/TaskNotes.md index e8be752..ef27462 100644 --- a/Week-1/Task-4/TaskNotes.md +++ b/Week-1/Task-4/TaskNotes.md @@ -1,60 +1,70 @@ -# Task: [Feature Name] +# Task: Basic Rotation / Motion ## Objective -What is the feature trying to do? +Create simple motion on an object (cube), such as constant rotation, and compare implementation across Vanilla three.js, R3F, and thob page builder. ## Vanilla three.js --Possible: Yes / Partial / No --Notes: --Key concepts: --Complexity: Easy / Medium / Hard +- Possible: Yes +- Notes: Implemented a simple cube and animated it in the render loop using `renderer.setAnimationLoop(animate)`. Rotation is updated every frame on X and Y axes. +- Key concepts: Render loop, frame-time based motion, direct `mesh.rotation` updates. +- Complexity: Easy ## R3F --Possible: Yes / Partial / No --Notes: --What R3F abstracted: --Complexity: Easy / Medium / Hard +- Possible: Yes +- Notes: Implemented the same rotating cube using `useFrame`, with per-frame rotation updates matching the Vanilla behavior. +- What R3F abstracted: Scene/render setup and loop integration are simplified with `Canvas` and `useFrame`, reducing boilerplate. +- Complexity: Easy ## Thob Page Builder --Possible: Yes / Partial / No --Notes: --Builder steps: --Complexity: Easy / Medium / Hard +- Possible: Partial +- Notes: Basic motion can be added through built-in presets, but custom animation logic cannot be authored. +- Custom animation is not possible; only the pre-provided animation can be applied. +- Builder steps: + - Add cube/object in scene. + - Select available animation preset from builder controls. + - Adjust preset options (like speed). +- Complexity: Easy ## Comparison Summary --Possible in all 3? Yes / Partial / No --Main differences: --Where Thob is better: --Where Thob is weaker: --What feels awkward or unclear: +- Possible in all 3? Partial +- Main differences: + - Vanilla and R3F support fully custom per-frame animation logic. + - Thob supports only preset animation options. +- Where Thob is better: Fast setup for non-technical users with ready-made motion presets. +- Where Thob is weaker: No custom animation authoring for specific motion behavior. +- What feels awkward or unclear: Limited control when required motion does not match a preset. ## Limitation Type (if any) --[ ] Editor UX limitation --[ ] Runtime limitation --[ ] Schema / data model limitation --[ ] Component limitation --[ ] Event system limitation --[ ] Asset pipeline limitation --[ ] Unknown / needs investigation +- [x] Editor UX limitation +- [x] Runtime limitation +- [ ] Schema / data model limitation +- [x] Component limitation +- [ ] Event system limitation +- [ ] Asset pipeline limitation +- [ ] Unknown / needs investigation ## Workaround --Is there a workaround? --If yes, what is it? +- Is there a workaround? + - Partial +- If yes, what is it? + - Use the closest pre-provided animation preset and tune available settings. + ## Suggested Improvement --What should improve in Thob? --Is it: - -editor - -runtime - -component - -UX - -schema/data +- What should improve in Thob? + - Allow combining preset animation with user-defined motion parameters. +- it is: + - editor + - runtime + - component + - UX ## Difficulty Estimate --Easy / Medium / Hard +- Hard ## Business Value --Low / Medium / High +- High ## Recommendation -Should Thob support this better? Why? \ No newline at end of file +Should Thob support this better? Why? +- Yes. Motion is core to interactive 3D scenes, and lack of custom animation blocks many use cases beyond simple showcase interactions. \ No newline at end of file diff --git a/Week-1/Task-4/builder/BuilderNotes.md b/Week-1/Task-4/builder/BuilderNotes.md new file mode 100644 index 0000000..26c90da --- /dev/null +++ b/Week-1/Task-4/builder/BuilderNotes.md @@ -0,0 +1,73 @@ +# Builder Notes (Thob) — Task 4: Basic Rotation / Motion + +## Thob Observations from Task Notes + +- **Possible:** Partial +- **Implementation used:** Applied available built-in animation presets on a cube/object inside thob builder. +- **What worked as expected:** + - Preset animation can be applied quickly. + - Basic motion effects are visible without writing code. +- **Main limitation observed:** + - Custom animation is not possible; only pre-provided animation can be applied. + - Exact motion parity with Vanilla/R3F frame-loop logic is not achievable from the builder controls. +- **Builder flow used:** + 1. Create/Add cube object in scene. + 2. Open animation controls. + 3. Apply available preset animation. + 4. Tune exposed preset options (for example speed/intensity where available). +- **Complexity:** Easy for preset motion, hard for custom motion requirements. +- **Main limitation signals:** Editor UX + Runtime + Component concerns. +- **Workaround status:** Partial workaround only (use nearest preset); no true custom per-frame animation authoring. + +## Console Warnings/Errors Seen (Deduplicated) and Probable Meaning + +### warn: `Permissions-Policy header unrecognized feature ('browsing-topics')` +- **Type:** Browser/header compatibility warning. +- **Probable meaning:** Response header includes a policy directive not recognized by the current browser engine. +- **Impact:** Usually low for scene editing itself; mostly platform/header noise. + +### error: `GET https://builder.thob.studio/builder/ 404 (Not Found)` +- **Type:** Network/resource error. +- **Probable meaning:** Builder page/resource ID is stale, deleted, or inaccessible for current session. +- **Impact:** High for workflow continuity; can block loading expected builder state. + +### warn: `Unchecked runtime.lastError: The message port closed before a response was received` +- **Type:** Browser extension/runtime messaging warning. +- **Probable meaning:** A background messaging channel closed before callback response (often extension-related). +- **Impact:** Usually low for core scene logic; can add debugging noise. + +### warn: `No HydrateFallback element provided to render during initial hydration` +- **Type:** Hydration/lifecycle warning. +- **Probable meaning:** Initial hydration path expected a fallback UI element but none was configured. +- **Impact:** Can produce unstable initial editor/preview rendering behavior. + +### warn: `... changing from uncontrolled to controlled` and `RadioGroup is changing from uncontrolled to controlled` +- **Type:** React state-management warning. +- **Probable meaning:** Form/editor controls switch value ownership mode across renders. +- **Impact:** Property panel behavior may become inconsistent or glitchy. + +### warn: `GetBindingData method already registered` (repeated) +- **Type:** Duplicate registration warning. +- **Probable meaning:** Binding method handlers are attached multiple times during rerender/remount cycles. +- **Impact:** High log noise, risk of duplicated side effects, and potential performance degradation. + +### warn: `resetPOI method already registered` +- **Type:** Duplicate command registration warning. +- **Probable meaning:** Command/event handler is registered more than once without cleanup. +- **Impact:** Risk of repeated command execution and state drift. + +### warn: `camera-controls: verticalDragToForward was removed...` +- **Type:** API deprecation/removed option warning. +- **Probable meaning:** Legacy camera-controls prop is still being used by some path in the runtime/editor. +- **Impact:** Non-fatal now, but indicates outdated control configuration and future fragility. + +### error: `THREE.GLTFLoader: Invalid plugin found: missing name` +- **Type:** Asset loader/plugin configuration error. +- **Probable meaning:** GLTF loader plugin object does not satisfy required shape/metadata. +- **Impact:** Asset loading behavior may be incomplete or fail for some models. + +## Overall Read + +- For Task 4, thob supports only preset motion and does not support custom animation logic, which is the core functional gap compared with Vanilla and R3F. +- Console output shows repeated registration and controlled/uncontrolled warnings, which aligns with editor/runtime stability concerns when iterating quickly in builder. +- The 404 page load and loader/control warnings suggest platform-level reliability and compatibility issues that can interfere with smooth motion-authoring workflows. diff --git a/Week-1/Task-4/r3f/index.html b/Week-1/Task-4/r3f/index.html new file mode 100644 index 0000000..8b09507 --- /dev/null +++ b/Week-1/Task-4/r3f/index.html @@ -0,0 +1,15 @@ + + + + + + + Task 4 R3F - Vanilla Match + + + +
+ + + + \ No newline at end of file diff --git a/Week-1/Task-4/r3f/package.json b/Week-1/Task-4/r3f/package.json index 3382f67..6525358 100644 --- a/Week-1/Task-4/r3f/package.json +++ b/Week-1/Task-4/r3f/package.json @@ -2,11 +2,23 @@ "name": "week-1-task-4-r3f", "private": true, "version": "0.0.0", + "type": "module", "packageManager": "yarn@1.22.22", "scripts": { - "dev": "echo 'Add your React Three Fiber dev script here'", - "build": "echo 'Add your React Three Fiber build script here'", - "lint": "echo 'Add your lint script here'", + "dev": "vite", + "build": "vite build", + "lint": "echo 'Lint not configured yet'", + "preview": "vite preview", "clean": "rm -rf dist build .next" + }, + "dependencies": { + "@react-three/fiber": "^9.5.0", + "react": "^19.2.4", + "react-dom": "^19.2.4", + "three": "^0.183.2" + }, + "devDependencies": { + "@vitejs/plugin-react": "^6.0.0", + "vite": "^8.0.3" } } \ No newline at end of file diff --git a/Week-1/Task-4/r3f/src/App.jsx b/Week-1/Task-4/r3f/src/App.jsx new file mode 100644 index 0000000..89bdc68 --- /dev/null +++ b/Week-1/Task-4/r3f/src/App.jsx @@ -0,0 +1,30 @@ +import { Canvas, useFrame } from '@react-three/fiber' +import { useRef } from 'react' + +function RotatingCube() { + const cubeRef = useRef() + + useFrame((state) => { + const seconds = state.clock.elapsedTime + + if (!cubeRef.current) return + + cubeRef.current.rotation.x = seconds / 2 + cubeRef.current.rotation.y = seconds + }) + + return ( + + + + + ) +} + +export default function App() { + return ( + + + + ) +} diff --git a/Week-1/Task-4/r3f/src/index.css b/Week-1/Task-4/r3f/src/index.css new file mode 100644 index 0000000..379b86e --- /dev/null +++ b/Week-1/Task-4/r3f/src/index.css @@ -0,0 +1,8 @@ +html, +body, +#root { + width: 100%; + height: 100%; + margin: 0; + background-color: black; +} diff --git a/Week-1/Task-4/r3f/src/main.jsx b/Week-1/Task-4/r3f/src/main.jsx new file mode 100644 index 0000000..104325b --- /dev/null +++ b/Week-1/Task-4/r3f/src/main.jsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import App from './App.jsx' +import './index.css' + +createRoot(document.getElementById('root')).render( + + + , +) diff --git a/Week-1/Task-4/r3f/vite.config.js b/Week-1/Task-4/r3f/vite.config.js new file mode 100644 index 0000000..0408f13 --- /dev/null +++ b/Week-1/Task-4/r3f/vite.config.js @@ -0,0 +1,6 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +export default defineConfig({ + plugins: [react()], +}) diff --git a/Week-1/Task-4/vanilla/index.html b/Week-1/Task-4/vanilla/index.html new file mode 100644 index 0000000..6010e1f --- /dev/null +++ b/Week-1/Task-4/vanilla/index.html @@ -0,0 +1,18 @@ + + + + + + My first three.js app + + + + + + + + \ No newline at end of file diff --git a/Week-1/Task-4/vanilla/main.js b/Week-1/Task-4/vanilla/main.js new file mode 100644 index 0000000..3d97fe8 --- /dev/null +++ b/Week-1/Task-4/vanilla/main.js @@ -0,0 +1,25 @@ +import * as THREE from 'three'; + +const scene = new THREE.Scene(); +const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); + +const renderer = new THREE.WebGLRenderer(); +renderer.setSize(window.innerWidth, window.innerHeight); +renderer.setAnimationLoop(animate); +document.body.appendChild(renderer.domElement); + +const geometry = new THREE.BoxGeometry(1, 1, 1); +const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); +const cube = new THREE.Mesh(geometry, material); +scene.add(cube); + +camera.position.z = 5; + +function animate(time) { + + cube.rotation.x = time / 2000; + cube.rotation.y = time / 1000; + + renderer.render(scene, camera); + +} \ No newline at end of file diff --git a/Week-1/Task-4/vanilla/package.json b/Week-1/Task-4/vanilla/package.json index 3e49788..8bb1539 100644 --- a/Week-1/Task-4/vanilla/package.json +++ b/Week-1/Task-4/vanilla/package.json @@ -4,9 +4,15 @@ "version": "0.0.0", "packageManager": "yarn@1.22.22", "scripts": { - "dev": "echo 'Add your Three.js dev script here'", - "build": "echo 'Add your Three.js build script here'", + "dev": "vite", + "build": "vite build", "lint": "echo 'Add your lint script here'", "clean": "rm -rf dist build" + }, + "dependencies": { + "three": "^0.183.2" + }, + "devDependencies": { + "vite": "^8.0.3" } -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index 1996b58..f2ce264 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,15 @@ "turbo": "^2.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@emnapi/core": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", @@ -74,6 +83,54 @@ "url": "https://github.com/sponsors/Boshen" } }, + "node_modules/@react-three/fiber": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-9.5.0.tgz", + "integrity": "sha512-FiUzfYW4wB1+PpmsE47UM+mCads7j2+giRBltfwH7SNhah95rqJs3ltEs9V3pP8rYdS0QlNne+9Aj8dS/SiaIA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.8", + "@types/webxr": "*", + "base64-js": "^1.5.1", + "buffer": "^6.0.3", + "its-fine": "^2.0.0", + "react-use-measure": "^2.1.7", + "scheduler": "^0.27.0", + "suspend-react": "^0.1.3", + "use-sync-external-store": "^1.4.0", + "zustand": "^5.0.3" + }, + "peerDependencies": { + "expo": ">=43.0", + "expo-asset": ">=8.4", + "expo-file-system": ">=11.0", + "expo-gl": ">=11.0", + "react": ">=19 <19.3", + "react-dom": ">=19 <19.3", + "react-native": ">=0.78", + "three": ">=0.156" + }, + "peerDependenciesMeta": { + "expo": { + "optional": true + }, + "expo-asset": { + "optional": true + }, + "expo-file-system": { + "optional": true + }, + "expo-gl": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/@rolldown/binding-android-arm64": { "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", @@ -361,6 +418,115 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-reconciler": { + "version": "0.28.9", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz", + "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/webxr": { + "version": "0.5.24", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz", + "integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.1.tgz", + "integrity": "sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.7" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/@vitejs/plugin-react/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.7", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.7.tgz", + "integrity": "sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT", + "peer": true + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -403,6 +569,38 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/its-fine": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-2.0.0.tgz", + "integrity": "sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng==", + "license": "MIT", + "dependencies": { + "@types/react-reconciler": "^0.28.9" + }, + "peerDependencies": { + "react": "^19.0.0" + } + }, "node_modules/lightningcss": { "version": "1.32.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", @@ -522,6 +720,42 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/react": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/react-use-measure": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.7.tgz", + "integrity": "sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.13", + "react-dom": ">=16.13" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, "node_modules/rolldown": { "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz", @@ -556,6 +790,12 @@ "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" } }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -566,6 +806,15 @@ "node": ">=0.10.0" } }, + "node_modules/suspend-react": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/suspend-react/-/suspend-react-0.1.3.tgz", + "integrity": "sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=17.0" + } + }, "node_modules/three": { "version": "0.183.2", "resolved": "https://registry.npmjs.org/three/-/three-0.183.2.tgz", @@ -615,6 +864,15 @@ "@turbo/windows-arm64": "2.8.20" } }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/vite": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.3.tgz", @@ -725,6 +983,35 @@ "resolved": "Week-1/Task-4/vanilla", "link": true }, + "node_modules/zustand": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.12.tgz", + "integrity": "sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + }, "Week-1/Task-1/r3f": { "name": "week-1-task-1-r3f", "version": "0.0.0" @@ -755,7 +1042,17 @@ }, "Week-1/Task-3/r3f": { "name": "week-1-task-3-r3f", - "version": "0.0.0" + "version": "0.0.0", + "dependencies": { + "@react-three/fiber": "^9.5.0", + "react": "^19.2.4", + "react-dom": "^19.2.4", + "three": "^0.183.2" + }, + "devDependencies": { + "@vitejs/plugin-react": "^6.0.0", + "vite": "^8.0.3" + } }, "Week-1/Task-3/vanilla": { "name": "week-1-task-3-vanilla", @@ -767,7 +1064,13 @@ }, "Week-1/Task-4/vanilla": { "name": "week-1-task-4-vanilla", - "version": "0.0.0" + "version": "0.0.0", + "dependencies": { + "three": "^0.183.2" + }, + "devDependencies": { + "vite": "^8.0.3" + } } } } diff --git a/yarn.lock b/yarn.lock index ca869ce..f5b25a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,26 +2,193 @@ # yarn lockfile v1 +"@babel/runtime@^7.17.8": + version "7.29.2" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz" + integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g== + +"@napi-rs/wasm-runtime@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz#e25454b4d44cfabd21d1bc801705359870e33ecc" + integrity sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw== + dependencies: + "@tybys/wasm-util" "^0.10.1" + "@oxc-project/types@=0.122.0": version "0.122.0" resolved "https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz" integrity sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA== +"@react-three/fiber@^9.5.0": + version "9.5.0" + resolved "https://registry.npmjs.org/@react-three/fiber/-/fiber-9.5.0.tgz" + integrity sha512-FiUzfYW4wB1+PpmsE47UM+mCads7j2+giRBltfwH7SNhah95rqJs3ltEs9V3pP8rYdS0QlNne+9Aj8dS/SiaIA== + dependencies: + "@babel/runtime" "^7.17.8" + "@types/webxr" "*" + base64-js "^1.5.1" + buffer "^6.0.3" + its-fine "^2.0.0" + react-use-measure "^2.1.7" + scheduler "^0.27.0" + suspend-react "^0.1.3" + use-sync-external-store "^1.4.0" + zustand "^5.0.3" + +"@rolldown/binding-android-arm64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz#4e6af08b89da02596cc5da4b105082b68673ffec" + integrity sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA== + "@rolldown/binding-darwin-arm64@1.0.0-rc.12": version "1.0.0-rc.12" resolved "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz" integrity sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg== +"@rolldown/binding-darwin-x64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz#eddf6aa3ed3509171fe21711f1e8ec8e0fd7ec49" + integrity sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw== + +"@rolldown/binding-freebsd-x64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz#2102dfed19fd1f1b53435fcaaf0bc61129a266a3" + integrity sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q== + +"@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz#b2c13f40e990fd1e1935492850536c768c961a0f" + integrity sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q== + +"@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz#32ca9f77c1e76b2913b3d53d2029dc171c0532d6" + integrity sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg== + +"@rolldown/binding-linux-arm64-musl@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz#f4337ddd52f0ed3ada2105b59ee1b757a2c4858c" + integrity sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw== + +"@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz#22fdd14cb00ee8208c28a39bab7f28860ec6705d" + integrity sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g== + +"@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz#838215096d1de6d3d509e0410801cb7cda8161ff" + integrity sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og== + +"@rolldown/binding-linux-x64-gnu@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz#f7d71d97f6bd43198596b26dc2cb364586e12673" + integrity sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg== + +"@rolldown/binding-linux-x64-musl@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz#a2ca737f01b0ad620c4c404ca176ea3e3ad804c3" + integrity sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig== + +"@rolldown/binding-openharmony-arm64@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz#f66317e29eafcc300bed7af8dddac26ab3b1bf82" + integrity sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA== + +"@rolldown/binding-wasm32-wasi@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz#8825523fdffa1f1dc4683be9650ffaa9e4a77f04" + integrity sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg== + dependencies: + "@napi-rs/wasm-runtime" "^1.1.1" + +"@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz#4f3a17e3d68a58309c27c0930b0f7986ccabef47" + integrity sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q== + +"@rolldown/binding-win32-x64-msvc@1.0.0-rc.12": + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz#d762765d5660598a96b570b513f535c151272985" + integrity sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw== + "@rolldown/pluginutils@1.0.0-rc.12": version "1.0.0-rc.12" resolved "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz" integrity sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw== +"@rolldown/pluginutils@1.0.0-rc.7": + version "1.0.0-rc.7" + resolved "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.7.tgz" + integrity sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA== + +"@turbo/darwin-64@2.8.20": + version "2.8.20" + resolved "https://registry.yarnpkg.com/@turbo/darwin-64/-/darwin-64-2.8.20.tgz#6ebc903fbfe31db85f67b84af69e84822765cbf4" + integrity sha512-FQ9EX1xMU5nbwjxXxM3yU88AQQ6Sqc6S44exPRroMcx9XZHqqppl5ymJF0Ig/z3nvQNwDmz1Gsnvxubo+nXWjQ== + "@turbo/darwin-arm64@2.8.20": version "2.8.20" resolved "https://registry.npmjs.org/@turbo/darwin-arm64/-/darwin-arm64-2.8.20.tgz" integrity sha512-Gpyh9ATFGThD6/s9L95YWY54cizg/VRWl2B67h0yofG8BpHf67DFAh9nuJVKG7bY0+SBJDAo5cMur+wOl9YOYw== +"@turbo/linux-64@2.8.20": + version "2.8.20" + resolved "https://registry.yarnpkg.com/@turbo/linux-64/-/linux-64-2.8.20.tgz#51faba95b242731b0beae9811724b3eeee6aa0a1" + integrity sha512-p2QxWUYyYUgUFG0b0kR+pPi8t7c9uaVlRtjTTI1AbCvVqkpjUfCcReBn6DgG/Hu8xrWdKLuyQFaLYFzQskZbcA== + +"@turbo/linux-arm64@2.8.20": + version "2.8.20" + resolved "https://registry.yarnpkg.com/@turbo/linux-arm64/-/linux-arm64-2.8.20.tgz#4c466ec09a2c2e6513df94d703660bb6efa61614" + integrity sha512-Gn5yjlZGLRZWarLWqdQzv0wMqyBNIdq1QLi48F1oY5Lo9kiohuf7BPQWtWxeNVS2NgJ1+nb/DzK1JduYC4AWOA== + +"@turbo/windows-64@2.8.20": + version "2.8.20" + resolved "https://registry.yarnpkg.com/@turbo/windows-64/-/windows-64-2.8.20.tgz#b8f23ff1d5ddf9b1abe41db2b1cb35b13066c063" + integrity sha512-vyaDpYk/8T6Qz5V/X+ihKvKFEZFUoC0oxYpC1sZanK6gaESJlmV3cMRT3Qhcg4D2VxvtC2Jjs9IRkrZGL+exLw== + +"@turbo/windows-arm64@2.8.20": + version "2.8.20" + resolved "https://registry.yarnpkg.com/@turbo/windows-arm64/-/windows-arm64-2.8.20.tgz#8032d42c6cfd954d3c381720d5a65dc3e7ea3014" + integrity sha512-voicVULvUV5yaGXo0Iue13BcHGYW3u0VgqSbfQwBaHbpj1zLjYV4KIe+7fYIo6DO8FVUJzxFps3ODCQG/Wy2Qw== + +"@tybys/wasm-util@^0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" + integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg== + dependencies: + tslib "^2.4.0" + +"@types/react-reconciler@^0.28.9": + version "0.28.9" + resolved "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz" + integrity sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg== + +"@types/webxr@*": + version "0.5.24" + resolved "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz" + integrity sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg== + +"@vitejs/plugin-react@^6.0.0": + version "6.0.1" + resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.1.tgz" + integrity sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ== + dependencies: + "@rolldown/pluginutils" "1.0.0-rc.7" + +base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + detect-libc@^2.0.3: version "2.1.2" resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz" @@ -37,11 +204,73 @@ fsevents@~2.3.3: resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +its-fine@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/its-fine/-/its-fine-2.0.0.tgz" + integrity sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng== + dependencies: + "@types/react-reconciler" "^0.28.9" + +lightningcss-android-arm64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz#f033885116dfefd9c6f54787523e3514b61e1968" + integrity sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg== + lightningcss-darwin-arm64@1.32.0: version "1.32.0" resolved "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz" integrity sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ== +lightningcss-darwin-x64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz#35f3e97332d130b9ca181e11b568ded6aebc6d5e" + integrity sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w== + +lightningcss-freebsd-x64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz#9777a76472b64ed6ff94342ad64c7bafd794a575" + integrity sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig== + +lightningcss-linux-arm-gnueabihf@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz#13ae652e1ab73b9135d7b7da172f666c410ad53d" + integrity sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw== + +lightningcss-linux-arm64-gnu@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz#417858795a94592f680123a1b1f9da8a0e1ef335" + integrity sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ== + +lightningcss-linux-arm64-musl@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz#6be36692e810b718040802fd809623cffe732133" + integrity sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg== + +lightningcss-linux-x64-gnu@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz#0b7803af4eb21cfd38dd39fe2abbb53c7dd091f6" + integrity sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA== + +lightningcss-linux-x64-musl@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz#88dc8ba865ddddb1ac5ef04b0f161804418c163b" + integrity sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg== + +lightningcss-win32-arm64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz#4f30ba3fa5e925f5b79f945e8cc0d176c3b1ab38" + integrity sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw== + +lightningcss-win32-x64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz#141aa5605645064928902bb4af045fa7d9f4220a" + integrity sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q== + lightningcss@^1.32.0: version "1.32.0" resolved "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz" @@ -71,7 +300,7 @@ picocolors@^1.1.1: resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -"picomatch@^3 || ^4", picomatch@^4.0.3, picomatch@^4.0.4: +picomatch@^4.0.3, picomatch@^4.0.4: version "4.0.4" resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz" integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== @@ -85,6 +314,23 @@ postcss@^8.5.8: picocolors "^1.1.1" source-map-js "^1.2.1" +react-dom@^19.2.4: + version "19.2.4" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz" + integrity sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ== + dependencies: + scheduler "^0.27.0" + +react-use-measure@^2.1.7: + version "2.1.7" + resolved "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.7.tgz" + integrity sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg== + +react@^19.2.4: + version "19.2.4" + resolved "https://registry.npmjs.org/react/-/react-19.2.4.tgz" + integrity sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ== + rolldown@1.0.0-rc.12: version "1.0.0-rc.12" resolved "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz" @@ -109,11 +355,21 @@ rolldown@1.0.0-rc.12: "@rolldown/binding-win32-arm64-msvc" "1.0.0-rc.12" "@rolldown/binding-win32-x64-msvc" "1.0.0-rc.12" +scheduler@^0.27.0: + version "0.27.0" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz" + integrity sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q== + source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== +suspend-react@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/suspend-react/-/suspend-react-0.1.3.tgz" + integrity sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ== + three@^0.183.2: version "0.183.2" resolved "https://registry.npmjs.org/three/-/three-0.183.2.tgz" @@ -127,6 +383,11 @@ tinyglobby@^0.2.15: fdir "^6.5.0" picomatch "^4.0.3" +tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + turbo@^2.0.0: version "2.8.20" resolved "https://registry.npmjs.org/turbo/-/turbo-2.8.20.tgz" @@ -139,6 +400,11 @@ turbo@^2.0.0: "@turbo/windows-64" "2.8.20" "@turbo/windows-arm64" "2.8.20" +use-sync-external-store@^1.4.0: + version "1.6.0" + resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz" + integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w== + vite@^8.0.2, vite@^8.0.3: version "8.0.3" resolved "https://registry.npmjs.org/vite/-/vite-8.0.3.tgz" @@ -152,38 +418,7 @@ vite@^8.0.2, vite@^8.0.3: optionalDependencies: fsevents "~2.3.3" -"week-1-task-1-r3f@file:/Users/anshkumar/Documents/VS Code/thob-work/builder-research/Week-1/Task-1/r3f": - version "0.0.0" - resolved "file:Week-1/Task-1/r3f" - -"week-1-task-1-vanilla@file:/Users/anshkumar/Documents/VS Code/thob-work/builder-research/Week-1/Task-1/vanilla": - version "0.0.0" - resolved "file:Week-1/Task-1/vanilla" - dependencies: - three "^0.183.2" - -"week-1-task-2-r3f@file:/Users/anshkumar/Documents/VS Code/thob-work/builder-research/Week-1/Task-2/r3f": - version "0.0.0" - resolved "file:Week-1/Task-2/r3f" - -"week-1-task-2-vanilla@file:/Users/anshkumar/Documents/VS Code/thob-work/builder-research/Week-1/Task-2/vanilla": - version "0.0.0" - resolved "file:Week-1/Task-2/vanilla" - dependencies: - three "^0.183.2" - -"week-1-task-3-r3f@file:/Users/anshkumar/Documents/VS Code/thob-work/builder-research/Week-1/Task-3/r3f": - version "0.0.0" - resolved "file:Week-1/Task-3/r3f" - -"week-1-task-3-vanilla@file:/Users/anshkumar/Documents/VS Code/thob-work/builder-research/Week-1/Task-3/vanilla": - version "0.0.0" - resolved "file:Week-1/Task-3/vanilla" - -"week-1-task-4-r3f@file:/Users/anshkumar/Documents/VS Code/thob-work/builder-research/Week-1/Task-4/r3f": - version "0.0.0" - resolved "file:Week-1/Task-4/r3f" - -"week-1-task-4-vanilla@file:/Users/anshkumar/Documents/VS Code/thob-work/builder-research/Week-1/Task-4/vanilla": - version "0.0.0" - resolved "file:Week-1/Task-4/vanilla" +zustand@^5.0.3: + version "5.0.12" + resolved "https://registry.npmjs.org/zustand/-/zustand-5.0.12.tgz" + integrity sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==