[READ-ONLY] Mirror of https://github.com/flo-bit/room. tiny 3d rooms saved locally or in your bluesky account, svelte/threlte flo-bit.dev/room/
0

Configure Feed

Select the types of activity you want to include in your feed.

refactor pt1

Florian (Mar 9, 2025, 11:30 PM +0100) d40a0f20 b700dc81

+9037 -9274
-45
src/lib/Image.svelte
··· 1 - <script lang="ts"> 2 - import type { Props } from '@threlte/core'; 3 - import { HTML } from '@threlte/extras'; 4 - import type * as THREE from 'three'; 5 - import { getImage } from './images.svelte'; 6 - import { userInfo } from './ui-state.svelte'; 7 - import { getImageBlobUrl } from './oauth/auth.svelte'; 8 - import { roomState } from './state.svelte'; 9 - 10 - let { 11 - ref = $bindable(), 12 - size = [270, 150], 13 - image, 14 - ...props 15 - }: Props<THREE.Group> & { 16 - ref?: THREE.Group; 17 - size?: [number, number]; 18 - image?: string; 19 - } = $props(); 20 - 21 - let myImage = $derived.by(() => { 22 - if (!image) return; 23 - 24 - if (typeof image === 'string' && image.startsWith('local:')) { 25 - return getImage(image.replace('local:', '')); 26 - // @ts-ignore 27 - } else if (typeof image === 'object' && image.$type === 'blob' && roomState.did) { 28 - // @ts-ignore 29 - return getImageBlobUrl({ did: roomState.did, link: image.ref.$link }); 30 - } 31 - return null; 32 - }); 33 - </script> 34 - 35 - {#if image} 36 - <HTML transform bind:ref occlude="blending" scale={0.1} pointerEvents="none" {...props}> 37 - <div style="width: {size?.[0] ?? 270}px; height: {size?.[1] ?? 150}px;" class="bg-black"> 38 - {#await myImage then myImage} 39 - {#if myImage} 40 - <img src={myImage} alt="" class="h-full w-full touch-none object-cover select-none" /> 41 - {/if} 42 - {/await} 43 - </div> 44 - </HTML> 45 - {/if}
-83
src/lib/Outline.svelte
··· 1 - <script lang="ts"> 2 - import { Mesh } from 'three'; 3 - import { useTask, useThrelte } from '@threlte/core'; 4 - import { 5 - BlendFunction, 6 - EffectComposer, 7 - EffectPass, 8 - OutlineEffect, 9 - RenderPass 10 - } from 'postprocessing'; 11 - import { editorState } from './state.svelte'; 12 - 13 - const { scene, renderer, camera, size, autoRender, renderStage } = useThrelte(); 14 - 15 - const composer = new EffectComposer(renderer); 16 - 17 - const renderPass = new RenderPass(scene); 18 - composer.addPass(renderPass); 19 - $effect(() => { 20 - composer.setSize($size.width, $size.height); 21 - }); 22 - 23 - export const outlineEffectOptions: ConstructorParameters<typeof OutlineEffect>[2] = { 24 - blendFunction: BlendFunction.ALPHA, 25 - edgeStrength: 100, 26 - pulseSpeed: 0.0, 27 - visibleEdgeColor: 0xf59e0b, 28 - hiddenEdgeColor: 0xf59e0b, 29 - blur: true 30 - }; 31 - 32 - const outlineEffect = new OutlineEffect(scene, undefined, outlineEffectOptions); 33 - $effect(() => { 34 - if (!editorState.transformControls?.object) return; 35 - 36 - setTimeout(() => { 37 - outlineEffect.selection.clear(); 38 - 39 - editorState.transformControls?.object.traverse((child) => { 40 - if (child instanceof Mesh) { 41 - outlineEffect.selection.add(child); 42 - } 43 - }); 44 - }, 0); 45 - 46 - return () => { 47 - outlineEffect.selection.clear(); 48 - }; 49 - }); 50 - 51 - const outlineEffectPass = new EffectPass(undefined, outlineEffect); 52 - composer.addPass(outlineEffectPass); 53 - 54 - $effect(() => { 55 - renderPass.mainCamera = $camera; 56 - outlineEffect.mainCamera = $camera; 57 - outlineEffectPass.mainCamera = $camera; 58 - }); 59 - 60 - $effect(() => { 61 - return () => { 62 - composer.removeAllPasses(); 63 - outlineEffectPass.dispose(); 64 - renderPass.dispose(); 65 - composer.dispose(); 66 - }; 67 - }); 68 - 69 - $effect(() => { 70 - const last = autoRender.current; 71 - autoRender.set(false); 72 - return () => { 73 - autoRender.set(last); 74 - }; 75 - }); 76 - 77 - useTask( 78 - (delta) => { 79 - composer.render(delta); 80 - }, 81 - { stage: renderStage, autoInvalidate: false } 82 - ); 83 - </script>
-211
src/lib/Room.svelte
··· 1 - <script lang="ts"> 2 - import * as THREE from 'three'; 3 - import { T } from '@threlte/core'; 4 - import { 5 - applyTransformOfSelected, 6 - editorState, 7 - getPossiblePlacementForPlacingObject, 8 - placeObject, 9 - roomState, 10 - type RoomObjectData 11 - } from './state.svelte'; 12 - import RoomObject from './RoomObject.svelte'; 13 - import { Grid, RoundedBoxGeometry, TransformControls } from '@threlte/extras'; 14 - 15 - type PointerEvent = { 16 - stopPropagation: () => void; 17 - point: { x: number; y: number; z: number }; 18 - normal: { x: number; y: number; z: number }; 19 - }; 20 - </script> 21 - 22 - <T.Group position.y={-1}> 23 - <T.Mesh 24 - onpointermove={(e: PointerEvent) => { 25 - if (getPossiblePlacementForPlacingObject() !== 'wall') return; 26 - 27 - e.stopPropagation(); 28 - 29 - if (editorState.placingObject) { 30 - editorState.placingObject.placement = 'wallZ'; 31 - editorState.placingObject.position = [e.point.x, e.point.y + 1, e.point.z]; 32 - } 33 - }} 34 - onclick={(e: PointerEvent) => { 35 - if (getPossiblePlacementForPlacingObject() !== 'wall') return; 36 - 37 - e.stopPropagation(); 38 - 39 - if (editorState.placingObject) { 40 - editorState.placingObject.placement = 'wallZ'; 41 - placeObject({ x: e.point.x, y: e.point.y + 1, z: e.point.z }); 42 - } 43 - }} 44 - position={[-0.05, 1 - 0.099, -roomState.size.x / 2 - 0.1]} 45 - receiveShadow 46 - castShadow 47 - ondblclick={() => { 48 - if (editorState.selectedObject) { 49 - applyTransformOfSelected(); 50 - 51 - editorState.selectedObject = null; 52 - } 53 - }} 54 - > 55 - <RoundedBoxGeometry args={[roomState.size.z + 0.18, 2, 0.1]} radius={0.03} /> 56 - <T.MeshStandardMaterial color={roomState.wallColor} /> 57 - </T.Mesh> 58 - 59 - <T.Mesh 60 - onpointermove={(e: PointerEvent) => { 61 - if (getPossiblePlacementForPlacingObject() !== 'wall') return; 62 - 63 - e.stopPropagation(); 64 - 65 - if (editorState.placingObject) { 66 - editorState.placingObject.placement = 'wallX'; 67 - editorState.placingObject.position = [e.point.x, e.point.y + 1, e.point.z]; 68 - } 69 - }} 70 - onclick={(e: PointerEvent) => { 71 - if (getPossiblePlacementForPlacingObject() !== 'wall') return; 72 - 73 - e.stopPropagation(); 74 - 75 - if (editorState.placingObject) { 76 - editorState.placingObject.placement = 'wallX'; 77 - placeObject({ x: e.point.x, y: e.point.y + 1, z: e.point.z }); 78 - } 79 - }} 80 - position={[-roomState.size.z / 2 - 0.1, 1 - 0.099, -0.05]} 81 - receiveShadow 82 - castShadow 83 - ondblclick={() => { 84 - if (editorState.selectedObject) { 85 - applyTransformOfSelected(); 86 - 87 - editorState.selectedObject = null; 88 - } 89 - }} 90 - > 91 - <RoundedBoxGeometry args={[0.1, 2, roomState.size.x + 0.18]} radius={0.03} /> 92 - <T.MeshStandardMaterial color={roomState.wallColor} /> 93 - </T.Mesh> 94 - 95 - {#if editorState.isEditing} 96 - <Grid 97 - gridSize={[roomState.size.z * 2, roomState.size.x * 2]} 98 - scale={0.5} 99 - sectionThickness={0} 100 - name="grid" 101 - /> 102 - {/if} 103 - 104 - <T.Mesh 105 - position={[-0.05, -0.0502, -0.05]} 106 - onpointermove={(e: PointerEvent) => { 107 - if (getPossiblePlacementForPlacingObject() !== 'floor') return; 108 - 109 - e.stopPropagation(); 110 - 111 - if (editorState.placingObject) { 112 - editorState.placingObject.position = [e.point.x, e.point.y + 1, e.point.z]; 113 - } 114 - }} 115 - onclick={(e: PointerEvent) => { 116 - if (getPossiblePlacementForPlacingObject() !== 'floor') return; 117 - 118 - e.stopPropagation(); 119 - 120 - placeObject({ x: e.point.x, y: e.point.y + 1, z: e.point.z }); 121 - }} 122 - ondblclick={() => { 123 - if (editorState.selectedObject) { 124 - applyTransformOfSelected(); 125 - 126 - editorState.selectedObject = null; 127 - } 128 - }} 129 - receiveShadow 130 - > 131 - <RoundedBoxGeometry 132 - args={[roomState.size.z + 0.15, 0.1, roomState.size.x + 0.15]} 133 - radius={0.03} 134 - /> 135 - <!-- <T.BoxGeometry args={[roomState.size.z, 0.1, roomState.size.x]} /> --> 136 - <T.MeshStandardMaterial color={roomState.floorColor} /> 137 - </T.Mesh> 138 - 139 - {#each roomState.objects as object, index (object.kind + index.toString())} 140 - {#if editorState.selectedObject === object} 141 - <TransformControls 142 - bind:controls={editorState.transformControls} 143 - position={object.position} 144 - showX={object.placement !== 'wallX'} 145 - showZ={object.placement !== 'wallZ'} 146 - rotation={[ 147 - object.placement === 'wallX' ? object.rotation : 0, 148 - object.placement === 'floor' ? object.rotation : 0, 149 - object.placement === 'wallZ' ? object.rotation : 0 150 - ]} 151 - enableRotate={false} 152 - onchange={(e) => { 153 - if (!e.target || !e.target.object) return; 154 - 155 - e.target.object.position.clamp( 156 - new THREE.Vector3(-roomState.size.z / 2 - 0.1, 0, -roomState.size.x / 2 - 0.1), 157 - new THREE.Vector3(roomState.size.z / 2 + 0.1, 2, roomState.size.x / 2 + 0.1) 158 - ); 159 - }} 160 - > 161 - <RoomObject 162 - kind={object.kind} 163 - colors={object.colors} 164 - placement={object.placement} 165 - image={object.image} 166 - /> 167 - </TransformControls> 168 - {:else if editorState.isEditing} 169 - <T.Group 170 - onclick={(evt: PointerEvent) => { 171 - if (editorState.placingObject) { 172 - if (getPossiblePlacementForPlacingObject() !== 'floor') return; 173 - 174 - evt.stopPropagation(); 175 - placeObject({ x: evt.point.x, y: evt.point.y + 1, z: evt.point.z }); 176 - return; 177 - } 178 - evt.stopPropagation(); 179 - 180 - applyTransformOfSelected(); 181 - 182 - editorState.selectedObject = null; 183 - 184 - setTimeout(() => { 185 - editorState.selectedObject = object; 186 - }, 0); 187 - }} 188 - onpointermove={(e: PointerEvent) => { 189 - if (editorState.placingObject) { 190 - if (getPossiblePlacementForPlacingObject() !== 'floor') return; 191 - 192 - editorState.placingObject.position = [e.point.x, e.point.y + 1, e.point.z]; 193 - e.stopPropagation(); 194 - } 195 - }} 196 - > 197 - <RoomObject {...object} /> 198 - </T.Group> 199 - {:else} 200 - <RoomObject {...object} /> 201 - {/if} 202 - {/each} 203 - 204 - {#if editorState.placingObject} 205 - <RoomObject 206 - {...editorState.placingObject} 207 - colors={['#f1f1f1', '#f1f1f1', '#f1f1f1', '#f1f1f1', '#f1f1f1']} 208 - opacity={0.8} 209 - /> 210 - {/if} 211 - </T.Group>
-42
src/lib/RoomObject.svelte
··· 1 - <script lang="ts"> 2 - import { type Props } from '@threlte/core'; 3 - import type * as THREE from 'three'; 4 - import { AllObjects, type RoomObjectKind } from './models'; 5 - 6 - let { 7 - kind, 8 - selected, 9 - colors, 10 - opacity, 11 - scale, 12 - rotation, 13 - placement, 14 - ...restProps 15 - }: { 16 - kind: RoomObjectKind; 17 - selected?: boolean; 18 - colors?: string[]; 19 - opacity?: number; 20 - rotation?: number; 21 - placement?: 'floor' | 'wallX' | 'wallZ'; 22 - } & Props<THREE.Group> = $props(); 23 - 24 - let ObjectComponent = AllObjects[kind]?.component; 25 - </script> 26 - 27 - {@render object()} 28 - 29 - {#snippet object()} 30 - <ObjectComponent 31 - {...restProps} 32 - {colors} 33 - {opacity} 34 - scale={scale ?? AllObjects[kind]?.scale ?? 1} 35 - rotation={[ 36 - placement === 'wallX' ? (rotation ?? 0) : 0, 37 - (placement === 'floor' ? (rotation ?? 0) : 0) + (placement === 'wallX' ? Math.PI / 2 : 0), 38 - placement === 'wallZ' ? (rotation ?? 0) : 0 39 - ]} 40 - {placement} 41 - /> 42 - {/snippet}
-106
src/lib/Scene.svelte
··· 1 - <script lang="ts"> 2 - import { T, useThrelte } from '@threlte/core'; 3 - import { Environment, OrbitControls } from '@threlte/extras'; 4 - import { interactivity } from '@threlte/extras'; 5 - interactivity(); 6 - 7 - import Room from './Room.svelte'; 8 - import Outline from './Outline.svelte'; 9 - import { applyTransformOfSelected, editorState, roomState } from './state.svelte'; 10 - import { onMount } from 'svelte'; 11 - import { ACESFilmicToneMapping } from 'three'; 12 - import { base } from '$app/paths'; 13 - import { STLExporter } from 'three/examples/jsm/Addons.js'; 14 - 15 - const { renderer, scene } = useThrelte(); 16 - 17 - let lightIntensity = $state(0.4); 18 - 19 - onMount(() => { 20 - renderer.toneMapping = ACESFilmicToneMapping; 21 - renderer.toneMappingExposure = 0.5; 22 - 23 - let lightModeEnvIntensity = 0.4; 24 - let darkModeEnvIntensity = 0.1; 25 - 26 - let lightModeLightIntensity = 2; 27 - let darkModeLightIntensity = 0.3; 28 - 29 - scene.environmentIntensity = window.matchMedia('(prefers-color-scheme: dark)').matches 30 - ? darkModeEnvIntensity 31 - : lightModeEnvIntensity; 32 - lightIntensity = window.matchMedia('(prefers-color-scheme: dark)').matches 33 - ? darkModeLightIntensity 34 - : lightModeLightIntensity; 35 - 36 - window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => { 37 - scene.environmentIntensity = e.matches ? darkModeEnvIntensity : lightModeEnvIntensity; 38 - lightIntensity = e.matches ? darkModeLightIntensity : lightModeLightIntensity; 39 - }); 40 - 41 - // Listen for export event 42 - document.addEventListener("exportSTL", exportSTL); 43 - }); 44 - 45 - async function exportSTL() { 46 - const exporter = new STLExporter(); 47 - 48 - // apply transform 49 - applyTransformOfSelected(); 50 - 51 - editorState.selectedObject = null; 52 - editorState.placingObject = null; 53 - 54 - // wait 1 frame 55 - await new Promise((resolve) => setTimeout(resolve, 1)); 56 - 57 - // Clone the scene to avoid modifying the original 58 - const sceneCopy = scene.clone(); 59 - 60 - // Rotate the entire scene copy (convert from Y-up to Z-up) 61 - sceneCopy.rotation.x = Math.PI / 2; 62 - sceneCopy.updateMatrixWorld(true); // Apply the transformation 63 - 64 - // Remove the grid from the scene 65 - const grid = sceneCopy.getObjectByName('grid'); 66 - if(grid) { 67 - grid.removeFromParent(); 68 - } 69 - 70 - // Export the modified copy 71 - const stlString = exporter.parse(sceneCopy); 72 - const blob = new Blob([stlString], { type: "application/sla" }); 73 - const link = document.createElement("a"); 74 - link.href = URL.createObjectURL(blob); 75 - link.download = "room.stl"; 76 - link.click(); 77 - } 78 - 79 - </script> 80 - 81 - <T.PerspectiveCamera 82 - makeDefault 83 - position={[3, 3, 3]} 84 - oncreate={(ref) => { 85 - ref.lookAt(0, 0, 0); 86 - }} 87 - > 88 - <OrbitControls 89 - maxDistance={20} 90 - maxPolarAngle={Math.PI / 2} 91 - maxAzimuthAngle={2} 92 - minAzimuthAngle={-1} 93 - /> 94 - </T.PerspectiveCamera> 95 - 96 - {#key roomState.id} 97 - <Room /> 98 - {/key} 99 - 100 - <T.DirectionalLight position={[0, 10, 10]} intensity={lightIntensity} castShadow /> 101 - <T.DirectionalLight position={[-10, 5, 0]} intensity={lightIntensity} castShadow /> 102 - <T.AmbientLight intensity={0.1} /> 103 - 104 - <Outline /> 105 - 106 - <Environment isBackground={false} url={base + '/env/workshop.jpg'} />
-30
src/lib/Youtube.svelte
··· 1 - <script lang="ts"> 2 - import type { Props } from '@threlte/core'; 3 - 4 - import { HTML } from '@threlte/extras'; 5 - import type { Snippet } from 'svelte'; 6 - import type * as THREE from 'three'; 7 - import VideoPlayer from './components/extra/video-player/VideoPlayer.svelte'; 8 - 9 - let { 10 - ref = $bindable(), 11 - videoId, 12 - size = [270, 150], 13 - playPause = $bindable(), 14 - ...props 15 - }: Props<THREE.Group> & { 16 - ref?: THREE.Group; 17 - videoId?: string; 18 - size?: [number, number]; 19 - playPause?: () => void; 20 - } = $props(); 21 - </script> 22 - 23 - <HTML transform bind:ref occlude="blending" scale={0.1} pointerEvents="none" {...props}> 24 - <div 25 - style="width: {size?.[0] ?? 270}px; height: {size?.[1] ?? 150}px;" 26 - class="touch-none select-none" 27 - > 28 - <VideoPlayer id={videoId} bind:playPause /> 29 - </div> 30 - </HTML>
-129
src/lib/images.svelte.ts
··· 1 - const imageState: { 2 - db: IDBDatabase | null; 3 - } = $state({ 4 - db: null 5 - }); 6 - 7 - export function openDB(): Promise<IDBDatabase> { 8 - if (imageState.db) { 9 - return Promise.resolve(imageState.db); 10 - } 11 - 12 - return new Promise((resolve, reject) => { 13 - const request = indexedDB.open('ImageDB', 1); 14 - 15 - request.onupgradeneeded = function (event) { 16 - if (!event.target || !('result' in event.target)) { 17 - console.error('Error opening IndexedDB.'); 18 - reject(new Error('Error opening IndexedDB.')); 19 - return; 20 - } 21 - 22 - const db = event.target.result as IDBDatabase; 23 - // Create an object store to hold image blobs if it doesn't already exist 24 - if (!db.objectStoreNames.contains('images')) { 25 - db.createObjectStore('images', { keyPath: 'id' }); 26 - } 27 - }; 28 - 29 - request.onsuccess = function (event) { 30 - if (!event.target || !('result' in event.target)) { 31 - console.error('Error opening IndexedDB.'); 32 - reject(new Error('Error opening IndexedDB.')); 33 - return; 34 - } 35 - 36 - imageState.db = event.target.result as IDBDatabase; 37 - resolve(imageState.db); 38 - }; 39 - 40 - request.onerror = function () { 41 - console.error('Error opening IndexedDB.'); 42 - reject(new Error('Error opening IndexedDB.')); 43 - }; 44 - }); 45 - } 46 - 47 - export function saveImage(imageId: string, image: Blob) { 48 - if (!imageState.db) { 49 - console.error('DB not open'); 50 - return; 51 - } 52 - const transaction = imageState.db.transaction(['images'], 'readwrite'); 53 - const store = transaction.objectStore('images'); 54 - store.put({ id: imageId, blob: image }); 55 - } 56 - 57 - export async function getImage(imageId: string): Promise<string> { 58 - if (!imageState.db) { 59 - await openDB(); 60 - } 61 - const db = imageState.db; 62 - return new Promise((resolve, reject) => { 63 - if (!db) return reject(new Error('DB not open')); 64 - 65 - // Ensure the 'images' object store exists 66 - if (!db.objectStoreNames.contains('images')) { 67 - reject(new Error("Object store 'images' not found in the provided database.")); 68 - return; 69 - } 70 - 71 - const transaction = db.transaction(['images'], 'readonly'); 72 - const store = transaction.objectStore('images'); 73 - const getRequest = store.get(imageId); 74 - 75 - getRequest.onsuccess = function (event) { 76 - if (!event.target || !('result' in event.target)) { 77 - reject(new Error('Error retrieving the image from IndexedDB')); 78 - return; 79 - } 80 - const record = event.target.result; 81 - if (record && typeof record === 'object' && 'blob' in record) { 82 - const objectURL = URL.createObjectURL(record.blob as Blob); 83 - resolve(objectURL); 84 - } else { 85 - reject(new Error('Image not found in IndexedDB')); 86 - } 87 - }; 88 - 89 - getRequest.onerror = function () { 90 - reject(new Error('Error retrieving the image from IndexedDB')); 91 - }; 92 - }); 93 - } 94 - 95 - export function deleteImage(imageId: string) { 96 - if (!imageState.db) { 97 - console.error('DB not open'); 98 - return; 99 - } 100 - const transaction = imageState.db.transaction(['images'], 'readwrite'); 101 - const store = transaction.objectStore('images'); 102 - store.delete(imageId); 103 - console.log('Deleted image', imageId); 104 - } 105 - 106 - export function getAllImageNames(): Promise<string[]> { 107 - return new Promise((resolve, reject) => { 108 - if (!imageState.db) { 109 - reject(new Error('DB not open')); 110 - return; 111 - } 112 - const db = imageState.db; 113 - if (!db.objectStoreNames.contains('images')) { 114 - reject(new Error("Object store 'images' not found in the provided database.")); 115 - return; 116 - } 117 - const transaction = db.transaction(['images'], 'readonly'); 118 - const store = transaction.objectStore('images'); 119 - const request = store.getAllKeys(); 120 - 121 - request.onsuccess = function () { 122 - resolve(request.result as string[]); 123 - }; 124 - 125 - request.onerror = function () { 126 - reject(new Error('Error retrieving image keys from IndexedDB')); 127 - }; 128 - }); 129 - }
-877
src/lib/models.ts
··· 1 - import Table from './models/kenney-furniture-kit/table.svelte'; 2 - import LampRoundFloor from './models/kenney-furniture-kit/lampRoundFloor.svelte'; 3 - import LoungeChair from './models/kenney-furniture-kit/loungeChair.svelte'; 4 - import LoungeSofa from './models/kenney-furniture-kit/loungeSofa.svelte'; 5 - import PottedPlant from './models/kenney-furniture-kit/pottedPlant.svelte'; 6 - import SideTable from './models/kenney-furniture-kit/sideTable.svelte'; 7 - import BedBunk from './models/kenney-furniture-kit/bedBunk.svelte'; 8 - import BedDouble from './models/kenney-furniture-kit/bedDouble.svelte'; 9 - import BedSingle from './models/kenney-furniture-kit/bedSingle.svelte'; 10 - import Bench from './models/kenney-furniture-kit/bench.svelte'; 11 - import BenchCushion from './models/kenney-furniture-kit/benchCushion.svelte'; 12 - import BenchCushionLow from './models/kenney-furniture-kit/benchCushionLow.svelte'; 13 - import BookcaseClosed from './models/kenney-furniture-kit/bookcaseClosed.svelte'; 14 - import CabinetBed from './models/kenney-furniture-kit/cabinetBed.svelte'; 15 - import CabinetBedDrawer from './models/kenney-furniture-kit/cabinetBedDrawer.svelte'; 16 - import CabinetBedDrawerTable from './models/kenney-furniture-kit/cabinetBedDrawerTable.svelte'; 17 - import Chair from './models/kenney-furniture-kit/chair.svelte'; 18 - import ChairCushion from './models/kenney-furniture-kit/chairCushion.svelte'; 19 - import ChairDesk from './models/kenney-furniture-kit/chairDesk.svelte'; 20 - import ChairModernCushion from './models/kenney-furniture-kit/chairModernCushion.svelte'; 21 - import ChairModernFrameCushion from './models/kenney-furniture-kit/chairModernFrameCushion.svelte'; 22 - import ChairRounded from './models/kenney-furniture-kit/chairRounded.svelte'; 23 - import CoatRackStanding from './models/kenney-furniture-kit/coatRackStanding.svelte'; 24 - import Desk from './models/kenney-furniture-kit/desk.svelte'; 25 - import DeskCorner from './models/kenney-furniture-kit/deskCorner.svelte'; 26 - import Doorway from './models/kenney-furniture-kit/doorway.svelte'; 27 - import DoorwayFront from './models/kenney-furniture-kit/doorwayFront.svelte'; 28 - import Dryer from './models/kenney-furniture-kit/dryer.svelte'; 29 - import KitchenBar from './models/kenney-furniture-kit/kitchenBar.svelte'; 30 - import KitchenCabinet from './models/kenney-furniture-kit/kitchenCabinet.svelte'; 31 - import KitchenCabinetDrawer from './models/kenney-furniture-kit/kitchenCabinetDrawer.svelte'; 32 - import RugDoormat from './models/kenney-furniture-kit/rugDoormat.svelte'; 33 - import RugRectangle from './models/kenney-furniture-kit/rugRectangle.svelte'; 34 - import RugRound from './models/kenney-furniture-kit/rugRound.svelte'; 35 - import RugRounded from './models/kenney-furniture-kit/rugRounded.svelte'; 36 - import RugSquare from './models/kenney-furniture-kit/rugSquare.svelte'; 37 - import TelevisionModern from './models/kenney-furniture-kit/televisionModern.svelte'; 38 - 39 - import KayKitBookSet from './models/kaykit-furniture-kit/book_set.svelte'; 40 - import KayKitRugRectanglePattern from './models/kaykit-furniture-kit/rug_rectangle-pattern.svelte'; 41 - import KayKitTableSmall from './models/kaykit-furniture-kit/table_small.svelte'; 42 - import KayKitCouch from './models/kaykit-furniture-kit/couch.svelte'; 43 - import KayKitArmchairPillows from './models/kaykit-furniture-kit/armchair_pillows.svelte'; 44 - import KayKitChairBWood from './models/kaykit-furniture-kit/chair_b_wood.svelte'; 45 - import KayKitShelfBBig from './models/kaykit-furniture-kit/shelf_b_big.svelte'; 46 - import KayKitChairDeskA from './models/kaykit-furniture-kit/chair_desk_a.svelte'; 47 - import KayKitMousepad from './models/kaykit-furniture-kit/mousepad.svelte'; 48 - import KayKitPictureframeStandingB from './models/kaykit-furniture-kit/pictureframe_standing_b.svelte'; 49 - import KayKitBedDoubleB from './models/kaykit-furniture-kit/bed_double_b.svelte'; 50 - import KayKitShelfASmall from './models/kaykit-furniture-kit/shelf_a_small.svelte'; 51 - import KayKitMugA from './models/kaykit-furniture-kit/mug_a.svelte'; 52 - import KayKitRugRounded from './models/kaykit-furniture-kit/rug_rounded.svelte'; 53 - import KayKitMousepadLarge from './models/kaykit-furniture-kit/mousepad_large.svelte'; 54 - import KayKitCabinetSmall from './models/kaykit-furniture-kit/cabinet_small.svelte'; 55 - import KayKitChairA from './models/kaykit-furniture-kit/chair_a.svelte'; 56 - import KayKitChairC from './models/kaykit-furniture-kit/chair_c.svelte'; 57 - import KayKitPictureframeLargeA from './models/kaykit-furniture-kit/pictureframe_large_a.svelte'; 58 - import KayKitChairAWood from './models/kaykit-furniture-kit/chair_a_wood.svelte'; 59 - import KayKitBedSingleB from './models/kaykit-furniture-kit/bed_single_b.svelte'; 60 - import KayKitChairStool from './models/kaykit-furniture-kit/chair_stool.svelte'; 61 - import KayKitPictureframeSmallB from './models/kaykit-furniture-kit/pictureframe_small_b.svelte'; 62 - import KayKitPillow from './models/kaykit-furniture-kit/pillow.svelte'; 63 - import KayKitGameconsoleHandheld from './models/kaykit-furniture-kit/gameconsole_handheld.svelte'; 64 - import KayKitBedDoubleA from './models/kaykit-furniture-kit/bed_double_a.svelte'; 65 - import KayKitPictureframeStandingA from './models/kaykit-furniture-kit/pictureframe_standing_a.svelte'; 66 - import KayKitCactusLarge from './models/kaykit-furniture-kit/cactus_large.svelte'; 67 - import KayKitCouchPillows from './models/kaykit-furniture-kit/couch_pillows.svelte'; 68 - import KayKitPictureframeMedium from './models/kaykit-furniture-kit/pictureframe_medium.svelte'; 69 - import KayKitArmchair from './models/kaykit-furniture-kit/armchair.svelte'; 70 - import KayKitLampTable from './models/kaykit-furniture-kit/lamp_table.svelte'; 71 - import KayKitMouse from './models/kaykit-furniture-kit/mouse.svelte'; 72 - import KayKitMugB from './models/kaykit-furniture-kit/mug_b.svelte'; 73 - import KayKitBookSingle from './models/kaykit-furniture-kit/book_single.svelte'; 74 - import KayKitChairDeskB from './models/kaykit-furniture-kit/chair_desk_b.svelte'; 75 - import KayKitCactusSmall from './models/kaykit-furniture-kit/cactus_small.svelte'; 76 - import KayKitTableLow from './models/kaykit-furniture-kit/table_low.svelte'; 77 - import KayKitLampStanding from './models/kaykit-furniture-kit/lamp_standing.svelte'; 78 - import KayKitDesk from './models/kaykit-furniture-kit/desk.svelte'; 79 - import KayKitRugRectangle from './models/kaykit-furniture-kit/rug_rectangle.svelte'; 80 - import KayKitPictureframeLargeB from './models/kaykit-furniture-kit/pictureframe_large_b.svelte'; 81 - import KayKitCup from './models/kaykit-furniture-kit/cup.svelte'; 82 - import KayKitPictureframeSmallA from './models/kaykit-furniture-kit/pictureframe_small_a.svelte'; 83 - import KayKitKeyboard from './models/kaykit-furniture-kit/keyboard.svelte'; 84 - import KayKitBedSingleA from './models/kaykit-furniture-kit/bed_single_a.svelte'; 85 - import KayKitDeskLarge from './models/kaykit-furniture-kit/desk_large.svelte'; 86 - import KayKitMonitor from './models/kaykit-furniture-kit/monitor.svelte'; 87 - import KayKitLampDesk from './models/kaykit-furniture-kit/lamp_desk.svelte'; 88 - import KayKitChairStoolWood from './models/kaykit-furniture-kit/chair_stool_wood.svelte'; 89 - import KayKitPictureframeSmallC from './models/kaykit-furniture-kit/pictureframe_small_c.svelte'; 90 - import KayKitChairB from './models/kaykit-furniture-kit/chair_b.svelte'; 91 - import KayKitShelfABig from './models/kaykit-furniture-kit/shelf_a_big.svelte'; 92 - import KayKitTableMediumLong from './models/kaykit-furniture-kit/table_medium_long.svelte'; 93 - import KayKitCupPencils from './models/kaykit-furniture-kit/cup_pencils.svelte'; 94 - import KayKitTableMedium from './models/kaykit-furniture-kit/table_medium.svelte'; 95 - import KayKitShelfBSmall from './models/kaykit-furniture-kit/shelf_b_small.svelte'; 96 - import KayKitCabinetMedium from './models/kaykit-furniture-kit/cabinet_medium.svelte'; 97 - import Plant from './models/tiny-treats-bubbly-bathroom/plant.svelte'; 98 - 99 - export const AllObjects: { 100 - [key: string]: { 101 - component: unknown; 102 - colors: number; 103 - visible: boolean; 104 - placement?: 'floor' | 'wall'; 105 - image?: boolean; 106 - scale?: number; 107 - category?: string; 108 - link?: boolean; 109 - }; 110 - } = { 111 - 'kenney-furniture-kit-table': { 112 - component: Table, 113 - colors: 1, 114 - visible: false, 115 - placement: 'floor' 116 - }, 117 - 'kenney-furniture-kit-lampRoundFloor': { 118 - component: LampRoundFloor, 119 - colors: 2, 120 - visible: false, 121 - placement: 'floor' 122 - }, 123 - 'kenney-furniture-kit-loungeChair': { 124 - component: LoungeChair, 125 - colors: 2, 126 - visible: false, 127 - placement: 'floor' 128 - }, 129 - 'kenney-furniture-kit-loungeSofa': { 130 - component: LoungeSofa, 131 - colors: 2, 132 - visible: false, 133 - placement: 'floor' 134 - }, 135 - 'kenney-furniture-kit-pottedPlant': { 136 - component: PottedPlant, 137 - colors: 3, 138 - visible: false, 139 - placement: 'floor' 140 - }, 141 - 'kenney-furniture-kit-sideTable': { 142 - component: SideTable, 143 - colors: 1, 144 - visible: false, 145 - placement: 'floor' 146 - }, 147 - 'kenney-furniture-kit-bedBunk': { 148 - component: BedBunk, 149 - colors: 3, 150 - visible: false, 151 - placement: 'floor' 152 - }, 153 - 'kenney-furniture-kit-bedDouble': { 154 - component: BedDouble, 155 - colors: 4, 156 - visible: false, 157 - placement: 'floor' 158 - }, 159 - 'kenney-furniture-kit-bedSingle': { 160 - component: BedSingle, 161 - colors: 4, 162 - visible: false, 163 - placement: 'floor' 164 - }, 165 - 'kenney-furniture-kit-bench': { 166 - component: Bench, 167 - colors: 1, 168 - visible: false, 169 - placement: 'floor' 170 - }, 171 - 'kenney-furniture-kit-benchCushion': { 172 - component: BenchCushion, 173 - colors: 2, 174 - visible: false, 175 - placement: 'floor' 176 - }, 177 - 'kenney-furniture-kit-benchCushionLow': { 178 - component: BenchCushionLow, 179 - colors: 2, 180 - visible: false, 181 - placement: 'floor' 182 - }, 183 - 'kenney-furniture-kit-bookcaseClosed': { 184 - component: BookcaseClosed, 185 - colors: 2, 186 - visible: false, 187 - placement: 'floor' 188 - }, 189 - 'kenney-furniture-kit-cabinetBed': { 190 - component: CabinetBed, 191 - colors: 2, 192 - visible: false, 193 - placement: 'floor' 194 - }, 195 - 'kenney-furniture-kit-cabinetBedDrawer': { 196 - component: CabinetBedDrawer, 197 - colors: 2, 198 - visible: false, 199 - placement: 'floor' 200 - }, 201 - 'kenney-furniture-kit-cabinetBedDrawerTable': { 202 - component: CabinetBedDrawerTable, 203 - colors: 2, 204 - visible: false, 205 - placement: 'floor' 206 - }, 207 - 'kenney-furniture-kit-chair': { 208 - component: Chair, 209 - colors: 1, 210 - visible: false, 211 - placement: 'floor' 212 - }, 213 - 'kenney-furniture-kit-chairCushion': { 214 - component: ChairCushion, 215 - colors: 2, 216 - visible: false, 217 - placement: 'floor' 218 - }, 219 - 'kenney-furniture-kit-chairDesk': { 220 - component: ChairDesk, 221 - colors: 2, 222 - visible: false, 223 - placement: 'floor' 224 - }, 225 - 'kenney-furniture-kit-chairModernCushion': { 226 - component: ChairModernCushion, 227 - colors: 2, 228 - visible: false, 229 - placement: 'floor' 230 - }, 231 - 'kenney-furniture-kit-chairModernFrameCushion': { 232 - component: ChairModernFrameCushion, 233 - colors: 2, 234 - visible: false, 235 - placement: 'floor' 236 - }, 237 - 'kenney-furniture-kit-chairRounded': { 238 - component: ChairRounded, 239 - colors: 1, 240 - visible: false, 241 - placement: 'floor' 242 - }, 243 - 'kenney-furniture-kit-coatRackStanding': { 244 - component: CoatRackStanding, 245 - colors: 1, 246 - visible: false, 247 - placement: 'floor' 248 - }, 249 - 'kenney-furniture-kit-desk': { 250 - component: Desk, 251 - colors: 2, 252 - visible: false, 253 - placement: 'floor' 254 - }, 255 - 'kenney-furniture-kit-deskCorner': { 256 - component: DeskCorner, 257 - colors: 2, 258 - visible: false, 259 - placement: 'floor' 260 - }, 261 - 'kenney-furniture-kit-doorway': { 262 - component: Doorway, 263 - colors: 3, 264 - visible: false, 265 - placement: 'floor' 266 - }, 267 - 'kenney-furniture-kit-doorwayFront': { 268 - component: DoorwayFront, 269 - colors: 4, 270 - visible: false, 271 - placement: 'floor' 272 - }, 273 - 'kenney-furniture-kit-dryer': { 274 - component: Dryer, 275 - colors: 3, 276 - visible: false, 277 - placement: 'floor' 278 - }, 279 - 'kenney-furniture-kit-kitchenBar': { 280 - component: KitchenBar, 281 - colors: 3, 282 - visible: false, 283 - placement: 'floor' 284 - }, 285 - 'kenney-furniture-kit-kitchenCabinet': { 286 - component: KitchenCabinet, 287 - colors: 3, 288 - visible: false, 289 - placement: 'floor' 290 - }, 291 - 'kenney-furniture-kit-kitchenCabinetDrawer': { 292 - component: KitchenCabinetDrawer, 293 - colors: 3, 294 - visible: false, 295 - placement: 'floor' 296 - }, 297 - 'kenney-furniture-kit-rugDoormat': { 298 - component: RugDoormat, 299 - colors: 1, 300 - visible: false, 301 - placement: 'floor' 302 - }, 303 - 'kenney-furniture-kit-rugRectangle': { 304 - component: RugRectangle, 305 - colors: 2, 306 - visible: false, 307 - placement: 'floor' 308 - }, 309 - 'kenney-furniture-kit-rugRound': { 310 - component: RugRound, 311 - colors: 2, 312 - visible: false, 313 - placement: 'floor' 314 - }, 315 - 'kenney-furniture-kit-rugRounded': { 316 - component: RugRounded, 317 - colors: 2, 318 - visible: false, 319 - placement: 'floor' 320 - }, 321 - 'kenney-furniture-kit-rugSquare': { 322 - component: RugSquare, 323 - colors: 2, 324 - visible: false, 325 - placement: 'floor' 326 - }, 327 - 'kenney-furniture-kit-televisionModern': { 328 - component: TelevisionModern, 329 - colors: 2, 330 - visible: false, 331 - placement: 'floor' 332 - }, 333 - 'kaykit-furniture-kit-book_set': { 334 - component: KayKitBookSet, 335 - colors: 4, 336 - visible: true, 337 - placement: 'floor', 338 - image: false, 339 - scale: 0.4, 340 - category: 'miscellaneous' 341 - }, 342 - 'kaykit-furniture-kit-rug_rectangle-pattern': { 343 - component: KayKitRugRectanglePattern, 344 - colors: 2, 345 - visible: true, 346 - placement: 'floor', 347 - image: false, 348 - scale: 0.4, 349 - category: 'carpets' 350 - }, 351 - 'kaykit-furniture-kit-table_small': { 352 - component: KayKitTableSmall, 353 - colors: 1, 354 - visible: true, 355 - placement: 'floor', 356 - image: false, 357 - scale: 0.4, 358 - category: 'tables & cabinets' 359 - }, 360 - 'kaykit-furniture-kit-couch': { 361 - component: KayKitCouch, 362 - colors: 1, 363 - visible: true, 364 - placement: 'floor', 365 - image: false, 366 - scale: 0.4, 367 - category: 'chairs & sofas' 368 - }, 369 - 'kaykit-furniture-kit-armchair_pillows': { 370 - component: KayKitArmchairPillows, 371 - colors: 2, 372 - visible: true, 373 - placement: 'floor', 374 - image: false, 375 - scale: 0.4, 376 - category: 'chairs & sofas' 377 - }, 378 - 'kaykit-furniture-kit-chair_b_wood': { 379 - component: KayKitChairBWood, 380 - colors: 1, 381 - visible: true, 382 - placement: 'floor', 383 - image: false, 384 - scale: 0.4, 385 - category: 'chairs & sofas' 386 - }, 387 - 'kaykit-furniture-kit-shelf_b_big': { 388 - component: KayKitShelfBBig, 389 - colors: 2, 390 - visible: true, 391 - placement: 'wall', 392 - image: false, 393 - scale: 0.4, 394 - category: 'wall accessories' 395 - }, 396 - 'kaykit-furniture-kit-chair_desk_a': { 397 - component: KayKitChairDeskA, 398 - colors: 3, 399 - visible: true, 400 - placement: 'floor', 401 - image: false, 402 - scale: 0.4, 403 - category: 'desk & accessories' 404 - }, 405 - 'kaykit-furniture-kit-mousepad': { 406 - component: KayKitMousepad, 407 - colors: 1, 408 - visible: true, 409 - placement: 'floor', 410 - image: false, 411 - scale: 0.4, 412 - category: 'desk & accessories' 413 - }, 414 - 'kaykit-furniture-kit-pictureframe_standing_b': { 415 - component: KayKitPictureframeStandingB, 416 - colors: 1, 417 - visible: true, 418 - placement: 'floor', 419 - image: true, 420 - scale: 0.4, 421 - category: 'desk & accessories' 422 - }, 423 - 'kaykit-furniture-kit-bed_double_b': { 424 - component: KayKitBedDoubleB, 425 - colors: 3, 426 - visible: true, 427 - placement: 'floor', 428 - image: false, 429 - scale: 0.4, 430 - category: 'beds' 431 - }, 432 - 'kaykit-furniture-kit-shelf_a_small': { 433 - component: KayKitShelfASmall, 434 - colors: 2, 435 - visible: true, 436 - placement: 'wall', 437 - image: false, 438 - scale: 0.4, 439 - category: 'wall accessories' 440 - }, 441 - 'kaykit-furniture-kit-mug_a': { 442 - component: KayKitMugA, 443 - colors: 1, 444 - visible: true, 445 - placement: 'floor', 446 - image: false, 447 - scale: 0.4, 448 - category: 'desk & accessories' 449 - }, 450 - 'kaykit-furniture-kit-rug_rounded': { 451 - component: KayKitRugRounded, 452 - colors: 1, 453 - visible: true, 454 - placement: 'floor', 455 - image: false, 456 - scale: 0.4, 457 - category: 'carpets' 458 - }, 459 - 'kaykit-furniture-kit-mousepad_large': { 460 - component: KayKitMousepadLarge, 461 - colors: 2, 462 - visible: true, 463 - placement: 'floor', 464 - image: false, 465 - scale: 0.4, 466 - category: 'desk & accessories' 467 - }, 468 - 'kaykit-furniture-kit-cabinet_small': { 469 - component: KayKitCabinetSmall, 470 - colors: 3, 471 - visible: true, 472 - placement: 'floor', 473 - image: false, 474 - scale: 0.4, 475 - category: 'tables & cabinets' 476 - }, 477 - 'kaykit-furniture-kit-chair_a': { 478 - component: KayKitChairA, 479 - colors: 2, 480 - visible: true, 481 - placement: 'floor', 482 - image: false, 483 - scale: 0.4, 484 - category: 'chairs & sofas' 485 - }, 486 - 'kaykit-furniture-kit-chair_c': { 487 - component: KayKitChairC, 488 - colors: 2, 489 - visible: true, 490 - placement: 'floor', 491 - image: false, 492 - scale: 0.4, 493 - category: 'chairs & sofas' 494 - }, 495 - 'kaykit-furniture-kit-pictureframe_large_a': { 496 - component: KayKitPictureframeLargeA, 497 - colors: 1, 498 - visible: true, 499 - placement: 'wall', 500 - image: true, 501 - scale: 0.4, 502 - category: 'wall accessories' 503 - }, 504 - 'kaykit-furniture-kit-chair_a_wood': { 505 - component: KayKitChairAWood, 506 - colors: 1, 507 - visible: true, 508 - placement: 'floor', 509 - image: false, 510 - scale: 0.4, 511 - category: 'chairs & sofas' 512 - }, 513 - 'kaykit-furniture-kit-bed_single_b': { 514 - component: KayKitBedSingleB, 515 - colors: 3, 516 - visible: true, 517 - placement: 'floor', 518 - image: false, 519 - scale: 0.4, 520 - category: 'beds' 521 - }, 522 - 'kaykit-furniture-kit-chair_stool': { 523 - component: KayKitChairStool, 524 - colors: 2, 525 - visible: true, 526 - placement: 'floor', 527 - image: false, 528 - scale: 0.4, 529 - category: 'chairs & sofas' 530 - }, 531 - 'kaykit-furniture-kit-pictureframe_small_b': { 532 - component: KayKitPictureframeSmallB, 533 - colors: 1, 534 - visible: true, 535 - placement: 'wall', 536 - image: true, 537 - scale: 0.4, 538 - category: 'wall accessories' 539 - }, 540 - 'kaykit-furniture-kit-pillow': { 541 - component: KayKitPillow, 542 - colors: 1, 543 - visible: true, 544 - placement: 'floor', 545 - image: false, 546 - scale: 0.4, 547 - category: 'miscellaneous' 548 - }, 549 - 'kaykit-furniture-kit-gameconsole_handheld': { 550 - component: KayKitGameconsoleHandheld, 551 - colors: 3, 552 - visible: true, 553 - placement: 'floor', 554 - image: false, 555 - scale: 0.4, 556 - category: 'miscellaneous' 557 - }, 558 - 'kaykit-furniture-kit-bed_double_a': { 559 - component: KayKitBedDoubleA, 560 - colors: 3, 561 - visible: true, 562 - placement: 'floor', 563 - image: false, 564 - scale: 0.4, 565 - category: 'beds' 566 - }, 567 - 'kaykit-furniture-kit-pictureframe_standing_a': { 568 - component: KayKitPictureframeStandingA, 569 - colors: 1, 570 - visible: true, 571 - placement: 'floor', 572 - image: true, 573 - scale: 0.4, 574 - category: 'desk & accessories' 575 - }, 576 - 'kaykit-furniture-kit-cactus_large': { 577 - component: KayKitCactusLarge, 578 - colors: 2, 579 - visible: true, 580 - placement: 'floor', 581 - image: false, 582 - scale: 0.4, 583 - category: 'miscellaneous' 584 - }, 585 - 'kaykit-furniture-kit-couch_pillows': { 586 - component: KayKitCouchPillows, 587 - colors: 2, 588 - visible: true, 589 - placement: 'floor', 590 - image: false, 591 - scale: 0.4, 592 - category: 'chairs & sofas' 593 - }, 594 - 'kaykit-furniture-kit-pictureframe_medium': { 595 - component: KayKitPictureframeMedium, 596 - colors: 1, 597 - visible: true, 598 - placement: 'wall', 599 - image: true, 600 - scale: 0.4, 601 - category: 'wall accessories' 602 - }, 603 - 'kaykit-furniture-kit-armchair': { 604 - component: KayKitArmchair, 605 - colors: 1, 606 - visible: true, 607 - placement: 'floor', 608 - image: false, 609 - scale: 0.4, 610 - category: 'chairs & sofas' 611 - }, 612 - 'kaykit-furniture-kit-lamp_table': { 613 - component: KayKitLampTable, 614 - colors: 3, 615 - visible: true, 616 - placement: 'floor', 617 - image: false, 618 - scale: 0.4, 619 - category: 'lights' 620 - }, 621 - 'kaykit-furniture-kit-mouse': { 622 - component: KayKitMouse, 623 - colors: 2, 624 - visible: true, 625 - placement: 'floor', 626 - image: false, 627 - scale: 0.4, 628 - category: 'desk & accessories' 629 - }, 630 - 'kaykit-furniture-kit-mug_b': { 631 - component: KayKitMugB, 632 - colors: 1, 633 - visible: true, 634 - placement: 'floor', 635 - image: false, 636 - scale: 0.4, 637 - category: 'desk & accessories' 638 - }, 639 - 'kaykit-furniture-kit-book_single': { 640 - component: KayKitBookSingle, 641 - colors: 2, 642 - visible: true, 643 - placement: 'floor', 644 - image: false, 645 - scale: 0.4, 646 - category: 'miscellaneous' 647 - }, 648 - 'kaykit-furniture-kit-chair_desk_b': { 649 - component: KayKitChairDeskB, 650 - colors: 3, 651 - visible: true, 652 - placement: 'floor', 653 - image: false, 654 - scale: 0.4, 655 - category: 'desk & accessories' 656 - }, 657 - 'kaykit-furniture-kit-cactus_small': { 658 - component: KayKitCactusSmall, 659 - colors: 2, 660 - visible: true, 661 - placement: 'floor', 662 - image: false, 663 - scale: 0.4, 664 - category: 'miscellaneous' 665 - }, 666 - 'kaykit-furniture-kit-table_low': { 667 - component: KayKitTableLow, 668 - colors: 1, 669 - visible: true, 670 - placement: 'floor', 671 - image: false, 672 - scale: 0.4, 673 - category: 'tables & cabinets' 674 - }, 675 - 'kaykit-furniture-kit-lamp_standing': { 676 - component: KayKitLampStanding, 677 - colors: 3, 678 - visible: true, 679 - placement: 'floor', 680 - image: false, 681 - scale: 0.4, 682 - category: 'lights' 683 - }, 684 - 'kaykit-furniture-kit-desk': { 685 - component: KayKitDesk, 686 - colors: 3, 687 - visible: true, 688 - placement: 'floor', 689 - image: false, 690 - scale: 0.4, 691 - category: 'desk & accessories' 692 - }, 693 - 'kaykit-furniture-kit-rug_rectangle': { 694 - component: KayKitRugRectangle, 695 - colors: 1, 696 - visible: true, 697 - placement: 'floor', 698 - image: false, 699 - scale: 0.4, 700 - category: 'carpets' 701 - }, 702 - 'kaykit-furniture-kit-pictureframe_large_b': { 703 - component: KayKitPictureframeLargeB, 704 - colors: 1, 705 - visible: true, 706 - placement: 'wall', 707 - image: true, 708 - scale: 0.4, 709 - category: 'wall accessories' 710 - }, 711 - 'kaykit-furniture-kit-cup': { 712 - component: KayKitCup, 713 - colors: 1, 714 - visible: true, 715 - placement: 'floor', 716 - image: false, 717 - scale: 0.4, 718 - category: 'desk & accessories' 719 - }, 720 - 'kaykit-furniture-kit-pictureframe_small_a': { 721 - component: KayKitPictureframeSmallA, 722 - colors: 1, 723 - visible: true, 724 - placement: 'wall', 725 - image: true, 726 - scale: 0.4, 727 - category: 'wall accessories' 728 - }, 729 - 'kaykit-furniture-kit-keyboard': { 730 - component: KayKitKeyboard, 731 - colors: 3, 732 - visible: true, 733 - placement: 'floor', 734 - image: false, 735 - scale: 0.4, 736 - category: 'desk & accessories' 737 - }, 738 - 'kaykit-furniture-kit-bed_single_a': { 739 - component: KayKitBedSingleA, 740 - colors: 3, 741 - visible: true, 742 - placement: 'floor', 743 - image: false, 744 - scale: 0.4, 745 - category: 'beds' 746 - }, 747 - 'kaykit-furniture-kit-desk_large': { 748 - component: KayKitDeskLarge, 749 - colors: 3, 750 - visible: true, 751 - placement: 'floor', 752 - image: false, 753 - scale: 0.4, 754 - category: 'desk & accessories' 755 - }, 756 - 'kaykit-furniture-kit-monitor': { 757 - component: KayKitMonitor, 758 - colors: 1, 759 - visible: true, 760 - placement: 'floor', 761 - link: true, 762 - scale: 0.4, 763 - category: 'desk & accessories' 764 - }, 765 - 'kaykit-furniture-kit-lamp_desk': { 766 - component: KayKitLampDesk, 767 - colors: 3, 768 - visible: true, 769 - placement: 'floor', 770 - image: false, 771 - scale: 0.4, 772 - category: 'lights' 773 - }, 774 - 'kaykit-furniture-kit-chair_stool_wood': { 775 - component: KayKitChairStoolWood, 776 - colors: 1, 777 - visible: true, 778 - placement: 'floor', 779 - image: false, 780 - scale: 0.4, 781 - category: 'chairs & sofas' 782 - }, 783 - 'kaykit-furniture-kit-pictureframe_small_c': { 784 - component: KayKitPictureframeSmallC, 785 - colors: 1, 786 - visible: true, 787 - placement: 'wall', 788 - image: true, 789 - scale: 0.4, 790 - category: 'wall accessories' 791 - }, 792 - 'kaykit-furniture-kit-chair_b': { 793 - component: KayKitChairB, 794 - colors: 2, 795 - visible: true, 796 - placement: 'floor', 797 - image: false, 798 - scale: 0.4, 799 - category: 'chairs & sofas' 800 - }, 801 - 'kaykit-furniture-kit-shelf_a_big': { 802 - component: KayKitShelfABig, 803 - colors: 2, 804 - visible: true, 805 - placement: 'wall', 806 - image: false, 807 - scale: 0.4, 808 - category: 'wall accessories' 809 - }, 810 - 'kaykit-furniture-kit-table_medium_long': { 811 - component: KayKitTableMediumLong, 812 - colors: 1, 813 - visible: true, 814 - placement: 'floor', 815 - image: false, 816 - scale: 0.4, 817 - category: 'tables & cabinets' 818 - }, 819 - 'kaykit-furniture-kit-cup_pencils': { 820 - component: KayKitCupPencils, 821 - colors: 4, 822 - visible: true, 823 - placement: 'floor', 824 - image: false, 825 - scale: 0.4, 826 - category: 'desk & accessories' 827 - }, 828 - 'kaykit-furniture-kit-table_medium': { 829 - component: KayKitTableMedium, 830 - colors: 1, 831 - visible: true, 832 - placement: 'floor', 833 - image: false, 834 - scale: 0.4, 835 - category: 'tables & cabinets' 836 - }, 837 - 'kaykit-furniture-kit-shelf_b_small': { 838 - component: KayKitShelfBSmall, 839 - colors: 2, 840 - visible: true, 841 - placement: 'wall', 842 - image: false, 843 - scale: 0.4, 844 - category: 'wall accessories' 845 - }, 846 - 'kaykit-furniture-kit-cabinet_medium': { 847 - component: KayKitCabinetMedium, 848 - colors: 3, 849 - visible: true, 850 - placement: 'floor', 851 - image: false, 852 - scale: 0.4, 853 - category: 'tables & cabinets' 854 - }, 855 - 'tiny-treats-bubbly-bathroom-plant': { 856 - component: Plant, 857 - colors: 2, 858 - visible: true, 859 - placement: 'floor', 860 - image: false, 861 - scale: 0.4, 862 - category: 'miscellaneous' 863 - } 864 - }; 865 - 866 - export const visibleObjects = Object.fromEntries( 867 - Object.entries(AllObjects) 868 - .filter(([, value]) => value.visible !== false) 869 - .sort((a, b) => a[0].localeCompare(b[0])) 870 - ); 871 - export const visibleKeys = Object.keys(visibleObjects); 872 - 873 - export const objectCategories = Array.from( 874 - new Set(Object.values(visibleObjects).map((object) => object.category)) 875 - ); 876 - 877 - export type RoomObjectKind = keyof typeof AllObjects;
-182
src/lib/state.svelte.ts
··· 1 - import type { TransformControls } from '@threlte/extras'; 2 - import { AllObjects, type RoomObjectKind } from './models'; 3 - import { trackEvent } from './analytics'; 4 - 5 - export const currentVersion = 0; 6 - 7 - export const roomState: { 8 - wallColor: string; 9 - floorColor: string; 10 - objects: RoomObjectData[]; 11 - 12 - size: { x: number; z: number }; 13 - 14 - id: number; 15 - 16 - version: number; 17 - 18 - did: string; 19 - } = $state({ 20 - wallColor: '#f1f1f1', 21 - floorColor: '#a1a1a1', 22 - 23 - objects: [], 24 - 25 - size: { x: 2, z: 3 }, 26 - 27 - id: 0, 28 - 29 - version: currentVersion, 30 - 31 - did: '' 32 - }); 33 - 34 - export const editorState: { 35 - startIndex: number; 36 - shownCount: number; 37 - 38 - selectedObject: RoomObjectData | null; 39 - transformControls: TransformControls | undefined; 40 - placingObject: RoomObjectData | null; 41 - 42 - isEditing: boolean; 43 - } = $state({ 44 - startIndex: 0, 45 - shownCount: 3, 46 - 47 - selectedObject: null, 48 - transformControls: undefined, 49 - placingObject: null, 50 - 51 - isEditing: false 52 - }); 53 - 54 - export type BlueskyBlob = { 55 - $type: 'blob'; 56 - ref: { 57 - $link: string; 58 - }; 59 - mimeType: string; 60 - size: number; 61 - }; 62 - 63 - export type RoomObjectData = { 64 - kind: RoomObjectKind; 65 - position: [number, number, number]; 66 - rotation: number; 67 - colors: string[]; 68 - placement: 'floor' | 'wallX' | 'wallZ'; 69 - link?: string; 70 - image?: string | BlueskyBlob; 71 - }; 72 - 73 - export function applyTransformOfSelected() { 74 - if (editorState.selectedObject && editorState.transformControls?.object) { 75 - editorState.selectedObject.position = [ 76 - editorState.transformControls.object.position.x, 77 - editorState.transformControls.object.position.y, 78 - editorState.transformControls.object.position.z 79 - ]; 80 - 81 - if (editorState.selectedObject.placement === 'wallX') { 82 - editorState.selectedObject.rotation = editorState.transformControls.object.rotation.x; 83 - } else if (editorState.selectedObject.placement === 'wallZ') { 84 - editorState.selectedObject.rotation = editorState.transformControls.object.rotation.z; 85 - } else { 86 - editorState.selectedObject.rotation = editorState.transformControls.object.rotation.y; 87 - } 88 - 89 - saveRoomToLocalStorage(); 90 - } 91 - } 92 - 93 - export function saveRoomToLocalStorage() { 94 - trackEvent('room_save_local', { count: roomState.objects.length }); 95 - 96 - localStorage.setItem('roomState', JSON.stringify(roomState)); 97 - } 98 - 99 - export function rotateObject(rotation: number) { 100 - if (editorState.selectedObject) { 101 - applyTransformOfSelected(); 102 - 103 - const selectedObject = editorState.selectedObject; 104 - editorState.selectedObject = null; 105 - 106 - setTimeout(() => { 107 - // rotate right 108 - selectedObject.rotation -= rotation; 109 - editorState.selectedObject = selectedObject; 110 - }, 0); 111 - saveRoomToLocalStorage(); 112 - } else if (editorState.placingObject) { 113 - editorState.placingObject.rotation = (editorState.placingObject.rotation ?? 0) - rotation; 114 - saveRoomToLocalStorage(); 115 - } 116 - } 117 - 118 - export function rotateRight() { 119 - rotateObject(Math.PI / 8); 120 - } 121 - 122 - export function rotateLeft() { 123 - rotateObject(-Math.PI / 8); 124 - } 125 - 126 - export function tryLoadingRoomFromLocalStorage(otherWiseReset: boolean = false) { 127 - const room = localStorage.getItem('roomState'); 128 - if (room) { 129 - trackEvent('room_load_local', { count: roomState.objects.length }); 130 - 131 - const roomObject = JSON.parse(room); 132 - roomState.floorColor = roomObject.floorColor; 133 - roomState.wallColor = roomObject.wallColor; 134 - roomState.objects = roomObject.objects; 135 - roomState.size = roomObject.size; 136 - roomState.id = roomObject.id ?? Math.random(); 137 - roomState.did = roomObject.did; 138 - } else if (otherWiseReset) { 139 - roomState.floorColor = '#a1a1a1'; 140 - roomState.wallColor = '#f1f1f1'; 141 - roomState.objects = []; 142 - roomState.size = { x: 2, z: 3 }; 143 - roomState.id = Math.random(); 144 - roomState.version = currentVersion; 145 - roomState.did = ''; 146 - } 147 - } 148 - 149 - export function deleteSelectedObject() { 150 - roomState.objects = roomState.objects.filter((object) => object !== editorState.selectedObject); 151 - 152 - editorState.selectedObject = null; 153 - 154 - saveRoomToLocalStorage(); 155 - } 156 - 157 - export function placeObject(point: { x: number; y: number; z: number }) { 158 - if (editorState.placingObject) { 159 - roomState.objects.push(editorState.placingObject); 160 - editorState.placingObject.position = [point.x, point.y, point.z]; 161 - editorState.selectedObject = editorState.placingObject; 162 - 163 - editorState.placingObject = null; 164 - 165 - saveRoomToLocalStorage(); 166 - } 167 - } 168 - 169 - export function makeSelectedObjectPlacingObject() { 170 - if (editorState.selectedObject && !editorState.placingObject) { 171 - editorState.placingObject = editorState.selectedObject; 172 - roomState.objects = roomState.objects.filter((object) => object !== editorState.selectedObject); 173 - } 174 - } 175 - 176 - export function getPossiblePlacementForPlacingObject() { 177 - if (!editorState.placingObject) return undefined; 178 - 179 - const object = editorState.placingObject; 180 - 181 - return AllObjects[object.kind]?.placement ?? 'floor'; 182 - }
-54
src/lib/ui-state.svelte.ts
··· 1 - import { trackEvent } from './analytics'; 2 - import { AllObjects } from './models'; 3 - import { getRoom, resolveHandle } from './oauth/auth.svelte'; 4 - import { roomState, type RoomObjectData } from './state.svelte'; 5 - import type { ProfileViewDetailed } from '@atproto/api/dist/client/types/app/bsky/actor/defs'; 6 - 7 - export const modals = $state({ 8 - selectCategoryModalOpen: false, 9 - roomSettingsModalState: false, 10 - linkModalState: false, 11 - infoModalState: false, 12 - successModalState: false, 13 - signInSuccessModalState: false 14 - }); 15 - 16 - export const userInfo: { 17 - handle: string; 18 - did: string; 19 - profile: ProfileViewDetailed | null; 20 - } = $state({ 21 - handle: '', 22 - did: '', 23 - profile: null 24 - }); 25 - 26 - export async function loadRoomFromBluesky(handle: string) { 27 - const did = await resolveHandle({ handle }); 28 - const room = await getRoom({ did }); 29 - 30 - roomState.did = room.room.did || did; 31 - roomState.wallColor = room.room.wallColor; 32 - roomState.floorColor = room.room.floorColor; 33 - 34 - const availableObjects = new Set(Object.keys(AllObjects)); 35 - 36 - roomState.objects = room.room.objects.filter((object: RoomObjectData) => 37 - availableObjects.has(object.kind as string) 38 - ); 39 - if (roomState.objects.length !== room.room.objects.length) { 40 - console.warn('some objects were not found and removed!'); 41 - } 42 - 43 - roomState.size = room.room.size; 44 - roomState.id = room.room.id; 45 - roomState.version = room.room.version; 46 - 47 - userInfo.profile = room.profile; 48 - 49 - trackEvent('room_view', { 50 - view_handle: handle 51 - }); 52 - 53 - return room.profile; 54 - }
+3 -4
src/routes/+page.svelte
··· 1 1 <script lang="ts"> 2 2 import { Canvas } from '@threlte/core'; 3 - import Scene from '$lib/Scene.svelte'; 3 + import Scene from '$lib/room/Scene.svelte'; 4 4 import { onMount } from 'svelte'; 5 5 import { client } from '$lib/oauth/auth.svelte'; 6 6 import { ··· 8 8 deleteSelectedObject, 9 9 editorState, 10 10 makeSelectedObjectPlacingObject, 11 - roomState, 12 11 rotateLeft, 13 12 rotateRight, 14 13 tryLoadingRoomFromLocalStorage 15 - } from '$lib/state.svelte'; 14 + } from '$lib/room/state.svelte'; 16 15 import { Button } from '$lib/components/base/button'; 17 16 import Modal from '$lib/components/base/modal/Modal.svelte'; 18 17 import Heading from '$lib/components/base/heading/Heading.svelte'; 19 18 20 19 import EditorUi from './EditorUI.svelte'; 21 20 import PreviewUi from './PreviewUI.svelte'; 22 - import { loadRoomFromBluesky, modals, userInfo } from '$lib/ui-state.svelte'; 21 + import { loadRoomFromBluesky, modals, userInfo } from '$lib/room/ui-state.svelte'; 23 22 24 23 let loading = $state(true); 25 24
-1
src/routes/ColorPickerPopover.svelte
··· 8 8 rgb_to_hex, 9 9 rgb_to_okhsv 10 10 } from '$lib/components/extra/color-picker/color'; 11 - import { editorState } from '$lib/state.svelte'; 12 11 import { cn } from '$lib/utils'; 13 12 14 13 let {
+3 -3
src/routes/EditorUI.svelte
··· 1 1 <script lang="ts"> 2 2 import { Button } from '$lib/components/base/button'; 3 - import { AllObjects } from '$lib/models'; 3 + import { AllObjects } from '$lib/room/models'; 4 4 import { client } from '$lib/oauth'; 5 5 import { 6 6 applyTransformOfSelected, ··· 11 11 rotateLeft, 12 12 rotateRight, 13 13 saveRoomToLocalStorage 14 - } from '$lib/state.svelte'; 14 + } from '$lib/room/state.svelte'; 15 15 import ColorPickerPopover from './ColorPickerPopover.svelte'; 16 16 17 17 import * as Popover from '$lib/components/base/popover'; ··· 27 27 import { Heading, Subheading } from '$lib/components/base/heading'; 28 28 import NumberInput from '$lib/components/base/number-input/NumberInput.svelte'; 29 29 import { Input } from '$lib/components/base/input'; 30 - import { loadRoomFromBluesky, modals, userInfo } from '$lib/ui-state.svelte'; 30 + import { loadRoomFromBluesky, modals, userInfo } from '$lib/room/ui-state.svelte'; 31 31 import { blueskyLoginModalState } from '$lib/components/base/modal/BlueskyLoginModal.svelte'; 32 32 import { toast } from 'svelte-sonner'; 33 33 import Picker from './Picker.svelte';
+2 -3
src/routes/ImageSelector.svelte
··· 1 1 <script lang="ts"> 2 - import { deleteImage, getAllImageNames, getImage, openDB, saveImage } from '$lib/images.svelte'; 2 + import { deleteImage, getAllImageNames, getImage, openDB, saveImage } from '$lib/room/images.svelte'; 3 3 import { onMount } from 'svelte'; 4 4 import * as Popover from '$lib/components/base/popover'; 5 5 import { cn } from '$lib/utils'; 6 - import { editorState } from '$lib/state.svelte'; 6 + import { editorState } from '$lib/room/state.svelte'; 7 7 import { buttonVariants } from '$lib/components/base/button'; 8 - import { uploadImage } from '$lib/oauth/auth.svelte'; 9 8 10 9 // Open the IndexedDB on component mount 11 10 onMount(async () => {
+2 -2
src/routes/Picker.svelte
··· 2 2 import { Canvas } from '@threlte/core'; 3 3 import { View } from '@threlte/extras'; 4 4 import Scene from './Scene.svelte'; 5 - import { objectCategories, visibleObjects, type RoomObjectKind } from '$lib/models'; 5 + import { objectCategories, visibleObjects, type RoomObjectKind } from '$lib/room/models'; 6 6 import Button from '$lib/components/base/button/Button.svelte'; 7 7 import Modal from '$lib/components/base/modal/Modal.svelte'; 8 - import { applyTransformOfSelected, editorState } from '$lib/state.svelte'; 8 + import { applyTransformOfSelected, editorState } from '$lib/room/state.svelte'; 9 9 import Subheading from '$lib/components/base/heading/Subheading.svelte'; 10 10 11 11 let items: { kind: string; dom: HTMLElement | undefined }[] = $state([]);
+2 -2
src/routes/PreviewUI.svelte
··· 5 5 import { Heading } from '$lib/components/base/heading'; 6 6 import Modal from '$lib/components/base/modal/Modal.svelte'; 7 7 import { client } from '$lib/oauth'; 8 - import { editorState, tryLoadingRoomFromLocalStorage } from '$lib/state.svelte'; 9 - import { modals, userInfo } from '$lib/ui-state.svelte'; 8 + import { editorState, tryLoadingRoomFromLocalStorage } from '$lib/room/state.svelte'; 9 + import { modals, userInfo } from '$lib/room/ui-state.svelte'; 10 10 </script> 11 11 12 12 <div class="pointer-events-none fixed top-8 right-4 left-4 flex items-center justify-center gap-2">
+2 -2
src/routes/Scene.svelte
··· 1 1 <script lang="ts"> 2 - import RoomObject from '$lib/RoomObject.svelte'; 2 + import RoomObject from '$lib/room/RoomObject.svelte'; 3 3 import { T, useTask } from '@threlte/core'; 4 - import { interactivity } from '@threlte/extras'; 4 + import { Align, interactivity } from '@threlte/extras'; 5 5 6 6 interactivity(); 7 7 let { kind } = $props();
-30
src/lib/models/RoomObjectMaterial.svelte
··· 1 - <script lang="ts"> 2 - import { T, type Props } from '@threlte/core'; 3 - import { defaultColorImage, defaultColors } from './types'; 4 - import type { MeshStandardMaterial } from 'three'; 5 - 6 - let { 7 - index, 8 - colors, 9 - opacity, 10 - youtube, 11 - isImage, 12 - ...props 13 - }: { 14 - index?: number; 15 - colors?: string[]; 16 - opacity?: number; 17 - youtube?: string; 18 - } & Props<MeshStandardMaterial> = $props(); 19 - 20 - function getColor() { 21 - return colors?.[index ?? 0] ?? defaultColors[index ?? 0]; 22 - } 23 - </script> 24 - 25 - <T.MeshStandardMaterial 26 - color={getColor()} 27 - {opacity} 28 - transparent={opacity ? opacity < 1 : false} 29 - {...props} 30 - />
-86
src/lib/models/script.ts
··· 1 - import * as fs from 'fs'; 2 - import * as path from 'path'; 3 - 4 - // Helper: Remove file extension from a filename 5 - function removeExtension(fileName: string): string { 6 - return fileName.replace(/\.svelte$/, ''); 7 - } 8 - 9 - // Helper: Convert snake_case or kebab-case to PascalCase 10 - function toPascalCase(str: string): string { 11 - return str 12 - .split(/[_-]/) 13 - .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) 14 - .join(''); 15 - } 16 - 17 - // Main function to process .svelte files and generate the output string 18 - function generateModels(folder: string, base: string): string { 19 - const files = fs.readdirSync(folder); 20 - const svelteFiles = files.filter((file) => file.endsWith('.svelte')); 21 - 22 - const importStatements: string[] = []; 23 - const modelEntries: string[] = []; 24 - 25 - // Regex to match: <RoomObjectMaterial index={X} {colors} {opacity} /> 26 - // where X is a single digit 27 - const indexRegex = /<RoomObjectMaterial\s+index=\{(\d)\}\s+\{colors\}\s+\{opacity\}\s*\/>/g; 28 - 29 - for (const file of svelteFiles) { 30 - const filePath = path.join(folder, file); 31 - const content = fs.readFileSync(filePath, 'utf-8'); 32 - 33 - // Find all index values in the file 34 - const indices: number[] = []; 35 - let match: RegExpExecArray | null; 36 - while ((match = indexRegex.exec(content)) !== null) { 37 - indices.push(Number(match[1])); 38 - } 39 - 40 - if (indices.length === 0) { 41 - throw new Error(`No RoomObjectMaterial with index found in ${file}`); 42 - } 43 - 44 - // Verify indices form a continuous sequence from 0 to n-1. 45 - indices.sort((a, b) => a - b); 46 - for (let i = 0; i < indices.length; i++) { 47 - if (indices[i] !== i) { 48 - throw new Error(`File ${file}: expected index ${i} but found ${indices[i]}`); 49 - } 50 - } 51 - 52 - const colorsCount = indices.length; 53 - 54 - // Check if file contains the image component pattern: 55 - // <RoomObjectMaterial {image} {colors} {opacity} /> 56 - const image = content.includes(`<RoomObjectMaterial {image} {colors} {opacity} />`); 57 - 58 - // visible is always true. 59 - const visible = true; 60 - 61 - // Create component variable name and key based on the file name. 62 - const keyName = removeExtension(file); // e.g. "component_a" 63 - const componentVar = toPascalCase(keyName); // e.g. "ComponentA" 64 - 65 - // Construct the import statement. 66 - importStatements.push(`import KayKit${componentVar} from '${base}/${file}';`); 67 - 68 - // Construct the model entry. 69 - const modelEntry = `'kaykit-furniture-kit-${keyName}': { 70 - component: KayKit${componentVar}, 71 - colors: ${colorsCount}, 72 - visible: ${visible}, 73 - image: ${image} 74 - }`; 75 - modelEntries.push(modelEntry); 76 - } 77 - 78 - // Build the final string output. 79 - const output = 80 - importStatements.join('\n') + '\n\n' + 'const models = {\n' + modelEntries.join(',\n') + '\n};'; 81 - 82 - return output; 83 - } 84 - 85 - const result = generateModels('./kaykit-furniture-kit', './models/kaykit-furniture-kit/'); 86 - console.log(result);
-9
src/lib/models/types.ts
··· 1 - export type ExtraRoomObjectProps = { 2 - colors?: string[]; 3 - opacity?: number; 4 - link?: string; 5 - }; 6 - 7 - export const defaultColorImage = '#000000'; 8 - 9 - export const defaultColors = ['#ffffff', '#aaaaaa', '#555555', '#333333'];
+3 -4
src/lib/oauth/auth.svelte.ts
··· 17 17 editorState, 18 18 roomState, 19 19 type BlueskyBlob 20 - } from '$lib/state.svelte'; 21 - import { toast } from 'svelte-sonner'; 22 - import { modals } from '$lib/ui-state.svelte'; 23 - import { getImage } from '$lib/images.svelte'; 20 + } from '$lib/room/state.svelte'; 21 + import { modals } from '$lib/room/ui-state.svelte'; 22 + import { getImage } from '$lib/room/images.svelte'; 24 23 import { trackEvent } from '$lib/analytics'; 25 24 26 25 export const client = $state({
+44
src/lib/room/Image.svelte
··· 1 + <script lang="ts"> 2 + import type { Props } from '@threlte/core'; 3 + import { HTML } from '@threlte/extras'; 4 + import type * as THREE from 'three'; 5 + import { getImage } from './images.svelte'; 6 + import { getImageBlobUrl } from '$lib/oauth/auth.svelte'; 7 + import { roomState } from './state.svelte'; 8 + 9 + let { 10 + ref = $bindable(), 11 + size = [270, 150], 12 + image, 13 + ...props 14 + }: Props<THREE.Group> & { 15 + ref?: THREE.Group; 16 + size?: [number, number]; 17 + image?: string; 18 + } = $props(); 19 + 20 + let myImage = $derived.by(() => { 21 + if (!image) return; 22 + 23 + if (typeof image === 'string' && image.startsWith('local:')) { 24 + return getImage(image.replace('local:', '')); 25 + // @ts-ignore 26 + } else if (typeof image === 'object' && image.$type === 'blob' && roomState.did) { 27 + // @ts-ignore 28 + return getImageBlobUrl({ did: roomState.did, link: image.ref.$link }); 29 + } 30 + return null; 31 + }); 32 + </script> 33 + 34 + {#if image} 35 + <HTML transform bind:ref occlude="blending" scale={0.1} pointerEvents="none" {...props}> 36 + <div style="width: {size?.[0] ?? 270}px; height: {size?.[1] ?? 150}px;" class="bg-black"> 37 + {#await myImage then myImage} 38 + {#if myImage} 39 + <img src={myImage} alt="" class="h-full w-full touch-none object-cover select-none" /> 40 + {/if} 41 + {/await} 42 + </div> 43 + </HTML> 44 + {/if}
+83
src/lib/room/Outline.svelte
··· 1 + <script lang="ts"> 2 + import { Mesh } from 'three'; 3 + import { useTask, useThrelte } from '@threlte/core'; 4 + import { 5 + BlendFunction, 6 + EffectComposer, 7 + EffectPass, 8 + OutlineEffect, 9 + RenderPass 10 + } from 'postprocessing'; 11 + import { editorState } from './state.svelte'; 12 + 13 + const { scene, renderer, camera, size, autoRender, renderStage } = useThrelte(); 14 + 15 + const composer = new EffectComposer(renderer); 16 + 17 + const renderPass = new RenderPass(scene); 18 + composer.addPass(renderPass); 19 + $effect(() => { 20 + composer.setSize($size.width, $size.height); 21 + }); 22 + 23 + export const outlineEffectOptions: ConstructorParameters<typeof OutlineEffect>[2] = { 24 + blendFunction: BlendFunction.ALPHA, 25 + edgeStrength: 100, 26 + pulseSpeed: 0.0, 27 + visibleEdgeColor: 0xf59e0b, 28 + hiddenEdgeColor: 0xf59e0b, 29 + blur: true 30 + }; 31 + 32 + const outlineEffect = new OutlineEffect(scene, undefined, outlineEffectOptions); 33 + $effect(() => { 34 + if (!editorState.transformControls?.object) return; 35 + 36 + setTimeout(() => { 37 + outlineEffect.selection.clear(); 38 + 39 + editorState.transformControls?.object.traverse((child) => { 40 + if (child instanceof Mesh) { 41 + outlineEffect.selection.add(child); 42 + } 43 + }); 44 + }, 0); 45 + 46 + return () => { 47 + outlineEffect.selection.clear(); 48 + }; 49 + }); 50 + 51 + const outlineEffectPass = new EffectPass(undefined, outlineEffect); 52 + composer.addPass(outlineEffectPass); 53 + 54 + $effect(() => { 55 + renderPass.mainCamera = $camera; 56 + outlineEffect.mainCamera = $camera; 57 + outlineEffectPass.mainCamera = $camera; 58 + }); 59 + 60 + $effect(() => { 61 + return () => { 62 + composer.removeAllPasses(); 63 + outlineEffectPass.dispose(); 64 + renderPass.dispose(); 65 + composer.dispose(); 66 + }; 67 + }); 68 + 69 + $effect(() => { 70 + const last = autoRender.current; 71 + autoRender.set(false); 72 + return () => { 73 + autoRender.set(last); 74 + }; 75 + }); 76 + 77 + useTask( 78 + (delta) => { 79 + composer.render(delta); 80 + }, 81 + { stage: renderStage, autoInvalidate: false } 82 + ); 83 + </script>
+211
src/lib/room/Room.svelte
··· 1 + <script lang="ts"> 2 + import * as THREE from 'three'; 3 + import { T } from '@threlte/core'; 4 + import { 5 + applyTransformOfSelected, 6 + editorState, 7 + getPossiblePlacementForPlacingObject, 8 + placeObject, 9 + roomState, 10 + type RoomObjectData 11 + } from './state.svelte'; 12 + import RoomObject from './RoomObject.svelte'; 13 + import { Grid, RoundedBoxGeometry, TransformControls } from '@threlte/extras'; 14 + 15 + type PointerEvent = { 16 + stopPropagation: () => void; 17 + point: { x: number; y: number; z: number }; 18 + normal: { x: number; y: number; z: number }; 19 + }; 20 + </script> 21 + 22 + <T.Group position.y={-1}> 23 + <T.Mesh 24 + onpointermove={(e: PointerEvent) => { 25 + if (getPossiblePlacementForPlacingObject() !== 'wall') return; 26 + 27 + e.stopPropagation(); 28 + 29 + if (editorState.placingObject) { 30 + editorState.placingObject.placement = 'wallZ'; 31 + editorState.placingObject.position = [e.point.x, e.point.y + 1, e.point.z]; 32 + } 33 + }} 34 + onclick={(e: PointerEvent) => { 35 + if (getPossiblePlacementForPlacingObject() !== 'wall') return; 36 + 37 + e.stopPropagation(); 38 + 39 + if (editorState.placingObject) { 40 + editorState.placingObject.placement = 'wallZ'; 41 + placeObject({ x: e.point.x, y: e.point.y + 1, z: e.point.z }); 42 + } 43 + }} 44 + position={[-0.05, 1 - 0.099, -roomState.size.x / 2 - 0.1]} 45 + receiveShadow 46 + castShadow 47 + ondblclick={() => { 48 + if (editorState.selectedObject) { 49 + applyTransformOfSelected(); 50 + 51 + editorState.selectedObject = null; 52 + } 53 + }} 54 + > 55 + <RoundedBoxGeometry args={[roomState.size.z + 0.18, 2, 0.1]} radius={0.03} /> 56 + <T.MeshStandardMaterial color={roomState.wallColor} /> 57 + </T.Mesh> 58 + 59 + <T.Mesh 60 + onpointermove={(e: PointerEvent) => { 61 + if (getPossiblePlacementForPlacingObject() !== 'wall') return; 62 + 63 + e.stopPropagation(); 64 + 65 + if (editorState.placingObject) { 66 + editorState.placingObject.placement = 'wallX'; 67 + editorState.placingObject.position = [e.point.x, e.point.y + 1, e.point.z]; 68 + } 69 + }} 70 + onclick={(e: PointerEvent) => { 71 + if (getPossiblePlacementForPlacingObject() !== 'wall') return; 72 + 73 + e.stopPropagation(); 74 + 75 + if (editorState.placingObject) { 76 + editorState.placingObject.placement = 'wallX'; 77 + placeObject({ x: e.point.x, y: e.point.y + 1, z: e.point.z }); 78 + } 79 + }} 80 + position={[-roomState.size.z / 2 - 0.1, 1 - 0.099, -0.05]} 81 + receiveShadow 82 + castShadow 83 + ondblclick={() => { 84 + if (editorState.selectedObject) { 85 + applyTransformOfSelected(); 86 + 87 + editorState.selectedObject = null; 88 + } 89 + }} 90 + > 91 + <RoundedBoxGeometry args={[0.1, 2, roomState.size.x + 0.18]} radius={0.03} /> 92 + <T.MeshStandardMaterial color={roomState.wallColor} /> 93 + </T.Mesh> 94 + 95 + {#if editorState.isEditing} 96 + <Grid 97 + gridSize={[roomState.size.z * 2, roomState.size.x * 2]} 98 + scale={0.5} 99 + sectionThickness={0} 100 + name="grid" 101 + /> 102 + {/if} 103 + 104 + <T.Mesh 105 + position={[-0.05, -0.0502, -0.05]} 106 + onpointermove={(e: PointerEvent) => { 107 + if (getPossiblePlacementForPlacingObject() !== 'floor') return; 108 + 109 + e.stopPropagation(); 110 + 111 + if (editorState.placingObject) { 112 + editorState.placingObject.position = [e.point.x, e.point.y + 1, e.point.z]; 113 + } 114 + }} 115 + onclick={(e: PointerEvent) => { 116 + if (getPossiblePlacementForPlacingObject() !== 'floor') return; 117 + 118 + e.stopPropagation(); 119 + 120 + placeObject({ x: e.point.x, y: e.point.y + 1, z: e.point.z }); 121 + }} 122 + ondblclick={() => { 123 + if (editorState.selectedObject) { 124 + applyTransformOfSelected(); 125 + 126 + editorState.selectedObject = null; 127 + } 128 + }} 129 + receiveShadow 130 + > 131 + <RoundedBoxGeometry 132 + args={[roomState.size.z + 0.15, 0.1, roomState.size.x + 0.15]} 133 + radius={0.03} 134 + /> 135 + <!-- <T.BoxGeometry args={[roomState.size.z, 0.1, roomState.size.x]} /> --> 136 + <T.MeshStandardMaterial color={roomState.floorColor} /> 137 + </T.Mesh> 138 + 139 + {#each roomState.objects as object, index (object.kind + index.toString())} 140 + {#if editorState.selectedObject === object} 141 + <TransformControls 142 + bind:controls={editorState.transformControls} 143 + position={object.position} 144 + showX={object.placement !== 'wallX'} 145 + showZ={object.placement !== 'wallZ'} 146 + rotation={[ 147 + object.placement === 'wallX' ? object.rotation : 0, 148 + object.placement === 'floor' ? object.rotation : 0, 149 + object.placement === 'wallZ' ? object.rotation : 0 150 + ]} 151 + enableRotate={false} 152 + onchange={(e) => { 153 + if (!e.target || !e.target.object) return; 154 + 155 + e.target.object.position.clamp( 156 + new THREE.Vector3(-roomState.size.z / 2 - 0.1, 0, -roomState.size.x / 2 - 0.1), 157 + new THREE.Vector3(roomState.size.z / 2 + 0.1, 2, roomState.size.x / 2 + 0.1) 158 + ); 159 + }} 160 + > 161 + <RoomObject 162 + kind={object.kind} 163 + colors={object.colors} 164 + placement={object.placement} 165 + image={object.image} 166 + /> 167 + </TransformControls> 168 + {:else if editorState.isEditing} 169 + <T.Group 170 + onclick={(evt: PointerEvent) => { 171 + if (editorState.placingObject) { 172 + if (getPossiblePlacementForPlacingObject() !== 'floor') return; 173 + 174 + evt.stopPropagation(); 175 + placeObject({ x: evt.point.x, y: evt.point.y + 1, z: evt.point.z }); 176 + return; 177 + } 178 + evt.stopPropagation(); 179 + 180 + applyTransformOfSelected(); 181 + 182 + editorState.selectedObject = null; 183 + 184 + setTimeout(() => { 185 + editorState.selectedObject = object; 186 + }, 0); 187 + }} 188 + onpointermove={(e: PointerEvent) => { 189 + if (editorState.placingObject) { 190 + if (getPossiblePlacementForPlacingObject() !== 'floor') return; 191 + 192 + editorState.placingObject.position = [e.point.x, e.point.y + 1, e.point.z]; 193 + e.stopPropagation(); 194 + } 195 + }} 196 + > 197 + <RoomObject {...object} /> 198 + </T.Group> 199 + {:else} 200 + <RoomObject {...object} /> 201 + {/if} 202 + {/each} 203 + 204 + {#if editorState.placingObject} 205 + <RoomObject 206 + {...editorState.placingObject} 207 + colors={['#f1f1f1', '#f1f1f1', '#f1f1f1', '#f1f1f1', '#f1f1f1']} 208 + opacity={0.8} 209 + /> 210 + {/if} 211 + </T.Group>
+42
src/lib/room/RoomObject.svelte
··· 1 + <script lang="ts"> 2 + import { type Props } from '@threlte/core'; 3 + import type * as THREE from 'three'; 4 + import { AllObjects, type RoomObjectKind } from './models'; 5 + 6 + let { 7 + kind, 8 + selected, 9 + colors, 10 + opacity, 11 + scale, 12 + rotation, 13 + placement, 14 + ...restProps 15 + }: { 16 + kind: RoomObjectKind; 17 + selected?: boolean; 18 + colors?: string[]; 19 + opacity?: number; 20 + rotation?: number; 21 + placement?: 'floor' | 'wallX' | 'wallZ'; 22 + } & Props<THREE.Group> = $props(); 23 + 24 + let ObjectComponent = AllObjects[kind]?.component; 25 + </script> 26 + 27 + {@render object()} 28 + 29 + {#snippet object()} 30 + <ObjectComponent 31 + {...restProps} 32 + {colors} 33 + {opacity} 34 + scale={scale ?? AllObjects[kind]?.scale ?? 1} 35 + rotation={[ 36 + placement === 'wallX' ? (rotation ?? 0) : 0, 37 + (placement === 'floor' ? (rotation ?? 0) : 0) + (placement === 'wallX' ? Math.PI / 2 : 0), 38 + placement === 'wallZ' ? (rotation ?? 0) : 0 39 + ]} 40 + {placement} 41 + /> 42 + {/snippet}
+106
src/lib/room/Scene.svelte
··· 1 + <script lang="ts"> 2 + import { T, useThrelte } from '@threlte/core'; 3 + import { Environment, OrbitControls } from '@threlte/extras'; 4 + import { interactivity } from '@threlte/extras'; 5 + interactivity(); 6 + 7 + import Room from './Room.svelte'; 8 + import Outline from './Outline.svelte'; 9 + import { applyTransformOfSelected, editorState, roomState } from './state.svelte'; 10 + import { onMount } from 'svelte'; 11 + import { ACESFilmicToneMapping } from 'three'; 12 + import { base } from '$app/paths'; 13 + import { STLExporter } from 'three/examples/jsm/Addons.js'; 14 + 15 + const { renderer, scene } = useThrelte(); 16 + 17 + let lightIntensity = $state(0.4); 18 + 19 + onMount(() => { 20 + renderer.toneMapping = ACESFilmicToneMapping; 21 + renderer.toneMappingExposure = 0.5; 22 + 23 + let lightModeEnvIntensity = 0.4; 24 + let darkModeEnvIntensity = 0.1; 25 + 26 + let lightModeLightIntensity = 2; 27 + let darkModeLightIntensity = 0.3; 28 + 29 + scene.environmentIntensity = window.matchMedia('(prefers-color-scheme: dark)').matches 30 + ? darkModeEnvIntensity 31 + : lightModeEnvIntensity; 32 + lightIntensity = window.matchMedia('(prefers-color-scheme: dark)').matches 33 + ? darkModeLightIntensity 34 + : lightModeLightIntensity; 35 + 36 + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => { 37 + scene.environmentIntensity = e.matches ? darkModeEnvIntensity : lightModeEnvIntensity; 38 + lightIntensity = e.matches ? darkModeLightIntensity : lightModeLightIntensity; 39 + }); 40 + 41 + // Listen for export event 42 + document.addEventListener("exportSTL", exportSTL); 43 + }); 44 + 45 + async function exportSTL() { 46 + const exporter = new STLExporter(); 47 + 48 + // apply transform 49 + applyTransformOfSelected(); 50 + 51 + editorState.selectedObject = null; 52 + editorState.placingObject = null; 53 + 54 + // wait 1 frame 55 + await new Promise((resolve) => setTimeout(resolve, 1)); 56 + 57 + // Clone the scene to avoid modifying the original 58 + const sceneCopy = scene.clone(); 59 + 60 + // Rotate the entire scene copy (convert from Y-up to Z-up) 61 + sceneCopy.rotation.x = Math.PI / 2; 62 + sceneCopy.updateMatrixWorld(true); // Apply the transformation 63 + 64 + // Remove the grid from the scene 65 + const grid = sceneCopy.getObjectByName('grid'); 66 + if(grid) { 67 + grid.removeFromParent(); 68 + } 69 + 70 + // Export the modified copy 71 + const stlString = exporter.parse(sceneCopy); 72 + const blob = new Blob([stlString], { type: "application/sla" }); 73 + const link = document.createElement("a"); 74 + link.href = URL.createObjectURL(blob); 75 + link.download = "room.stl"; 76 + link.click(); 77 + } 78 + 79 + </script> 80 + 81 + <T.PerspectiveCamera 82 + makeDefault 83 + position={[3, 3, 3]} 84 + oncreate={(ref) => { 85 + ref.lookAt(0, 0, 0); 86 + }} 87 + > 88 + <OrbitControls 89 + maxDistance={20} 90 + maxPolarAngle={Math.PI / 2} 91 + maxAzimuthAngle={2} 92 + minAzimuthAngle={-1} 93 + /> 94 + </T.PerspectiveCamera> 95 + 96 + {#key roomState.id} 97 + <Room /> 98 + {/key} 99 + 100 + <T.DirectionalLight position={[0, 10, 10]} intensity={lightIntensity} castShadow /> 101 + <T.DirectionalLight position={[-10, 5, 0]} intensity={lightIntensity} castShadow /> 102 + <T.AmbientLight intensity={0.1} /> 103 + 104 + <Outline /> 105 + 106 + <Environment isBackground={false} url={base + '/env/workshop.jpg'} />
+30
src/lib/room/Youtube.svelte
··· 1 + <script lang="ts"> 2 + import type { Props } from '@threlte/core'; 3 + 4 + import { HTML } from '@threlte/extras'; 5 + import type { Snippet } from 'svelte'; 6 + import type * as THREE from 'three'; 7 + import VideoPlayer from '$lib/components/extra/video-player/VideoPlayer.svelte'; 8 + 9 + let { 10 + ref = $bindable(), 11 + videoId, 12 + size = [270, 150], 13 + playPause = $bindable(), 14 + ...props 15 + }: Props<THREE.Group> & { 16 + ref?: THREE.Group; 17 + videoId?: string; 18 + size?: [number, number]; 19 + playPause?: () => void; 20 + } = $props(); 21 + </script> 22 + 23 + <HTML transform bind:ref occlude="blending" scale={0.1} pointerEvents="none" {...props}> 24 + <div 25 + style="width: {size?.[0] ?? 270}px; height: {size?.[1] ?? 150}px;" 26 + class="touch-none select-none" 27 + > 28 + <VideoPlayer id={videoId} bind:playPause /> 29 + </div> 30 + </HTML>
+129
src/lib/room/images.svelte.ts
··· 1 + const imageState: { 2 + db: IDBDatabase | null; 3 + } = $state({ 4 + db: null 5 + }); 6 + 7 + export function openDB(): Promise<IDBDatabase> { 8 + if (imageState.db) { 9 + return Promise.resolve(imageState.db); 10 + } 11 + 12 + return new Promise((resolve, reject) => { 13 + const request = indexedDB.open('ImageDB', 1); 14 + 15 + request.onupgradeneeded = function (event) { 16 + if (!event.target || !('result' in event.target)) { 17 + console.error('Error opening IndexedDB.'); 18 + reject(new Error('Error opening IndexedDB.')); 19 + return; 20 + } 21 + 22 + const db = event.target.result as IDBDatabase; 23 + // Create an object store to hold image blobs if it doesn't already exist 24 + if (!db.objectStoreNames.contains('images')) { 25 + db.createObjectStore('images', { keyPath: 'id' }); 26 + } 27 + }; 28 + 29 + request.onsuccess = function (event) { 30 + if (!event.target || !('result' in event.target)) { 31 + console.error('Error opening IndexedDB.'); 32 + reject(new Error('Error opening IndexedDB.')); 33 + return; 34 + } 35 + 36 + imageState.db = event.target.result as IDBDatabase; 37 + resolve(imageState.db); 38 + }; 39 + 40 + request.onerror = function () { 41 + console.error('Error opening IndexedDB.'); 42 + reject(new Error('Error opening IndexedDB.')); 43 + }; 44 + }); 45 + } 46 + 47 + export function saveImage(imageId: string, image: Blob) { 48 + if (!imageState.db) { 49 + console.error('DB not open'); 50 + return; 51 + } 52 + const transaction = imageState.db.transaction(['images'], 'readwrite'); 53 + const store = transaction.objectStore('images'); 54 + store.put({ id: imageId, blob: image }); 55 + } 56 + 57 + export async function getImage(imageId: string): Promise<string> { 58 + if (!imageState.db) { 59 + await openDB(); 60 + } 61 + const db = imageState.db; 62 + return new Promise((resolve, reject) => { 63 + if (!db) return reject(new Error('DB not open')); 64 + 65 + // Ensure the 'images' object store exists 66 + if (!db.objectStoreNames.contains('images')) { 67 + reject(new Error("Object store 'images' not found in the provided database.")); 68 + return; 69 + } 70 + 71 + const transaction = db.transaction(['images'], 'readonly'); 72 + const store = transaction.objectStore('images'); 73 + const getRequest = store.get(imageId); 74 + 75 + getRequest.onsuccess = function (event) { 76 + if (!event.target || !('result' in event.target)) { 77 + reject(new Error('Error retrieving the image from IndexedDB')); 78 + return; 79 + } 80 + const record = event.target.result; 81 + if (record && typeof record === 'object' && 'blob' in record) { 82 + const objectURL = URL.createObjectURL(record.blob as Blob); 83 + resolve(objectURL); 84 + } else { 85 + reject(new Error('Image not found in IndexedDB')); 86 + } 87 + }; 88 + 89 + getRequest.onerror = function () { 90 + reject(new Error('Error retrieving the image from IndexedDB')); 91 + }; 92 + }); 93 + } 94 + 95 + export function deleteImage(imageId: string) { 96 + if (!imageState.db) { 97 + console.error('DB not open'); 98 + return; 99 + } 100 + const transaction = imageState.db.transaction(['images'], 'readwrite'); 101 + const store = transaction.objectStore('images'); 102 + store.delete(imageId); 103 + console.log('Deleted image', imageId); 104 + } 105 + 106 + export function getAllImageNames(): Promise<string[]> { 107 + return new Promise((resolve, reject) => { 108 + if (!imageState.db) { 109 + reject(new Error('DB not open')); 110 + return; 111 + } 112 + const db = imageState.db; 113 + if (!db.objectStoreNames.contains('images')) { 114 + reject(new Error("Object store 'images' not found in the provided database.")); 115 + return; 116 + } 117 + const transaction = db.transaction(['images'], 'readonly'); 118 + const store = transaction.objectStore('images'); 119 + const request = store.getAllKeys(); 120 + 121 + request.onsuccess = function () { 122 + resolve(request.result as string[]); 123 + }; 124 + 125 + request.onerror = function () { 126 + reject(new Error('Error retrieving image keys from IndexedDB')); 127 + }; 128 + }); 129 + }
+877
src/lib/room/models.ts
··· 1 + import Table from './models/kenney-furniture-kit/table.svelte'; 2 + import LampRoundFloor from './models/kenney-furniture-kit/lampRoundFloor.svelte'; 3 + import LoungeChair from './models/kenney-furniture-kit/loungeChair.svelte'; 4 + import LoungeSofa from './models/kenney-furniture-kit/loungeSofa.svelte'; 5 + import PottedPlant from './models/kenney-furniture-kit/pottedPlant.svelte'; 6 + import SideTable from './models/kenney-furniture-kit/sideTable.svelte'; 7 + import BedBunk from './models/kenney-furniture-kit/bedBunk.svelte'; 8 + import BedDouble from './models/kenney-furniture-kit/bedDouble.svelte'; 9 + import BedSingle from './models/kenney-furniture-kit/bedSingle.svelte'; 10 + import Bench from './models/kenney-furniture-kit/bench.svelte'; 11 + import BenchCushion from './models/kenney-furniture-kit/benchCushion.svelte'; 12 + import BenchCushionLow from './models/kenney-furniture-kit/benchCushionLow.svelte'; 13 + import BookcaseClosed from './models/kenney-furniture-kit/bookcaseClosed.svelte'; 14 + import CabinetBed from './models/kenney-furniture-kit/cabinetBed.svelte'; 15 + import CabinetBedDrawer from './models/kenney-furniture-kit/cabinetBedDrawer.svelte'; 16 + import CabinetBedDrawerTable from './models/kenney-furniture-kit/cabinetBedDrawerTable.svelte'; 17 + import Chair from './models/kenney-furniture-kit/chair.svelte'; 18 + import ChairCushion from './models/kenney-furniture-kit/chairCushion.svelte'; 19 + import ChairDesk from './models/kenney-furniture-kit/chairDesk.svelte'; 20 + import ChairModernCushion from './models/kenney-furniture-kit/chairModernCushion.svelte'; 21 + import ChairModernFrameCushion from './models/kenney-furniture-kit/chairModernFrameCushion.svelte'; 22 + import ChairRounded from './models/kenney-furniture-kit/chairRounded.svelte'; 23 + import CoatRackStanding from './models/kenney-furniture-kit/coatRackStanding.svelte'; 24 + import Desk from './models/kenney-furniture-kit/desk.svelte'; 25 + import DeskCorner from './models/kenney-furniture-kit/deskCorner.svelte'; 26 + import Doorway from './models/kenney-furniture-kit/doorway.svelte'; 27 + import DoorwayFront from './models/kenney-furniture-kit/doorwayFront.svelte'; 28 + import Dryer from './models/kenney-furniture-kit/dryer.svelte'; 29 + import KitchenBar from './models/kenney-furniture-kit/kitchenBar.svelte'; 30 + import KitchenCabinet from './models/kenney-furniture-kit/kitchenCabinet.svelte'; 31 + import KitchenCabinetDrawer from './models/kenney-furniture-kit/kitchenCabinetDrawer.svelte'; 32 + import RugDoormat from './models/kenney-furniture-kit/rugDoormat.svelte'; 33 + import RugRectangle from './models/kenney-furniture-kit/rugRectangle.svelte'; 34 + import RugRound from './models/kenney-furniture-kit/rugRound.svelte'; 35 + import RugRounded from './models/kenney-furniture-kit/rugRounded.svelte'; 36 + import RugSquare from './models/kenney-furniture-kit/rugSquare.svelte'; 37 + import TelevisionModern from './models/kenney-furniture-kit/televisionModern.svelte'; 38 + 39 + import KayKitBookSet from './models/kaykit-furniture-kit/book_set.svelte'; 40 + import KayKitRugRectanglePattern from './models/kaykit-furniture-kit/rug_rectangle-pattern.svelte'; 41 + import KayKitTableSmall from './models/kaykit-furniture-kit/table_small.svelte'; 42 + import KayKitCouch from './models/kaykit-furniture-kit/couch.svelte'; 43 + import KayKitArmchairPillows from './models/kaykit-furniture-kit/armchair_pillows.svelte'; 44 + import KayKitChairBWood from './models/kaykit-furniture-kit/chair_b_wood.svelte'; 45 + import KayKitShelfBBig from './models/kaykit-furniture-kit/shelf_b_big.svelte'; 46 + import KayKitChairDeskA from './models/kaykit-furniture-kit/chair_desk_a.svelte'; 47 + import KayKitMousepad from './models/kaykit-furniture-kit/mousepad.svelte'; 48 + import KayKitPictureframeStandingB from './models/kaykit-furniture-kit/pictureframe_standing_b.svelte'; 49 + import KayKitBedDoubleB from './models/kaykit-furniture-kit/bed_double_b.svelte'; 50 + import KayKitShelfASmall from './models/kaykit-furniture-kit/shelf_a_small.svelte'; 51 + import KayKitMugA from './models/kaykit-furniture-kit/mug_a.svelte'; 52 + import KayKitRugRounded from './models/kaykit-furniture-kit/rug_rounded.svelte'; 53 + import KayKitMousepadLarge from './models/kaykit-furniture-kit/mousepad_large.svelte'; 54 + import KayKitCabinetSmall from './models/kaykit-furniture-kit/cabinet_small.svelte'; 55 + import KayKitChairA from './models/kaykit-furniture-kit/chair_a.svelte'; 56 + import KayKitChairC from './models/kaykit-furniture-kit/chair_c.svelte'; 57 + import KayKitPictureframeLargeA from './models/kaykit-furniture-kit/pictureframe_large_a.svelte'; 58 + import KayKitChairAWood from './models/kaykit-furniture-kit/chair_a_wood.svelte'; 59 + import KayKitBedSingleB from './models/kaykit-furniture-kit/bed_single_b.svelte'; 60 + import KayKitChairStool from './models/kaykit-furniture-kit/chair_stool.svelte'; 61 + import KayKitPictureframeSmallB from './models/kaykit-furniture-kit/pictureframe_small_b.svelte'; 62 + import KayKitPillow from './models/kaykit-furniture-kit/pillow.svelte'; 63 + import KayKitGameconsoleHandheld from './models/kaykit-furniture-kit/gameconsole_handheld.svelte'; 64 + import KayKitBedDoubleA from './models/kaykit-furniture-kit/bed_double_a.svelte'; 65 + import KayKitPictureframeStandingA from './models/kaykit-furniture-kit/pictureframe_standing_a.svelte'; 66 + import KayKitCactusLarge from './models/kaykit-furniture-kit/cactus_large.svelte'; 67 + import KayKitCouchPillows from './models/kaykit-furniture-kit/couch_pillows.svelte'; 68 + import KayKitPictureframeMedium from './models/kaykit-furniture-kit/pictureframe_medium.svelte'; 69 + import KayKitArmchair from './models/kaykit-furniture-kit/armchair.svelte'; 70 + import KayKitLampTable from './models/kaykit-furniture-kit/lamp_table.svelte'; 71 + import KayKitMouse from './models/kaykit-furniture-kit/mouse.svelte'; 72 + import KayKitMugB from './models/kaykit-furniture-kit/mug_b.svelte'; 73 + import KayKitBookSingle from './models/kaykit-furniture-kit/book_single.svelte'; 74 + import KayKitChairDeskB from './models/kaykit-furniture-kit/chair_desk_b.svelte'; 75 + import KayKitCactusSmall from './models/kaykit-furniture-kit/cactus_small.svelte'; 76 + import KayKitTableLow from './models/kaykit-furniture-kit/table_low.svelte'; 77 + import KayKitLampStanding from './models/kaykit-furniture-kit/lamp_standing.svelte'; 78 + import KayKitDesk from './models/kaykit-furniture-kit/desk.svelte'; 79 + import KayKitRugRectangle from './models/kaykit-furniture-kit/rug_rectangle.svelte'; 80 + import KayKitPictureframeLargeB from './models/kaykit-furniture-kit/pictureframe_large_b.svelte'; 81 + import KayKitCup from './models/kaykit-furniture-kit/cup.svelte'; 82 + import KayKitPictureframeSmallA from './models/kaykit-furniture-kit/pictureframe_small_a.svelte'; 83 + import KayKitKeyboard from './models/kaykit-furniture-kit/keyboard.svelte'; 84 + import KayKitBedSingleA from './models/kaykit-furniture-kit/bed_single_a.svelte'; 85 + import KayKitDeskLarge from './models/kaykit-furniture-kit/desk_large.svelte'; 86 + import KayKitMonitor from './models/kaykit-furniture-kit/monitor.svelte'; 87 + import KayKitLampDesk from './models/kaykit-furniture-kit/lamp_desk.svelte'; 88 + import KayKitChairStoolWood from './models/kaykit-furniture-kit/chair_stool_wood.svelte'; 89 + import KayKitPictureframeSmallC from './models/kaykit-furniture-kit/pictureframe_small_c.svelte'; 90 + import KayKitChairB from './models/kaykit-furniture-kit/chair_b.svelte'; 91 + import KayKitShelfABig from './models/kaykit-furniture-kit/shelf_a_big.svelte'; 92 + import KayKitTableMediumLong from './models/kaykit-furniture-kit/table_medium_long.svelte'; 93 + import KayKitCupPencils from './models/kaykit-furniture-kit/cup_pencils.svelte'; 94 + import KayKitTableMedium from './models/kaykit-furniture-kit/table_medium.svelte'; 95 + import KayKitShelfBSmall from './models/kaykit-furniture-kit/shelf_b_small.svelte'; 96 + import KayKitCabinetMedium from './models/kaykit-furniture-kit/cabinet_medium.svelte'; 97 + import Plant from './models/tiny-treats-bubbly-bathroom/plant.svelte'; 98 + 99 + export const AllObjects: { 100 + [key: string]: { 101 + component: unknown; 102 + colors: number; 103 + visible: boolean; 104 + placement?: 'floor' | 'wall'; 105 + image?: boolean; 106 + scale?: number; 107 + category?: string; 108 + link?: boolean; 109 + }; 110 + } = { 111 + 'kenney-furniture-kit-table': { 112 + component: Table, 113 + colors: 1, 114 + visible: false, 115 + placement: 'floor' 116 + }, 117 + 'kenney-furniture-kit-lampRoundFloor': { 118 + component: LampRoundFloor, 119 + colors: 2, 120 + visible: false, 121 + placement: 'floor' 122 + }, 123 + 'kenney-furniture-kit-loungeChair': { 124 + component: LoungeChair, 125 + colors: 2, 126 + visible: false, 127 + placement: 'floor' 128 + }, 129 + 'kenney-furniture-kit-loungeSofa': { 130 + component: LoungeSofa, 131 + colors: 2, 132 + visible: false, 133 + placement: 'floor' 134 + }, 135 + 'kenney-furniture-kit-pottedPlant': { 136 + component: PottedPlant, 137 + colors: 3, 138 + visible: false, 139 + placement: 'floor' 140 + }, 141 + 'kenney-furniture-kit-sideTable': { 142 + component: SideTable, 143 + colors: 1, 144 + visible: false, 145 + placement: 'floor' 146 + }, 147 + 'kenney-furniture-kit-bedBunk': { 148 + component: BedBunk, 149 + colors: 3, 150 + visible: false, 151 + placement: 'floor' 152 + }, 153 + 'kenney-furniture-kit-bedDouble': { 154 + component: BedDouble, 155 + colors: 4, 156 + visible: false, 157 + placement: 'floor' 158 + }, 159 + 'kenney-furniture-kit-bedSingle': { 160 + component: BedSingle, 161 + colors: 4, 162 + visible: false, 163 + placement: 'floor' 164 + }, 165 + 'kenney-furniture-kit-bench': { 166 + component: Bench, 167 + colors: 1, 168 + visible: false, 169 + placement: 'floor' 170 + }, 171 + 'kenney-furniture-kit-benchCushion': { 172 + component: BenchCushion, 173 + colors: 2, 174 + visible: false, 175 + placement: 'floor' 176 + }, 177 + 'kenney-furniture-kit-benchCushionLow': { 178 + component: BenchCushionLow, 179 + colors: 2, 180 + visible: false, 181 + placement: 'floor' 182 + }, 183 + 'kenney-furniture-kit-bookcaseClosed': { 184 + component: BookcaseClosed, 185 + colors: 2, 186 + visible: false, 187 + placement: 'floor' 188 + }, 189 + 'kenney-furniture-kit-cabinetBed': { 190 + component: CabinetBed, 191 + colors: 2, 192 + visible: false, 193 + placement: 'floor' 194 + }, 195 + 'kenney-furniture-kit-cabinetBedDrawer': { 196 + component: CabinetBedDrawer, 197 + colors: 2, 198 + visible: false, 199 + placement: 'floor' 200 + }, 201 + 'kenney-furniture-kit-cabinetBedDrawerTable': { 202 + component: CabinetBedDrawerTable, 203 + colors: 2, 204 + visible: false, 205 + placement: 'floor' 206 + }, 207 + 'kenney-furniture-kit-chair': { 208 + component: Chair, 209 + colors: 1, 210 + visible: false, 211 + placement: 'floor' 212 + }, 213 + 'kenney-furniture-kit-chairCushion': { 214 + component: ChairCushion, 215 + colors: 2, 216 + visible: false, 217 + placement: 'floor' 218 + }, 219 + 'kenney-furniture-kit-chairDesk': { 220 + component: ChairDesk, 221 + colors: 2, 222 + visible: false, 223 + placement: 'floor' 224 + }, 225 + 'kenney-furniture-kit-chairModernCushion': { 226 + component: ChairModernCushion, 227 + colors: 2, 228 + visible: false, 229 + placement: 'floor' 230 + }, 231 + 'kenney-furniture-kit-chairModernFrameCushion': { 232 + component: ChairModernFrameCushion, 233 + colors: 2, 234 + visible: false, 235 + placement: 'floor' 236 + }, 237 + 'kenney-furniture-kit-chairRounded': { 238 + component: ChairRounded, 239 + colors: 1, 240 + visible: false, 241 + placement: 'floor' 242 + }, 243 + 'kenney-furniture-kit-coatRackStanding': { 244 + component: CoatRackStanding, 245 + colors: 1, 246 + visible: false, 247 + placement: 'floor' 248 + }, 249 + 'kenney-furniture-kit-desk': { 250 + component: Desk, 251 + colors: 2, 252 + visible: false, 253 + placement: 'floor' 254 + }, 255 + 'kenney-furniture-kit-deskCorner': { 256 + component: DeskCorner, 257 + colors: 2, 258 + visible: false, 259 + placement: 'floor' 260 + }, 261 + 'kenney-furniture-kit-doorway': { 262 + component: Doorway, 263 + colors: 3, 264 + visible: false, 265 + placement: 'floor' 266 + }, 267 + 'kenney-furniture-kit-doorwayFront': { 268 + component: DoorwayFront, 269 + colors: 4, 270 + visible: false, 271 + placement: 'floor' 272 + }, 273 + 'kenney-furniture-kit-dryer': { 274 + component: Dryer, 275 + colors: 3, 276 + visible: false, 277 + placement: 'floor' 278 + }, 279 + 'kenney-furniture-kit-kitchenBar': { 280 + component: KitchenBar, 281 + colors: 3, 282 + visible: false, 283 + placement: 'floor' 284 + }, 285 + 'kenney-furniture-kit-kitchenCabinet': { 286 + component: KitchenCabinet, 287 + colors: 3, 288 + visible: false, 289 + placement: 'floor' 290 + }, 291 + 'kenney-furniture-kit-kitchenCabinetDrawer': { 292 + component: KitchenCabinetDrawer, 293 + colors: 3, 294 + visible: false, 295 + placement: 'floor' 296 + }, 297 + 'kenney-furniture-kit-rugDoormat': { 298 + component: RugDoormat, 299 + colors: 1, 300 + visible: false, 301 + placement: 'floor' 302 + }, 303 + 'kenney-furniture-kit-rugRectangle': { 304 + component: RugRectangle, 305 + colors: 2, 306 + visible: false, 307 + placement: 'floor' 308 + }, 309 + 'kenney-furniture-kit-rugRound': { 310 + component: RugRound, 311 + colors: 2, 312 + visible: false, 313 + placement: 'floor' 314 + }, 315 + 'kenney-furniture-kit-rugRounded': { 316 + component: RugRounded, 317 + colors: 2, 318 + visible: false, 319 + placement: 'floor' 320 + }, 321 + 'kenney-furniture-kit-rugSquare': { 322 + component: RugSquare, 323 + colors: 2, 324 + visible: false, 325 + placement: 'floor' 326 + }, 327 + 'kenney-furniture-kit-televisionModern': { 328 + component: TelevisionModern, 329 + colors: 2, 330 + visible: false, 331 + placement: 'floor' 332 + }, 333 + 'kaykit-furniture-kit-book_set': { 334 + component: KayKitBookSet, 335 + colors: 4, 336 + visible: true, 337 + placement: 'floor', 338 + image: false, 339 + scale: 0.4, 340 + category: 'miscellaneous' 341 + }, 342 + 'kaykit-furniture-kit-rug_rectangle-pattern': { 343 + component: KayKitRugRectanglePattern, 344 + colors: 2, 345 + visible: true, 346 + placement: 'floor', 347 + image: false, 348 + scale: 0.4, 349 + category: 'carpets' 350 + }, 351 + 'kaykit-furniture-kit-table_small': { 352 + component: KayKitTableSmall, 353 + colors: 1, 354 + visible: true, 355 + placement: 'floor', 356 + image: false, 357 + scale: 0.4, 358 + category: 'tables & cabinets' 359 + }, 360 + 'kaykit-furniture-kit-couch': { 361 + component: KayKitCouch, 362 + colors: 1, 363 + visible: true, 364 + placement: 'floor', 365 + image: false, 366 + scale: 0.4, 367 + category: 'chairs & sofas' 368 + }, 369 + 'kaykit-furniture-kit-armchair_pillows': { 370 + component: KayKitArmchairPillows, 371 + colors: 2, 372 + visible: true, 373 + placement: 'floor', 374 + image: false, 375 + scale: 0.4, 376 + category: 'chairs & sofas' 377 + }, 378 + 'kaykit-furniture-kit-chair_b_wood': { 379 + component: KayKitChairBWood, 380 + colors: 1, 381 + visible: true, 382 + placement: 'floor', 383 + image: false, 384 + scale: 0.4, 385 + category: 'chairs & sofas' 386 + }, 387 + 'kaykit-furniture-kit-shelf_b_big': { 388 + component: KayKitShelfBBig, 389 + colors: 2, 390 + visible: true, 391 + placement: 'wall', 392 + image: false, 393 + scale: 0.4, 394 + category: 'wall accessories' 395 + }, 396 + 'kaykit-furniture-kit-chair_desk_a': { 397 + component: KayKitChairDeskA, 398 + colors: 3, 399 + visible: true, 400 + placement: 'floor', 401 + image: false, 402 + scale: 0.4, 403 + category: 'desk & accessories' 404 + }, 405 + 'kaykit-furniture-kit-mousepad': { 406 + component: KayKitMousepad, 407 + colors: 1, 408 + visible: true, 409 + placement: 'floor', 410 + image: false, 411 + scale: 0.4, 412 + category: 'desk & accessories' 413 + }, 414 + 'kaykit-furniture-kit-pictureframe_standing_b': { 415 + component: KayKitPictureframeStandingB, 416 + colors: 1, 417 + visible: true, 418 + placement: 'floor', 419 + image: true, 420 + scale: 0.4, 421 + category: 'desk & accessories' 422 + }, 423 + 'kaykit-furniture-kit-bed_double_b': { 424 + component: KayKitBedDoubleB, 425 + colors: 3, 426 + visible: true, 427 + placement: 'floor', 428 + image: false, 429 + scale: 0.4, 430 + category: 'beds' 431 + }, 432 + 'kaykit-furniture-kit-shelf_a_small': { 433 + component: KayKitShelfASmall, 434 + colors: 2, 435 + visible: true, 436 + placement: 'wall', 437 + image: false, 438 + scale: 0.4, 439 + category: 'wall accessories' 440 + }, 441 + 'kaykit-furniture-kit-mug_a': { 442 + component: KayKitMugA, 443 + colors: 1, 444 + visible: true, 445 + placement: 'floor', 446 + image: false, 447 + scale: 0.4, 448 + category: 'desk & accessories' 449 + }, 450 + 'kaykit-furniture-kit-rug_rounded': { 451 + component: KayKitRugRounded, 452 + colors: 1, 453 + visible: true, 454 + placement: 'floor', 455 + image: false, 456 + scale: 0.4, 457 + category: 'carpets' 458 + }, 459 + 'kaykit-furniture-kit-mousepad_large': { 460 + component: KayKitMousepadLarge, 461 + colors: 2, 462 + visible: true, 463 + placement: 'floor', 464 + image: false, 465 + scale: 0.4, 466 + category: 'desk & accessories' 467 + }, 468 + 'kaykit-furniture-kit-cabinet_small': { 469 + component: KayKitCabinetSmall, 470 + colors: 3, 471 + visible: true, 472 + placement: 'floor', 473 + image: false, 474 + scale: 0.4, 475 + category: 'tables & cabinets' 476 + }, 477 + 'kaykit-furniture-kit-chair_a': { 478 + component: KayKitChairA, 479 + colors: 2, 480 + visible: true, 481 + placement: 'floor', 482 + image: false, 483 + scale: 0.4, 484 + category: 'chairs & sofas' 485 + }, 486 + 'kaykit-furniture-kit-chair_c': { 487 + component: KayKitChairC, 488 + colors: 2, 489 + visible: true, 490 + placement: 'floor', 491 + image: false, 492 + scale: 0.4, 493 + category: 'chairs & sofas' 494 + }, 495 + 'kaykit-furniture-kit-pictureframe_large_a': { 496 + component: KayKitPictureframeLargeA, 497 + colors: 1, 498 + visible: true, 499 + placement: 'wall', 500 + image: true, 501 + scale: 0.4, 502 + category: 'wall accessories' 503 + }, 504 + 'kaykit-furniture-kit-chair_a_wood': { 505 + component: KayKitChairAWood, 506 + colors: 1, 507 + visible: true, 508 + placement: 'floor', 509 + image: false, 510 + scale: 0.4, 511 + category: 'chairs & sofas' 512 + }, 513 + 'kaykit-furniture-kit-bed_single_b': { 514 + component: KayKitBedSingleB, 515 + colors: 3, 516 + visible: true, 517 + placement: 'floor', 518 + image: false, 519 + scale: 0.4, 520 + category: 'beds' 521 + }, 522 + 'kaykit-furniture-kit-chair_stool': { 523 + component: KayKitChairStool, 524 + colors: 2, 525 + visible: true, 526 + placement: 'floor', 527 + image: false, 528 + scale: 0.4, 529 + category: 'chairs & sofas' 530 + }, 531 + 'kaykit-furniture-kit-pictureframe_small_b': { 532 + component: KayKitPictureframeSmallB, 533 + colors: 1, 534 + visible: true, 535 + placement: 'wall', 536 + image: true, 537 + scale: 0.4, 538 + category: 'wall accessories' 539 + }, 540 + 'kaykit-furniture-kit-pillow': { 541 + component: KayKitPillow, 542 + colors: 1, 543 + visible: true, 544 + placement: 'floor', 545 + image: false, 546 + scale: 0.4, 547 + category: 'miscellaneous' 548 + }, 549 + 'kaykit-furniture-kit-gameconsole_handheld': { 550 + component: KayKitGameconsoleHandheld, 551 + colors: 3, 552 + visible: true, 553 + placement: 'floor', 554 + image: false, 555 + scale: 0.4, 556 + category: 'miscellaneous' 557 + }, 558 + 'kaykit-furniture-kit-bed_double_a': { 559 + component: KayKitBedDoubleA, 560 + colors: 3, 561 + visible: true, 562 + placement: 'floor', 563 + image: false, 564 + scale: 0.4, 565 + category: 'beds' 566 + }, 567 + 'kaykit-furniture-kit-pictureframe_standing_a': { 568 + component: KayKitPictureframeStandingA, 569 + colors: 1, 570 + visible: true, 571 + placement: 'floor', 572 + image: true, 573 + scale: 0.4, 574 + category: 'desk & accessories' 575 + }, 576 + 'kaykit-furniture-kit-cactus_large': { 577 + component: KayKitCactusLarge, 578 + colors: 2, 579 + visible: true, 580 + placement: 'floor', 581 + image: false, 582 + scale: 0.4, 583 + category: 'miscellaneous' 584 + }, 585 + 'kaykit-furniture-kit-couch_pillows': { 586 + component: KayKitCouchPillows, 587 + colors: 2, 588 + visible: true, 589 + placement: 'floor', 590 + image: false, 591 + scale: 0.4, 592 + category: 'chairs & sofas' 593 + }, 594 + 'kaykit-furniture-kit-pictureframe_medium': { 595 + component: KayKitPictureframeMedium, 596 + colors: 1, 597 + visible: true, 598 + placement: 'wall', 599 + image: true, 600 + scale: 0.4, 601 + category: 'wall accessories' 602 + }, 603 + 'kaykit-furniture-kit-armchair': { 604 + component: KayKitArmchair, 605 + colors: 1, 606 + visible: true, 607 + placement: 'floor', 608 + image: false, 609 + scale: 0.4, 610 + category: 'chairs & sofas' 611 + }, 612 + 'kaykit-furniture-kit-lamp_table': { 613 + component: KayKitLampTable, 614 + colors: 3, 615 + visible: true, 616 + placement: 'floor', 617 + image: false, 618 + scale: 0.4, 619 + category: 'lights' 620 + }, 621 + 'kaykit-furniture-kit-mouse': { 622 + component: KayKitMouse, 623 + colors: 2, 624 + visible: true, 625 + placement: 'floor', 626 + image: false, 627 + scale: 0.4, 628 + category: 'desk & accessories' 629 + }, 630 + 'kaykit-furniture-kit-mug_b': { 631 + component: KayKitMugB, 632 + colors: 1, 633 + visible: true, 634 + placement: 'floor', 635 + image: false, 636 + scale: 0.4, 637 + category: 'desk & accessories' 638 + }, 639 + 'kaykit-furniture-kit-book_single': { 640 + component: KayKitBookSingle, 641 + colors: 2, 642 + visible: true, 643 + placement: 'floor', 644 + image: false, 645 + scale: 0.4, 646 + category: 'miscellaneous' 647 + }, 648 + 'kaykit-furniture-kit-chair_desk_b': { 649 + component: KayKitChairDeskB, 650 + colors: 3, 651 + visible: true, 652 + placement: 'floor', 653 + image: false, 654 + scale: 0.4, 655 + category: 'desk & accessories' 656 + }, 657 + 'kaykit-furniture-kit-cactus_small': { 658 + component: KayKitCactusSmall, 659 + colors: 2, 660 + visible: true, 661 + placement: 'floor', 662 + image: false, 663 + scale: 0.4, 664 + category: 'miscellaneous' 665 + }, 666 + 'kaykit-furniture-kit-table_low': { 667 + component: KayKitTableLow, 668 + colors: 1, 669 + visible: true, 670 + placement: 'floor', 671 + image: false, 672 + scale: 0.4, 673 + category: 'tables & cabinets' 674 + }, 675 + 'kaykit-furniture-kit-lamp_standing': { 676 + component: KayKitLampStanding, 677 + colors: 3, 678 + visible: true, 679 + placement: 'floor', 680 + image: false, 681 + scale: 0.4, 682 + category: 'lights' 683 + }, 684 + 'kaykit-furniture-kit-desk': { 685 + component: KayKitDesk, 686 + colors: 3, 687 + visible: true, 688 + placement: 'floor', 689 + image: false, 690 + scale: 0.4, 691 + category: 'desk & accessories' 692 + }, 693 + 'kaykit-furniture-kit-rug_rectangle': { 694 + component: KayKitRugRectangle, 695 + colors: 1, 696 + visible: true, 697 + placement: 'floor', 698 + image: false, 699 + scale: 0.4, 700 + category: 'carpets' 701 + }, 702 + 'kaykit-furniture-kit-pictureframe_large_b': { 703 + component: KayKitPictureframeLargeB, 704 + colors: 1, 705 + visible: true, 706 + placement: 'wall', 707 + image: true, 708 + scale: 0.4, 709 + category: 'wall accessories' 710 + }, 711 + 'kaykit-furniture-kit-cup': { 712 + component: KayKitCup, 713 + colors: 1, 714 + visible: true, 715 + placement: 'floor', 716 + image: false, 717 + scale: 0.4, 718 + category: 'desk & accessories' 719 + }, 720 + 'kaykit-furniture-kit-pictureframe_small_a': { 721 + component: KayKitPictureframeSmallA, 722 + colors: 1, 723 + visible: true, 724 + placement: 'wall', 725 + image: true, 726 + scale: 0.4, 727 + category: 'wall accessories' 728 + }, 729 + 'kaykit-furniture-kit-keyboard': { 730 + component: KayKitKeyboard, 731 + colors: 3, 732 + visible: true, 733 + placement: 'floor', 734 + image: false, 735 + scale: 0.4, 736 + category: 'desk & accessories' 737 + }, 738 + 'kaykit-furniture-kit-bed_single_a': { 739 + component: KayKitBedSingleA, 740 + colors: 3, 741 + visible: true, 742 + placement: 'floor', 743 + image: false, 744 + scale: 0.4, 745 + category: 'beds' 746 + }, 747 + 'kaykit-furniture-kit-desk_large': { 748 + component: KayKitDeskLarge, 749 + colors: 3, 750 + visible: true, 751 + placement: 'floor', 752 + image: false, 753 + scale: 0.4, 754 + category: 'desk & accessories' 755 + }, 756 + 'kaykit-furniture-kit-monitor': { 757 + component: KayKitMonitor, 758 + colors: 1, 759 + visible: true, 760 + placement: 'floor', 761 + link: true, 762 + scale: 0.4, 763 + category: 'desk & accessories' 764 + }, 765 + 'kaykit-furniture-kit-lamp_desk': { 766 + component: KayKitLampDesk, 767 + colors: 3, 768 + visible: true, 769 + placement: 'floor', 770 + image: false, 771 + scale: 0.4, 772 + category: 'lights' 773 + }, 774 + 'kaykit-furniture-kit-chair_stool_wood': { 775 + component: KayKitChairStoolWood, 776 + colors: 1, 777 + visible: true, 778 + placement: 'floor', 779 + image: false, 780 + scale: 0.4, 781 + category: 'chairs & sofas' 782 + }, 783 + 'kaykit-furniture-kit-pictureframe_small_c': { 784 + component: KayKitPictureframeSmallC, 785 + colors: 1, 786 + visible: true, 787 + placement: 'wall', 788 + image: true, 789 + scale: 0.4, 790 + category: 'wall accessories' 791 + }, 792 + 'kaykit-furniture-kit-chair_b': { 793 + component: KayKitChairB, 794 + colors: 2, 795 + visible: true, 796 + placement: 'floor', 797 + image: false, 798 + scale: 0.4, 799 + category: 'chairs & sofas' 800 + }, 801 + 'kaykit-furniture-kit-shelf_a_big': { 802 + component: KayKitShelfABig, 803 + colors: 2, 804 + visible: true, 805 + placement: 'wall', 806 + image: false, 807 + scale: 0.4, 808 + category: 'wall accessories' 809 + }, 810 + 'kaykit-furniture-kit-table_medium_long': { 811 + component: KayKitTableMediumLong, 812 + colors: 1, 813 + visible: true, 814 + placement: 'floor', 815 + image: false, 816 + scale: 0.4, 817 + category: 'tables & cabinets' 818 + }, 819 + 'kaykit-furniture-kit-cup_pencils': { 820 + component: KayKitCupPencils, 821 + colors: 4, 822 + visible: true, 823 + placement: 'floor', 824 + image: false, 825 + scale: 0.4, 826 + category: 'desk & accessories' 827 + }, 828 + 'kaykit-furniture-kit-table_medium': { 829 + component: KayKitTableMedium, 830 + colors: 1, 831 + visible: true, 832 + placement: 'floor', 833 + image: false, 834 + scale: 0.4, 835 + category: 'tables & cabinets' 836 + }, 837 + 'kaykit-furniture-kit-shelf_b_small': { 838 + component: KayKitShelfBSmall, 839 + colors: 2, 840 + visible: true, 841 + placement: 'wall', 842 + image: false, 843 + scale: 0.4, 844 + category: 'wall accessories' 845 + }, 846 + 'kaykit-furniture-kit-cabinet_medium': { 847 + component: KayKitCabinetMedium, 848 + colors: 3, 849 + visible: true, 850 + placement: 'floor', 851 + image: false, 852 + scale: 0.4, 853 + category: 'tables & cabinets' 854 + }, 855 + 'tiny-treats-bubbly-bathroom-plant': { 856 + component: Plant, 857 + colors: 2, 858 + visible: true, 859 + placement: 'floor', 860 + image: false, 861 + scale: 0.4, 862 + category: 'miscellaneous' 863 + } 864 + }; 865 + 866 + export const visibleObjects = Object.fromEntries( 867 + Object.entries(AllObjects) 868 + .filter(([, value]) => value.visible !== false) 869 + .sort((a, b) => a[0].localeCompare(b[0])) 870 + ); 871 + export const visibleKeys = Object.keys(visibleObjects); 872 + 873 + export const objectCategories = Array.from( 874 + new Set(Object.values(visibleObjects).map((object) => object.category)) 875 + ); 876 + 877 + export type RoomObjectKind = keyof typeof AllObjects;
+182
src/lib/room/state.svelte.ts
··· 1 + import type { TransformControls } from '@threlte/extras'; 2 + import { AllObjects, type RoomObjectKind } from './models'; 3 + import { trackEvent } from '$lib/analytics'; 4 + 5 + export const currentVersion = 0; 6 + 7 + export const roomState: { 8 + wallColor: string; 9 + floorColor: string; 10 + objects: RoomObjectData[]; 11 + 12 + size: { x: number; z: number }; 13 + 14 + id: number; 15 + 16 + version: number; 17 + 18 + did: string; 19 + } = $state({ 20 + wallColor: '#f1f1f1', 21 + floorColor: '#a1a1a1', 22 + 23 + objects: [], 24 + 25 + size: { x: 2, z: 3 }, 26 + 27 + id: 0, 28 + 29 + version: currentVersion, 30 + 31 + did: '' 32 + }); 33 + 34 + export const editorState: { 35 + startIndex: number; 36 + shownCount: number; 37 + 38 + selectedObject: RoomObjectData | null; 39 + transformControls: TransformControls | undefined; 40 + placingObject: RoomObjectData | null; 41 + 42 + isEditing: boolean; 43 + } = $state({ 44 + startIndex: 0, 45 + shownCount: 3, 46 + 47 + selectedObject: null, 48 + transformControls: undefined, 49 + placingObject: null, 50 + 51 + isEditing: false 52 + }); 53 + 54 + export type BlueskyBlob = { 55 + $type: 'blob'; 56 + ref: { 57 + $link: string; 58 + }; 59 + mimeType: string; 60 + size: number; 61 + }; 62 + 63 + export type RoomObjectData = { 64 + kind: RoomObjectKind; 65 + position: [number, number, number]; 66 + rotation: number; 67 + colors: string[]; 68 + placement: 'floor' | 'wallX' | 'wallZ'; 69 + link?: string; 70 + image?: string | BlueskyBlob; 71 + }; 72 + 73 + export function applyTransformOfSelected() { 74 + if (editorState.selectedObject && editorState.transformControls?.object) { 75 + editorState.selectedObject.position = [ 76 + editorState.transformControls.object.position.x, 77 + editorState.transformControls.object.position.y, 78 + editorState.transformControls.object.position.z 79 + ]; 80 + 81 + if (editorState.selectedObject.placement === 'wallX') { 82 + editorState.selectedObject.rotation = editorState.transformControls.object.rotation.x; 83 + } else if (editorState.selectedObject.placement === 'wallZ') { 84 + editorState.selectedObject.rotation = editorState.transformControls.object.rotation.z; 85 + } else { 86 + editorState.selectedObject.rotation = editorState.transformControls.object.rotation.y; 87 + } 88 + 89 + saveRoomToLocalStorage(); 90 + } 91 + } 92 + 93 + export function saveRoomToLocalStorage() { 94 + trackEvent('room_save_local', { count: roomState.objects.length }); 95 + 96 + localStorage.setItem('roomState', JSON.stringify(roomState)); 97 + } 98 + 99 + export function rotateObject(rotation: number) { 100 + if (editorState.selectedObject) { 101 + applyTransformOfSelected(); 102 + 103 + const selectedObject = editorState.selectedObject; 104 + editorState.selectedObject = null; 105 + 106 + setTimeout(() => { 107 + // rotate right 108 + selectedObject.rotation -= rotation; 109 + editorState.selectedObject = selectedObject; 110 + }, 0); 111 + saveRoomToLocalStorage(); 112 + } else if (editorState.placingObject) { 113 + editorState.placingObject.rotation = (editorState.placingObject.rotation ?? 0) - rotation; 114 + saveRoomToLocalStorage(); 115 + } 116 + } 117 + 118 + export function rotateRight() { 119 + rotateObject(Math.PI / 8); 120 + } 121 + 122 + export function rotateLeft() { 123 + rotateObject(-Math.PI / 8); 124 + } 125 + 126 + export function tryLoadingRoomFromLocalStorage(otherWiseReset: boolean = false) { 127 + const room = localStorage.getItem('roomState'); 128 + if (room) { 129 + trackEvent('room_load_local', { count: roomState.objects.length }); 130 + 131 + const roomObject = JSON.parse(room); 132 + roomState.floorColor = roomObject.floorColor; 133 + roomState.wallColor = roomObject.wallColor; 134 + roomState.objects = roomObject.objects; 135 + roomState.size = roomObject.size; 136 + roomState.id = roomObject.id ?? Math.random(); 137 + roomState.did = roomObject.did; 138 + } else if (otherWiseReset) { 139 + roomState.floorColor = '#a1a1a1'; 140 + roomState.wallColor = '#f1f1f1'; 141 + roomState.objects = []; 142 + roomState.size = { x: 2, z: 3 }; 143 + roomState.id = Math.random(); 144 + roomState.version = currentVersion; 145 + roomState.did = ''; 146 + } 147 + } 148 + 149 + export function deleteSelectedObject() { 150 + roomState.objects = roomState.objects.filter((object) => object !== editorState.selectedObject); 151 + 152 + editorState.selectedObject = null; 153 + 154 + saveRoomToLocalStorage(); 155 + } 156 + 157 + export function placeObject(point: { x: number; y: number; z: number }) { 158 + if (editorState.placingObject) { 159 + roomState.objects.push(editorState.placingObject); 160 + editorState.placingObject.position = [point.x, point.y, point.z]; 161 + editorState.selectedObject = editorState.placingObject; 162 + 163 + editorState.placingObject = null; 164 + 165 + saveRoomToLocalStorage(); 166 + } 167 + } 168 + 169 + export function makeSelectedObjectPlacingObject() { 170 + if (editorState.selectedObject && !editorState.placingObject) { 171 + editorState.placingObject = editorState.selectedObject; 172 + roomState.objects = roomState.objects.filter((object) => object !== editorState.selectedObject); 173 + } 174 + } 175 + 176 + export function getPossiblePlacementForPlacingObject() { 177 + if (!editorState.placingObject) return undefined; 178 + 179 + const object = editorState.placingObject; 180 + 181 + return AllObjects[object.kind]?.placement ?? 'floor'; 182 + }
+54
src/lib/room/ui-state.svelte.ts
··· 1 + import { trackEvent } from '$lib/analytics'; 2 + import { AllObjects } from './models'; 3 + import { getRoom, resolveHandle } from '$lib/oauth/auth.svelte'; 4 + import { roomState, type RoomObjectData } from './state.svelte'; 5 + import type { ProfileViewDetailed } from '@atproto/api/dist/client/types/app/bsky/actor/defs'; 6 + 7 + export const modals = $state({ 8 + selectCategoryModalOpen: false, 9 + roomSettingsModalState: false, 10 + linkModalState: false, 11 + infoModalState: false, 12 + successModalState: false, 13 + signInSuccessModalState: false 14 + }); 15 + 16 + export const userInfo: { 17 + handle: string; 18 + did: string; 19 + profile: ProfileViewDetailed | null; 20 + } = $state({ 21 + handle: '', 22 + did: '', 23 + profile: null 24 + }); 25 + 26 + export async function loadRoomFromBluesky(handle: string) { 27 + const did = await resolveHandle({ handle }); 28 + const room = await getRoom({ did }); 29 + 30 + roomState.did = room.room.did || did; 31 + roomState.wallColor = room.room.wallColor; 32 + roomState.floorColor = room.room.floorColor; 33 + 34 + const availableObjects = new Set(Object.keys(AllObjects)); 35 + 36 + roomState.objects = room.room.objects.filter((object: RoomObjectData) => 37 + availableObjects.has(object.kind as string) 38 + ); 39 + if (roomState.objects.length !== room.room.objects.length) { 40 + console.warn('some objects were not found and removed!'); 41 + } 42 + 43 + roomState.size = room.room.size; 44 + roomState.id = room.room.id; 45 + roomState.version = room.room.version; 46 + 47 + userInfo.profile = room.profile; 48 + 49 + trackEvent('room_view', { 50 + view_handle: handle 51 + }); 52 + 53 + return room.profile; 54 + }
-232
src/routes/test/+page.svelte
··· 1 - <script lang="ts"> 2 - import { deleteImage, getAllImageNames, getImage, openDB, saveImage } from '$lib/images.svelte'; 3 - import { onMount } from 'svelte'; 4 - 5 - // Open the IndexedDB on component mount 6 - onMount(async () => { 7 - await openDB(); 8 - 9 - loadImages(); 10 - }); 11 - 12 - // Save the selected image 13 - async function handleFileChange(event: Event) { 14 - const target = event.target as HTMLInputElement; 15 - if (target.files) { 16 - for (const file of target.files) { 17 - const compressedFile = await compressImage(file); 18 - saveImage(new Date().getTime().toString() + crypto.randomUUID(), compressedFile); 19 - } 20 - loadImages(); 21 - } 22 - } 23 - 24 - export function compressImage(file: File, maxSize: number = 100 * 1024): Promise<Blob> { 25 - return new Promise((resolve, reject) => { 26 - const img = new Image(); 27 - const reader = new FileReader(); 28 - 29 - reader.onload = (e) => { 30 - if (!e.target?.result) { 31 - return reject(new Error('Failed to read file.')); 32 - } 33 - img.src = e.target.result as string; 34 - }; 35 - 36 - reader.onerror = (err) => reject(err); 37 - reader.readAsDataURL(file); 38 - 39 - img.onload = () => { 40 - let width = img.width; 41 - let height = img.height; 42 - const maxDimension = 512; 43 - 44 - if (width > maxDimension || height > maxDimension) { 45 - if (width > height) { 46 - height = Math.round((maxDimension / width) * height); 47 - width = maxDimension; 48 - } else { 49 - width = Math.round((maxDimension / height) * width); 50 - height = maxDimension; 51 - } 52 - } 53 - 54 - console.log('Width:', width); 55 - console.log('Height:', height); 56 - 57 - // Create a canvas to draw the image 58 - const canvas = document.createElement('canvas'); 59 - canvas.width = width; 60 - canvas.height = height; 61 - const ctx = canvas.getContext('2d'); 62 - if (!ctx) return reject(new Error('Failed to get canvas context.')); 63 - ctx.drawImage(img, 0, 0, width, height); 64 - 65 - // Function to try compressing at a given quality 66 - let quality = 1.0; 67 - function attemptCompression() { 68 - canvas.toBlob( 69 - (blob) => { 70 - if (!blob) { 71 - return reject(new Error('Compression failed.')); 72 - } 73 - // If the blob is under our size limit, or quality is too low, resolve it 74 - if (blob.size <= maxSize || quality < 0.5) { 75 - console.log('Compression successful. Blob size:', blob.size); 76 - console.log('Quality:', quality); 77 - resolve(blob); 78 - } else { 79 - // Otherwise, reduce the quality and try again 80 - quality -= 0.1; 81 - attemptCompression(); 82 - } 83 - }, 84 - 'image/jpeg', 85 - quality 86 - ); 87 - } 88 - 89 - attemptCompression(); 90 - }; 91 - 92 - img.onerror = (err) => reject(err); 93 - }); 94 - } 95 - 96 - let images = $state< 97 - { 98 - name: string; 99 - url: string; 100 - }[] 101 - >([]); 102 - 103 - let inputRef = $state<HTMLInputElement | null>(null); 104 - 105 - async function loadImages() { 106 - const names = await getAllImageNames(); 107 - console.log('Names:', names); 108 - images = ( 109 - await Promise.all( 110 - names.map(async (name) => ({ 111 - name, 112 - url: await getImage(name) 113 - })) 114 - ) 115 - ).sort((a, b) => b.name.localeCompare(a.name)); 116 - } 117 - 118 - function handleDragOver(event: DragEvent) { 119 - event.preventDefault(); 120 - if (event.dataTransfer) { 121 - event.dataTransfer.dropEffect = 'copy'; 122 - } 123 - } 124 - 125 - function handleDrop(event: DragEvent) { 126 - event.preventDefault(); 127 - const file = event.dataTransfer?.files[0]; 128 - if (file) { 129 - handleFileChange({ target: { files: [file] } } as unknown as Event); 130 - } 131 - } 132 - 133 - function handleDragLeave(event: DragEvent) { 134 - event.preventDefault(); 135 - if (event.dataTransfer) { 136 - event.dataTransfer.dropEffect = 'none'; 137 - } 138 - } 139 - 140 - let selectedImage = $state<{ name: string; url: string } | null>(null); 141 - 142 - function handleSelectImage(image: { name: string; url: string }) { 143 - selectedImage = image; 144 - } 145 - </script> 146 - 147 - <div class="text-base-900 dark:text-base-50 max-w-xl p-4"> 148 - <!-- svelte-ignore a11y_click_events_have_key_events --> 149 - <!-- svelte-ignore a11y_no_static_element_interactions --> 150 - <div 151 - ondragover={handleDragOver} 152 - ondrop={handleDrop} 153 - ondragleave={handleDragLeave} 154 - onclick={() => { 155 - inputRef?.click(); 156 - }} 157 - class="dark:bg-accent-600/5 hover:bg-accent-400/10 dark:hover:bg-accent-600/10 border-accent-400 bg-accent-400/5 dark:border-accent-800 flex h-24 w-full cursor-pointer items-center justify-center gap-2 rounded-2xl border border-dashed p-4 transition-colors duration-200" 158 - > 159 - <svg 160 - xmlns="http://www.w3.org/2000/svg" 161 - fill="none" 162 - viewBox="0 0 24 24" 163 - stroke-width="1.5" 164 - stroke="currentColor" 165 - class="text-accent-600 dark:text-accent-400 size-6" 166 - > 167 - <path 168 - stroke-linecap="round" 169 - stroke-linejoin="round" 170 - d="m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z" 171 - /> 172 - </svg> 173 - 174 - <span class="text-accent-600 dark:text-accent-400 font-medium" 175 - >Drag and drop or browse to upload image</span 176 - > 177 - 178 - <input 179 - type="file" 180 - accept="image/*" 181 - onchange={handleFileChange} 182 - class="hidden" 183 - multiple 184 - bind:this={inputRef} 185 - /> 186 - </div> 187 - 188 - <div class="mt-4 grid grid-cols-3 gap-4"> 189 - {#each images as image} 190 - <div 191 - class="border-base-200 dark:border-base-800 relative isolate aspect-square rounded-2xl border object-cover" 192 - > 193 - <img 194 - src={image.url} 195 - alt="Loaded from IndexedDB" 196 - class="absolute inset-0 h-full w-full overflow-hidden rounded-2xl object-cover" 197 - /> 198 - 199 - <button 200 - onclick={() => { 201 - deleteImage(image.name); 202 - loadImages(); 203 - }} 204 - class="bg-accent-600/10 dark:bg-accent-400/10 text-accent-600 dark:text-accent-400 absolute -top-2 -left-2 z-10 flex size-6 cursor-pointer items-center justify-center rounded-full p-1 backdrop-blur-sm" 205 - > 206 - <svg 207 - xmlns="http://www.w3.org/2000/svg" 208 - fill="none" 209 - viewBox="0 0 24 24" 210 - stroke-width="1.5" 211 - stroke="currentColor" 212 - class="size-6" 213 - > 214 - <path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12" /> 215 - </svg> 216 - 217 - <span class="sr-only">Delete</span> 218 - </button> 219 - 220 - <button onclick={() => handleSelectImage(image)} class="absolute inset-0 cursor-pointer"> 221 - <span class="sr-only">select image</span> 222 - </button> 223 - </div> 224 - {/each} 225 - </div> 226 - 227 - {#if selectedImage} 228 - <div class="mt-4"> 229 - <img src={selectedImage.url} alt="Selected from IndexedDB" /> 230 - </div> 231 - {/if} 232 - </div>
-58
src/lib/models/kaykit-furniture-kit/armchair.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/armchair.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - armchair: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/armchair.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.armchair.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-67
src/lib/models/kaykit-furniture-kit/armchair_pillows.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/armchair_pillows.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Plane003: THREE.Mesh; 37 - Plane003_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - b: THREE.MeshStandardMaterial; 41 - a: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend( 46 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/armchair_pillows.glb') 47 - ); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Plane003.geometry}> 56 - <RoomObjectMaterial index={1} {colors} {opacity} /> 57 - </T.Mesh> 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Plane003_1.geometry}> 59 - <RoomObjectMaterial index={0} {colors} {opacity} /> 60 - </T.Mesh> 61 - </T.Group> 62 - {:catch err} 63 - {@render error?.({ error: err })} 64 - {/await} 65 - 66 - {@render children?.({ ref })} 67 - </T.Group>
-70
src/lib/models/kaykit-furniture-kit/bed_double_a.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/bed_double_a.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube037: THREE.Mesh; 37 - Cube037_1: THREE.Mesh; 38 - Cube037_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/bed_double_a.glb')); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube037.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube037_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube037_2.geometry} 62 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 - > 64 - </T.Group> 65 - {:catch err} 66 - {@render error?.({ error: err })} 67 - {/await} 68 - 69 - {@render children?.({ ref })} 70 - </T.Group>
-70
src/lib/models/kaykit-furniture-kit/bed_double_b.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/bed_double_b.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube001: THREE.Mesh; 37 - Cube001_1: THREE.Mesh; 38 - Cube001_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/bed_double_b.glb')); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube001.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube001_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube001_2.geometry} 62 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 - > 64 - </T.Group> 65 - {:catch err} 66 - {@render error?.({ error: err })} 67 - {/await} 68 - 69 - {@render children?.({ ref })} 70 - </T.Group>
-70
src/lib/models/kaykit-furniture-kit/bed_single_a.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/bed_single_a.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube039: THREE.Mesh; 37 - Cube039_1: THREE.Mesh; 38 - Cube039_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/bed_single_a.glb')); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube039.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube039_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube039_2.geometry} 62 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 - > 64 - </T.Group> 65 - {:catch err} 66 - {@render error?.({ error: err })} 67 - {/await} 68 - 69 - {@render children?.({ ref })} 70 - </T.Group>
-70
src/lib/models/kaykit-furniture-kit/bed_single_b.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/bed_single_b.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube038: THREE.Mesh; 37 - Cube038_1: THREE.Mesh; 38 - Cube038_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/bed_single_b.glb')); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube038.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube038_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube038_2.geometry} 62 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 - > 64 - </T.Group> 65 - {:catch err} 66 - {@render error?.({ error: err })} 67 - {/await} 68 - 69 - {@render children?.({ ref })} 70 - </T.Group>
-75
src/lib/models/kaykit-furniture-kit/book_set.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/book_set.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube007: THREE.Mesh; 37 - Cube007_1: THREE.Mesh; 38 - Cube007_2: THREE.Mesh; 39 - Cube007_3: THREE.Mesh; 40 - }; 41 - materials: { 42 - a: THREE.MeshStandardMaterial; 43 - b: THREE.MeshStandardMaterial; 44 - c: THREE.MeshStandardMaterial; 45 - d: THREE.MeshStandardMaterial; 46 - }; 47 - }; 48 - 49 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/book_set.glb')); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube007.geometry} 58 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 - > 60 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube007_1.geometry} 61 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 62 - > 63 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube007_2.geometry} 64 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 65 - > 66 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube007_3.geometry} 67 - ><RoomObjectMaterial index={3} {colors} {opacity} /></T.Mesh 68 - > 69 - </T.Group> 70 - {:catch err} 71 - {@render error?.({ error: err })} 72 - {/await} 73 - 74 - {@render children?.({ ref })} 75 - </T.Group>
-65
src/lib/models/kaykit-furniture-kit/book_single.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/book_single.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube008: THREE.Mesh; 37 - Cube008_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/book_single.glb')); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Group> 53 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube008.geometry} 54 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 - > 56 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube008_1.geometry} 57 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 - > 59 - </T.Group> 60 - {:catch err} 61 - {@render error?.({ error: err })} 62 - {/await} 63 - 64 - {@render children?.({ ref })} 65 - </T.Group>
-72
src/lib/models/kaykit-furniture-kit/cabinet_medium.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/cabinet_medium.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube012: THREE.Mesh; 37 - Cube012_1: THREE.Mesh; 38 - Cube012_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend( 48 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/cabinet_medium.glb') 49 - ); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube012.geometry} 58 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 - > 60 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube012_1.geometry} 61 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 62 - > 63 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube012_2.geometry} 64 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 65 - > 66 - </T.Group> 67 - {:catch err} 68 - {@render error?.({ error: err })} 69 - {/await} 70 - 71 - {@render children?.({ ref })} 72 - </T.Group>
-72
src/lib/models/kaykit-furniture-kit/cabinet_small.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/cabinet_small.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube013: THREE.Mesh; 37 - Cube013_1: THREE.Mesh; 38 - Cube013_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend( 48 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/cabinet_small.glb') 49 - ); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube013.geometry} 58 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 - > 60 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube013_1.geometry} 61 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 62 - > 63 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube013_2.geometry} 64 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 65 - > 66 - </T.Group> 67 - {:catch err} 68 - {@render error?.({ error: err })} 69 - {/await} 70 - 71 - {@render children?.({ ref })} 72 - </T.Group>
-65
src/lib/models/kaykit-furniture-kit/cactus_large.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/cactus_large.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cylinder001: THREE.Mesh; 37 - Cylinder001_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/cactus_large.glb')); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Group> 53 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder001.geometry} 54 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 - > 56 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder001_1.geometry} 57 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 - > 59 - </T.Group> 60 - {:catch err} 61 - {@render error?.({ error: err })} 62 - {/await} 63 - 64 - {@render children?.({ ref })} 65 - </T.Group>
-65
src/lib/models/kaykit-furniture-kit/cactus_small.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/cactus_small.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cylinder002: THREE.Mesh; 37 - Cylinder002_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/cactus_small.glb')); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Group> 53 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder002.geometry} 54 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 - > 56 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder002_1.geometry} 57 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 - > 59 - </T.Group> 60 - {:catch err} 61 - {@render error?.({ error: err })} 62 - {/await} 63 - 64 - {@render children?.({ ref })} 65 - </T.Group>
-65
src/lib/models/kaykit-furniture-kit/chair_a.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_a.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube034: THREE.Mesh; 37 - Cube034_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_a.glb')); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Group> 53 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube034.geometry} 54 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 - > 56 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube034_1.geometry} 57 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 - > 59 - </T.Group> 60 - {:catch err} 61 - {@render error?.({ error: err })} 62 - {/await} 63 - 64 - {@render children?.({ ref })} 65 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/chair_a_wood.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_a_wood.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - chair_A_wood: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_a_wood.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.chair_A_wood.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-65
src/lib/models/kaykit-furniture-kit/chair_b.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_b.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube032: THREE.Mesh; 37 - Cube032_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_b.glb')); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Group> 53 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube032.geometry} 54 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 - > 56 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube032_1.geometry} 57 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 - > 59 - </T.Group> 60 - {:catch err} 61 - {@render error?.({ error: err })} 62 - {/await} 63 - 64 - {@render children?.({ ref })} 65 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/chair_b_wood.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_b_wood.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - chair_B_wood: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_b_wood.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.chair_B_wood.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-65
src/lib/models/kaykit-furniture-kit/chair_c.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_c.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube031: THREE.Mesh; 37 - Cube031_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_c.glb')); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Group> 53 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube031.geometry} 54 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 - > 56 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube031_1.geometry} 57 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 - > 59 - </T.Group> 60 - {:catch err} 61 - {@render error?.({ error: err })} 62 - {/await} 63 - 64 - {@render children?.({ ref })} 65 - </T.Group>
-70
src/lib/models/kaykit-furniture-kit/chair_desk_a.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_desk_a.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cylinder625: THREE.Mesh; 37 - Cylinder625_1: THREE.Mesh; 38 - Cylinder625_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_desk_a.glb')); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder625.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder625_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder625_2.geometry} 62 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 - > 64 - </T.Group> 65 - {:catch err} 66 - {@render error?.({ error: err })} 67 - {/await} 68 - 69 - {@render children?.({ ref })} 70 - </T.Group>
-70
src/lib/models/kaykit-furniture-kit/chair_desk_b.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_desk_b.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cylinder624: THREE.Mesh; 37 - Cylinder624_1: THREE.Mesh; 38 - Cylinder624_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_desk_b.glb')); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder624.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder624_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder624_2.geometry} 62 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 - > 64 - </T.Group> 65 - {:catch err} 66 - {@render error?.({ error: err })} 67 - {/await} 68 - 69 - {@render children?.({ ref })} 70 - </T.Group>
-65
src/lib/models/kaykit-furniture-kit/chair_stool.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_stool.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube033: THREE.Mesh; 37 - Cube033_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_stool.glb')); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Group> 53 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube033.geometry} 54 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 - > 56 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube033_1.geometry} 57 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 - > 59 - </T.Group> 60 - {:catch err} 61 - {@render error?.({ error: err })} 62 - {/await} 63 - 64 - {@render children?.({ ref })} 65 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/chair_stool_wood.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_stool_wood.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - chair_stool_wood: THREE.Mesh; 37 - }; 38 - materials: {}; 39 - }; 40 - 41 - const gltf = suspend( 42 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_stool_wood.glb') 43 - ); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.chair_stool_wood.geometry}> 51 - <RoomObjectMaterial index={0} {colors} {opacity} /> 52 - </T.Mesh> 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/couch.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/couch.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - couch: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/couch.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.couch.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-67
src/lib/models/kaykit-furniture-kit/couch_pillows.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/couch_pillows.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Plane004: THREE.Mesh; 37 - Plane004_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend( 46 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/couch_pillows.glb') 47 - ); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Plane004.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Plane004_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - </T.Group> 62 - {:catch err} 63 - {@render error?.({ error: err })} 64 - {/await} 65 - 66 - {@render children?.({ ref })} 67 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/cup.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/cup.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - cup: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/cup.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.cup.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-75
src/lib/models/kaykit-furniture-kit/cup_pencils.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/cup_pencils.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cylinder617: THREE.Mesh; 37 - Cylinder617_1: THREE.Mesh; 38 - Cylinder617_2: THREE.Mesh; 39 - Cylinder617_3: THREE.Mesh; 40 - }; 41 - materials: { 42 - a: THREE.MeshStandardMaterial; 43 - b: THREE.MeshStandardMaterial; 44 - c: THREE.MeshStandardMaterial; 45 - d: THREE.MeshStandardMaterial; 46 - }; 47 - }; 48 - 49 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/cup_pencils.glb')); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder617.geometry} 58 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 - > 60 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder617_1.geometry} 61 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 62 - > 63 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder617_2.geometry} 64 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 65 - > 66 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder617_3.geometry} 67 - ><RoomObjectMaterial index={3} {colors} {opacity} /></T.Mesh 68 - > 69 - </T.Group> 70 - {:catch err} 71 - {@render error?.({ error: err })} 72 - {/await} 73 - 74 - {@render children?.({ ref })} 75 - </T.Group>
-70
src/lib/models/kaykit-furniture-kit/desk.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/desk.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube18254: THREE.Mesh; 37 - Cube18254_1: THREE.Mesh; 38 - Cube18254_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/desk.glb')); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18254.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18254_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18254_2.geometry} 62 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 - > 64 - </T.Group> 65 - {:catch err} 66 - {@render error?.({ error: err })} 67 - {/await} 68 - 69 - {@render children?.({ ref })} 70 - </T.Group>
-70
src/lib/models/kaykit-furniture-kit/desk_large.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/desk_large.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube18255: THREE.Mesh; 37 - Cube18255_1: THREE.Mesh; 38 - Cube18255_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/desk_large.glb')); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18255.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18255_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18255_2.geometry} 62 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 - > 64 - </T.Group> 65 - {:catch err} 66 - {@render error?.({ error: err })} 67 - {/await} 68 - 69 - {@render children?.({ ref })} 70 - </T.Group>
-72
src/lib/models/kaykit-furniture-kit/gameconsole_handheld.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/gameconsole_handheld.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube18248: THREE.Mesh; 37 - Cube18248_1: THREE.Mesh; 38 - Cube18248_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend( 48 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/gameconsole_handheld.glb') 49 - ); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18248.geometry} 58 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 - > 60 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18248_1.geometry} 61 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 62 - > 63 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18248_2.geometry} 64 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 65 - > 66 - </T.Group> 67 - {:catch err} 68 - {@render error?.({ error: err })} 69 - {/await} 70 - 71 - {@render children?.({ ref })} 72 - </T.Group>
-70
src/lib/models/kaykit-furniture-kit/keyboard.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/keyboard.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube18252: THREE.Mesh; 37 - Cube18252_1: THREE.Mesh; 38 - Cube18252_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/keyboard.glb')); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18252.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18252_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18252_2.geometry} 62 - ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 - > 64 - </T.Group> 65 - {:catch err} 66 - {@render error?.({ error: err })} 67 - {/await} 68 - 69 - {@render children?.({ ref })} 70 - </T.Group>
-77
src/lib/models/kaykit-furniture-kit/lamp_desk.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/lamp_desk.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cylinder629: THREE.Mesh; 37 - Cylinder629_1: THREE.Mesh; 38 - Cylinder629_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/lamp_desk.glb')); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder629.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder629_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - <T.Mesh geometry={gltf.nodes.Cylinder629_2.geometry} 62 - ><RoomObjectMaterial 63 - emissive={colors?.[2]} 64 - emissiveIntensity={1} 65 - index={2} 66 - {colors} 67 - {opacity} 68 - /></T.Mesh 69 - > 70 - <T.PointLight position={[0, 0.8, 0.45]} color={colors?.[2]} intensity={1} /> 71 - </T.Group> 72 - {:catch err} 73 - {@render error?.({ error: err })} 74 - {/await} 75 - 76 - {@render children?.({ ref })} 77 - </T.Group>
-86
src/lib/models/kaykit-furniture-kit/lamp_standing.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/lamp_standing.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Sphere002: THREE.Mesh; 37 - Sphere002_1: THREE.Mesh; 38 - Sphere002_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend( 48 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/lamp_standing.glb') 49 - ); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Sphere002.geometry} 58 - ><RoomObjectMaterial 59 - index={0} 60 - {colors} 61 - opacity={0.95} 62 - emissive={colors?.[2]} 63 - emissiveIntensity={0.5} 64 - /></T.Mesh 65 - > 66 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Sphere002_1.geometry} 67 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 68 - > 69 - <T.Mesh geometry={gltf.nodes.Sphere002_2.geometry} 70 - ><RoomObjectMaterial 71 - emissive={colors?.[2]} 72 - emissiveIntensity={1} 73 - index={2} 74 - {colors} 75 - {opacity} 76 - /></T.Mesh 77 - > 78 - 79 - <T.PointLight position={[0, 2, 0.0]} color={colors?.[2]} intensity={1} /> 80 - </T.Group> 81 - {:catch err} 82 - {@render error?.({ error: err })} 83 - {/await} 84 - 85 - {@render children?.({ ref })} 86 - </T.Group>
-84
src/lib/models/kaykit-furniture-kit/lamp_table.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/lamp_table.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Sphere001: THREE.Mesh; 37 - Sphere001_1: THREE.Mesh; 38 - Sphere001_2: THREE.Mesh; 39 - }; 40 - materials: { 41 - a: THREE.MeshStandardMaterial; 42 - b: THREE.MeshStandardMaterial; 43 - c: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/lamp_table.glb')); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Sphere001.geometry} 56 - ><RoomObjectMaterial 57 - index={0} 58 - {colors} 59 - opacity={0.95} 60 - emissive={colors?.[2]} 61 - emissiveIntensity={0.5} 62 - /></T.Mesh 63 - > 64 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Sphere001_1.geometry} 65 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 66 - > 67 - <T.Mesh geometry={gltf.nodes.Sphere001_2.geometry} 68 - ><RoomObjectMaterial 69 - emissive={colors?.[2]} 70 - emissiveIntensity={1} 71 - index={2} 72 - {colors} 73 - {opacity} 74 - /></T.Mesh 75 - > 76 - 77 - <T.PointLight position={[0, 0.4, 0]} color={colors?.[2]} intensity={1} /> 78 - </T.Group> 79 - {:catch err} 80 - {@render error?.({ error: err })} 81 - {/await} 82 - 83 - {@render children?.({ ref })} 84 - </T.Group>
-106
src/lib/models/kaykit-furniture-kit/monitor.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/monitor.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useCursor, useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - import Youtube from '$lib/Youtube.svelte'; 17 - import { editorState } from '$lib/state.svelte'; 18 - import { Spring } from 'svelte/motion'; 19 - 20 - let { 21 - fallback, 22 - error, 23 - children, 24 - ref = $bindable(), 25 - colors, 26 - opacity, 27 - link, 28 - image, 29 - ...props 30 - }: Props<THREE.Group> & { 31 - ref?: THREE.Group; 32 - children?: Snippet<[{ ref: THREE.Group }]>; 33 - fallback?: Snippet; 34 - error?: Snippet<[{ error: Error }]>; 35 - } & ExtraRoomObjectProps = $props(); 36 - 37 - const suspend = useSuspense(); 38 - 39 - type GLTFResult = { 40 - nodes: { 41 - Cube18237: THREE.Mesh; 42 - Cube18237_1: THREE.Mesh; 43 - }; 44 - materials: { 45 - a: THREE.MeshStandardMaterial; 46 - image: THREE.MeshStandardMaterial; 47 - }; 48 - }; 49 - 50 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/monitor.glb')); 51 - 52 - let playPause: (() => void) | undefined = $state(); 53 - 54 - const { onPointerEnter, onPointerLeave } = useCursor(); 55 - 56 - let scale = new Spring(1.0, { 57 - stiffness: 0.2, 58 - damping: 0.3 59 - }); 60 - </script> 61 - 62 - <T.Group bind:ref dispose={false} {...props}> 63 - {#await gltf} 64 - {@render fallback?.()} 65 - {:then gltf} 66 - <T.Group 67 - onpointerenter={() => { 68 - if (editorState.isEditing) return; 69 - scale.target = 1.1; 70 - onPointerEnter(); 71 - }} 72 - onpointerleave={() => { 73 - if (editorState.isEditing) return; 74 - scale.target = 1.0; 75 - onPointerLeave(); 76 - }} 77 - scale={scale.current} 78 - > 79 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18237.geometry} 80 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 81 - > 82 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18237_1.geometry} 83 - ><RoomObjectMaterial colors={['#000000']} index={0} {opacity} /></T.Mesh 84 - > 85 - {#if !editorState.isEditing && link} 86 - <Youtube 87 - onclick={(evt: { stopPropagation: () => void }) => { 88 - if (editorState.isEditing) return; 89 - evt.stopPropagation(); 90 - 91 - playPause?.(); 92 - }} 93 - position={[0, 0.66, 0.15]} 94 - rotation.x={-0.175} 95 - videoId={link} 96 - size={[270 * 2, 150 * 2]} 97 - bind:playPause 98 - /> 99 - {/if} 100 - </T.Group> 101 - {:catch err} 102 - {@render error?.({ error: err })} 103 - {/await} 104 - 105 - {@render children?.({ ref })} 106 - </T.Group>
-65
src/lib/models/kaykit-furniture-kit/mouse.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/mouse.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube18235: THREE.Mesh; 37 - Cube18235_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/mouse.glb')); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Group> 53 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18235.geometry} 54 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 - > 56 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18235_1.geometry} 57 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 - > 59 - </T.Group> 60 - {:catch err} 61 - {@render error?.({ error: err })} 62 - {/await} 63 - 64 - {@render children?.({ ref })} 65 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/mousepad.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/mousepad.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - mousepad_A: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/mousepad.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.mousepad_A.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-67
src/lib/models/kaykit-furniture-kit/mousepad_large.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/mousepad_large.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube18245: THREE.Mesh; 37 - Cube18245_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend( 46 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/mousepad_large.glb') 47 - ); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18245.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18245_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - </T.Group> 62 - {:catch err} 63 - {@render error?.({ error: err })} 64 - {/await} 65 - 66 - {@render children?.({ ref })} 67 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/mug_a.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/mug_a.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - mug_A: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/mug_a.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.mug_A.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/mug_b.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/mug_b.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - mug_B: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/mug_b.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.mug_B.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-67
src/lib/models/kaykit-furniture-kit/pictureframe_large_a.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_large_a.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - import Image from '$lib/Image.svelte'; 17 - 18 - let { 19 - fallback, 20 - error, 21 - children, 22 - ref = $bindable(), 23 - colors, 24 - opacity, 25 - image, 26 - ...props 27 - }: Props<THREE.Group> & { 28 - ref?: THREE.Group; 29 - children?: Snippet<[{ ref: THREE.Group }]>; 30 - fallback?: Snippet; 31 - error?: Snippet<[{ error: Error }]>; 32 - } & ExtraRoomObjectProps = $props(); 33 - 34 - const suspend = useSuspense(); 35 - 36 - type GLTFResult = { 37 - nodes: { 38 - Cube016: THREE.Mesh; 39 - Cube016_1: THREE.Mesh; 40 - }; 41 - materials: { 42 - a: THREE.MeshStandardMaterial; 43 - image: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend( 48 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_large_a.glb') 49 - ); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube016.geometry} 58 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 - > 60 - <Image {image} position={[0, 0, 0.15]} size={[270 * 1.3, 150 * 2.6]} /> 61 - </T.Group> 62 - {:catch err} 63 - {@render error?.({ error: err })} 64 - {/await} 65 - 66 - {@render children?.({ ref })} 67 - </T.Group>
-68
src/lib/models/kaykit-furniture-kit/pictureframe_large_b.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_large_b.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - import Image from '$lib/Image.svelte'; 17 - 18 - let { 19 - fallback, 20 - error, 21 - children, 22 - ref = $bindable(), 23 - colors, 24 - opacity, 25 - image, 26 - ...props 27 - }: Props<THREE.Group> & { 28 - ref?: THREE.Group; 29 - children?: Snippet<[{ ref: THREE.Group }]>; 30 - fallback?: Snippet; 31 - error?: Snippet<[{ error: Error }]>; 32 - } & ExtraRoomObjectProps = $props(); 33 - 34 - const suspend = useSuspense(); 35 - 36 - type GLTFResult = { 37 - nodes: { 38 - Cube018: THREE.Mesh; 39 - Cube018_1: THREE.Mesh; 40 - }; 41 - materials: { 42 - a: THREE.MeshStandardMaterial; 43 - image: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend( 48 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_large_b.glb') 49 - ); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube018.geometry} 58 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 - > 60 - 61 - <Image {image} position={[0, 0, 0.15]} size={[270 * 2.65, 150 * 2.6]} /> 62 - </T.Group> 63 - {:catch err} 64 - {@render error?.({ error: err })} 65 - {/await} 66 - 67 - {@render children?.({ ref })} 68 - </T.Group>
-67
src/lib/models/kaykit-furniture-kit/pictureframe_medium.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_medium.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - import Image from '$lib/Image.svelte'; 17 - 18 - let { 19 - fallback, 20 - error, 21 - children, 22 - ref = $bindable(), 23 - colors, 24 - opacity, 25 - image, 26 - ...props 27 - }: Props<THREE.Group> & { 28 - ref?: THREE.Group; 29 - children?: Snippet<[{ ref: THREE.Group }]>; 30 - fallback?: Snippet; 31 - error?: Snippet<[{ error: Error }]>; 32 - } & ExtraRoomObjectProps = $props(); 33 - 34 - const suspend = useSuspense(); 35 - 36 - type GLTFResult = { 37 - nodes: { 38 - Cube015: THREE.Mesh; 39 - Cube015_1: THREE.Mesh; 40 - }; 41 - materials: { 42 - a: THREE.MeshStandardMaterial; 43 - image: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend( 48 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_medium.glb') 49 - ); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube015.geometry} 58 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 - > 60 - <Image {image} position={[0, 0, 0.15]} size={[270 * 0.7, 150 * 1.8]} /> 61 - </T.Group> 62 - {:catch err} 63 - {@render error?.({ error: err })} 64 - {/await} 65 - 66 - {@render children?.({ ref })} 67 - </T.Group>
-67
src/lib/models/kaykit-furniture-kit/pictureframe_small_a.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_small_a.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - import Image from '$lib/Image.svelte'; 17 - 18 - let { 19 - fallback, 20 - error, 21 - children, 22 - ref = $bindable(), 23 - colors, 24 - opacity, 25 - image, 26 - ...props 27 - }: Props<THREE.Group> & { 28 - ref?: THREE.Group; 29 - children?: Snippet<[{ ref: THREE.Group }]>; 30 - fallback?: Snippet; 31 - error?: Snippet<[{ error: Error }]>; 32 - } & ExtraRoomObjectProps = $props(); 33 - 34 - const suspend = useSuspense(); 35 - 36 - type GLTFResult = { 37 - nodes: { 38 - Cube014: THREE.Mesh; 39 - Cube014_1: THREE.Mesh; 40 - }; 41 - materials: { 42 - a: THREE.MeshStandardMaterial; 43 - image: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend( 48 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_small_a.glb') 49 - ); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube014.geometry} 58 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 - > 60 - <Image {image} position={[0, 0.0, 0.15]} size={[270 * 0.5, 150 * 1.1]} /> 61 - </T.Group> 62 - {:catch err} 63 - {@render error?.({ error: err })} 64 - {/await} 65 - 66 - {@render children?.({ ref })} 67 - </T.Group>
-67
src/lib/models/kaykit-furniture-kit/pictureframe_small_b.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_small_b.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - import Image from '$lib/Image.svelte'; 17 - 18 - let { 19 - fallback, 20 - error, 21 - children, 22 - ref = $bindable(), 23 - colors, 24 - opacity, 25 - image, 26 - ...props 27 - }: Props<THREE.Group> & { 28 - ref?: THREE.Group; 29 - children?: Snippet<[{ ref: THREE.Group }]>; 30 - fallback?: Snippet; 31 - error?: Snippet<[{ error: Error }]>; 32 - } & ExtraRoomObjectProps = $props(); 33 - 34 - const suspend = useSuspense(); 35 - 36 - type GLTFResult = { 37 - nodes: { 38 - Cube017: THREE.Mesh; 39 - Cube017_1: THREE.Mesh; 40 - }; 41 - materials: { 42 - a: THREE.MeshStandardMaterial; 43 - image: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend( 48 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_small_b.glb') 49 - ); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube017.geometry} 58 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 - > 60 - <Image {image} position={[0, 0.0, 0.15]} size={[270 * 0.7, 150 * 0.6]} /> 61 - </T.Group> 62 - {:catch err} 63 - {@render error?.({ error: err })} 64 - {/await} 65 - 66 - {@render children?.({ ref })} 67 - </T.Group>
-67
src/lib/models/kaykit-furniture-kit/pictureframe_small_c.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_small_c.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - import Image from '$lib/Image.svelte'; 17 - 18 - let { 19 - fallback, 20 - error, 21 - children, 22 - ref = $bindable(), 23 - colors, 24 - opacity, 25 - image, 26 - ...props 27 - }: Props<THREE.Group> & { 28 - ref?: THREE.Group; 29 - children?: Snippet<[{ ref: THREE.Group }]>; 30 - fallback?: Snippet; 31 - error?: Snippet<[{ error: Error }]>; 32 - } & ExtraRoomObjectProps = $props(); 33 - 34 - const suspend = useSuspense(); 35 - 36 - type GLTFResult = { 37 - nodes: { 38 - Cube025: THREE.Mesh; 39 - Cube025_1: THREE.Mesh; 40 - }; 41 - materials: { 42 - a: THREE.MeshStandardMaterial; 43 - image: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend( 48 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_small_c.glb') 49 - ); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube025.geometry} 58 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 - > 60 - <Image {image} position={[0, 0.0, 0.15]} size={[270 * 0.5, 270 * 0.5]} /> 61 - </T.Group> 62 - {:catch err} 63 - {@render error?.({ error: err })} 64 - {/await} 65 - 66 - {@render children?.({ ref })} 67 - </T.Group>
-67
src/lib/models/kaykit-furniture-kit/pictureframe_standing_a.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_standing_a.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - import Image from '$lib/Image.svelte'; 17 - 18 - let { 19 - fallback, 20 - error, 21 - children, 22 - ref = $bindable(), 23 - colors, 24 - opacity, 25 - image, 26 - ...props 27 - }: Props<THREE.Group> & { 28 - ref?: THREE.Group; 29 - children?: Snippet<[{ ref: THREE.Group }]>; 30 - fallback?: Snippet; 31 - error?: Snippet<[{ error: Error }]>; 32 - } & ExtraRoomObjectProps = $props(); 33 - 34 - const suspend = useSuspense(); 35 - 36 - type GLTFResult = { 37 - nodes: { 38 - Cube024: THREE.Mesh; 39 - Cube024_1: THREE.Mesh; 40 - }; 41 - materials: { 42 - a: THREE.MeshStandardMaterial; 43 - image: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend( 48 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_standing_a.glb') 49 - ); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group> 57 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube024.geometry} 58 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 - > 60 - <Image {image} position={[0, 0.33, 0.05]} size={[270 * 0.5, 150 * 1.1]} rotation.x={-0.35} /> 61 - </T.Group> 62 - {:catch err} 63 - {@render error?.({ error: err })} 64 - {/await} 65 - 66 - {@render children?.({ ref })} 67 - </T.Group>
-66
src/lib/models/kaykit-furniture-kit/pictureframe_standing_b.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_standing_b.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - import Image from '$lib/Image.svelte'; 17 - 18 - let { 19 - fallback, 20 - error, 21 - children, 22 - ref = $bindable(), 23 - colors, 24 - opacity, 25 - image, 26 - ...props 27 - }: Props<THREE.Group> & { 28 - ref?: THREE.Group; 29 - children?: Snippet<[{ ref: THREE.Group }]>; 30 - fallback?: Snippet; 31 - error?: Snippet<[{ error: Error }]>; 32 - } & ExtraRoomObjectProps = $props(); 33 - 34 - const suspend = useSuspense(); 35 - 36 - type GLTFResult = { 37 - nodes: { 38 - Cube023: THREE.Mesh; 39 - Cube023_1: THREE.Mesh; 40 - }; 41 - materials: { 42 - a: THREE.MeshStandardMaterial; 43 - image: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = suspend( 48 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_standing_b.glb') 49 - ); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube023.geometry} 57 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 58 - > 59 - 60 - <Image {image} position={[0, 0.25, 0.05]} size={[270 * 0.7, 150 * 0.6]} rotation.x={-0.35} /> 61 - {:catch err} 62 - {@render error?.({ error: err })} 63 - {/await} 64 - 65 - {@render children?.({ ref })} 66 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/pillow.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pillow.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - pillow_A: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pillow.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.pillow_A.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-67
src/lib/models/kaykit-furniture-kit/rug_rectangle-pattern.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/rug_rectangle-pattern.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube011: THREE.Mesh; 37 - Cube011_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - b: THREE.MeshStandardMaterial; 41 - a: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend( 46 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/rug_rectangle-pattern.glb') 47 - ); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube011.geometry} 56 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube011_1.geometry} 59 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 60 - > 61 - </T.Group> 62 - {:catch err} 63 - {@render error?.({ error: err })} 64 - {/await} 65 - 66 - {@render children?.({ ref })} 67 - </T.Group>
-60
src/lib/models/kaykit-furniture-kit/rug_rectangle.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/rug_rectangle.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - rug_rectangle_B: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend( 44 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/rug_rectangle.glb') 45 - ); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.rug_rectangle_B.geometry} 53 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 54 - > 55 - {:catch err} 56 - {@render error?.({ error: err })} 57 - {/await} 58 - 59 - {@render children?.({ ref })} 60 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/rug_rounded.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/rug_rounded.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - rug_oval_B: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/rug_rounded.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.rug_oval_B.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-65
src/lib/models/kaykit-furniture-kit/shelf_a_big.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/shelf_a_big.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube028: THREE.Mesh; 37 - Cube028_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/shelf_a_big.glb')); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Group> 53 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube028.geometry} 54 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 - > 56 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube028_1.geometry} 57 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 - > 59 - </T.Group> 60 - {:catch err} 61 - {@render error?.({ error: err })} 62 - {/await} 63 - 64 - {@render children?.({ ref })} 65 - </T.Group>
-67
src/lib/models/kaykit-furniture-kit/shelf_a_small.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/shelf_a_small.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube026: THREE.Mesh; 37 - Cube026_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend( 46 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/shelf_a_small.glb') 47 - ); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube026.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube026_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - </T.Group> 62 - {:catch err} 63 - {@render error?.({ error: err })} 64 - {/await} 65 - 66 - {@render children?.({ ref })} 67 - </T.Group>
-65
src/lib/models/kaykit-furniture-kit/shelf_b_big.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/shelf_b_big.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube029: THREE.Mesh; 37 - Cube029_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/shelf_b_big.glb')); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Group> 53 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube029.geometry} 54 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 - > 56 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube029_1.geometry} 57 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 - > 59 - </T.Group> 60 - {:catch err} 61 - {@render error?.({ error: err })} 62 - {/await} 63 - 64 - {@render children?.({ ref })} 65 - </T.Group>
-67
src/lib/models/kaykit-furniture-kit/shelf_b_small.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/shelf_b_small.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Cube027: THREE.Mesh; 37 - Cube027_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - a: THREE.MeshStandardMaterial; 41 - b: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = suspend( 46 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/shelf_b_small.glb') 47 - ); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group> 55 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube027.geometry} 56 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 - > 58 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube027_1.geometry} 59 - ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 - > 61 - </T.Group> 62 - {:catch err} 63 - {@render error?.({ error: err })} 64 - {/await} 65 - 66 - {@render children?.({ ref })} 67 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/table_low.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/table_low.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - table_low: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/table_low.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.table_low.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/table_medium.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/table_medium.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - table_medium: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/table_medium.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.table_medium.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-60
src/lib/models/kaykit-furniture-kit/table_medium_long.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/table_medium_long.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - table_medium_long: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend( 44 - useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/table_medium_long.glb') 45 - ); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.table_medium_long.geometry} 53 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 54 - > 55 - {:catch err} 56 - {@render error?.({ error: err })} 57 - {/await} 58 - 59 - {@render children?.({ ref })} 60 - </T.Group>
-58
src/lib/models/kaykit-furniture-kit/table_small.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/table_small.glb -r /room/ 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - 13 - import { type ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - import { base } from '$app/paths'; 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - } & ExtraRoomObjectProps = $props(); 31 - 32 - const suspend = useSuspense(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - table_small: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/table_small.glb')); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.table_small.geometry} 51 - ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 - > 53 - {:catch err} 54 - {@render error?.({ error: err })} 55 - {/await} 56 - 57 - {@render children?.({ ref })} 58 - </T.Group>
-143
src/lib/models/kenney-furniture-kit/bedBunk.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/bedBunk.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_bedBunk: THREE.Mesh; 34 - Mesh_bedBunk_1: THREE.Mesh; 35 - Mesh_cover: THREE.Mesh; 36 - Mesh_cover_1: THREE.Mesh; 37 - pillowBottom: THREE.Mesh; 38 - pillowTop: THREE.Mesh; 39 - }; 40 - materials: { 41 - wood: THREE.MeshStandardMaterial; 42 - carpetWhite: THREE.MeshStandardMaterial; 43 - carpet: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/bedBunk.glb'); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - <T.Group position={[-0.3, 0, 0.6]}> 52 - {#await gltf} 53 - {@render fallback?.()} 54 - {:then gltf} 55 - <T.Mesh 56 - castShadow 57 - receiveShadow 58 - geometry={gltf.nodes.Mesh_bedBunk.geometry} 59 - material={gltf.materials.wood.clone()} 60 - material.color={colors?.[0] ?? gltf.materials.wood.color} 61 - material.opacity={opacity ?? gltf.materials.wood.opacity} 62 - material.transparent={opacity !== undefined} 63 - /> 64 - <T.Mesh 65 - castShadow 66 - receiveShadow 67 - geometry={gltf.nodes.Mesh_bedBunk_1.geometry} 68 - material={gltf.materials.carpetWhite.clone()} 69 - material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 70 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 71 - material.transparent={opacity !== undefined} 72 - /> 73 - <T.Group position={[-0.38, 0.2, -0.83]} rotation={[0, -Math.PI / 2, 0]} scale={0.5}> 74 - <T.Mesh 75 - castShadow 76 - receiveShadow 77 - geometry={gltf.nodes.Mesh_cover.geometry} 78 - material={gltf.materials.carpet.clone()} 79 - material.color={colors?.[2] ?? gltf.materials.carpet.color} 80 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 81 - material.transparent={opacity !== undefined} 82 - /> 83 - <T.Mesh 84 - castShadow 85 - receiveShadow 86 - geometry={gltf.nodes.Mesh_cover_1.geometry} 87 - material={gltf.materials.carpetWhite.clone()} 88 - material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 89 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 90 - material.transparent={opacity !== undefined} 91 - /> 92 - </T.Group> 93 - <T.Group position={[-0.38, 0.73, -0.83]} rotation={[0, -Math.PI / 2, 0]} scale={0.5}> 94 - <T.Mesh 95 - castShadow 96 - receiveShadow 97 - geometry={gltf.nodes.Mesh_cover.geometry} 98 - material={gltf.materials.carpet.clone()} 99 - material.color={colors?.[2] ?? gltf.materials.carpet.color} 100 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 101 - material.transparent={opacity !== undefined} 102 - /> 103 - <T.Mesh 104 - castShadow 105 - receiveShadow 106 - geometry={gltf.nodes.Mesh_cover_1.geometry} 107 - material={gltf.materials.carpetWhite.clone()} 108 - material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 109 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 110 - material.transparent={opacity !== undefined} 111 - /> 112 - </T.Group> 113 - <T.Mesh 114 - castShadow 115 - receiveShadow 116 - geometry={gltf.nodes.pillowBottom.geometry} 117 - material={gltf.materials.carpetWhite.clone()} 118 - material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 119 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 120 - material.transparent={opacity !== undefined} 121 - position={[0.12, 0.2, -1.07]} 122 - rotation={[0.13, -Math.PI / 2, 0]} 123 - scale={[0.5, 0.5, 0.85]} 124 - /> 125 - <T.Mesh 126 - castShadow 127 - receiveShadow 128 - geometry={gltf.nodes.pillowTop.geometry} 129 - material={gltf.materials.carpetWhite.clone()} 130 - material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 131 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 132 - material.transparent={opacity !== undefined} 133 - position={[0.12, 0.74, -1.07]} 134 - rotation={[0.13, -Math.PI / 2, 0]} 135 - scale={[0.5, 0.5, 0.85]} 136 - /> 137 - {:catch err} 138 - {@render error?.({ error: err })} 139 - {/await} 140 - 141 - {@render children?.({ ref })} 142 - </T.Group> 143 - </T.Group>
-134
src/lib/models/kenney-furniture-kit/bedDouble.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/bedDouble.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_bedDouble: THREE.Mesh; 34 - Mesh_bedDouble_1: THREE.Mesh; 35 - Mesh_bedDouble_2: THREE.Mesh; 36 - Mesh_cover: THREE.Mesh; 37 - Mesh_cover_1: THREE.Mesh; 38 - pillowLeft: THREE.Mesh; 39 - pillowRight: THREE.Mesh; 40 - }; 41 - materials: { 42 - carpetWhite: THREE.MeshStandardMaterial; 43 - wood: THREE.MeshStandardMaterial; 44 - metal: THREE.MeshStandardMaterial; 45 - carpet: THREE.MeshStandardMaterial; 46 - }; 47 - }; 48 - 49 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/bedDouble.glb'); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - <T.Group position={[-0.5, 0, 0.5]}> 54 - {#await gltf} 55 - {@render fallback?.()} 56 - {:then gltf} 57 - <T.Mesh 58 - castShadow 59 - receiveShadow 60 - geometry={gltf.nodes.Mesh_bedDouble.geometry} 61 - material={gltf.materials.carpetWhite.clone()} 62 - material.color={colors?.[0] ?? gltf.materials.carpetWhite.color} 63 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 64 - material.transparent={opacity !== undefined} 65 - /> 66 - <T.Mesh 67 - castShadow 68 - receiveShadow 69 - geometry={gltf.nodes.Mesh_bedDouble_1.geometry} 70 - material={gltf.materials.wood.clone()} 71 - material.color={colors?.[1] ?? gltf.materials.wood.color} 72 - material.opacity={opacity ?? gltf.materials.wood.opacity} 73 - material.transparent={opacity !== undefined} 74 - /> 75 - <T.Mesh 76 - castShadow 77 - receiveShadow 78 - geometry={gltf.nodes.Mesh_bedDouble_2.geometry} 79 - material={gltf.materials.metal.clone()} 80 - material.color={colors?.[2] ?? gltf.materials.metal.color} 81 - material.opacity={opacity ?? gltf.materials.metal.opacity} 82 - material.transparent={opacity !== undefined} 83 - /> 84 - <T.Group position={[0.01, 0.21, -0.79]} rotation={[0, -Math.PI / 2, 0]} scale={0.5}> 85 - <T.Mesh 86 - castShadow 87 - receiveShadow 88 - geometry={gltf.nodes.Mesh_cover.geometry} 89 - material={gltf.materials.carpet.clone()} 90 - material.color={colors?.[3] ?? gltf.materials.carpet.color} 91 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 92 - material.transparent={opacity !== undefined} 93 - /> 94 - <T.Mesh 95 - castShadow 96 - receiveShadow 97 - geometry={gltf.nodes.Mesh_cover_1.geometry} 98 - material={gltf.materials.carpetWhite.clone()} 99 - material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 100 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 101 - material.transparent={opacity !== undefined} 102 - /> 103 - </T.Group> 104 - <T.Mesh 105 - castShadow 106 - receiveShadow 107 - geometry={gltf.nodes.pillowLeft.geometry} 108 - material={gltf.materials.carpetWhite.clone()} 109 - material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 110 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 111 - material.transparent={opacity !== undefined} 112 - position={[0.11, 0.22, -1.03]} 113 - rotation={[0.13, -Math.PI / 2, 0]} 114 - scale={[0.5, 0.5, 0.85]} 115 - /> 116 - <T.Mesh 117 - castShadow 118 - receiveShadow 119 - geometry={gltf.nodes.pillowRight.geometry} 120 - material={gltf.materials.carpetWhite.clone()} 121 - material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 122 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 123 - material.transparent={opacity !== undefined} 124 - position={[0.5, 0.22, -1.03]} 125 - rotation={[0.13, -Math.PI / 2, 0]} 126 - scale={[0.5, 0.5, 0.85]} 127 - /> 128 - {:catch err} 129 - {@render error?.({ error: err })} 130 - {/await} 131 - 132 - {@render children?.({ ref })} 133 - </T.Group> 134 - </T.Group>
-121
src/lib/models/kenney-furniture-kit/bedSingle.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/bedSingle.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_bedSingle: THREE.Mesh; 34 - Mesh_bedSingle_1: THREE.Mesh; 35 - Mesh_bedSingle_2: THREE.Mesh; 36 - Mesh_cover: THREE.Mesh; 37 - Mesh_cover_1: THREE.Mesh; 38 - pillow: THREE.Mesh; 39 - }; 40 - materials: { 41 - carpetWhite: THREE.MeshStandardMaterial; 42 - wood: THREE.MeshStandardMaterial; 43 - metal: THREE.MeshStandardMaterial; 44 - carpet: THREE.MeshStandardMaterial; 45 - }; 46 - }; 47 - 48 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/bedSingle.glb'); 49 - </script> 50 - 51 - <T.Group bind:ref dispose={false} {...props}> 52 - <T.Group position={[-0.7, 0, 0.5]}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Mesh 57 - castShadow 58 - receiveShadow 59 - geometry={gltf.nodes.Mesh_bedSingle.geometry} 60 - material={gltf.materials.carpetWhite.clone()} 61 - material.color={colors?.[0] ?? gltf.materials.carpetWhite.color} 62 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 63 - material.transparent={opacity !== undefined} 64 - /> 65 - <T.Mesh 66 - castShadow 67 - receiveShadow 68 - geometry={gltf.nodes.Mesh_bedSingle_1.geometry} 69 - material={gltf.materials.wood.clone()} 70 - material.color={colors?.[1] ?? gltf.materials.wood.color} 71 - material.opacity={opacity ?? gltf.materials.wood.opacity} 72 - material.transparent={opacity !== undefined} 73 - /> 74 - <T.Mesh 75 - castShadow 76 - receiveShadow 77 - geometry={gltf.nodes.Mesh_bedSingle_2.geometry} 78 - material={gltf.materials.metal.clone()} 79 - material.color={colors?.[2] ?? gltf.materials.metal.color} 80 - material.opacity={opacity ?? gltf.materials.metal.opacity} 81 - material.transparent={opacity !== undefined} 82 - /> 83 - <T.Group position={[0.01, 0.21, -0.79]} rotation={[0, -Math.PI / 2, 0]} scale={0.5}> 84 - <T.Mesh 85 - castShadow 86 - receiveShadow 87 - geometry={gltf.nodes.Mesh_cover.geometry} 88 - material={gltf.materials.carpet.clone()} 89 - material.color={colors?.[3] ?? gltf.materials.carpet.color} 90 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 91 - material.transparent={opacity !== undefined} 92 - /> 93 - <T.Mesh 94 - castShadow 95 - receiveShadow 96 - geometry={gltf.nodes.Mesh_cover_1.geometry} 97 - material={gltf.materials.carpetWhite.clone()} 98 - material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 99 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 100 - material.transparent={opacity !== undefined} 101 - /> 102 - </T.Group> 103 - <T.Mesh 104 - castShadow 105 - receiveShadow 106 - geometry={gltf.nodes.pillow.geometry} 107 - material={gltf.materials.carpetWhite.clone()} 108 - material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 109 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 110 - material.transparent={opacity !== undefined} 111 - position={[0.5, 0.22, -1.03]} 112 - rotation={[0.13, -Math.PI / 2, 0]} 113 - scale={[0.5, 0.5, 0.85]} 114 - /> 115 - {:catch err} 116 - {@render error?.({ error: err })} 117 - {/await} 118 - 119 - {@render children?.({ ref })} 120 - </T.Group> 121 - </T.Group>
-62
src/lib/models/kenney-furniture-kit/bench.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/bench.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - colors, 19 - opacity, 20 - ref = $bindable(), 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - ['bench(Clone)']: THREE.Mesh; 34 - }; 35 - materials: { 36 - wood: THREE.MeshStandardMaterial; 37 - }; 38 - }; 39 - 40 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/bench.glb'); 41 - </script> 42 - 43 - <T.Group bind:ref dispose={false} {...props}> 44 - {#await gltf} 45 - {@render fallback?.()} 46 - {:then gltf} 47 - <T.Mesh 48 - castShadow 49 - receiveShadow 50 - geometry={gltf.nodes['bench(Clone)'].geometry} 51 - material={gltf.materials.wood.clone()} 52 - material.color={colors?.[0] ?? gltf.materials.wood.color} 53 - material.opacity={opacity ?? gltf.materials.wood.opacity} 54 - material.transparent={opacity !== undefined} 55 - position={[-0.2, 0, 0.1]} 56 - /> 57 - {:catch err} 58 - {@render error?.({ error: err })} 59 - {/await} 60 - 61 - {@render children?.({ ref })} 62 - </T.Group>
-74
src/lib/models/kenney-furniture-kit/benchCushion.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/benchCushion.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_benchCushion: THREE.Mesh; 34 - Mesh_benchCushion_1: THREE.Mesh; 35 - }; 36 - materials: { 37 - wood: THREE.MeshStandardMaterial; 38 - carpet: THREE.MeshStandardMaterial; 39 - }; 40 - }; 41 - 42 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/benchCushion.glb'); 43 - </script> 44 - 45 - <T.Group bind:ref dispose={false} {...props}> 46 - {#await gltf} 47 - {@render fallback?.()} 48 - {:then gltf} 49 - <T.Mesh 50 - castShadow 51 - receiveShadow 52 - geometry={gltf.nodes.Mesh_benchCushion.geometry} 53 - material={gltf.materials.wood.clone()} 54 - material.color={colors?.[0] ?? gltf.materials.wood.color} 55 - material.opacity={opacity ?? gltf.materials.wood.opacity} 56 - material.transparent={opacity !== undefined} 57 - position={[-0.2, 0, 0.1]} 58 - /> 59 - <T.Mesh 60 - castShadow 61 - receiveShadow 62 - geometry={gltf.nodes.Mesh_benchCushion_1.geometry} 63 - material={gltf.materials.carpet.clone()} 64 - material.color={colors?.[1] ?? gltf.materials.carpet.color} 65 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 66 - material.transparent={opacity !== undefined} 67 - position={[-0.2, 0, 0.1]} 68 - /> 69 - {:catch err} 70 - {@render error?.({ error: err })} 71 - {/await} 72 - 73 - {@render children?.({ ref })} 74 - </T.Group>
-86
src/lib/models/kenney-furniture-kit/benchCushionLow.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/benchCushionLow.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_benchCushionLow: THREE.Mesh; 34 - Mesh_benchCushionLow_1: THREE.Mesh; 35 - Mesh_benchCushionLow_2: THREE.Mesh; 36 - }; 37 - materials: { 38 - wood: THREE.MeshStandardMaterial; 39 - carpet: THREE.MeshStandardMaterial; 40 - _defaultMat: THREE.MeshStandardMaterial; 41 - }; 42 - }; 43 - 44 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/benchCushionLow.glb'); 45 - </script> 46 - 47 - <T.Group bind:ref dispose={false} {...props}> 48 - {#await gltf} 49 - {@render fallback?.()} 50 - {:then gltf} 51 - <T.Mesh 52 - castShadow 53 - receiveShadow 54 - geometry={gltf.nodes.Mesh_benchCushionLow.geometry} 55 - material={gltf.materials.wood.clone()} 56 - material.color={colors?.[0] ?? gltf.materials.wood.color} 57 - material.opacity={opacity ?? gltf.materials.wood.opacity} 58 - material.transparent={opacity !== undefined} 59 - position={[-0.2, 0, 0.1]} 60 - /> 61 - <T.Mesh 62 - castShadow 63 - receiveShadow 64 - geometry={gltf.nodes.Mesh_benchCushionLow_1.geometry} 65 - material={gltf.materials.carpet.clone()} 66 - material.color={colors?.[1] ?? gltf.materials.carpet.color} 67 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 68 - material.transparent={opacity !== undefined} 69 - position={[-0.2, 0, 0.1]} 70 - /> 71 - <T.Mesh 72 - castShadow 73 - receiveShadow 74 - geometry={gltf.nodes.Mesh_benchCushionLow_2.geometry} 75 - material={gltf.materials._defaultMat.clone()} 76 - material.color={colors?.[2] ?? gltf.materials._defaultMat.color} 77 - material.opacity={opacity ?? gltf.materials._defaultMat.opacity} 78 - material.transparent={opacity !== undefined} 79 - position={[-0.2, 0, 0.1]} 80 - /> 81 - {:catch err} 82 - {@render error?.({ error: err })} 83 - {/await} 84 - 85 - {@render children?.({ ref })} 86 - </T.Group>
-61
src/lib/models/kenney-furniture-kit/bookcaseClosed.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/bookcaseClosed.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - ['bookcaseClosed(Clone)']: THREE.Mesh; 34 - }; 35 - materials: { 36 - wood: THREE.MeshStandardMaterial; 37 - }; 38 - }; 39 - 40 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/bookcaseClosed.glb'); 41 - </script> 42 - 43 - <T.Group bind:ref dispose={false} {...props}> 44 - {#await gltf} 45 - {@render fallback?.()} 46 - {:then gltf} 47 - <T.Mesh 48 - castShadow 49 - receiveShadow 50 - geometry={gltf.nodes['bookcaseClosed(Clone)'].geometry} 51 - material={gltf.materials.wood.clone()} 52 - material.color={colors?.[0] ?? gltf.materials.wood.color} 53 - material.opacity={opacity ?? gltf.materials.wood.opacity} 54 - material.transparent={opacity !== undefined} 55 - /> 56 - {:catch err} 57 - {@render error?.({ error: err })} 58 - {/await} 59 - 60 - {@render children?.({ ref })} 61 - </T.Group>
-86
src/lib/models/kenney-furniture-kit/cabinetBed.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/cabinetBed.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - ['cabinetBed(Clone)']: THREE.Mesh; 34 - Mesh_door: THREE.Mesh; 35 - Mesh_door_1: THREE.Mesh; 36 - }; 37 - materials: { 38 - wood: THREE.MeshStandardMaterial; 39 - metal: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/cabinetBed.glb'); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh 51 - castShadow 52 - receiveShadow 53 - geometry={gltf.nodes['cabinetBed(Clone)'].geometry} 54 - material={gltf.materials.wood.clone()} 55 - material.color={colors?.[0] ?? gltf.materials.wood.color} 56 - material.opacity={opacity ?? gltf.materials.wood.opacity} 57 - material.transparent={opacity !== undefined} 58 - position={[-0.12, 0.0, 0.1]} 59 - > 60 - <T.Group position={[0.02, 0.02, -0.02]}> 61 - <T.Mesh 62 - castShadow 63 - receiveShadow 64 - geometry={gltf.nodes.Mesh_door.geometry} 65 - material={gltf.materials.wood.clone()} 66 - material.color={colors?.[0] ?? gltf.materials.wood.color} 67 - material.opacity={opacity ?? gltf.materials.wood.opacity} 68 - material.transparent={opacity !== undefined} 69 - /> 70 - <T.Mesh 71 - castShadow 72 - receiveShadow 73 - geometry={gltf.nodes.Mesh_door_1.geometry} 74 - material={gltf.materials.metal.clone()} 75 - material.color={colors?.[1] ?? gltf.materials.metal.color} 76 - material.opacity={opacity ?? gltf.materials.metal.opacity} 77 - material.transparent={opacity !== undefined} 78 - /> 79 - </T.Group> 80 - </T.Mesh> 81 - {:catch err} 82 - {@render error?.({ error: err })} 83 - {/await} 84 - 85 - {@render children?.({ ref })} 86 - </T.Group>
-116
src/lib/models/kenney-furniture-kit/cabinetBedDrawer.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/cabinetBedDrawer.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_cabinetBedDrawer: THREE.Mesh; 34 - Mesh_cabinetBedDrawer_1: THREE.Mesh; 35 - Mesh_door: THREE.Mesh; 36 - Mesh_door_1: THREE.Mesh; 37 - Mesh_drawer: THREE.Mesh; 38 - Mesh_drawer_1: THREE.Mesh; 39 - }; 40 - materials: { 41 - wood: THREE.MeshStandardMaterial; 42 - _defaultMat: THREE.MeshStandardMaterial; 43 - metal: THREE.MeshStandardMaterial; 44 - }; 45 - }; 46 - 47 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/cabinetBedDrawer.glb'); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group position={[-0.12, 0.0, 0.1]}> 55 - <T.Mesh 56 - castShadow 57 - receiveShadow 58 - geometry={gltf.nodes.Mesh_cabinetBedDrawer.geometry} 59 - material={gltf.materials.wood.clone()} 60 - material.color={colors?.[0] ?? gltf.materials.wood.color} 61 - material.opacity={opacity ?? gltf.materials.wood.opacity} 62 - material.transparent={opacity !== undefined} 63 - /> 64 - <T.Mesh 65 - castShadow 66 - receiveShadow 67 - geometry={gltf.nodes.Mesh_cabinetBedDrawer_1.geometry} 68 - material={gltf.materials._defaultMat} 69 - /> 70 - <T.Group position={[0.02, 0.05, -0.01]}> 71 - <T.Mesh 72 - castShadow 73 - receiveShadow 74 - geometry={gltf.nodes.Mesh_door.geometry} 75 - material={gltf.materials.wood.clone()} 76 - material.color={colors?.[0] ?? gltf.materials.wood.color} 77 - material.opacity={opacity ?? gltf.materials.wood.opacity} 78 - material.transparent={opacity !== undefined} 79 - /> 80 - <T.Mesh 81 - castShadow 82 - receiveShadow 83 - geometry={gltf.nodes.Mesh_door_1.geometry} 84 - material={gltf.materials.metal.clone()} 85 - material.color={colors?.[1] ?? gltf.materials.metal.color} 86 - material.opacity={opacity ?? gltf.materials.metal.opacity} 87 - material.transparent={opacity !== undefined} 88 - /> 89 - </T.Group> 90 - <T.Group position={[0.02, 0.17, -0.16]}> 91 - <T.Mesh 92 - castShadow 93 - receiveShadow 94 - geometry={gltf.nodes.Mesh_drawer.geometry} 95 - material={gltf.materials.wood.clone()} 96 - material.color={colors?.[0] ?? gltf.materials.wood.color} 97 - material.opacity={opacity ?? gltf.materials.wood.opacity} 98 - material.transparent={opacity !== undefined} 99 - /> 100 - <T.Mesh 101 - castShadow 102 - receiveShadow 103 - geometry={gltf.nodes.Mesh_drawer_1.geometry} 104 - material={gltf.materials.metal.clone()} 105 - material.color={colors?.[1] ?? gltf.materials.metal.color} 106 - material.opacity={opacity ?? gltf.materials.metal.opacity} 107 - material.transparent={opacity !== undefined} 108 - /> 109 - </T.Group> 110 - </T.Group> 111 - {:catch err} 112 - {@render error?.({ error: err })} 113 - {/await} 114 - 115 - {@render children?.({ ref })} 116 - </T.Group>
-94
src/lib/models/kenney-furniture-kit/cabinetBedDrawerTable.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/cabinetBedDrawerTable.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_cabinetBedDrawerTable: THREE.Mesh; 34 - Mesh_cabinetBedDrawerTable_1: THREE.Mesh; 35 - Mesh_drawer: THREE.Mesh; 36 - Mesh_drawer_1: THREE.Mesh; 37 - }; 38 - materials: { 39 - wood: THREE.MeshStandardMaterial; 40 - _defaultMat: THREE.MeshStandardMaterial; 41 - metal: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/cabinetBedDrawerTable.glb'); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Group position={[-0.12, 0.0, 0.1]}> 53 - <T.Mesh 54 - castShadow 55 - receiveShadow 56 - geometry={gltf.nodes.Mesh_cabinetBedDrawerTable.geometry} 57 - material={gltf.materials.wood.clone()} 58 - material.color={colors?.[0] ?? gltf.materials.wood.color} 59 - material.opacity={opacity ?? gltf.materials.wood.opacity} 60 - material.transparent={opacity !== undefined} 61 - /> 62 - <T.Mesh 63 - castShadow 64 - receiveShadow 65 - geometry={gltf.nodes.Mesh_cabinetBedDrawerTable_1.geometry} 66 - material={gltf.materials._defaultMat} 67 - /> 68 - <T.Group position={[0.02, 0.17, -0.16]}> 69 - <T.Mesh 70 - castShadow 71 - receiveShadow 72 - geometry={gltf.nodes.Mesh_drawer.geometry} 73 - material={gltf.materials.wood.clone()} 74 - material.color={colors?.[0] ?? gltf.materials.wood.color} 75 - material.opacity={opacity ?? gltf.materials.wood.opacity} 76 - material.transparent={opacity !== undefined} 77 - /> 78 - <T.Mesh 79 - castShadow 80 - receiveShadow 81 - geometry={gltf.nodes.Mesh_drawer_1.geometry} 82 - material={gltf.materials.metal.clone()} 83 - material.color={colors?.[1] ?? gltf.materials.metal.color} 84 - material.opacity={opacity ?? gltf.materials.metal.opacity} 85 - material.transparent={opacity !== undefined} 86 - /> 87 - </T.Group> 88 - </T.Group> 89 - {:catch err} 90 - {@render error?.({ error: err })} 91 - {/await} 92 - 93 - {@render children?.({ ref })} 94 - </T.Group>
-62
src/lib/models/kenney-furniture-kit/chair.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/chair.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - colors, 19 - opacity, 20 - ref = $bindable(), 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - ['chair(Clone)']: THREE.Mesh; 34 - }; 35 - materials: { 36 - wood: THREE.MeshStandardMaterial; 37 - }; 38 - }; 39 - 40 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/chair.glb'); 41 - </script> 42 - 43 - <T.Group bind:ref dispose={false} {...props}> 44 - {#await gltf} 45 - {@render fallback?.()} 46 - {:then gltf} 47 - <T.Mesh 48 - castShadow 49 - receiveShadow 50 - geometry={gltf.nodes['chair(Clone)'].geometry} 51 - material={gltf.materials.wood.clone()} 52 - material.color={colors?.[0] ?? gltf.materials.wood.color} 53 - material.opacity={opacity ?? gltf.materials.wood.opacity} 54 - material.transparent={opacity !== undefined} 55 - position={[-0.1, 0.0, 0.1]} 56 - /> 57 - {:catch err} 58 - {@render error?.({ error: err })} 59 - {/await} 60 - 61 - {@render children?.({ ref })} 62 - </T.Group>
-74
src/lib/models/kenney-furniture-kit/chairCushion.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/chairCushion.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_chairCushion: THREE.Mesh; 34 - Mesh_chairCushion_1: THREE.Mesh; 35 - }; 36 - materials: { 37 - wood: THREE.MeshStandardMaterial; 38 - carpet: THREE.MeshStandardMaterial; 39 - }; 40 - }; 41 - 42 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/chairCushion.glb'); 43 - </script> 44 - 45 - <T.Group bind:ref dispose={false} {...props}> 46 - {#await gltf} 47 - {@render fallback?.()} 48 - {:then gltf} 49 - <T.Mesh 50 - castShadow 51 - receiveShadow 52 - geometry={gltf.nodes.Mesh_chairCushion.geometry} 53 - material={gltf.materials.wood.clone()} 54 - material.color={colors?.[0] ?? gltf.materials.wood.color} 55 - material.opacity={opacity ?? gltf.materials.wood.opacity} 56 - material.transparent={opacity !== undefined} 57 - position={[-0.1, 0.0, 0.1]} 58 - /> 59 - <T.Mesh 60 - castShadow 61 - receiveShadow 62 - geometry={gltf.nodes.Mesh_chairCushion_1.geometry} 63 - material={gltf.materials.carpet.clone()} 64 - material.color={colors?.[1] ?? gltf.materials.carpet.color} 65 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 66 - material.transparent={opacity !== undefined} 67 - position={[-0.1, 0.0, 0.1]} 68 - /> 69 - {:catch err} 70 - {@render error?.({ error: err })} 71 - {/await} 72 - 73 - {@render children?.({ ref })} 74 - </T.Group>
-107
src/lib/models/kenney-furniture-kit/chairDesk.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/chairDesk.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useCursor, useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - import { editorState } from '$lib/state.svelte'; 14 - import { Spring } from 'svelte/motion'; 15 - 16 - const { onPointerEnter, onPointerLeave } = useCursor(); 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - colors?: (number | string)[]; 31 - opacity?: number; 32 - } = $props(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - ['chairDesk(Clone)']: THREE.Mesh; 37 - Mesh_chair: THREE.Mesh; 38 - Mesh_chair_1: THREE.Mesh; 39 - }; 40 - materials: { 41 - metalMedium: THREE.MeshStandardMaterial; 42 - carpet: THREE.MeshStandardMaterial; 43 - }; 44 - }; 45 - 46 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/chairDesk.glb'); 47 - 48 - let rotation = new Spring(0, { 49 - stiffness: 0.1, 50 - damping: 0.6 51 - }); 52 - </script> 53 - 54 - <T.Group bind:ref dispose={false} {...props}> 55 - {#await gltf} 56 - {@render fallback?.()} 57 - {:then gltf} 58 - <T.Mesh 59 - castShadow 60 - receiveShadow 61 - geometry={gltf.nodes['chairDesk(Clone)'].geometry} 62 - material={gltf.materials.metalMedium.clone()} 63 - material.color={colors?.[0] ?? gltf.materials.metalMedium.color} 64 - material.opacity={opacity ?? gltf.materials.metalMedium.opacity} 65 - material.transparent={opacity !== undefined} 66 - position={[-0.16, 0.0, 0.16]} 67 - onclick={() => { 68 - if (editorState.isEditing) return; 69 - 70 - rotation.target += 1 + Math.random() * 2; 71 - }} 72 - onpointerenter={() => { 73 - if (editorState.isEditing) return; 74 - onPointerEnter(); 75 - }} 76 - onpointerleave={() => { 77 - if (editorState.isEditing) return; 78 - onPointerLeave(); 79 - }} 80 - > 81 - <T.Group position={[0.17, 0.19, -0.16]} rotation={[0, rotation.current, 0]}> 82 - <T.Mesh 83 - castShadow 84 - receiveShadow 85 - geometry={gltf.nodes.Mesh_chair.geometry} 86 - material={gltf.materials.carpet.clone()} 87 - material.color={colors?.[1] ?? gltf.materials.carpet.color} 88 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 89 - material.transparent={opacity !== undefined} 90 - /> 91 - <T.Mesh 92 - castShadow 93 - receiveShadow 94 - geometry={gltf.nodes.Mesh_chair_1.geometry} 95 - material={gltf.materials.metalMedium.clone()} 96 - material.color={colors?.[0] ?? gltf.materials.metalMedium.color} 97 - material.opacity={opacity ?? gltf.materials.metalMedium.opacity} 98 - material.transparent={opacity !== undefined} 99 - /> 100 - </T.Group> 101 - </T.Mesh> 102 - {:catch err} 103 - {@render error?.({ error: err })} 104 - {/await} 105 - 106 - {@render children?.({ ref })} 107 - </T.Group>
-74
src/lib/models/kenney-furniture-kit/chairModernCushion.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/chairModernCushion.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_chairModernCushion: THREE.Mesh; 34 - Mesh_chairModernCushion_1: THREE.Mesh; 35 - }; 36 - materials: { 37 - metal: THREE.MeshStandardMaterial; 38 - carpetBlue: THREE.MeshStandardMaterial; 39 - }; 40 - }; 41 - 42 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/chairModernCushion.glb'); 43 - </script> 44 - 45 - <T.Group bind:ref dispose={false} {...props}> 46 - {#await gltf} 47 - {@render fallback?.()} 48 - {:then gltf} 49 - <T.Mesh 50 - castShadow 51 - receiveShadow 52 - geometry={gltf.nodes.Mesh_chairModernCushion.geometry} 53 - material={gltf.materials.metal.clone()} 54 - material.color={colors?.[0] ?? gltf.materials.metal.color} 55 - material.opacity={opacity ?? gltf.materials.metal.opacity} 56 - material.transparent={opacity !== undefined} 57 - position={[-0.1, 0.0, 0.1]} 58 - /> 59 - <T.Mesh 60 - castShadow 61 - receiveShadow 62 - geometry={gltf.nodes.Mesh_chairModernCushion_1.geometry} 63 - material={gltf.materials.carpetBlue.clone()} 64 - material.color={colors?.[1] ?? gltf.materials.carpetBlue.color} 65 - material.opacity={opacity ?? gltf.materials.carpetBlue.opacity} 66 - material.transparent={opacity !== undefined} 67 - position={[-0.1, 0.0, 0.1]} 68 - /> 69 - {:catch err} 70 - {@render error?.({ error: err })} 71 - {/await} 72 - 73 - {@render children?.({ ref })} 74 - </T.Group>
-76
src/lib/models/kenney-furniture-kit/chairModernFrameCushion.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/chairModernFrameCushion.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_chairModernFrameCushion: THREE.Mesh; 34 - Mesh_chairModernFrameCushion_1: THREE.Mesh; 35 - }; 36 - materials: { 37 - metal: THREE.MeshStandardMaterial; 38 - carpetBlue: THREE.MeshStandardMaterial; 39 - }; 40 - }; 41 - 42 - const gltf = useGltf<GLTFResult>( 43 - base + '/models/kenney-furniture-kit/chairModernFrameCushion.glb' 44 - ); 45 - </script> 46 - 47 - <T.Group bind:ref dispose={false} {...props}> 48 - {#await gltf} 49 - {@render fallback?.()} 50 - {:then gltf} 51 - <T.Mesh 52 - castShadow 53 - receiveShadow 54 - geometry={gltf.nodes.Mesh_chairModernFrameCushion.geometry} 55 - material={gltf.materials.metal.clone()} 56 - material.color={colors?.[0] ?? gltf.materials.metal.color} 57 - material.opacity={opacity ?? gltf.materials.metal.opacity} 58 - material.transparent={opacity !== undefined} 59 - position={[-0.1, 0.0, 0.1]} 60 - /> 61 - <T.Mesh 62 - castShadow 63 - receiveShadow 64 - geometry={gltf.nodes.Mesh_chairModernFrameCushion_1.geometry} 65 - material={gltf.materials.carpetBlue.clone()} 66 - material.color={colors?.[1] ?? gltf.materials.carpetBlue.color} 67 - material.opacity={opacity ?? gltf.materials.carpetBlue.opacity} 68 - material.transparent={opacity !== undefined} 69 - position={[-0.1, 0.0, 0.1]} 70 - /> 71 - {:catch err} 72 - {@render error?.({ error: err })} 73 - {/await} 74 - 75 - {@render children?.({ ref })} 76 - </T.Group>
-62
src/lib/models/kenney-furniture-kit/chairRounded.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/chairRounded.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - ['chairRounded(Clone)']: THREE.Mesh; 34 - }; 35 - materials: { 36 - wood: THREE.MeshStandardMaterial; 37 - }; 38 - }; 39 - 40 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/chairRounded.glb'); 41 - </script> 42 - 43 - <T.Group bind:ref dispose={false} {...props}> 44 - {#await gltf} 45 - {@render fallback?.()} 46 - {:then gltf} 47 - <T.Mesh 48 - castShadow 49 - receiveShadow 50 - geometry={gltf.nodes['chairRounded(Clone)'].geometry} 51 - material={gltf.materials.wood.clone()} 52 - material.color={colors?.[0] ?? gltf.materials.wood.color} 53 - material.opacity={opacity ?? gltf.materials.wood.opacity} 54 - material.transparent={opacity !== undefined} 55 - position={[-0.1, 0.0, 0.1]} 56 - /> 57 - {:catch err} 58 - {@render error?.({ error: err })} 59 - {/await} 60 - 61 - {@render children?.({ ref })} 62 - </T.Group>
-61
src/lib/models/kenney-furniture-kit/coatRackStanding.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/coatRackStanding.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - colors, 19 - opacity, 20 - ref = $bindable(), 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - ['coatRackStanding(Clone)']: THREE.Mesh; 34 - }; 35 - materials: { 36 - wood: THREE.MeshStandardMaterial; 37 - }; 38 - }; 39 - 40 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/coatRackStanding.glb'); 41 - </script> 42 - 43 - <T.Group bind:ref dispose={false} {...props}> 44 - {#await gltf} 45 - {@render fallback?.()} 46 - {:then gltf} 47 - <T.Mesh 48 - castShadow 49 - receiveShadow 50 - geometry={gltf.nodes['coatRackStanding(Clone)'].geometry} 51 - material={gltf.materials.wood.clone()} 52 - material.color={colors?.[0] ?? gltf.materials.wood.color} 53 - material.opacity={opacity ?? gltf.materials.wood.opacity} 54 - material.transparent={opacity !== undefined} 55 - /> 56 - {:catch err} 57 - {@render error?.({ error: err })} 58 - {/await} 59 - 60 - {@render children?.({ ref })} 61 - </T.Group>
-86
src/lib/models/kenney-furniture-kit/desk.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/desk.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - colors, 19 - opacity, 20 - ref = $bindable(), 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - ['desk(Clone)']: THREE.Mesh; 34 - Mesh_drawer: THREE.Mesh; 35 - Mesh_drawer_1: THREE.Mesh; 36 - }; 37 - materials: { 38 - wood: THREE.MeshStandardMaterial; 39 - metal: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/desk.glb'); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh 51 - castShadow 52 - receiveShadow 53 - geometry={gltf.nodes['desk(Clone)'].geometry} 54 - material={gltf.materials.wood.clone()} 55 - material.color={colors?.[0] ?? gltf.materials.wood.color} 56 - material.opacity={opacity ?? gltf.materials.wood.opacity} 57 - material.transparent={opacity !== undefined} 58 - position={[-0.35, 0.0, 0.17]} 59 - > 60 - <T.Group position={[0.04, 0.27, -0.16]}> 61 - <T.Mesh 62 - castShadow 63 - receiveShadow 64 - geometry={gltf.nodes.Mesh_drawer.geometry} 65 - material={gltf.materials.wood.clone()} 66 - material.color={colors?.[0] ?? gltf.materials.wood.color} 67 - material.opacity={opacity ?? gltf.materials.wood.opacity} 68 - material.transparent={opacity !== undefined} 69 - /> 70 - <T.Mesh 71 - castShadow 72 - receiveShadow 73 - geometry={gltf.nodes.Mesh_drawer_1.geometry} 74 - material={gltf.materials.metal.clone()} 75 - material.color={colors?.[1] ?? gltf.materials.metal.color} 76 - material.opacity={opacity ?? gltf.materials.metal.opacity} 77 - material.transparent={opacity !== undefined} 78 - /> 79 - </T.Group> 80 - </T.Mesh> 81 - {:catch err} 82 - {@render error?.({ error: err })} 83 - {/await} 84 - 85 - {@render children?.({ ref })} 86 - </T.Group>
-86
src/lib/models/kenney-furniture-kit/deskCorner.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/deskCorner.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - ['deskCorner(Clone)']: THREE.Mesh; 34 - Mesh_drawer: THREE.Mesh; 35 - Mesh_drawer_1: THREE.Mesh; 36 - }; 37 - materials: { 38 - wood: THREE.MeshStandardMaterial; 39 - metal: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/deskCorner.glb'); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh 51 - castShadow 52 - receiveShadow 53 - geometry={gltf.nodes['deskCorner(Clone)'].geometry} 54 - material={gltf.materials.wood.clone()} 55 - material.color={colors?.[0] ?? gltf.materials.wood.color} 56 - material.opacity={opacity ?? gltf.materials.wood.opacity} 57 - material.transparent={opacity !== undefined} 58 - position={[-0.5, 0.0, 0.5]} 59 - > 60 - <T.Group position={[0.05, 0.27, -0.76]}> 61 - <T.Mesh 62 - castShadow 63 - receiveShadow 64 - geometry={gltf.nodes.Mesh_drawer.geometry} 65 - material={gltf.materials.wood.clone()} 66 - material.color={colors?.[0] ?? gltf.materials.wood.color} 67 - material.opacity={opacity ?? gltf.materials.wood.opacity} 68 - material.transparent={opacity !== undefined} 69 - /> 70 - <T.Mesh 71 - castShadow 72 - receiveShadow 73 - geometry={gltf.nodes.Mesh_drawer_1.geometry} 74 - material={gltf.materials.metal.clone()} 75 - material.color={colors?.[1] ?? gltf.materials.metal.color} 76 - material.opacity={opacity ?? gltf.materials.metal.opacity} 77 - material.transparent={opacity !== undefined} 78 - /> 79 - </T.Group> 80 - </T.Mesh> 81 - {:catch err} 82 - {@render error?.({ error: err })} 83 - {/await} 84 - 85 - {@render children?.({ ref })} 86 - </T.Group>
-86
src/lib/models/kenney-furniture-kit/doorway.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/doorway.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - ['doorway(Clone)']: THREE.Mesh; 34 - Mesh_door: THREE.Mesh; 35 - Mesh_door_1: THREE.Mesh; 36 - }; 37 - materials: { 38 - wood: THREE.MeshStandardMaterial; 39 - metal: THREE.MeshStandardMaterial; 40 - }; 41 - }; 42 - 43 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/doorway.glb'); 44 - </script> 45 - 46 - <T.Group bind:ref dispose={false} {...props}> 47 - {#await gltf} 48 - {@render fallback?.()} 49 - {:then gltf} 50 - <T.Mesh 51 - castShadow 52 - receiveShadow 53 - geometry={gltf.nodes['doorway(Clone)'].geometry} 54 - material={gltf.materials.wood.clone()} 55 - material.color={colors?.[1] ?? gltf.materials.wood.color} 56 - material.opacity={opacity ?? gltf.materials.wood.opacity} 57 - material.transparent={opacity !== undefined} 58 - position={[-0.23, 0.0, 0.0]} 59 - > 60 - <T.Group position={[0.03, 0, -0.04]}> 61 - <T.Mesh 62 - castShadow 63 - receiveShadow 64 - geometry={gltf.nodes.Mesh_door.geometry} 65 - material={gltf.materials.wood.clone()} 66 - material.color={colors?.[0] ?? gltf.materials.wood.color} 67 - material.opacity={opacity ?? gltf.materials.wood.opacity} 68 - material.transparent={opacity !== undefined} 69 - /> 70 - <T.Mesh 71 - castShadow 72 - receiveShadow 73 - geometry={gltf.nodes.Mesh_door_1.geometry} 74 - material={gltf.materials.metal.clone()} 75 - material.color={colors?.[2] ?? gltf.materials.metal.color} 76 - material.opacity={opacity ?? gltf.materials.metal.opacity} 77 - material.transparent={opacity !== undefined} 78 - /> 79 - </T.Group> 80 - </T.Mesh> 81 - {:catch err} 82 - {@render error?.({ error: err })} 83 - {/await} 84 - 85 - {@render children?.({ ref })} 86 - </T.Group>
-98
src/lib/models/kenney-furniture-kit/doorwayFront.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/doorwayFront.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - ['doorwayFront(Clone)']: THREE.Mesh; 34 - Mesh_door: THREE.Mesh; 35 - Mesh_door_1: THREE.Mesh; 36 - Mesh_door_2: THREE.Mesh; 37 - }; 38 - materials: { 39 - carpetWhite: THREE.MeshStandardMaterial; 40 - metal: THREE.MeshStandardMaterial; 41 - metalDark: THREE.MeshStandardMaterial; 42 - glass: THREE.MeshStandardMaterial; 43 - }; 44 - }; 45 - 46 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/doorwayFront.glb'); 47 - </script> 48 - 49 - <T.Group bind:ref dispose={false} {...props}> 50 - {#await gltf} 51 - {@render fallback?.()} 52 - {:then gltf} 53 - <T.Mesh 54 - castShadow 55 - receiveShadow 56 - geometry={gltf.nodes['doorwayFront(Clone)'].geometry} 57 - material={gltf.materials.carpetWhite.clone()} 58 - material.color={colors?.[0] ?? gltf.materials.carpetWhite.color} 59 - material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 60 - material.transparent={opacity !== undefined} 61 - position={[-0.23, 0.0, 0.0]} 62 - > 63 - <T.Group position={[0.03, 0, -0.04]}> 64 - <T.Mesh 65 - castShadow 66 - receiveShadow 67 - geometry={gltf.nodes.Mesh_door.geometry} 68 - material={gltf.materials.metal.clone()} 69 - material.color={colors?.[1] ?? gltf.materials.metal.color} 70 - material.opacity={opacity ?? gltf.materials.metal.opacity} 71 - material.transparent={opacity !== undefined} 72 - /> 73 - <T.Mesh 74 - castShadow 75 - receiveShadow 76 - geometry={gltf.nodes.Mesh_door_1.geometry} 77 - material={gltf.materials.metalDark.clone()} 78 - material.color={colors?.[2] ?? gltf.materials.metalDark.color} 79 - material.opacity={opacity ?? gltf.materials.metalDark.opacity} 80 - material.transparent={opacity !== undefined} 81 - /> 82 - <T.Mesh 83 - castShadow 84 - receiveShadow 85 - geometry={gltf.nodes.Mesh_door_2.geometry} 86 - material={gltf.materials.glass.clone()} 87 - material.color={colors?.[3] ?? gltf.materials.glass.color} 88 - material.opacity={opacity ?? gltf.materials.glass.opacity} 89 - material.transparent={opacity !== undefined} 90 - /> 91 - </T.Group> 92 - </T.Mesh> 93 - {:catch err} 94 - {@render error?.({ error: err })} 95 - {/await} 96 - 97 - {@render children?.({ ref })} 98 - </T.Group>
-96
src/lib/models/kenney-furniture-kit/dryer.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/dryer.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_dryer: THREE.Mesh; 34 - Mesh_dryer_1: THREE.Mesh; 35 - Mesh_dryer_2: THREE.Mesh; 36 - dryerDoor: THREE.Mesh; 37 - }; 38 - materials: { 39 - metalLight: THREE.MeshStandardMaterial; 40 - metalMedium: THREE.MeshStandardMaterial; 41 - metalDark: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/dryer.glb'); 46 - </script> 47 - 48 - <T.Group bind:ref dispose={false} {...props}> 49 - {#await gltf} 50 - {@render fallback?.()} 51 - {:then gltf} 52 - <T.Group position={[-0.2, 0.0, 0.15]}> 53 - <T.Mesh 54 - castShadow 55 - receiveShadow 56 - geometry={gltf.nodes.Mesh_dryer.geometry} 57 - material={gltf.materials.metalLight.clone()} 58 - material.color={colors?.[0] ?? gltf.materials.metalLight.color} 59 - material.opacity={opacity ?? gltf.materials.metalLight.opacity} 60 - material.transparent={opacity !== undefined} 61 - /> 62 - <T.Mesh 63 - castShadow 64 - receiveShadow 65 - geometry={gltf.nodes.Mesh_dryer_1.geometry} 66 - material={gltf.materials.metalMedium.clone()} 67 - material.color={colors?.[1] ?? gltf.materials.metalMedium.color} 68 - material.opacity={opacity ?? gltf.materials.metalMedium.opacity} 69 - material.transparent={opacity !== undefined} 70 - /> 71 - <T.Mesh 72 - castShadow 73 - receiveShadow 74 - geometry={gltf.nodes.Mesh_dryer_2.geometry} 75 - material={gltf.materials.metalDark.clone()} 76 - material.color={colors?.[2] ?? gltf.materials.metalDark.color} 77 - material.opacity={opacity ?? gltf.materials.metalDark.opacity} 78 - material.transparent={opacity !== undefined} 79 - /> 80 - <T.Mesh 81 - castShadow 82 - receiveShadow 83 - geometry={gltf.nodes.dryerDoor.geometry} 84 - material={gltf.materials.metalLight.clone()} 85 - material.color={colors?.[0] ?? gltf.materials.metalLight.color} 86 - material.opacity={opacity ?? gltf.materials.metalLight.opacity} 87 - material.transparent={opacity !== undefined} 88 - position={[0.07, 0.23, 0]} 89 - /> 90 - </T.Group> 91 - {:catch err} 92 - {@render error?.({ error: err })} 93 - {/await} 94 - 95 - {@render children?.({ ref })} 96 - </T.Group>
-85
src/lib/models/kenney-furniture-kit/kitchenBar.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/kitchenBar.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - colors, 19 - opacity, 20 - ref = $bindable(), 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_kitchenBar: THREE.Mesh; 34 - Mesh_kitchenBar_1: THREE.Mesh; 35 - Mesh_kitchenBar_2: THREE.Mesh; 36 - }; 37 - materials: { 38 - wood: THREE.MeshStandardMaterial; 39 - metal: THREE.MeshStandardMaterial; 40 - woodDark: THREE.MeshStandardMaterial; 41 - }; 42 - }; 43 - 44 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/kitchenBar.glb'); 45 - </script> 46 - 47 - <T.Group bind:ref dispose={false} {...props}> 48 - {#await gltf} 49 - {@render fallback?.()} 50 - {:then gltf} 51 - <T.Group position={[-0.22, 0.0, 0.1]}> 52 - <T.Mesh 53 - castShadow 54 - receiveShadow 55 - geometry={gltf.nodes.Mesh_kitchenBar.geometry} 56 - material={gltf.materials.wood.clone()} 57 - material.color={colors?.[0] ?? gltf.materials.wood.color} 58 - material.opacity={opacity ?? gltf.materials.wood.opacity} 59 - material.transparent={opacity !== undefined} 60 - /> 61 - <T.Mesh 62 - castShadow 63 - receiveShadow 64 - geometry={gltf.nodes.Mesh_kitchenBar_1.geometry} 65 - material={gltf.materials.metal.clone()} 66 - material.color={colors?.[1] ?? gltf.materials.metal.color} 67 - material.opacity={opacity ?? gltf.materials.metal.opacity} 68 - material.transparent={opacity !== undefined} 69 - /> 70 - <T.Mesh 71 - castShadow 72 - receiveShadow 73 - geometry={gltf.nodes.Mesh_kitchenBar_2.geometry} 74 - material={gltf.materials.woodDark.clone()} 75 - material.color={colors?.[2] ?? gltf.materials.woodDark.color} 76 - material.opacity={opacity ?? gltf.materials.woodDark.opacity} 77 - material.transparent={opacity !== undefined} 78 - /> 79 - </T.Group> 80 - {:catch err} 81 - {@render error?.({ error: err })} 82 - {/await} 83 - 84 - {@render children?.({ ref })} 85 - </T.Group>
-107
src/lib/models/kenney-furniture-kit/kitchenCabinet.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/kitchenCabinet.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - colors, 19 - opacity, 20 - ref = $bindable(), 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_kitchenCabinet: THREE.Mesh; 34 - Mesh_kitchenCabinet_1: THREE.Mesh; 35 - Mesh_door: THREE.Mesh; 36 - Mesh_door_1: THREE.Mesh; 37 - Mesh_door_2: THREE.Mesh; 38 - }; 39 - materials: { 40 - metal: THREE.MeshStandardMaterial; 41 - wood: THREE.MeshStandardMaterial; 42 - woodDark: THREE.MeshStandardMaterial; 43 - }; 44 - }; 45 - 46 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/kitchenCabinet.glb'); 47 - </script> 48 - 49 - <T.Group bind:ref dispose={false} {...props}> 50 - {#await gltf} 51 - {@render fallback?.()} 52 - {:then gltf} 53 - <T.Group position={[-0.23, 0.0, 0.2]}> 54 - <T.Mesh 55 - castShadow 56 - receiveShadow 57 - geometry={gltf.nodes.Mesh_kitchenCabinet.geometry} 58 - material={gltf.materials.metal.clone()} 59 - material.color={colors?.[0] ?? gltf.materials.metal.color} 60 - material.opacity={opacity ?? gltf.materials.metal.opacity} 61 - material.transparent={opacity !== undefined} 62 - /> 63 - <T.Mesh 64 - castShadow 65 - receiveShadow 66 - geometry={gltf.nodes.Mesh_kitchenCabinet_1.geometry} 67 - material={gltf.materials.wood.clone()} 68 - material.color={colors?.[1] ?? gltf.materials.wood.color} 69 - material.opacity={opacity ?? gltf.materials.wood.opacity} 70 - material.transparent={opacity !== undefined} 71 - /> 72 - <T.Group position={[0.03, 0.09, -0.03]}> 73 - <T.Mesh 74 - castShadow 75 - receiveShadow 76 - geometry={gltf.nodes.Mesh_door.geometry} 77 - material={gltf.materials.wood.clone()} 78 - material.color={colors?.[1] ?? gltf.materials.wood.color} 79 - material.opacity={opacity ?? gltf.materials.wood.opacity} 80 - material.transparent={opacity !== undefined} 81 - /> 82 - <T.Mesh 83 - castShadow 84 - receiveShadow 85 - geometry={gltf.nodes.Mesh_door_1.geometry} 86 - material={gltf.materials.woodDark.clone()} 87 - material.color={colors?.[2] ?? gltf.materials.woodDark.color} 88 - material.opacity={opacity ?? gltf.materials.woodDark.opacity} 89 - material.transparent={opacity !== undefined} 90 - /> 91 - <T.Mesh 92 - castShadow 93 - receiveShadow 94 - geometry={gltf.nodes.Mesh_door_2.geometry} 95 - material={gltf.materials.metal.clone()} 96 - material.color={colors?.[0] ?? gltf.materials.metal.color} 97 - material.opacity={opacity ?? gltf.materials.metal.opacity} 98 - material.transparent={opacity !== undefined} 99 - /> 100 - </T.Group> 101 - </T.Group> 102 - {:catch err} 103 - {@render error?.({ error: err })} 104 - {/await} 105 - 106 - {@render children?.({ ref })} 107 - </T.Group>
-139
src/lib/models/kenney-furniture-kit/kitchenCabinetDrawer.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/kitchenCabinetDrawer.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_kitchenCabinetDrawer: THREE.Mesh; 34 - Mesh_kitchenCabinetDrawer_1: THREE.Mesh; 35 - Mesh_door: THREE.Mesh; 36 - Mesh_door_1: THREE.Mesh; 37 - Mesh_door_2: THREE.Mesh; 38 - Mesh_drawer: THREE.Mesh; 39 - Mesh_drawer_1: THREE.Mesh; 40 - Mesh_drawer_2: THREE.Mesh; 41 - }; 42 - materials: { 43 - metal: THREE.MeshStandardMaterial; 44 - wood: THREE.MeshStandardMaterial; 45 - woodDark: THREE.MeshStandardMaterial; 46 - }; 47 - }; 48 - 49 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/kitchenCabinetDrawer.glb'); 50 - </script> 51 - 52 - <T.Group bind:ref dispose={false} {...props}> 53 - {#await gltf} 54 - {@render fallback?.()} 55 - {:then gltf} 56 - <T.Group position={[-0.23, 0.0, 0.2]}> 57 - <T.Mesh 58 - castShadow 59 - receiveShadow 60 - geometry={gltf.nodes.Mesh_kitchenCabinetDrawer.geometry} 61 - material={gltf.materials.metal.clone()} 62 - material.color={colors?.[0] ?? gltf.materials.metal.color} 63 - material.opacity={opacity ?? gltf.materials.metal.opacity} 64 - material.transparent={opacity !== undefined} 65 - /> 66 - <T.Mesh 67 - castShadow 68 - receiveShadow 69 - geometry={gltf.nodes.Mesh_kitchenCabinetDrawer_1.geometry} 70 - material={gltf.materials.wood.clone()} 71 - material.color={colors?.[1] ?? gltf.materials.wood.color} 72 - material.opacity={opacity ?? gltf.materials.wood.opacity} 73 - material.transparent={opacity !== undefined} 74 - /> 75 - <T.Group position={[0.03, 0.09, -0.03]}> 76 - <T.Mesh 77 - castShadow 78 - receiveShadow 79 - geometry={gltf.nodes.Mesh_door.geometry} 80 - material={gltf.materials.wood.clone()} 81 - material.color={colors?.[1] ?? gltf.materials.wood.color} 82 - material.opacity={opacity ?? gltf.materials.wood.opacity} 83 - material.transparent={opacity !== undefined} 84 - /> 85 - <T.Mesh 86 - castShadow 87 - receiveShadow 88 - geometry={gltf.nodes.Mesh_door_1.geometry} 89 - material={gltf.materials.woodDark.clone()} 90 - material.color={colors?.[2] ?? gltf.materials.woodDark.color} 91 - material.opacity={opacity ?? gltf.materials.woodDark.opacity} 92 - material.transparent={opacity !== undefined} 93 - /> 94 - <T.Mesh 95 - castShadow 96 - receiveShadow 97 - geometry={gltf.nodes.Mesh_door_2.geometry} 98 - material={gltf.materials.metal.clone()} 99 - material.color={colors?.[0] ?? gltf.materials.metal.color} 100 - material.opacity={opacity ?? gltf.materials.metal.opacity} 101 - material.transparent={opacity !== undefined} 102 - /> 103 - </T.Group> 104 - <T.Group position={[0.03, 0.28, -0.02]}> 105 - <T.Mesh 106 - castShadow 107 - receiveShadow 108 - geometry={gltf.nodes.Mesh_drawer.geometry} 109 - material={gltf.materials.woodDark.clone()} 110 - material.color={colors?.[2] ?? gltf.materials.woodDark.color} 111 - material.opacity={opacity ?? gltf.materials.woodDark.opacity} 112 - material.transparent={opacity !== undefined} 113 - /> 114 - <T.Mesh 115 - castShadow 116 - receiveShadow 117 - geometry={gltf.nodes.Mesh_drawer_1.geometry} 118 - material={gltf.materials.wood.clone()} 119 - material.color={colors?.[1] ?? gltf.materials.wood.color} 120 - material.opacity={opacity ?? gltf.materials.wood.opacity} 121 - material.transparent={opacity !== undefined} 122 - /> 123 - <T.Mesh 124 - castShadow 125 - receiveShadow 126 - geometry={gltf.nodes.Mesh_drawer_2.geometry} 127 - material={gltf.materials.metal.clone()} 128 - material.color={colors?.[0] ?? gltf.materials.metal.color} 129 - material.opacity={opacity ?? gltf.materials.metal.opacity} 130 - material.transparent={opacity !== undefined} 131 - /> 132 - </T.Group> 133 - </T.Group> 134 - {:catch err} 135 - {@render error?.({ error: err })} 136 - {/await} 137 - 138 - {@render children?.({ ref })} 139 - </T.Group>
-101
src/lib/models/kenney-furniture-kit/lampRoundFloor.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/lampRoundFloor.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useCursor, useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - import { editorState } from '$lib/state.svelte'; 14 - 15 - const { onPointerEnter, onPointerLeave } = useCursor(); 16 - 17 - let { 18 - fallback, 19 - error, 20 - children, 21 - ref = $bindable(), 22 - colors, 23 - opacity, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - colors?: (number | string)[]; 31 - opacity?: number; 32 - } = $props(); 33 - 34 - type GLTFResult = { 35 - nodes: { 36 - Mesh_lampRoundFloor: THREE.Mesh; 37 - Mesh_lampRoundFloor_1: THREE.Mesh; 38 - }; 39 - materials: { 40 - metal: THREE.MeshStandardMaterial; 41 - lamp: THREE.MeshStandardMaterial; 42 - }; 43 - }; 44 - 45 - let lampOn = $state(true); 46 - 47 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/lampRoundFloor.glb'); 48 - </script> 49 - 50 - <T.Group bind:ref dispose={false} {...props}> 51 - {#await gltf} 52 - {@render fallback?.()} 53 - {:then gltf} 54 - <T.Group 55 - onclick={() => { 56 - if (editorState.isEditing) return; 57 - lampOn = !lampOn; 58 - }} 59 - onpointerenter={() => { 60 - if (editorState.isEditing) return; 61 - onPointerEnter(); 62 - }} 63 - onpointerleave={() => { 64 - if (editorState.isEditing) return; 65 - onPointerLeave(); 66 - }} 67 - > 68 - <T.Mesh 69 - castShadow 70 - receiveShadow 71 - geometry={gltf.nodes.Mesh_lampRoundFloor.geometry} 72 - material={gltf.materials.metal.clone()} 73 - material.color={colors?.[0] ?? gltf.materials.metal.color} 74 - material.opacity={opacity ?? gltf.materials.metal.opacity} 75 - material.transparent={opacity !== undefined} 76 - position={[-0.05, 0, 0.05]} 77 - /> 78 - <T.Mesh 79 - castShadow 80 - receiveShadow 81 - geometry={gltf.nodes.Mesh_lampRoundFloor_1.geometry} 82 - material={gltf.materials.lamp.clone()} 83 - material.emissive={colors?.[1] ?? '#ffffff'} 84 - material.opacity={opacity ?? gltf.materials.lamp.opacity} 85 - material.transparent={opacity !== undefined} 86 - position={[-0.05, 0, 0.05]} 87 - /> 88 - 89 - <T.PointLight 90 - position={[0, 1, 0]} 91 - castShadow 92 - color={colors?.[1] ?? '#ffffff'} 93 - intensity={lampOn ? 1 : 0} 94 - /> 95 - </T.Group> 96 - {:catch err} 97 - {@render error?.({ error: err })} 98 - {/await} 99 - 100 - {@render children?.({ ref })} 101 - </T.Group>
-74
src/lib/models/kenney-furniture-kit/loungeChair.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/loungeChair.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_loungeChair: THREE.Mesh; 34 - Mesh_loungeChair_1: THREE.Mesh; 35 - }; 36 - materials: { 37 - carpet: THREE.MeshStandardMaterial; 38 - wood: THREE.MeshStandardMaterial; 39 - }; 40 - }; 41 - 42 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/loungeChair.glb'); 43 - </script> 44 - 45 - <T.Group bind:ref dispose={false} {...props}> 46 - {#await gltf} 47 - {@render fallback?.()} 48 - {:then gltf} 49 - <T.Mesh 50 - castShadow 51 - receiveShadow 52 - geometry={gltf.nodes.Mesh_loungeChair.geometry} 53 - material={gltf.materials.carpet.clone()} 54 - material.color={colors?.[0] ?? gltf.materials.carpet.color} 55 - position={[-0.25, 0, 0.25]} 56 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 57 - material.transparent={opacity !== undefined} 58 - /> 59 - <T.Mesh 60 - castShadow 61 - receiveShadow 62 - geometry={gltf.nodes.Mesh_loungeChair_1.geometry} 63 - material={gltf.materials.wood.clone()} 64 - material.color={colors?.[1] ?? gltf.materials.wood.color} 65 - position={[-0.25, 0, 0.25]} 66 - material.opacity={opacity ?? gltf.materials.wood.opacity} 67 - material.transparent={opacity !== undefined} 68 - /> 69 - {:catch err} 70 - {@render error?.({ error: err })} 71 - {/await} 72 - 73 - {@render children?.({ ref })} 74 - </T.Group>
-74
src/lib/models/kenney-furniture-kit/loungeSofa.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/loungeSofa.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - colors, 19 - opacity, 20 - ref = $bindable(), 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_loungeSofa: THREE.Mesh; 34 - Mesh_loungeSofa_1: THREE.Mesh; 35 - }; 36 - materials: { 37 - carpet: THREE.MeshStandardMaterial; 38 - wood: THREE.MeshStandardMaterial; 39 - }; 40 - }; 41 - 42 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/loungeSofa.glb'); 43 - </script> 44 - 45 - <T.Group bind:ref dispose={false} {...props}> 46 - {#await gltf} 47 - {@render fallback?.()} 48 - {:then gltf} 49 - <T.Mesh 50 - castShadow 51 - receiveShadow 52 - geometry={gltf.nodes.Mesh_loungeSofa.geometry} 53 - material={gltf.materials.carpet.clone()} 54 - material.color={colors?.[0] ?? gltf.materials.carpet.color} 55 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 56 - material.transparent={opacity !== undefined} 57 - position={[-0.5, 0, 0.25]} 58 - /> 59 - <T.Mesh 60 - castShadow 61 - receiveShadow 62 - geometry={gltf.nodes.Mesh_loungeSofa_1.geometry} 63 - material={gltf.materials.wood.clone()} 64 - material.color={colors?.[1] ?? gltf.materials.wood.color} 65 - material.opacity={opacity ?? gltf.materials.wood.opacity} 66 - material.transparent={opacity !== undefined} 67 - position={[-0.5, 0, 0.25]} 68 - /> 69 - {:catch err} 70 - {@render error?.({ error: err })} 71 - {/await} 72 - 73 - {@render children?.({ ref })} 74 - </T.Group>
-87
src/lib/models/kenney-furniture-kit/pottedPlant.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/pottedPlant.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_pottedPlant: THREE.Mesh; 34 - Mesh_pottedPlant_1: THREE.Mesh; 35 - plant: THREE.Mesh; 36 - }; 37 - materials: { 38 - wood: THREE.MeshStandardMaterial; 39 - woodDark: THREE.MeshStandardMaterial; 40 - plant: THREE.MeshStandardMaterial; 41 - }; 42 - }; 43 - 44 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/pottedPlant.glb'); 45 - </script> 46 - 47 - <T.Group bind:ref dispose={false} {...props}> 48 - {#await gltf} 49 - {@render fallback?.()} 50 - {:then gltf} 51 - <T.Group scale={2}> 52 - <T.Mesh 53 - castShadow 54 - receiveShadow 55 - geometry={gltf.nodes.Mesh_pottedPlant.geometry} 56 - material={gltf.materials.wood.clone()} 57 - material.color={colors?.[0] ?? gltf.materials.wood.color} 58 - material.opacity={opacity ?? gltf.materials.wood.opacity} 59 - material.transparent={opacity !== undefined} 60 - /> 61 - <T.Mesh 62 - castShadow 63 - receiveShadow 64 - geometry={gltf.nodes.Mesh_pottedPlant_1.geometry} 65 - material={gltf.materials.woodDark.clone()} 66 - material.color={colors?.[1] ?? gltf.materials.woodDark.color} 67 - material.opacity={opacity ?? gltf.materials.woodDark.opacity} 68 - material.transparent={opacity !== undefined} 69 - /> 70 - <T.Mesh 71 - castShadow 72 - receiveShadow 73 - geometry={gltf.nodes.plant.geometry} 74 - material={gltf.materials.plant.clone()} 75 - material.color={colors?.[2] ?? gltf.materials.plant.color} 76 - material.opacity={opacity ?? gltf.materials.plant.opacity} 77 - material.transparent={opacity !== undefined} 78 - position={[-0.05, 0.06, 0.06]} 79 - scale={0.5} 80 - /> 81 - </T.Group> 82 - {:catch err} 83 - {@render error?.({ error: err })} 84 - {/await} 85 - 86 - {@render children?.({ ref })} 87 - </T.Group>
-62
src/lib/models/kenney-furniture-kit/rugDoormat.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/rugDoormat.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: string[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - ['rugDoormat(Clone)']: THREE.Mesh; 34 - }; 35 - materials: { 36 - wood: THREE.MeshStandardMaterial; 37 - }; 38 - }; 39 - 40 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/rugDoormat.glb'); 41 - </script> 42 - 43 - <T.Group bind:ref dispose={false} {...props}> 44 - {#await gltf} 45 - {@render fallback?.()} 46 - {:then gltf} 47 - <T.Mesh 48 - castShadow 49 - receiveShadow 50 - geometry={gltf.nodes['rugDoormat(Clone)'].geometry} 51 - material={gltf.materials.wood.clone()} 52 - material.color={colors?.[0] ?? gltf.materials.wood.color} 53 - material.opacity={opacity ?? gltf.materials.wood.opacity} 54 - material.transparent={opacity !== undefined} 55 - position={[-0.22, 0, 0.11]} 56 - /> 57 - {:catch err} 58 - {@render error?.({ error: err })} 59 - {/await} 60 - 61 - {@render children?.({ ref })} 62 - </T.Group>
-74
src/lib/models/kenney-furniture-kit/rugRectangle.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/rugRectangle.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: string[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_rugRectangle: THREE.Mesh; 34 - Mesh_rugRectangle_1: THREE.Mesh; 35 - }; 36 - materials: { 37 - carpet: THREE.MeshStandardMaterial; 38 - carpetDarker: THREE.MeshStandardMaterial; 39 - }; 40 - }; 41 - 42 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/rugRectangle.glb'); 43 - </script> 44 - 45 - <T.Group bind:ref dispose={false} {...props}> 46 - {#await gltf} 47 - {@render fallback?.()} 48 - {:then gltf} 49 - <T.Group position={[-0.8, 0, 0.44]}> 50 - <T.Mesh 51 - castShadow 52 - receiveShadow 53 - geometry={gltf.nodes.Mesh_rugRectangle.geometry} 54 - material={gltf.materials.carpet.clone()} 55 - material.color={colors?.[0] ?? gltf.materials.carpet.color} 56 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 57 - material.transparent={opacity !== undefined} 58 - /> 59 - <T.Mesh 60 - castShadow 61 - receiveShadow 62 - geometry={gltf.nodes.Mesh_rugRectangle_1.geometry} 63 - material={gltf.materials.carpetDarker.clone()} 64 - material.color={colors?.[1] ?? gltf.materials.carpetDarker.color} 65 - material.opacity={opacity ?? gltf.materials.carpetDarker.opacity} 66 - material.transparent={opacity !== undefined} 67 - /> 68 - </T.Group> 69 - {:catch err} 70 - {@render error?.({ error: err })} 71 - {/await} 72 - 73 - {@render children?.({ ref })} 74 - </T.Group>
-74
src/lib/models/kenney-furniture-kit/rugRound.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/rugRound.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: string[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_rugRound: THREE.Mesh; 34 - Mesh_rugRound_1: THREE.Mesh; 35 - }; 36 - materials: { 37 - carpet: THREE.MeshStandardMaterial; 38 - carpetDarker: THREE.MeshStandardMaterial; 39 - }; 40 - }; 41 - 42 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/rugRound.glb'); 43 - </script> 44 - 45 - <T.Group bind:ref dispose={false} {...props}> 46 - {#await gltf} 47 - {@render fallback?.()} 48 - {:then gltf} 49 - <T.Group position={[-0.45, 0, 0.45]}> 50 - <T.Mesh 51 - castShadow 52 - receiveShadow 53 - geometry={gltf.nodes.Mesh_rugRound.geometry} 54 - material={gltf.materials.carpet.clone()} 55 - material.color={colors?.[0] ?? gltf.materials.carpet.color} 56 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 57 - material.transparent={opacity !== undefined} 58 - /> 59 - <T.Mesh 60 - castShadow 61 - receiveShadow 62 - geometry={gltf.nodes.Mesh_rugRound_1.geometry} 63 - material={gltf.materials.carpetDarker.clone()} 64 - material.color={colors?.[1] ?? gltf.materials.carpetDarker.color} 65 - material.opacity={opacity ?? gltf.materials.carpetDarker.opacity} 66 - material.transparent={opacity !== undefined} 67 - /> 68 - </T.Group> 69 - {:catch err} 70 - {@render error?.({ error: err })} 71 - {/await} 72 - 73 - {@render children?.({ ref })} 74 - </T.Group>
-74
src/lib/models/kenney-furniture-kit/rugRounded.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/rugRounded.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: string[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_rugRounded: THREE.Mesh; 34 - Mesh_rugRounded_1: THREE.Mesh; 35 - }; 36 - materials: { 37 - carpetDarker: THREE.MeshStandardMaterial; 38 - carpet: THREE.MeshStandardMaterial; 39 - }; 40 - }; 41 - 42 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/rugRounded.glb'); 43 - </script> 44 - 45 - <T.Group bind:ref dispose={false} {...props}> 46 - {#await gltf} 47 - {@render fallback?.()} 48 - {:then gltf} 49 - <T.Group position={[-0.75, 0, 0.45]}> 50 - <T.Mesh 51 - castShadow 52 - receiveShadow 53 - geometry={gltf.nodes.Mesh_rugRounded.geometry} 54 - material={gltf.materials.carpetDarker.clone()} 55 - material.color={colors?.[1] ?? gltf.materials.carpetDarker.color} 56 - material.opacity={opacity ?? gltf.materials.carpetDarker.opacity} 57 - material.transparent={opacity !== undefined} 58 - /> 59 - <T.Mesh 60 - castShadow 61 - receiveShadow 62 - geometry={gltf.nodes.Mesh_rugRounded_1.geometry} 63 - material={gltf.materials.carpet.clone()} 64 - material.color={colors?.[0] ?? gltf.materials.carpet.color} 65 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 66 - material.transparent={opacity !== undefined} 67 - /> 68 - </T.Group> 69 - {:catch err} 70 - {@render error?.({ error: err })} 71 - {/await} 72 - 73 - {@render children?.({ ref })} 74 - </T.Group>
-74
src/lib/models/kenney-furniture-kit/rugSquare.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/rugSquare.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: string[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_rugSquare: THREE.Mesh; 34 - Mesh_rugSquare_1: THREE.Mesh; 35 - }; 36 - materials: { 37 - carpet: THREE.MeshStandardMaterial; 38 - carpetDarker: THREE.MeshStandardMaterial; 39 - }; 40 - }; 41 - 42 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/rugSquare.glb'); 43 - </script> 44 - 45 - <T.Group bind:ref dispose={false} {...props}> 46 - {#await gltf} 47 - {@render fallback?.()} 48 - {:then gltf} 49 - <T.Group position={[-0.45, 0, 0.45]}> 50 - <T.Mesh 51 - castShadow 52 - receiveShadow 53 - geometry={gltf.nodes.Mesh_rugSquare.geometry} 54 - material={gltf.materials.carpet.clone()} 55 - material.color={colors?.[0] ?? gltf.materials.carpet.color} 56 - material.opacity={opacity ?? gltf.materials.carpet.opacity} 57 - material.transparent={opacity !== undefined} 58 - /> 59 - <T.Mesh 60 - castShadow 61 - receiveShadow 62 - geometry={gltf.nodes.Mesh_rugSquare_1.geometry} 63 - material={gltf.materials.carpetDarker.clone()} 64 - material.color={colors?.[1] ?? gltf.materials.carpetDarker.color} 65 - material.opacity={opacity ?? gltf.materials.carpetDarker.opacity} 66 - material.transparent={opacity !== undefined} 67 - /> 68 - </T.Group> 69 - {:catch err} 70 - {@render error?.({ error: err })} 71 - {/await} 72 - 73 - {@render children?.({ ref })} 74 - </T.Group>
-74
src/lib/models/kenney-furniture-kit/sideTable.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/sideTable.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - colors, 19 - opacity, 20 - ref = $bindable(), 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - Mesh_sideTable: THREE.Mesh; 34 - Mesh_sideTable_1: THREE.Mesh; 35 - }; 36 - materials: { 37 - wood: THREE.MeshStandardMaterial; 38 - _defaultMat: THREE.MeshStandardMaterial; 39 - }; 40 - }; 41 - 42 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/sideTable.glb'); 43 - </script> 44 - 45 - <T.Group bind:ref dispose={false} {...props}> 46 - {#await gltf} 47 - {@render fallback?.()} 48 - {:then gltf} 49 - <T.Mesh 50 - castShadow 51 - receiveShadow 52 - geometry={gltf.nodes.Mesh_sideTable.geometry} 53 - material={gltf.materials.wood.clone()} 54 - material.color={colors?.[0] ?? gltf.materials.wood.color} 55 - material.opacity={opacity ?? gltf.materials.wood.opacity} 56 - material.transparent={opacity !== undefined} 57 - position={[-0.25, 0, 0.1]} 58 - /> 59 - <T.Mesh 60 - castShadow 61 - receiveShadow 62 - geometry={gltf.nodes.Mesh_sideTable_1.geometry} 63 - material={gltf.materials._defaultMat.clone()} 64 - material.color={colors?.[1] ?? gltf.materials._defaultMat.color} 65 - material.opacity={opacity ?? gltf.materials._defaultMat.opacity} 66 - material.transparent={opacity !== undefined} 67 - position={[-0.25, 0, 0.1]} 68 - /> 69 - {:catch err} 70 - {@render error?.({ error: err })} 71 - {/await} 72 - 73 - {@render children?.({ ref })} 74 - </T.Group>
-62
src/lib/models/kenney-furniture-kit/table.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/table.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - 14 - let { 15 - fallback, 16 - error, 17 - children, 18 - ref = $bindable(), 19 - colors, 20 - opacity, 21 - ...props 22 - }: Props<THREE.Group> & { 23 - ref?: THREE.Group; 24 - children?: Snippet<[{ ref: THREE.Group }]>; 25 - fallback?: Snippet; 26 - error?: Snippet<[{ error: Error }]>; 27 - colors?: (number | string)[]; 28 - opacity?: number; 29 - } = $props(); 30 - 31 - type GLTFResult = { 32 - nodes: { 33 - ['table(Clone)']: THREE.Mesh; 34 - }; 35 - materials: { 36 - wood: THREE.MeshStandardMaterial; 37 - }; 38 - }; 39 - 40 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/table.glb'); 41 - </script> 42 - 43 - <T.Group bind:ref dispose={false} {...props}> 44 - {#await gltf} 45 - {@render fallback?.()} 46 - {:then gltf} 47 - <T.Mesh 48 - castShadow 49 - receiveShadow 50 - geometry={gltf.nodes['table(Clone)'].geometry} 51 - material={gltf.materials.wood.clone()} 52 - material.color={colors?.[0] ?? gltf.materials.wood.color} 53 - material.opacity={opacity ?? gltf.materials.wood.opacity} 54 - material.transparent={opacity !== undefined} 55 - position={[-0.4, 0, 0.2]} 56 - /> 57 - {:catch err} 58 - {@render error?.({ error: err })} 59 - {/await} 60 - 61 - {@render children?.({ ref })} 62 - </T.Group>
-99
src/lib/models/kenney-furniture-kit/televisionModern.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/televisionModern.glb -t -s 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useCursor, useGltf } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - import Youtube from '$lib/Youtube.svelte'; 14 - import { editorState } from '$lib/state.svelte'; 15 - 16 - let { 17 - fallback, 18 - error, 19 - children, 20 - ref = $bindable(), 21 - colors, 22 - opacity, 23 - videoId, 24 - ...props 25 - }: Props<THREE.Group> & { 26 - ref?: THREE.Group; 27 - children?: Snippet<[{ ref: THREE.Group }]>; 28 - fallback?: Snippet; 29 - error?: Snippet<[{ error: Error }]>; 30 - colors?: (number | string)[]; 31 - opacity?: number; 32 - videoId?: string; 33 - } = $props(); 34 - 35 - type GLTFResult = { 36 - nodes: { 37 - Mesh_televisionModern: THREE.Mesh; 38 - Mesh_televisionModern_1: THREE.Mesh; 39 - }; 40 - materials: { 41 - metalDark: THREE.MeshStandardMaterial; 42 - metal: THREE.MeshStandardMaterial; 43 - }; 44 - }; 45 - 46 - let playPause: (() => void) | undefined = $state(); 47 - 48 - const { onPointerEnter, onPointerLeave } = useCursor(); 49 - 50 - const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/televisionModern.glb'); 51 - </script> 52 - 53 - <T.Group bind:ref dispose={false} {...props}> 54 - {#await gltf} 55 - {@render fallback?.()} 56 - {:then gltf} 57 - <T.Group 58 - onclick={() => { 59 - if (editorState.isEditing) return; 60 - playPause?.(); 61 - }} 62 - onpointerenter={() => { 63 - if (editorState.isEditing) return; 64 - onPointerEnter(); 65 - }} 66 - onpointerleave={() => { 67 - if (editorState.isEditing) return; 68 - onPointerLeave(); 69 - }} 70 - > 71 - <T.Mesh 72 - castShadow 73 - receiveShadow 74 - geometry={gltf.nodes.Mesh_televisionModern.geometry} 75 - material={gltf.materials.metalDark.clone()} 76 - material.color={colors?.[0] ?? gltf.materials.metalDark.color} 77 - material.opacity={opacity ?? gltf.materials.metalDark.opacity} 78 - material.transparent={opacity !== undefined} 79 - /> 80 - {#if !videoId || editorState.isEditing} 81 - <T.Mesh 82 - castShadow 83 - receiveShadow 84 - geometry={gltf.nodes.Mesh_televisionModern_1.geometry} 85 - material={gltf.materials.metal.clone()} 86 - material.color={colors?.[1] ?? gltf.materials.metal.color} 87 - material.opacity={opacity ?? gltf.materials.metal.opacity} 88 - material.transparent={opacity !== undefined} 89 - /> 90 - {:else} 91 - <Youtube position={[0, 0.26, 0.025]} {videoId} bind:playPause /> 92 - {/if} 93 - </T.Group> 94 - {:catch err} 95 - {@render error?.({ error: err })} 96 - {/await} 97 - 98 - {@render children?.({ ref })} 99 - </T.Group>
-62
src/lib/models/tiny-treats-bubbly-bathroom/plant.svelte
··· 1 - <!-- 2 - Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 - Command: npx @threlte/gltf@3.0.0 -t -s -u models/tiny-treats-bubbly-bathroom/plant.glb 4 - --> 5 - 6 - <script lang="ts"> 7 - import type * as THREE from 'three'; 8 - 9 - import type { Snippet } from 'svelte'; 10 - import { T, type Props } from '@threlte/core'; 11 - import { useGltf, useSuspense } from '@threlte/extras'; 12 - import { base } from '$app/paths'; 13 - import type { ExtraRoomObjectProps } from '../types'; 14 - import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 - 16 - let { 17 - fallback, 18 - error, 19 - children, 20 - ref = $bindable(), 21 - colors, 22 - opacity, 23 - ...props 24 - }: Props<THREE.Group> & { 25 - ref?: THREE.Group; 26 - children?: Snippet<[{ ref: THREE.Group }]>; 27 - fallback?: Snippet; 28 - error?: Snippet<[{ error: Error }]>; 29 - } & ExtraRoomObjectProps = $props(); 30 - 31 - const suspend = useSuspense(); 32 - 33 - type GLTFResult = { 34 - nodes: { 35 - plant_1: THREE.Mesh; 36 - plant_2: THREE.Mesh; 37 - }; 38 - materials: { 39 - a: THREE.MeshStandardMaterial; 40 - b: THREE.MeshStandardMaterial; 41 - }; 42 - }; 43 - 44 - const gltf = suspend(useGltf<GLTFResult>(base + '/models/tiny-treats-bubbly-bathroom/plant.glb')); 45 - </script> 46 - 47 - <T.Group bind:ref dispose={false} {...props}> 48 - {#await gltf} 49 - {@render fallback?.()} 50 - {:then gltf} 51 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.plant_1.geometry}> 52 - <RoomObjectMaterial {colors} {opacity} index={0} /> 53 - </T.Mesh> 54 - <T.Mesh castShadow receiveShadow geometry={gltf.nodes.plant_2.geometry}> 55 - <RoomObjectMaterial {colors} {opacity} index={1} /> 56 - </T.Mesh> 57 - {:catch err} 58 - {@render error?.({ error: err })} 59 - {/await} 60 - 61 - {@render children?.({ ref })} 62 - </T.Group>
+30
src/lib/room/models/RoomObjectMaterial.svelte
··· 1 + <script lang="ts"> 2 + import { T, type Props } from '@threlte/core'; 3 + import { defaultColorImage, defaultColors } from './types'; 4 + import type { MeshStandardMaterial } from 'three'; 5 + 6 + let { 7 + index, 8 + colors, 9 + opacity, 10 + youtube, 11 + isImage, 12 + ...props 13 + }: { 14 + index?: number; 15 + colors?: string[]; 16 + opacity?: number; 17 + youtube?: string; 18 + } & Props<MeshStandardMaterial> = $props(); 19 + 20 + function getColor() { 21 + return colors?.[index ?? 0] ?? defaultColors[index ?? 0]; 22 + } 23 + </script> 24 + 25 + <T.MeshStandardMaterial 26 + color={getColor()} 27 + {opacity} 28 + transparent={opacity ? opacity < 1 : false} 29 + {...props} 30 + />
+86
src/lib/room/models/script.ts
··· 1 + import * as fs from 'fs'; 2 + import * as path from 'path'; 3 + 4 + // Helper: Remove file extension from a filename 5 + function removeExtension(fileName: string): string { 6 + return fileName.replace(/\.svelte$/, ''); 7 + } 8 + 9 + // Helper: Convert snake_case or kebab-case to PascalCase 10 + function toPascalCase(str: string): string { 11 + return str 12 + .split(/[_-]/) 13 + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) 14 + .join(''); 15 + } 16 + 17 + // Main function to process .svelte files and generate the output string 18 + function generateModels(folder: string, base: string): string { 19 + const files = fs.readdirSync(folder); 20 + const svelteFiles = files.filter((file) => file.endsWith('.svelte')); 21 + 22 + const importStatements: string[] = []; 23 + const modelEntries: string[] = []; 24 + 25 + // Regex to match: <RoomObjectMaterial index={X} {colors} {opacity} /> 26 + // where X is a single digit 27 + const indexRegex = /<RoomObjectMaterial\s+index=\{(\d)\}\s+\{colors\}\s+\{opacity\}\s*\/>/g; 28 + 29 + for (const file of svelteFiles) { 30 + const filePath = path.join(folder, file); 31 + const content = fs.readFileSync(filePath, 'utf-8'); 32 + 33 + // Find all index values in the file 34 + const indices: number[] = []; 35 + let match: RegExpExecArray | null; 36 + while ((match = indexRegex.exec(content)) !== null) { 37 + indices.push(Number(match[1])); 38 + } 39 + 40 + if (indices.length === 0) { 41 + throw new Error(`No RoomObjectMaterial with index found in ${file}`); 42 + } 43 + 44 + // Verify indices form a continuous sequence from 0 to n-1. 45 + indices.sort((a, b) => a - b); 46 + for (let i = 0; i < indices.length; i++) { 47 + if (indices[i] !== i) { 48 + throw new Error(`File ${file}: expected index ${i} but found ${indices[i]}`); 49 + } 50 + } 51 + 52 + const colorsCount = indices.length; 53 + 54 + // Check if file contains the image component pattern: 55 + // <RoomObjectMaterial {image} {colors} {opacity} /> 56 + const image = content.includes(`<RoomObjectMaterial {image} {colors} {opacity} />`); 57 + 58 + // visible is always true. 59 + const visible = true; 60 + 61 + // Create component variable name and key based on the file name. 62 + const keyName = removeExtension(file); // e.g. "component_a" 63 + const componentVar = toPascalCase(keyName); // e.g. "ComponentA" 64 + 65 + // Construct the import statement. 66 + importStatements.push(`import KayKit${componentVar} from '${base}/${file}';`); 67 + 68 + // Construct the model entry. 69 + const modelEntry = `'kaykit-furniture-kit-${keyName}': { 70 + component: KayKit${componentVar}, 71 + colors: ${colorsCount}, 72 + visible: ${visible}, 73 + image: ${image} 74 + }`; 75 + modelEntries.push(modelEntry); 76 + } 77 + 78 + // Build the final string output. 79 + const output = 80 + importStatements.join('\n') + '\n\n' + 'const models = {\n' + modelEntries.join(',\n') + '\n};'; 81 + 82 + return output; 83 + } 84 + 85 + const result = generateModels('./kaykit-furniture-kit', './models/kaykit-furniture-kit/'); 86 + console.log(result);
+9
src/lib/room/models/types.ts
··· 1 + export type ExtraRoomObjectProps = { 2 + colors?: string[]; 3 + opacity?: number; 4 + link?: string; 5 + }; 6 + 7 + export const defaultColorImage = '#000000'; 8 + 9 + export const defaultColors = ['#ffffff', '#aaaaaa', '#555555', '#333333'];
+58
src/lib/room/models/kaykit-furniture-kit/armchair.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/armchair.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + armchair: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/armchair.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.armchair.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+67
src/lib/room/models/kaykit-furniture-kit/armchair_pillows.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/armchair_pillows.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Plane003: THREE.Mesh; 37 + Plane003_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + b: THREE.MeshStandardMaterial; 41 + a: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend( 46 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/armchair_pillows.glb') 47 + ); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Plane003.geometry}> 56 + <RoomObjectMaterial index={1} {colors} {opacity} /> 57 + </T.Mesh> 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Plane003_1.geometry}> 59 + <RoomObjectMaterial index={0} {colors} {opacity} /> 60 + </T.Mesh> 61 + </T.Group> 62 + {:catch err} 63 + {@render error?.({ error: err })} 64 + {/await} 65 + 66 + {@render children?.({ ref })} 67 + </T.Group>
+70
src/lib/room/models/kaykit-furniture-kit/bed_double_a.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/bed_double_a.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube037: THREE.Mesh; 37 + Cube037_1: THREE.Mesh; 38 + Cube037_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/bed_double_a.glb')); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube037.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube037_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube037_2.geometry} 62 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 + > 64 + </T.Group> 65 + {:catch err} 66 + {@render error?.({ error: err })} 67 + {/await} 68 + 69 + {@render children?.({ ref })} 70 + </T.Group>
+70
src/lib/room/models/kaykit-furniture-kit/bed_double_b.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/bed_double_b.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube001: THREE.Mesh; 37 + Cube001_1: THREE.Mesh; 38 + Cube001_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/bed_double_b.glb')); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube001.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube001_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube001_2.geometry} 62 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 + > 64 + </T.Group> 65 + {:catch err} 66 + {@render error?.({ error: err })} 67 + {/await} 68 + 69 + {@render children?.({ ref })} 70 + </T.Group>
+70
src/lib/room/models/kaykit-furniture-kit/bed_single_a.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/bed_single_a.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube039: THREE.Mesh; 37 + Cube039_1: THREE.Mesh; 38 + Cube039_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/bed_single_a.glb')); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube039.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube039_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube039_2.geometry} 62 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 + > 64 + </T.Group> 65 + {:catch err} 66 + {@render error?.({ error: err })} 67 + {/await} 68 + 69 + {@render children?.({ ref })} 70 + </T.Group>
+70
src/lib/room/models/kaykit-furniture-kit/bed_single_b.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/bed_single_b.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube038: THREE.Mesh; 37 + Cube038_1: THREE.Mesh; 38 + Cube038_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/bed_single_b.glb')); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube038.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube038_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube038_2.geometry} 62 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 + > 64 + </T.Group> 65 + {:catch err} 66 + {@render error?.({ error: err })} 67 + {/await} 68 + 69 + {@render children?.({ ref })} 70 + </T.Group>
+75
src/lib/room/models/kaykit-furniture-kit/book_set.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/book_set.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube007: THREE.Mesh; 37 + Cube007_1: THREE.Mesh; 38 + Cube007_2: THREE.Mesh; 39 + Cube007_3: THREE.Mesh; 40 + }; 41 + materials: { 42 + a: THREE.MeshStandardMaterial; 43 + b: THREE.MeshStandardMaterial; 44 + c: THREE.MeshStandardMaterial; 45 + d: THREE.MeshStandardMaterial; 46 + }; 47 + }; 48 + 49 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/book_set.glb')); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube007.geometry} 58 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 + > 60 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube007_1.geometry} 61 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 62 + > 63 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube007_2.geometry} 64 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 65 + > 66 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube007_3.geometry} 67 + ><RoomObjectMaterial index={3} {colors} {opacity} /></T.Mesh 68 + > 69 + </T.Group> 70 + {:catch err} 71 + {@render error?.({ error: err })} 72 + {/await} 73 + 74 + {@render children?.({ ref })} 75 + </T.Group>
+65
src/lib/room/models/kaykit-furniture-kit/book_single.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/book_single.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube008: THREE.Mesh; 37 + Cube008_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/book_single.glb')); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Group> 53 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube008.geometry} 54 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 + > 56 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube008_1.geometry} 57 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 + > 59 + </T.Group> 60 + {:catch err} 61 + {@render error?.({ error: err })} 62 + {/await} 63 + 64 + {@render children?.({ ref })} 65 + </T.Group>
+72
src/lib/room/models/kaykit-furniture-kit/cabinet_medium.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/cabinet_medium.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube012: THREE.Mesh; 37 + Cube012_1: THREE.Mesh; 38 + Cube012_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend( 48 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/cabinet_medium.glb') 49 + ); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube012.geometry} 58 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 + > 60 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube012_1.geometry} 61 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 62 + > 63 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube012_2.geometry} 64 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 65 + > 66 + </T.Group> 67 + {:catch err} 68 + {@render error?.({ error: err })} 69 + {/await} 70 + 71 + {@render children?.({ ref })} 72 + </T.Group>
+72
src/lib/room/models/kaykit-furniture-kit/cabinet_small.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/cabinet_small.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube013: THREE.Mesh; 37 + Cube013_1: THREE.Mesh; 38 + Cube013_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend( 48 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/cabinet_small.glb') 49 + ); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube013.geometry} 58 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 + > 60 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube013_1.geometry} 61 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 62 + > 63 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube013_2.geometry} 64 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 65 + > 66 + </T.Group> 67 + {:catch err} 68 + {@render error?.({ error: err })} 69 + {/await} 70 + 71 + {@render children?.({ ref })} 72 + </T.Group>
+65
src/lib/room/models/kaykit-furniture-kit/cactus_large.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/cactus_large.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cylinder001: THREE.Mesh; 37 + Cylinder001_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/cactus_large.glb')); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Group> 53 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder001.geometry} 54 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 + > 56 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder001_1.geometry} 57 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 + > 59 + </T.Group> 60 + {:catch err} 61 + {@render error?.({ error: err })} 62 + {/await} 63 + 64 + {@render children?.({ ref })} 65 + </T.Group>
+65
src/lib/room/models/kaykit-furniture-kit/cactus_small.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/cactus_small.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cylinder002: THREE.Mesh; 37 + Cylinder002_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/cactus_small.glb')); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Group> 53 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder002.geometry} 54 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 + > 56 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder002_1.geometry} 57 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 + > 59 + </T.Group> 60 + {:catch err} 61 + {@render error?.({ error: err })} 62 + {/await} 63 + 64 + {@render children?.({ ref })} 65 + </T.Group>
+65
src/lib/room/models/kaykit-furniture-kit/chair_a.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_a.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube034: THREE.Mesh; 37 + Cube034_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_a.glb')); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Group> 53 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube034.geometry} 54 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 + > 56 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube034_1.geometry} 57 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 + > 59 + </T.Group> 60 + {:catch err} 61 + {@render error?.({ error: err })} 62 + {/await} 63 + 64 + {@render children?.({ ref })} 65 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/chair_a_wood.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_a_wood.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + chair_A_wood: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_a_wood.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.chair_A_wood.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+65
src/lib/room/models/kaykit-furniture-kit/chair_b.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_b.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube032: THREE.Mesh; 37 + Cube032_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_b.glb')); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Group> 53 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube032.geometry} 54 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 + > 56 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube032_1.geometry} 57 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 + > 59 + </T.Group> 60 + {:catch err} 61 + {@render error?.({ error: err })} 62 + {/await} 63 + 64 + {@render children?.({ ref })} 65 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/chair_b_wood.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_b_wood.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + chair_B_wood: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_b_wood.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.chair_B_wood.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+65
src/lib/room/models/kaykit-furniture-kit/chair_c.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_c.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube031: THREE.Mesh; 37 + Cube031_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_c.glb')); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Group> 53 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube031.geometry} 54 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 + > 56 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube031_1.geometry} 57 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 + > 59 + </T.Group> 60 + {:catch err} 61 + {@render error?.({ error: err })} 62 + {/await} 63 + 64 + {@render children?.({ ref })} 65 + </T.Group>
+70
src/lib/room/models/kaykit-furniture-kit/chair_desk_a.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_desk_a.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cylinder625: THREE.Mesh; 37 + Cylinder625_1: THREE.Mesh; 38 + Cylinder625_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_desk_a.glb')); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder625.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder625_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder625_2.geometry} 62 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 + > 64 + </T.Group> 65 + {:catch err} 66 + {@render error?.({ error: err })} 67 + {/await} 68 + 69 + {@render children?.({ ref })} 70 + </T.Group>
+70
src/lib/room/models/kaykit-furniture-kit/chair_desk_b.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_desk_b.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cylinder624: THREE.Mesh; 37 + Cylinder624_1: THREE.Mesh; 38 + Cylinder624_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_desk_b.glb')); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder624.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder624_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder624_2.geometry} 62 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 + > 64 + </T.Group> 65 + {:catch err} 66 + {@render error?.({ error: err })} 67 + {/await} 68 + 69 + {@render children?.({ ref })} 70 + </T.Group>
+65
src/lib/room/models/kaykit-furniture-kit/chair_stool.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_stool.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube033: THREE.Mesh; 37 + Cube033_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_stool.glb')); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Group> 53 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube033.geometry} 54 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 + > 56 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube033_1.geometry} 57 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 + > 59 + </T.Group> 60 + {:catch err} 61 + {@render error?.({ error: err })} 62 + {/await} 63 + 64 + {@render children?.({ ref })} 65 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/chair_stool_wood.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/chair_stool_wood.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + chair_stool_wood: THREE.Mesh; 37 + }; 38 + materials: {}; 39 + }; 40 + 41 + const gltf = suspend( 42 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/chair_stool_wood.glb') 43 + ); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.chair_stool_wood.geometry}> 51 + <RoomObjectMaterial index={0} {colors} {opacity} /> 52 + </T.Mesh> 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/couch.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/couch.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + couch: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/couch.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.couch.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+67
src/lib/room/models/kaykit-furniture-kit/couch_pillows.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/couch_pillows.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Plane004: THREE.Mesh; 37 + Plane004_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend( 46 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/couch_pillows.glb') 47 + ); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Plane004.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Plane004_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + </T.Group> 62 + {:catch err} 63 + {@render error?.({ error: err })} 64 + {/await} 65 + 66 + {@render children?.({ ref })} 67 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/cup.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/cup.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + cup: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/cup.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.cup.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+75
src/lib/room/models/kaykit-furniture-kit/cup_pencils.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/cup_pencils.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cylinder617: THREE.Mesh; 37 + Cylinder617_1: THREE.Mesh; 38 + Cylinder617_2: THREE.Mesh; 39 + Cylinder617_3: THREE.Mesh; 40 + }; 41 + materials: { 42 + a: THREE.MeshStandardMaterial; 43 + b: THREE.MeshStandardMaterial; 44 + c: THREE.MeshStandardMaterial; 45 + d: THREE.MeshStandardMaterial; 46 + }; 47 + }; 48 + 49 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/cup_pencils.glb')); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder617.geometry} 58 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 + > 60 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder617_1.geometry} 61 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 62 + > 63 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder617_2.geometry} 64 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 65 + > 66 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder617_3.geometry} 67 + ><RoomObjectMaterial index={3} {colors} {opacity} /></T.Mesh 68 + > 69 + </T.Group> 70 + {:catch err} 71 + {@render error?.({ error: err })} 72 + {/await} 73 + 74 + {@render children?.({ ref })} 75 + </T.Group>
+70
src/lib/room/models/kaykit-furniture-kit/desk.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/desk.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube18254: THREE.Mesh; 37 + Cube18254_1: THREE.Mesh; 38 + Cube18254_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/desk.glb')); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18254.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18254_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18254_2.geometry} 62 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 + > 64 + </T.Group> 65 + {:catch err} 66 + {@render error?.({ error: err })} 67 + {/await} 68 + 69 + {@render children?.({ ref })} 70 + </T.Group>
+70
src/lib/room/models/kaykit-furniture-kit/desk_large.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/desk_large.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube18255: THREE.Mesh; 37 + Cube18255_1: THREE.Mesh; 38 + Cube18255_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/desk_large.glb')); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18255.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18255_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18255_2.geometry} 62 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 + > 64 + </T.Group> 65 + {:catch err} 66 + {@render error?.({ error: err })} 67 + {/await} 68 + 69 + {@render children?.({ ref })} 70 + </T.Group>
+72
src/lib/room/models/kaykit-furniture-kit/gameconsole_handheld.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/gameconsole_handheld.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube18248: THREE.Mesh; 37 + Cube18248_1: THREE.Mesh; 38 + Cube18248_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend( 48 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/gameconsole_handheld.glb') 49 + ); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18248.geometry} 58 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 + > 60 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18248_1.geometry} 61 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 62 + > 63 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18248_2.geometry} 64 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 65 + > 66 + </T.Group> 67 + {:catch err} 68 + {@render error?.({ error: err })} 69 + {/await} 70 + 71 + {@render children?.({ ref })} 72 + </T.Group>
+70
src/lib/room/models/kaykit-furniture-kit/keyboard.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/keyboard.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube18252: THREE.Mesh; 37 + Cube18252_1: THREE.Mesh; 38 + Cube18252_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/keyboard.glb')); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18252.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18252_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18252_2.geometry} 62 + ><RoomObjectMaterial index={2} {colors} {opacity} /></T.Mesh 63 + > 64 + </T.Group> 65 + {:catch err} 66 + {@render error?.({ error: err })} 67 + {/await} 68 + 69 + {@render children?.({ ref })} 70 + </T.Group>
+77
src/lib/room/models/kaykit-furniture-kit/lamp_desk.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/lamp_desk.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cylinder629: THREE.Mesh; 37 + Cylinder629_1: THREE.Mesh; 38 + Cylinder629_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/lamp_desk.glb')); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder629.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cylinder629_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + <T.Mesh geometry={gltf.nodes.Cylinder629_2.geometry} 62 + ><RoomObjectMaterial 63 + emissive={colors?.[2]} 64 + emissiveIntensity={1} 65 + index={2} 66 + {colors} 67 + {opacity} 68 + /></T.Mesh 69 + > 70 + <T.PointLight position={[0, 0.8, 0.45]} color={colors?.[2]} intensity={1} /> 71 + </T.Group> 72 + {:catch err} 73 + {@render error?.({ error: err })} 74 + {/await} 75 + 76 + {@render children?.({ ref })} 77 + </T.Group>
+86
src/lib/room/models/kaykit-furniture-kit/lamp_standing.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/lamp_standing.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Sphere002: THREE.Mesh; 37 + Sphere002_1: THREE.Mesh; 38 + Sphere002_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend( 48 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/lamp_standing.glb') 49 + ); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Sphere002.geometry} 58 + ><RoomObjectMaterial 59 + index={0} 60 + {colors} 61 + opacity={0.95} 62 + emissive={colors?.[2]} 63 + emissiveIntensity={0.5} 64 + /></T.Mesh 65 + > 66 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Sphere002_1.geometry} 67 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 68 + > 69 + <T.Mesh geometry={gltf.nodes.Sphere002_2.geometry} 70 + ><RoomObjectMaterial 71 + emissive={colors?.[2]} 72 + emissiveIntensity={1} 73 + index={2} 74 + {colors} 75 + {opacity} 76 + /></T.Mesh 77 + > 78 + 79 + <T.PointLight position={[0, 2, 0.0]} color={colors?.[2]} intensity={1} /> 80 + </T.Group> 81 + {:catch err} 82 + {@render error?.({ error: err })} 83 + {/await} 84 + 85 + {@render children?.({ ref })} 86 + </T.Group>
+84
src/lib/room/models/kaykit-furniture-kit/lamp_table.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/lamp_table.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Sphere001: THREE.Mesh; 37 + Sphere001_1: THREE.Mesh; 38 + Sphere001_2: THREE.Mesh; 39 + }; 40 + materials: { 41 + a: THREE.MeshStandardMaterial; 42 + b: THREE.MeshStandardMaterial; 43 + c: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/lamp_table.glb')); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Sphere001.geometry} 56 + ><RoomObjectMaterial 57 + index={0} 58 + {colors} 59 + opacity={0.95} 60 + emissive={colors?.[2]} 61 + emissiveIntensity={0.5} 62 + /></T.Mesh 63 + > 64 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Sphere001_1.geometry} 65 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 66 + > 67 + <T.Mesh geometry={gltf.nodes.Sphere001_2.geometry} 68 + ><RoomObjectMaterial 69 + emissive={colors?.[2]} 70 + emissiveIntensity={1} 71 + index={2} 72 + {colors} 73 + {opacity} 74 + /></T.Mesh 75 + > 76 + 77 + <T.PointLight position={[0, 0.4, 0]} color={colors?.[2]} intensity={1} /> 78 + </T.Group> 79 + {:catch err} 80 + {@render error?.({ error: err })} 81 + {/await} 82 + 83 + {@render children?.({ ref })} 84 + </T.Group>
+106
src/lib/room/models/kaykit-furniture-kit/monitor.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/monitor.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useCursor, useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + import Youtube from '$lib/room/Youtube.svelte'; 17 + import { editorState } from '$lib/room/state.svelte'; 18 + import { Spring } from 'svelte/motion'; 19 + 20 + let { 21 + fallback, 22 + error, 23 + children, 24 + ref = $bindable(), 25 + colors, 26 + opacity, 27 + link, 28 + image, 29 + ...props 30 + }: Props<THREE.Group> & { 31 + ref?: THREE.Group; 32 + children?: Snippet<[{ ref: THREE.Group }]>; 33 + fallback?: Snippet; 34 + error?: Snippet<[{ error: Error }]>; 35 + } & ExtraRoomObjectProps = $props(); 36 + 37 + const suspend = useSuspense(); 38 + 39 + type GLTFResult = { 40 + nodes: { 41 + Cube18237: THREE.Mesh; 42 + Cube18237_1: THREE.Mesh; 43 + }; 44 + materials: { 45 + a: THREE.MeshStandardMaterial; 46 + image: THREE.MeshStandardMaterial; 47 + }; 48 + }; 49 + 50 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/monitor.glb')); 51 + 52 + let playPause: (() => void) | undefined = $state(); 53 + 54 + const { onPointerEnter, onPointerLeave } = useCursor(); 55 + 56 + let scale = new Spring(1.0, { 57 + stiffness: 0.2, 58 + damping: 0.3 59 + }); 60 + </script> 61 + 62 + <T.Group bind:ref dispose={false} {...props}> 63 + {#await gltf} 64 + {@render fallback?.()} 65 + {:then gltf} 66 + <T.Group 67 + onpointerenter={() => { 68 + if (editorState.isEditing) return; 69 + scale.target = 1.1; 70 + onPointerEnter(); 71 + }} 72 + onpointerleave={() => { 73 + if (editorState.isEditing) return; 74 + scale.target = 1.0; 75 + onPointerLeave(); 76 + }} 77 + scale={scale.current} 78 + > 79 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18237.geometry} 80 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 81 + > 82 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18237_1.geometry} 83 + ><RoomObjectMaterial colors={['#000000']} index={0} {opacity} /></T.Mesh 84 + > 85 + {#if !editorState.isEditing && link} 86 + <Youtube 87 + onclick={(evt: { stopPropagation: () => void }) => { 88 + if (editorState.isEditing) return; 89 + evt.stopPropagation(); 90 + 91 + playPause?.(); 92 + }} 93 + position={[0, 0.66, 0.15]} 94 + rotation.x={-0.175} 95 + videoId={link} 96 + size={[270 * 2, 150 * 2]} 97 + bind:playPause 98 + /> 99 + {/if} 100 + </T.Group> 101 + {:catch err} 102 + {@render error?.({ error: err })} 103 + {/await} 104 + 105 + {@render children?.({ ref })} 106 + </T.Group>
+65
src/lib/room/models/kaykit-furniture-kit/mouse.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/mouse.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube18235: THREE.Mesh; 37 + Cube18235_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/mouse.glb')); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Group> 53 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18235.geometry} 54 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 + > 56 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18235_1.geometry} 57 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 + > 59 + </T.Group> 60 + {:catch err} 61 + {@render error?.({ error: err })} 62 + {/await} 63 + 64 + {@render children?.({ ref })} 65 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/mousepad.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/mousepad.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + mousepad_A: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/mousepad.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.mousepad_A.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+67
src/lib/room/models/kaykit-furniture-kit/mousepad_large.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/mousepad_large.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube18245: THREE.Mesh; 37 + Cube18245_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend( 46 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/mousepad_large.glb') 47 + ); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18245.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube18245_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + </T.Group> 62 + {:catch err} 63 + {@render error?.({ error: err })} 64 + {/await} 65 + 66 + {@render children?.({ ref })} 67 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/mug_a.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/mug_a.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + mug_A: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/mug_a.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.mug_A.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/mug_b.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/mug_b.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + mug_B: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/mug_b.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.mug_B.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+67
src/lib/room/models/kaykit-furniture-kit/pictureframe_large_a.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_large_a.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + import Image from '$lib/room/Image.svelte'; 17 + 18 + let { 19 + fallback, 20 + error, 21 + children, 22 + ref = $bindable(), 23 + colors, 24 + opacity, 25 + image, 26 + ...props 27 + }: Props<THREE.Group> & { 28 + ref?: THREE.Group; 29 + children?: Snippet<[{ ref: THREE.Group }]>; 30 + fallback?: Snippet; 31 + error?: Snippet<[{ error: Error }]>; 32 + } & ExtraRoomObjectProps = $props(); 33 + 34 + const suspend = useSuspense(); 35 + 36 + type GLTFResult = { 37 + nodes: { 38 + Cube016: THREE.Mesh; 39 + Cube016_1: THREE.Mesh; 40 + }; 41 + materials: { 42 + a: THREE.MeshStandardMaterial; 43 + image: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend( 48 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_large_a.glb') 49 + ); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube016.geometry} 58 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 + > 60 + <Image {image} position={[0, 0, 0.15]} size={[270 * 1.3, 150 * 2.6]} /> 61 + </T.Group> 62 + {:catch err} 63 + {@render error?.({ error: err })} 64 + {/await} 65 + 66 + {@render children?.({ ref })} 67 + </T.Group>
+68
src/lib/room/models/kaykit-furniture-kit/pictureframe_large_b.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_large_b.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + import Image from '$lib/room/Image.svelte'; 17 + 18 + let { 19 + fallback, 20 + error, 21 + children, 22 + ref = $bindable(), 23 + colors, 24 + opacity, 25 + image, 26 + ...props 27 + }: Props<THREE.Group> & { 28 + ref?: THREE.Group; 29 + children?: Snippet<[{ ref: THREE.Group }]>; 30 + fallback?: Snippet; 31 + error?: Snippet<[{ error: Error }]>; 32 + } & ExtraRoomObjectProps = $props(); 33 + 34 + const suspend = useSuspense(); 35 + 36 + type GLTFResult = { 37 + nodes: { 38 + Cube018: THREE.Mesh; 39 + Cube018_1: THREE.Mesh; 40 + }; 41 + materials: { 42 + a: THREE.MeshStandardMaterial; 43 + image: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend( 48 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_large_b.glb') 49 + ); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube018.geometry} 58 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 + > 60 + 61 + <Image {image} position={[0, 0, 0.15]} size={[270 * 2.65, 150 * 2.6]} /> 62 + </T.Group> 63 + {:catch err} 64 + {@render error?.({ error: err })} 65 + {/await} 66 + 67 + {@render children?.({ ref })} 68 + </T.Group>
+67
src/lib/room/models/kaykit-furniture-kit/pictureframe_medium.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_medium.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + import Image from '$lib/room/Image.svelte'; 17 + 18 + let { 19 + fallback, 20 + error, 21 + children, 22 + ref = $bindable(), 23 + colors, 24 + opacity, 25 + image, 26 + ...props 27 + }: Props<THREE.Group> & { 28 + ref?: THREE.Group; 29 + children?: Snippet<[{ ref: THREE.Group }]>; 30 + fallback?: Snippet; 31 + error?: Snippet<[{ error: Error }]>; 32 + } & ExtraRoomObjectProps = $props(); 33 + 34 + const suspend = useSuspense(); 35 + 36 + type GLTFResult = { 37 + nodes: { 38 + Cube015: THREE.Mesh; 39 + Cube015_1: THREE.Mesh; 40 + }; 41 + materials: { 42 + a: THREE.MeshStandardMaterial; 43 + image: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend( 48 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_medium.glb') 49 + ); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube015.geometry} 58 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 + > 60 + <Image {image} position={[0, 0, 0.15]} size={[270 * 0.7, 150 * 1.8]} /> 61 + </T.Group> 62 + {:catch err} 63 + {@render error?.({ error: err })} 64 + {/await} 65 + 66 + {@render children?.({ ref })} 67 + </T.Group>
+67
src/lib/room/models/kaykit-furniture-kit/pictureframe_small_a.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_small_a.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + import Image from '$lib/room/Image.svelte'; 17 + 18 + let { 19 + fallback, 20 + error, 21 + children, 22 + ref = $bindable(), 23 + colors, 24 + opacity, 25 + image, 26 + ...props 27 + }: Props<THREE.Group> & { 28 + ref?: THREE.Group; 29 + children?: Snippet<[{ ref: THREE.Group }]>; 30 + fallback?: Snippet; 31 + error?: Snippet<[{ error: Error }]>; 32 + } & ExtraRoomObjectProps = $props(); 33 + 34 + const suspend = useSuspense(); 35 + 36 + type GLTFResult = { 37 + nodes: { 38 + Cube014: THREE.Mesh; 39 + Cube014_1: THREE.Mesh; 40 + }; 41 + materials: { 42 + a: THREE.MeshStandardMaterial; 43 + image: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend( 48 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_small_a.glb') 49 + ); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube014.geometry} 58 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 + > 60 + <Image {image} position={[0, 0.0, 0.15]} size={[270 * 0.5, 150 * 1.1]} /> 61 + </T.Group> 62 + {:catch err} 63 + {@render error?.({ error: err })} 64 + {/await} 65 + 66 + {@render children?.({ ref })} 67 + </T.Group>
+67
src/lib/room/models/kaykit-furniture-kit/pictureframe_small_b.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_small_b.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + import Image from '$lib/room/Image.svelte'; 17 + 18 + let { 19 + fallback, 20 + error, 21 + children, 22 + ref = $bindable(), 23 + colors, 24 + opacity, 25 + image, 26 + ...props 27 + }: Props<THREE.Group> & { 28 + ref?: THREE.Group; 29 + children?: Snippet<[{ ref: THREE.Group }]>; 30 + fallback?: Snippet; 31 + error?: Snippet<[{ error: Error }]>; 32 + } & ExtraRoomObjectProps = $props(); 33 + 34 + const suspend = useSuspense(); 35 + 36 + type GLTFResult = { 37 + nodes: { 38 + Cube017: THREE.Mesh; 39 + Cube017_1: THREE.Mesh; 40 + }; 41 + materials: { 42 + a: THREE.MeshStandardMaterial; 43 + image: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend( 48 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_small_b.glb') 49 + ); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube017.geometry} 58 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 + > 60 + <Image {image} position={[0, 0.0, 0.15]} size={[270 * 0.7, 150 * 0.6]} /> 61 + </T.Group> 62 + {:catch err} 63 + {@render error?.({ error: err })} 64 + {/await} 65 + 66 + {@render children?.({ ref })} 67 + </T.Group>
+67
src/lib/room/models/kaykit-furniture-kit/pictureframe_small_c.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_small_c.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + import Image from '$lib/room/Image.svelte'; 17 + 18 + let { 19 + fallback, 20 + error, 21 + children, 22 + ref = $bindable(), 23 + colors, 24 + opacity, 25 + image, 26 + ...props 27 + }: Props<THREE.Group> & { 28 + ref?: THREE.Group; 29 + children?: Snippet<[{ ref: THREE.Group }]>; 30 + fallback?: Snippet; 31 + error?: Snippet<[{ error: Error }]>; 32 + } & ExtraRoomObjectProps = $props(); 33 + 34 + const suspend = useSuspense(); 35 + 36 + type GLTFResult = { 37 + nodes: { 38 + Cube025: THREE.Mesh; 39 + Cube025_1: THREE.Mesh; 40 + }; 41 + materials: { 42 + a: THREE.MeshStandardMaterial; 43 + image: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend( 48 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_small_c.glb') 49 + ); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube025.geometry} 58 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 + > 60 + <Image {image} position={[0, 0.0, 0.15]} size={[270 * 0.5, 270 * 0.5]} /> 61 + </T.Group> 62 + {:catch err} 63 + {@render error?.({ error: err })} 64 + {/await} 65 + 66 + {@render children?.({ ref })} 67 + </T.Group>
+67
src/lib/room/models/kaykit-furniture-kit/pictureframe_standing_a.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_standing_a.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + import Image from '$lib/room/Image.svelte'; 17 + 18 + let { 19 + fallback, 20 + error, 21 + children, 22 + ref = $bindable(), 23 + colors, 24 + opacity, 25 + image, 26 + ...props 27 + }: Props<THREE.Group> & { 28 + ref?: THREE.Group; 29 + children?: Snippet<[{ ref: THREE.Group }]>; 30 + fallback?: Snippet; 31 + error?: Snippet<[{ error: Error }]>; 32 + } & ExtraRoomObjectProps = $props(); 33 + 34 + const suspend = useSuspense(); 35 + 36 + type GLTFResult = { 37 + nodes: { 38 + Cube024: THREE.Mesh; 39 + Cube024_1: THREE.Mesh; 40 + }; 41 + materials: { 42 + a: THREE.MeshStandardMaterial; 43 + image: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend( 48 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_standing_a.glb') 49 + ); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group> 57 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube024.geometry} 58 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 59 + > 60 + <Image {image} position={[0, 0.33, 0.05]} size={[270 * 0.5, 150 * 1.1]} rotation.x={-0.35} /> 61 + </T.Group> 62 + {:catch err} 63 + {@render error?.({ error: err })} 64 + {/await} 65 + 66 + {@render children?.({ ref })} 67 + </T.Group>
+66
src/lib/room/models/kaykit-furniture-kit/pictureframe_standing_b.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pictureframe_standing_b.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + import Image from '$lib/room/Image.svelte'; 17 + 18 + let { 19 + fallback, 20 + error, 21 + children, 22 + ref = $bindable(), 23 + colors, 24 + opacity, 25 + image, 26 + ...props 27 + }: Props<THREE.Group> & { 28 + ref?: THREE.Group; 29 + children?: Snippet<[{ ref: THREE.Group }]>; 30 + fallback?: Snippet; 31 + error?: Snippet<[{ error: Error }]>; 32 + } & ExtraRoomObjectProps = $props(); 33 + 34 + const suspend = useSuspense(); 35 + 36 + type GLTFResult = { 37 + nodes: { 38 + Cube023: THREE.Mesh; 39 + Cube023_1: THREE.Mesh; 40 + }; 41 + materials: { 42 + a: THREE.MeshStandardMaterial; 43 + image: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = suspend( 48 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pictureframe_standing_b.glb') 49 + ); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube023.geometry} 57 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 58 + > 59 + 60 + <Image {image} position={[0, 0.25, 0.05]} size={[270 * 0.7, 150 * 0.6]} rotation.x={-0.35} /> 61 + {:catch err} 62 + {@render error?.({ error: err })} 63 + {/await} 64 + 65 + {@render children?.({ ref })} 66 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/pillow.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/pillow.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + pillow_A: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/pillow.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.pillow_A.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+67
src/lib/room/models/kaykit-furniture-kit/rug_rectangle-pattern.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/rug_rectangle-pattern.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube011: THREE.Mesh; 37 + Cube011_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + b: THREE.MeshStandardMaterial; 41 + a: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend( 46 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/rug_rectangle-pattern.glb') 47 + ); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube011.geometry} 56 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube011_1.geometry} 59 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 60 + > 61 + </T.Group> 62 + {:catch err} 63 + {@render error?.({ error: err })} 64 + {/await} 65 + 66 + {@render children?.({ ref })} 67 + </T.Group>
+60
src/lib/room/models/kaykit-furniture-kit/rug_rectangle.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/rug_rectangle.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + rug_rectangle_B: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend( 44 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/rug_rectangle.glb') 45 + ); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.rug_rectangle_B.geometry} 53 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 54 + > 55 + {:catch err} 56 + {@render error?.({ error: err })} 57 + {/await} 58 + 59 + {@render children?.({ ref })} 60 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/rug_rounded.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/rug_rounded.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + rug_oval_B: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/rug_rounded.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.rug_oval_B.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+65
src/lib/room/models/kaykit-furniture-kit/shelf_a_big.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/shelf_a_big.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube028: THREE.Mesh; 37 + Cube028_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/shelf_a_big.glb')); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Group> 53 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube028.geometry} 54 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 + > 56 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube028_1.geometry} 57 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 + > 59 + </T.Group> 60 + {:catch err} 61 + {@render error?.({ error: err })} 62 + {/await} 63 + 64 + {@render children?.({ ref })} 65 + </T.Group>
+67
src/lib/room/models/kaykit-furniture-kit/shelf_a_small.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/shelf_a_small.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube026: THREE.Mesh; 37 + Cube026_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend( 46 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/shelf_a_small.glb') 47 + ); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube026.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube026_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + </T.Group> 62 + {:catch err} 63 + {@render error?.({ error: err })} 64 + {/await} 65 + 66 + {@render children?.({ ref })} 67 + </T.Group>
+65
src/lib/room/models/kaykit-furniture-kit/shelf_b_big.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/shelf_b_big.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube029: THREE.Mesh; 37 + Cube029_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/shelf_b_big.glb')); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Group> 53 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube029.geometry} 54 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 55 + > 56 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube029_1.geometry} 57 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 58 + > 59 + </T.Group> 60 + {:catch err} 61 + {@render error?.({ error: err })} 62 + {/await} 63 + 64 + {@render children?.({ ref })} 65 + </T.Group>
+67
src/lib/room/models/kaykit-furniture-kit/shelf_b_small.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/shelf_b_small.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Cube027: THREE.Mesh; 37 + Cube027_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + a: THREE.MeshStandardMaterial; 41 + b: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = suspend( 46 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/shelf_b_small.glb') 47 + ); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group> 55 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube027.geometry} 56 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 57 + > 58 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.Cube027_1.geometry} 59 + ><RoomObjectMaterial index={1} {colors} {opacity} /></T.Mesh 60 + > 61 + </T.Group> 62 + {:catch err} 63 + {@render error?.({ error: err })} 64 + {/await} 65 + 66 + {@render children?.({ ref })} 67 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/table_low.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/table_low.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + table_low: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/table_low.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.table_low.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/table_medium.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/table_medium.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + table_medium: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/table_medium.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.table_medium.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+60
src/lib/room/models/kaykit-furniture-kit/table_medium_long.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/table_medium_long.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + table_medium_long: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend( 44 + useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/table_medium_long.glb') 45 + ); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.table_medium_long.geometry} 53 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 54 + > 55 + {:catch err} 56 + {@render error?.({ error: err })} 57 + {/await} 58 + 59 + {@render children?.({ ref })} 60 + </T.Group>
+58
src/lib/room/models/kaykit-furniture-kit/table_small.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/kaykit-furniture-kit/table_small.glb -r /room/ 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + 13 + import { type ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + import { base } from '$app/paths'; 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + } & ExtraRoomObjectProps = $props(); 31 + 32 + const suspend = useSuspense(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + table_small: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/kaykit-furniture-kit/table_small.glb')); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.table_small.geometry} 51 + ><RoomObjectMaterial index={0} {colors} {opacity} /></T.Mesh 52 + > 53 + {:catch err} 54 + {@render error?.({ error: err })} 55 + {/await} 56 + 57 + {@render children?.({ ref })} 58 + </T.Group>
+143
src/lib/room/models/kenney-furniture-kit/bedBunk.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/bedBunk.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_bedBunk: THREE.Mesh; 34 + Mesh_bedBunk_1: THREE.Mesh; 35 + Mesh_cover: THREE.Mesh; 36 + Mesh_cover_1: THREE.Mesh; 37 + pillowBottom: THREE.Mesh; 38 + pillowTop: THREE.Mesh; 39 + }; 40 + materials: { 41 + wood: THREE.MeshStandardMaterial; 42 + carpetWhite: THREE.MeshStandardMaterial; 43 + carpet: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/bedBunk.glb'); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + <T.Group position={[-0.3, 0, 0.6]}> 52 + {#await gltf} 53 + {@render fallback?.()} 54 + {:then gltf} 55 + <T.Mesh 56 + castShadow 57 + receiveShadow 58 + geometry={gltf.nodes.Mesh_bedBunk.geometry} 59 + material={gltf.materials.wood.clone()} 60 + material.color={colors?.[0] ?? gltf.materials.wood.color} 61 + material.opacity={opacity ?? gltf.materials.wood.opacity} 62 + material.transparent={opacity !== undefined} 63 + /> 64 + <T.Mesh 65 + castShadow 66 + receiveShadow 67 + geometry={gltf.nodes.Mesh_bedBunk_1.geometry} 68 + material={gltf.materials.carpetWhite.clone()} 69 + material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 70 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 71 + material.transparent={opacity !== undefined} 72 + /> 73 + <T.Group position={[-0.38, 0.2, -0.83]} rotation={[0, -Math.PI / 2, 0]} scale={0.5}> 74 + <T.Mesh 75 + castShadow 76 + receiveShadow 77 + geometry={gltf.nodes.Mesh_cover.geometry} 78 + material={gltf.materials.carpet.clone()} 79 + material.color={colors?.[2] ?? gltf.materials.carpet.color} 80 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 81 + material.transparent={opacity !== undefined} 82 + /> 83 + <T.Mesh 84 + castShadow 85 + receiveShadow 86 + geometry={gltf.nodes.Mesh_cover_1.geometry} 87 + material={gltf.materials.carpetWhite.clone()} 88 + material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 89 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 90 + material.transparent={opacity !== undefined} 91 + /> 92 + </T.Group> 93 + <T.Group position={[-0.38, 0.73, -0.83]} rotation={[0, -Math.PI / 2, 0]} scale={0.5}> 94 + <T.Mesh 95 + castShadow 96 + receiveShadow 97 + geometry={gltf.nodes.Mesh_cover.geometry} 98 + material={gltf.materials.carpet.clone()} 99 + material.color={colors?.[2] ?? gltf.materials.carpet.color} 100 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 101 + material.transparent={opacity !== undefined} 102 + /> 103 + <T.Mesh 104 + castShadow 105 + receiveShadow 106 + geometry={gltf.nodes.Mesh_cover_1.geometry} 107 + material={gltf.materials.carpetWhite.clone()} 108 + material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 109 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 110 + material.transparent={opacity !== undefined} 111 + /> 112 + </T.Group> 113 + <T.Mesh 114 + castShadow 115 + receiveShadow 116 + geometry={gltf.nodes.pillowBottom.geometry} 117 + material={gltf.materials.carpetWhite.clone()} 118 + material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 119 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 120 + material.transparent={opacity !== undefined} 121 + position={[0.12, 0.2, -1.07]} 122 + rotation={[0.13, -Math.PI / 2, 0]} 123 + scale={[0.5, 0.5, 0.85]} 124 + /> 125 + <T.Mesh 126 + castShadow 127 + receiveShadow 128 + geometry={gltf.nodes.pillowTop.geometry} 129 + material={gltf.materials.carpetWhite.clone()} 130 + material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 131 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 132 + material.transparent={opacity !== undefined} 133 + position={[0.12, 0.74, -1.07]} 134 + rotation={[0.13, -Math.PI / 2, 0]} 135 + scale={[0.5, 0.5, 0.85]} 136 + /> 137 + {:catch err} 138 + {@render error?.({ error: err })} 139 + {/await} 140 + 141 + {@render children?.({ ref })} 142 + </T.Group> 143 + </T.Group>
+134
src/lib/room/models/kenney-furniture-kit/bedDouble.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/bedDouble.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_bedDouble: THREE.Mesh; 34 + Mesh_bedDouble_1: THREE.Mesh; 35 + Mesh_bedDouble_2: THREE.Mesh; 36 + Mesh_cover: THREE.Mesh; 37 + Mesh_cover_1: THREE.Mesh; 38 + pillowLeft: THREE.Mesh; 39 + pillowRight: THREE.Mesh; 40 + }; 41 + materials: { 42 + carpetWhite: THREE.MeshStandardMaterial; 43 + wood: THREE.MeshStandardMaterial; 44 + metal: THREE.MeshStandardMaterial; 45 + carpet: THREE.MeshStandardMaterial; 46 + }; 47 + }; 48 + 49 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/bedDouble.glb'); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + <T.Group position={[-0.5, 0, 0.5]}> 54 + {#await gltf} 55 + {@render fallback?.()} 56 + {:then gltf} 57 + <T.Mesh 58 + castShadow 59 + receiveShadow 60 + geometry={gltf.nodes.Mesh_bedDouble.geometry} 61 + material={gltf.materials.carpetWhite.clone()} 62 + material.color={colors?.[0] ?? gltf.materials.carpetWhite.color} 63 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 64 + material.transparent={opacity !== undefined} 65 + /> 66 + <T.Mesh 67 + castShadow 68 + receiveShadow 69 + geometry={gltf.nodes.Mesh_bedDouble_1.geometry} 70 + material={gltf.materials.wood.clone()} 71 + material.color={colors?.[1] ?? gltf.materials.wood.color} 72 + material.opacity={opacity ?? gltf.materials.wood.opacity} 73 + material.transparent={opacity !== undefined} 74 + /> 75 + <T.Mesh 76 + castShadow 77 + receiveShadow 78 + geometry={gltf.nodes.Mesh_bedDouble_2.geometry} 79 + material={gltf.materials.metal.clone()} 80 + material.color={colors?.[2] ?? gltf.materials.metal.color} 81 + material.opacity={opacity ?? gltf.materials.metal.opacity} 82 + material.transparent={opacity !== undefined} 83 + /> 84 + <T.Group position={[0.01, 0.21, -0.79]} rotation={[0, -Math.PI / 2, 0]} scale={0.5}> 85 + <T.Mesh 86 + castShadow 87 + receiveShadow 88 + geometry={gltf.nodes.Mesh_cover.geometry} 89 + material={gltf.materials.carpet.clone()} 90 + material.color={colors?.[3] ?? gltf.materials.carpet.color} 91 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 92 + material.transparent={opacity !== undefined} 93 + /> 94 + <T.Mesh 95 + castShadow 96 + receiveShadow 97 + geometry={gltf.nodes.Mesh_cover_1.geometry} 98 + material={gltf.materials.carpetWhite.clone()} 99 + material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 100 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 101 + material.transparent={opacity !== undefined} 102 + /> 103 + </T.Group> 104 + <T.Mesh 105 + castShadow 106 + receiveShadow 107 + geometry={gltf.nodes.pillowLeft.geometry} 108 + material={gltf.materials.carpetWhite.clone()} 109 + material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 110 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 111 + material.transparent={opacity !== undefined} 112 + position={[0.11, 0.22, -1.03]} 113 + rotation={[0.13, -Math.PI / 2, 0]} 114 + scale={[0.5, 0.5, 0.85]} 115 + /> 116 + <T.Mesh 117 + castShadow 118 + receiveShadow 119 + geometry={gltf.nodes.pillowRight.geometry} 120 + material={gltf.materials.carpetWhite.clone()} 121 + material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 122 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 123 + material.transparent={opacity !== undefined} 124 + position={[0.5, 0.22, -1.03]} 125 + rotation={[0.13, -Math.PI / 2, 0]} 126 + scale={[0.5, 0.5, 0.85]} 127 + /> 128 + {:catch err} 129 + {@render error?.({ error: err })} 130 + {/await} 131 + 132 + {@render children?.({ ref })} 133 + </T.Group> 134 + </T.Group>
+121
src/lib/room/models/kenney-furniture-kit/bedSingle.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/bedSingle.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_bedSingle: THREE.Mesh; 34 + Mesh_bedSingle_1: THREE.Mesh; 35 + Mesh_bedSingle_2: THREE.Mesh; 36 + Mesh_cover: THREE.Mesh; 37 + Mesh_cover_1: THREE.Mesh; 38 + pillow: THREE.Mesh; 39 + }; 40 + materials: { 41 + carpetWhite: THREE.MeshStandardMaterial; 42 + wood: THREE.MeshStandardMaterial; 43 + metal: THREE.MeshStandardMaterial; 44 + carpet: THREE.MeshStandardMaterial; 45 + }; 46 + }; 47 + 48 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/bedSingle.glb'); 49 + </script> 50 + 51 + <T.Group bind:ref dispose={false} {...props}> 52 + <T.Group position={[-0.7, 0, 0.5]}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Mesh 57 + castShadow 58 + receiveShadow 59 + geometry={gltf.nodes.Mesh_bedSingle.geometry} 60 + material={gltf.materials.carpetWhite.clone()} 61 + material.color={colors?.[0] ?? gltf.materials.carpetWhite.color} 62 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 63 + material.transparent={opacity !== undefined} 64 + /> 65 + <T.Mesh 66 + castShadow 67 + receiveShadow 68 + geometry={gltf.nodes.Mesh_bedSingle_1.geometry} 69 + material={gltf.materials.wood.clone()} 70 + material.color={colors?.[1] ?? gltf.materials.wood.color} 71 + material.opacity={opacity ?? gltf.materials.wood.opacity} 72 + material.transparent={opacity !== undefined} 73 + /> 74 + <T.Mesh 75 + castShadow 76 + receiveShadow 77 + geometry={gltf.nodes.Mesh_bedSingle_2.geometry} 78 + material={gltf.materials.metal.clone()} 79 + material.color={colors?.[2] ?? gltf.materials.metal.color} 80 + material.opacity={opacity ?? gltf.materials.metal.opacity} 81 + material.transparent={opacity !== undefined} 82 + /> 83 + <T.Group position={[0.01, 0.21, -0.79]} rotation={[0, -Math.PI / 2, 0]} scale={0.5}> 84 + <T.Mesh 85 + castShadow 86 + receiveShadow 87 + geometry={gltf.nodes.Mesh_cover.geometry} 88 + material={gltf.materials.carpet.clone()} 89 + material.color={colors?.[3] ?? gltf.materials.carpet.color} 90 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 91 + material.transparent={opacity !== undefined} 92 + /> 93 + <T.Mesh 94 + castShadow 95 + receiveShadow 96 + geometry={gltf.nodes.Mesh_cover_1.geometry} 97 + material={gltf.materials.carpetWhite.clone()} 98 + material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 99 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 100 + material.transparent={opacity !== undefined} 101 + /> 102 + </T.Group> 103 + <T.Mesh 104 + castShadow 105 + receiveShadow 106 + geometry={gltf.nodes.pillow.geometry} 107 + material={gltf.materials.carpetWhite.clone()} 108 + material.color={colors?.[1] ?? gltf.materials.carpetWhite.color} 109 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 110 + material.transparent={opacity !== undefined} 111 + position={[0.5, 0.22, -1.03]} 112 + rotation={[0.13, -Math.PI / 2, 0]} 113 + scale={[0.5, 0.5, 0.85]} 114 + /> 115 + {:catch err} 116 + {@render error?.({ error: err })} 117 + {/await} 118 + 119 + {@render children?.({ ref })} 120 + </T.Group> 121 + </T.Group>
+62
src/lib/room/models/kenney-furniture-kit/bench.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/bench.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + colors, 19 + opacity, 20 + ref = $bindable(), 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + ['bench(Clone)']: THREE.Mesh; 34 + }; 35 + materials: { 36 + wood: THREE.MeshStandardMaterial; 37 + }; 38 + }; 39 + 40 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/bench.glb'); 41 + </script> 42 + 43 + <T.Group bind:ref dispose={false} {...props}> 44 + {#await gltf} 45 + {@render fallback?.()} 46 + {:then gltf} 47 + <T.Mesh 48 + castShadow 49 + receiveShadow 50 + geometry={gltf.nodes['bench(Clone)'].geometry} 51 + material={gltf.materials.wood.clone()} 52 + material.color={colors?.[0] ?? gltf.materials.wood.color} 53 + material.opacity={opacity ?? gltf.materials.wood.opacity} 54 + material.transparent={opacity !== undefined} 55 + position={[-0.2, 0, 0.1]} 56 + /> 57 + {:catch err} 58 + {@render error?.({ error: err })} 59 + {/await} 60 + 61 + {@render children?.({ ref })} 62 + </T.Group>
+74
src/lib/room/models/kenney-furniture-kit/benchCushion.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/benchCushion.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_benchCushion: THREE.Mesh; 34 + Mesh_benchCushion_1: THREE.Mesh; 35 + }; 36 + materials: { 37 + wood: THREE.MeshStandardMaterial; 38 + carpet: THREE.MeshStandardMaterial; 39 + }; 40 + }; 41 + 42 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/benchCushion.glb'); 43 + </script> 44 + 45 + <T.Group bind:ref dispose={false} {...props}> 46 + {#await gltf} 47 + {@render fallback?.()} 48 + {:then gltf} 49 + <T.Mesh 50 + castShadow 51 + receiveShadow 52 + geometry={gltf.nodes.Mesh_benchCushion.geometry} 53 + material={gltf.materials.wood.clone()} 54 + material.color={colors?.[0] ?? gltf.materials.wood.color} 55 + material.opacity={opacity ?? gltf.materials.wood.opacity} 56 + material.transparent={opacity !== undefined} 57 + position={[-0.2, 0, 0.1]} 58 + /> 59 + <T.Mesh 60 + castShadow 61 + receiveShadow 62 + geometry={gltf.nodes.Mesh_benchCushion_1.geometry} 63 + material={gltf.materials.carpet.clone()} 64 + material.color={colors?.[1] ?? gltf.materials.carpet.color} 65 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 66 + material.transparent={opacity !== undefined} 67 + position={[-0.2, 0, 0.1]} 68 + /> 69 + {:catch err} 70 + {@render error?.({ error: err })} 71 + {/await} 72 + 73 + {@render children?.({ ref })} 74 + </T.Group>
+86
src/lib/room/models/kenney-furniture-kit/benchCushionLow.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/benchCushionLow.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_benchCushionLow: THREE.Mesh; 34 + Mesh_benchCushionLow_1: THREE.Mesh; 35 + Mesh_benchCushionLow_2: THREE.Mesh; 36 + }; 37 + materials: { 38 + wood: THREE.MeshStandardMaterial; 39 + carpet: THREE.MeshStandardMaterial; 40 + _defaultMat: THREE.MeshStandardMaterial; 41 + }; 42 + }; 43 + 44 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/benchCushionLow.glb'); 45 + </script> 46 + 47 + <T.Group bind:ref dispose={false} {...props}> 48 + {#await gltf} 49 + {@render fallback?.()} 50 + {:then gltf} 51 + <T.Mesh 52 + castShadow 53 + receiveShadow 54 + geometry={gltf.nodes.Mesh_benchCushionLow.geometry} 55 + material={gltf.materials.wood.clone()} 56 + material.color={colors?.[0] ?? gltf.materials.wood.color} 57 + material.opacity={opacity ?? gltf.materials.wood.opacity} 58 + material.transparent={opacity !== undefined} 59 + position={[-0.2, 0, 0.1]} 60 + /> 61 + <T.Mesh 62 + castShadow 63 + receiveShadow 64 + geometry={gltf.nodes.Mesh_benchCushionLow_1.geometry} 65 + material={gltf.materials.carpet.clone()} 66 + material.color={colors?.[1] ?? gltf.materials.carpet.color} 67 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 68 + material.transparent={opacity !== undefined} 69 + position={[-0.2, 0, 0.1]} 70 + /> 71 + <T.Mesh 72 + castShadow 73 + receiveShadow 74 + geometry={gltf.nodes.Mesh_benchCushionLow_2.geometry} 75 + material={gltf.materials._defaultMat.clone()} 76 + material.color={colors?.[2] ?? gltf.materials._defaultMat.color} 77 + material.opacity={opacity ?? gltf.materials._defaultMat.opacity} 78 + material.transparent={opacity !== undefined} 79 + position={[-0.2, 0, 0.1]} 80 + /> 81 + {:catch err} 82 + {@render error?.({ error: err })} 83 + {/await} 84 + 85 + {@render children?.({ ref })} 86 + </T.Group>
+61
src/lib/room/models/kenney-furniture-kit/bookcaseClosed.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/bookcaseClosed.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + ['bookcaseClosed(Clone)']: THREE.Mesh; 34 + }; 35 + materials: { 36 + wood: THREE.MeshStandardMaterial; 37 + }; 38 + }; 39 + 40 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/bookcaseClosed.glb'); 41 + </script> 42 + 43 + <T.Group bind:ref dispose={false} {...props}> 44 + {#await gltf} 45 + {@render fallback?.()} 46 + {:then gltf} 47 + <T.Mesh 48 + castShadow 49 + receiveShadow 50 + geometry={gltf.nodes['bookcaseClosed(Clone)'].geometry} 51 + material={gltf.materials.wood.clone()} 52 + material.color={colors?.[0] ?? gltf.materials.wood.color} 53 + material.opacity={opacity ?? gltf.materials.wood.opacity} 54 + material.transparent={opacity !== undefined} 55 + /> 56 + {:catch err} 57 + {@render error?.({ error: err })} 58 + {/await} 59 + 60 + {@render children?.({ ref })} 61 + </T.Group>
+86
src/lib/room/models/kenney-furniture-kit/cabinetBed.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/cabinetBed.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + ['cabinetBed(Clone)']: THREE.Mesh; 34 + Mesh_door: THREE.Mesh; 35 + Mesh_door_1: THREE.Mesh; 36 + }; 37 + materials: { 38 + wood: THREE.MeshStandardMaterial; 39 + metal: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/cabinetBed.glb'); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh 51 + castShadow 52 + receiveShadow 53 + geometry={gltf.nodes['cabinetBed(Clone)'].geometry} 54 + material={gltf.materials.wood.clone()} 55 + material.color={colors?.[0] ?? gltf.materials.wood.color} 56 + material.opacity={opacity ?? gltf.materials.wood.opacity} 57 + material.transparent={opacity !== undefined} 58 + position={[-0.12, 0.0, 0.1]} 59 + > 60 + <T.Group position={[0.02, 0.02, -0.02]}> 61 + <T.Mesh 62 + castShadow 63 + receiveShadow 64 + geometry={gltf.nodes.Mesh_door.geometry} 65 + material={gltf.materials.wood.clone()} 66 + material.color={colors?.[0] ?? gltf.materials.wood.color} 67 + material.opacity={opacity ?? gltf.materials.wood.opacity} 68 + material.transparent={opacity !== undefined} 69 + /> 70 + <T.Mesh 71 + castShadow 72 + receiveShadow 73 + geometry={gltf.nodes.Mesh_door_1.geometry} 74 + material={gltf.materials.metal.clone()} 75 + material.color={colors?.[1] ?? gltf.materials.metal.color} 76 + material.opacity={opacity ?? gltf.materials.metal.opacity} 77 + material.transparent={opacity !== undefined} 78 + /> 79 + </T.Group> 80 + </T.Mesh> 81 + {:catch err} 82 + {@render error?.({ error: err })} 83 + {/await} 84 + 85 + {@render children?.({ ref })} 86 + </T.Group>
+116
src/lib/room/models/kenney-furniture-kit/cabinetBedDrawer.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/cabinetBedDrawer.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_cabinetBedDrawer: THREE.Mesh; 34 + Mesh_cabinetBedDrawer_1: THREE.Mesh; 35 + Mesh_door: THREE.Mesh; 36 + Mesh_door_1: THREE.Mesh; 37 + Mesh_drawer: THREE.Mesh; 38 + Mesh_drawer_1: THREE.Mesh; 39 + }; 40 + materials: { 41 + wood: THREE.MeshStandardMaterial; 42 + _defaultMat: THREE.MeshStandardMaterial; 43 + metal: THREE.MeshStandardMaterial; 44 + }; 45 + }; 46 + 47 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/cabinetBedDrawer.glb'); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group position={[-0.12, 0.0, 0.1]}> 55 + <T.Mesh 56 + castShadow 57 + receiveShadow 58 + geometry={gltf.nodes.Mesh_cabinetBedDrawer.geometry} 59 + material={gltf.materials.wood.clone()} 60 + material.color={colors?.[0] ?? gltf.materials.wood.color} 61 + material.opacity={opacity ?? gltf.materials.wood.opacity} 62 + material.transparent={opacity !== undefined} 63 + /> 64 + <T.Mesh 65 + castShadow 66 + receiveShadow 67 + geometry={gltf.nodes.Mesh_cabinetBedDrawer_1.geometry} 68 + material={gltf.materials._defaultMat} 69 + /> 70 + <T.Group position={[0.02, 0.05, -0.01]}> 71 + <T.Mesh 72 + castShadow 73 + receiveShadow 74 + geometry={gltf.nodes.Mesh_door.geometry} 75 + material={gltf.materials.wood.clone()} 76 + material.color={colors?.[0] ?? gltf.materials.wood.color} 77 + material.opacity={opacity ?? gltf.materials.wood.opacity} 78 + material.transparent={opacity !== undefined} 79 + /> 80 + <T.Mesh 81 + castShadow 82 + receiveShadow 83 + geometry={gltf.nodes.Mesh_door_1.geometry} 84 + material={gltf.materials.metal.clone()} 85 + material.color={colors?.[1] ?? gltf.materials.metal.color} 86 + material.opacity={opacity ?? gltf.materials.metal.opacity} 87 + material.transparent={opacity !== undefined} 88 + /> 89 + </T.Group> 90 + <T.Group position={[0.02, 0.17, -0.16]}> 91 + <T.Mesh 92 + castShadow 93 + receiveShadow 94 + geometry={gltf.nodes.Mesh_drawer.geometry} 95 + material={gltf.materials.wood.clone()} 96 + material.color={colors?.[0] ?? gltf.materials.wood.color} 97 + material.opacity={opacity ?? gltf.materials.wood.opacity} 98 + material.transparent={opacity !== undefined} 99 + /> 100 + <T.Mesh 101 + castShadow 102 + receiveShadow 103 + geometry={gltf.nodes.Mesh_drawer_1.geometry} 104 + material={gltf.materials.metal.clone()} 105 + material.color={colors?.[1] ?? gltf.materials.metal.color} 106 + material.opacity={opacity ?? gltf.materials.metal.opacity} 107 + material.transparent={opacity !== undefined} 108 + /> 109 + </T.Group> 110 + </T.Group> 111 + {:catch err} 112 + {@render error?.({ error: err })} 113 + {/await} 114 + 115 + {@render children?.({ ref })} 116 + </T.Group>
+94
src/lib/room/models/kenney-furniture-kit/cabinetBedDrawerTable.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/cabinetBedDrawerTable.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_cabinetBedDrawerTable: THREE.Mesh; 34 + Mesh_cabinetBedDrawerTable_1: THREE.Mesh; 35 + Mesh_drawer: THREE.Mesh; 36 + Mesh_drawer_1: THREE.Mesh; 37 + }; 38 + materials: { 39 + wood: THREE.MeshStandardMaterial; 40 + _defaultMat: THREE.MeshStandardMaterial; 41 + metal: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/cabinetBedDrawerTable.glb'); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Group position={[-0.12, 0.0, 0.1]}> 53 + <T.Mesh 54 + castShadow 55 + receiveShadow 56 + geometry={gltf.nodes.Mesh_cabinetBedDrawerTable.geometry} 57 + material={gltf.materials.wood.clone()} 58 + material.color={colors?.[0] ?? gltf.materials.wood.color} 59 + material.opacity={opacity ?? gltf.materials.wood.opacity} 60 + material.transparent={opacity !== undefined} 61 + /> 62 + <T.Mesh 63 + castShadow 64 + receiveShadow 65 + geometry={gltf.nodes.Mesh_cabinetBedDrawerTable_1.geometry} 66 + material={gltf.materials._defaultMat} 67 + /> 68 + <T.Group position={[0.02, 0.17, -0.16]}> 69 + <T.Mesh 70 + castShadow 71 + receiveShadow 72 + geometry={gltf.nodes.Mesh_drawer.geometry} 73 + material={gltf.materials.wood.clone()} 74 + material.color={colors?.[0] ?? gltf.materials.wood.color} 75 + material.opacity={opacity ?? gltf.materials.wood.opacity} 76 + material.transparent={opacity !== undefined} 77 + /> 78 + <T.Mesh 79 + castShadow 80 + receiveShadow 81 + geometry={gltf.nodes.Mesh_drawer_1.geometry} 82 + material={gltf.materials.metal.clone()} 83 + material.color={colors?.[1] ?? gltf.materials.metal.color} 84 + material.opacity={opacity ?? gltf.materials.metal.opacity} 85 + material.transparent={opacity !== undefined} 86 + /> 87 + </T.Group> 88 + </T.Group> 89 + {:catch err} 90 + {@render error?.({ error: err })} 91 + {/await} 92 + 93 + {@render children?.({ ref })} 94 + </T.Group>
+62
src/lib/room/models/kenney-furniture-kit/chair.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/chair.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + colors, 19 + opacity, 20 + ref = $bindable(), 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + ['chair(Clone)']: THREE.Mesh; 34 + }; 35 + materials: { 36 + wood: THREE.MeshStandardMaterial; 37 + }; 38 + }; 39 + 40 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/chair.glb'); 41 + </script> 42 + 43 + <T.Group bind:ref dispose={false} {...props}> 44 + {#await gltf} 45 + {@render fallback?.()} 46 + {:then gltf} 47 + <T.Mesh 48 + castShadow 49 + receiveShadow 50 + geometry={gltf.nodes['chair(Clone)'].geometry} 51 + material={gltf.materials.wood.clone()} 52 + material.color={colors?.[0] ?? gltf.materials.wood.color} 53 + material.opacity={opacity ?? gltf.materials.wood.opacity} 54 + material.transparent={opacity !== undefined} 55 + position={[-0.1, 0.0, 0.1]} 56 + /> 57 + {:catch err} 58 + {@render error?.({ error: err })} 59 + {/await} 60 + 61 + {@render children?.({ ref })} 62 + </T.Group>
+74
src/lib/room/models/kenney-furniture-kit/chairCushion.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/chairCushion.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_chairCushion: THREE.Mesh; 34 + Mesh_chairCushion_1: THREE.Mesh; 35 + }; 36 + materials: { 37 + wood: THREE.MeshStandardMaterial; 38 + carpet: THREE.MeshStandardMaterial; 39 + }; 40 + }; 41 + 42 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/chairCushion.glb'); 43 + </script> 44 + 45 + <T.Group bind:ref dispose={false} {...props}> 46 + {#await gltf} 47 + {@render fallback?.()} 48 + {:then gltf} 49 + <T.Mesh 50 + castShadow 51 + receiveShadow 52 + geometry={gltf.nodes.Mesh_chairCushion.geometry} 53 + material={gltf.materials.wood.clone()} 54 + material.color={colors?.[0] ?? gltf.materials.wood.color} 55 + material.opacity={opacity ?? gltf.materials.wood.opacity} 56 + material.transparent={opacity !== undefined} 57 + position={[-0.1, 0.0, 0.1]} 58 + /> 59 + <T.Mesh 60 + castShadow 61 + receiveShadow 62 + geometry={gltf.nodes.Mesh_chairCushion_1.geometry} 63 + material={gltf.materials.carpet.clone()} 64 + material.color={colors?.[1] ?? gltf.materials.carpet.color} 65 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 66 + material.transparent={opacity !== undefined} 67 + position={[-0.1, 0.0, 0.1]} 68 + /> 69 + {:catch err} 70 + {@render error?.({ error: err })} 71 + {/await} 72 + 73 + {@render children?.({ ref })} 74 + </T.Group>
+107
src/lib/room/models/kenney-furniture-kit/chairDesk.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/chairDesk.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useCursor, useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + import { editorState } from '$lib/room/state.svelte'; 14 + import { Spring } from 'svelte/motion'; 15 + 16 + const { onPointerEnter, onPointerLeave } = useCursor(); 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + colors?: (number | string)[]; 31 + opacity?: number; 32 + } = $props(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + ['chairDesk(Clone)']: THREE.Mesh; 37 + Mesh_chair: THREE.Mesh; 38 + Mesh_chair_1: THREE.Mesh; 39 + }; 40 + materials: { 41 + metalMedium: THREE.MeshStandardMaterial; 42 + carpet: THREE.MeshStandardMaterial; 43 + }; 44 + }; 45 + 46 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/chairDesk.glb'); 47 + 48 + let rotation = new Spring(0, { 49 + stiffness: 0.1, 50 + damping: 0.6 51 + }); 52 + </script> 53 + 54 + <T.Group bind:ref dispose={false} {...props}> 55 + {#await gltf} 56 + {@render fallback?.()} 57 + {:then gltf} 58 + <T.Mesh 59 + castShadow 60 + receiveShadow 61 + geometry={gltf.nodes['chairDesk(Clone)'].geometry} 62 + material={gltf.materials.metalMedium.clone()} 63 + material.color={colors?.[0] ?? gltf.materials.metalMedium.color} 64 + material.opacity={opacity ?? gltf.materials.metalMedium.opacity} 65 + material.transparent={opacity !== undefined} 66 + position={[-0.16, 0.0, 0.16]} 67 + onclick={() => { 68 + if (editorState.isEditing) return; 69 + 70 + rotation.target += 1 + Math.random() * 2; 71 + }} 72 + onpointerenter={() => { 73 + if (editorState.isEditing) return; 74 + onPointerEnter(); 75 + }} 76 + onpointerleave={() => { 77 + if (editorState.isEditing) return; 78 + onPointerLeave(); 79 + }} 80 + > 81 + <T.Group position={[0.17, 0.19, -0.16]} rotation={[0, rotation.current, 0]}> 82 + <T.Mesh 83 + castShadow 84 + receiveShadow 85 + geometry={gltf.nodes.Mesh_chair.geometry} 86 + material={gltf.materials.carpet.clone()} 87 + material.color={colors?.[1] ?? gltf.materials.carpet.color} 88 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 89 + material.transparent={opacity !== undefined} 90 + /> 91 + <T.Mesh 92 + castShadow 93 + receiveShadow 94 + geometry={gltf.nodes.Mesh_chair_1.geometry} 95 + material={gltf.materials.metalMedium.clone()} 96 + material.color={colors?.[0] ?? gltf.materials.metalMedium.color} 97 + material.opacity={opacity ?? gltf.materials.metalMedium.opacity} 98 + material.transparent={opacity !== undefined} 99 + /> 100 + </T.Group> 101 + </T.Mesh> 102 + {:catch err} 103 + {@render error?.({ error: err })} 104 + {/await} 105 + 106 + {@render children?.({ ref })} 107 + </T.Group>
+74
src/lib/room/models/kenney-furniture-kit/chairModernCushion.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/chairModernCushion.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_chairModernCushion: THREE.Mesh; 34 + Mesh_chairModernCushion_1: THREE.Mesh; 35 + }; 36 + materials: { 37 + metal: THREE.MeshStandardMaterial; 38 + carpetBlue: THREE.MeshStandardMaterial; 39 + }; 40 + }; 41 + 42 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/chairModernCushion.glb'); 43 + </script> 44 + 45 + <T.Group bind:ref dispose={false} {...props}> 46 + {#await gltf} 47 + {@render fallback?.()} 48 + {:then gltf} 49 + <T.Mesh 50 + castShadow 51 + receiveShadow 52 + geometry={gltf.nodes.Mesh_chairModernCushion.geometry} 53 + material={gltf.materials.metal.clone()} 54 + material.color={colors?.[0] ?? gltf.materials.metal.color} 55 + material.opacity={opacity ?? gltf.materials.metal.opacity} 56 + material.transparent={opacity !== undefined} 57 + position={[-0.1, 0.0, 0.1]} 58 + /> 59 + <T.Mesh 60 + castShadow 61 + receiveShadow 62 + geometry={gltf.nodes.Mesh_chairModernCushion_1.geometry} 63 + material={gltf.materials.carpetBlue.clone()} 64 + material.color={colors?.[1] ?? gltf.materials.carpetBlue.color} 65 + material.opacity={opacity ?? gltf.materials.carpetBlue.opacity} 66 + material.transparent={opacity !== undefined} 67 + position={[-0.1, 0.0, 0.1]} 68 + /> 69 + {:catch err} 70 + {@render error?.({ error: err })} 71 + {/await} 72 + 73 + {@render children?.({ ref })} 74 + </T.Group>
+76
src/lib/room/models/kenney-furniture-kit/chairModernFrameCushion.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/chairModernFrameCushion.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_chairModernFrameCushion: THREE.Mesh; 34 + Mesh_chairModernFrameCushion_1: THREE.Mesh; 35 + }; 36 + materials: { 37 + metal: THREE.MeshStandardMaterial; 38 + carpetBlue: THREE.MeshStandardMaterial; 39 + }; 40 + }; 41 + 42 + const gltf = useGltf<GLTFResult>( 43 + base + '/models/kenney-furniture-kit/chairModernFrameCushion.glb' 44 + ); 45 + </script> 46 + 47 + <T.Group bind:ref dispose={false} {...props}> 48 + {#await gltf} 49 + {@render fallback?.()} 50 + {:then gltf} 51 + <T.Mesh 52 + castShadow 53 + receiveShadow 54 + geometry={gltf.nodes.Mesh_chairModernFrameCushion.geometry} 55 + material={gltf.materials.metal.clone()} 56 + material.color={colors?.[0] ?? gltf.materials.metal.color} 57 + material.opacity={opacity ?? gltf.materials.metal.opacity} 58 + material.transparent={opacity !== undefined} 59 + position={[-0.1, 0.0, 0.1]} 60 + /> 61 + <T.Mesh 62 + castShadow 63 + receiveShadow 64 + geometry={gltf.nodes.Mesh_chairModernFrameCushion_1.geometry} 65 + material={gltf.materials.carpetBlue.clone()} 66 + material.color={colors?.[1] ?? gltf.materials.carpetBlue.color} 67 + material.opacity={opacity ?? gltf.materials.carpetBlue.opacity} 68 + material.transparent={opacity !== undefined} 69 + position={[-0.1, 0.0, 0.1]} 70 + /> 71 + {:catch err} 72 + {@render error?.({ error: err })} 73 + {/await} 74 + 75 + {@render children?.({ ref })} 76 + </T.Group>
+62
src/lib/room/models/kenney-furniture-kit/chairRounded.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/chairRounded.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + ['chairRounded(Clone)']: THREE.Mesh; 34 + }; 35 + materials: { 36 + wood: THREE.MeshStandardMaterial; 37 + }; 38 + }; 39 + 40 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/chairRounded.glb'); 41 + </script> 42 + 43 + <T.Group bind:ref dispose={false} {...props}> 44 + {#await gltf} 45 + {@render fallback?.()} 46 + {:then gltf} 47 + <T.Mesh 48 + castShadow 49 + receiveShadow 50 + geometry={gltf.nodes['chairRounded(Clone)'].geometry} 51 + material={gltf.materials.wood.clone()} 52 + material.color={colors?.[0] ?? gltf.materials.wood.color} 53 + material.opacity={opacity ?? gltf.materials.wood.opacity} 54 + material.transparent={opacity !== undefined} 55 + position={[-0.1, 0.0, 0.1]} 56 + /> 57 + {:catch err} 58 + {@render error?.({ error: err })} 59 + {/await} 60 + 61 + {@render children?.({ ref })} 62 + </T.Group>
+61
src/lib/room/models/kenney-furniture-kit/coatRackStanding.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/coatRackStanding.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + colors, 19 + opacity, 20 + ref = $bindable(), 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + ['coatRackStanding(Clone)']: THREE.Mesh; 34 + }; 35 + materials: { 36 + wood: THREE.MeshStandardMaterial; 37 + }; 38 + }; 39 + 40 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/coatRackStanding.glb'); 41 + </script> 42 + 43 + <T.Group bind:ref dispose={false} {...props}> 44 + {#await gltf} 45 + {@render fallback?.()} 46 + {:then gltf} 47 + <T.Mesh 48 + castShadow 49 + receiveShadow 50 + geometry={gltf.nodes['coatRackStanding(Clone)'].geometry} 51 + material={gltf.materials.wood.clone()} 52 + material.color={colors?.[0] ?? gltf.materials.wood.color} 53 + material.opacity={opacity ?? gltf.materials.wood.opacity} 54 + material.transparent={opacity !== undefined} 55 + /> 56 + {:catch err} 57 + {@render error?.({ error: err })} 58 + {/await} 59 + 60 + {@render children?.({ ref })} 61 + </T.Group>
+86
src/lib/room/models/kenney-furniture-kit/desk.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/desk.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + colors, 19 + opacity, 20 + ref = $bindable(), 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + ['desk(Clone)']: THREE.Mesh; 34 + Mesh_drawer: THREE.Mesh; 35 + Mesh_drawer_1: THREE.Mesh; 36 + }; 37 + materials: { 38 + wood: THREE.MeshStandardMaterial; 39 + metal: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/desk.glb'); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh 51 + castShadow 52 + receiveShadow 53 + geometry={gltf.nodes['desk(Clone)'].geometry} 54 + material={gltf.materials.wood.clone()} 55 + material.color={colors?.[0] ?? gltf.materials.wood.color} 56 + material.opacity={opacity ?? gltf.materials.wood.opacity} 57 + material.transparent={opacity !== undefined} 58 + position={[-0.35, 0.0, 0.17]} 59 + > 60 + <T.Group position={[0.04, 0.27, -0.16]}> 61 + <T.Mesh 62 + castShadow 63 + receiveShadow 64 + geometry={gltf.nodes.Mesh_drawer.geometry} 65 + material={gltf.materials.wood.clone()} 66 + material.color={colors?.[0] ?? gltf.materials.wood.color} 67 + material.opacity={opacity ?? gltf.materials.wood.opacity} 68 + material.transparent={opacity !== undefined} 69 + /> 70 + <T.Mesh 71 + castShadow 72 + receiveShadow 73 + geometry={gltf.nodes.Mesh_drawer_1.geometry} 74 + material={gltf.materials.metal.clone()} 75 + material.color={colors?.[1] ?? gltf.materials.metal.color} 76 + material.opacity={opacity ?? gltf.materials.metal.opacity} 77 + material.transparent={opacity !== undefined} 78 + /> 79 + </T.Group> 80 + </T.Mesh> 81 + {:catch err} 82 + {@render error?.({ error: err })} 83 + {/await} 84 + 85 + {@render children?.({ ref })} 86 + </T.Group>
+86
src/lib/room/models/kenney-furniture-kit/deskCorner.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/deskCorner.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + ['deskCorner(Clone)']: THREE.Mesh; 34 + Mesh_drawer: THREE.Mesh; 35 + Mesh_drawer_1: THREE.Mesh; 36 + }; 37 + materials: { 38 + wood: THREE.MeshStandardMaterial; 39 + metal: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/deskCorner.glb'); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh 51 + castShadow 52 + receiveShadow 53 + geometry={gltf.nodes['deskCorner(Clone)'].geometry} 54 + material={gltf.materials.wood.clone()} 55 + material.color={colors?.[0] ?? gltf.materials.wood.color} 56 + material.opacity={opacity ?? gltf.materials.wood.opacity} 57 + material.transparent={opacity !== undefined} 58 + position={[-0.5, 0.0, 0.5]} 59 + > 60 + <T.Group position={[0.05, 0.27, -0.76]}> 61 + <T.Mesh 62 + castShadow 63 + receiveShadow 64 + geometry={gltf.nodes.Mesh_drawer.geometry} 65 + material={gltf.materials.wood.clone()} 66 + material.color={colors?.[0] ?? gltf.materials.wood.color} 67 + material.opacity={opacity ?? gltf.materials.wood.opacity} 68 + material.transparent={opacity !== undefined} 69 + /> 70 + <T.Mesh 71 + castShadow 72 + receiveShadow 73 + geometry={gltf.nodes.Mesh_drawer_1.geometry} 74 + material={gltf.materials.metal.clone()} 75 + material.color={colors?.[1] ?? gltf.materials.metal.color} 76 + material.opacity={opacity ?? gltf.materials.metal.opacity} 77 + material.transparent={opacity !== undefined} 78 + /> 79 + </T.Group> 80 + </T.Mesh> 81 + {:catch err} 82 + {@render error?.({ error: err })} 83 + {/await} 84 + 85 + {@render children?.({ ref })} 86 + </T.Group>
+86
src/lib/room/models/kenney-furniture-kit/doorway.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/doorway.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + ['doorway(Clone)']: THREE.Mesh; 34 + Mesh_door: THREE.Mesh; 35 + Mesh_door_1: THREE.Mesh; 36 + }; 37 + materials: { 38 + wood: THREE.MeshStandardMaterial; 39 + metal: THREE.MeshStandardMaterial; 40 + }; 41 + }; 42 + 43 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/doorway.glb'); 44 + </script> 45 + 46 + <T.Group bind:ref dispose={false} {...props}> 47 + {#await gltf} 48 + {@render fallback?.()} 49 + {:then gltf} 50 + <T.Mesh 51 + castShadow 52 + receiveShadow 53 + geometry={gltf.nodes['doorway(Clone)'].geometry} 54 + material={gltf.materials.wood.clone()} 55 + material.color={colors?.[1] ?? gltf.materials.wood.color} 56 + material.opacity={opacity ?? gltf.materials.wood.opacity} 57 + material.transparent={opacity !== undefined} 58 + position={[-0.23, 0.0, 0.0]} 59 + > 60 + <T.Group position={[0.03, 0, -0.04]}> 61 + <T.Mesh 62 + castShadow 63 + receiveShadow 64 + geometry={gltf.nodes.Mesh_door.geometry} 65 + material={gltf.materials.wood.clone()} 66 + material.color={colors?.[0] ?? gltf.materials.wood.color} 67 + material.opacity={opacity ?? gltf.materials.wood.opacity} 68 + material.transparent={opacity !== undefined} 69 + /> 70 + <T.Mesh 71 + castShadow 72 + receiveShadow 73 + geometry={gltf.nodes.Mesh_door_1.geometry} 74 + material={gltf.materials.metal.clone()} 75 + material.color={colors?.[2] ?? gltf.materials.metal.color} 76 + material.opacity={opacity ?? gltf.materials.metal.opacity} 77 + material.transparent={opacity !== undefined} 78 + /> 79 + </T.Group> 80 + </T.Mesh> 81 + {:catch err} 82 + {@render error?.({ error: err })} 83 + {/await} 84 + 85 + {@render children?.({ ref })} 86 + </T.Group>
+98
src/lib/room/models/kenney-furniture-kit/doorwayFront.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/doorwayFront.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + ['doorwayFront(Clone)']: THREE.Mesh; 34 + Mesh_door: THREE.Mesh; 35 + Mesh_door_1: THREE.Mesh; 36 + Mesh_door_2: THREE.Mesh; 37 + }; 38 + materials: { 39 + carpetWhite: THREE.MeshStandardMaterial; 40 + metal: THREE.MeshStandardMaterial; 41 + metalDark: THREE.MeshStandardMaterial; 42 + glass: THREE.MeshStandardMaterial; 43 + }; 44 + }; 45 + 46 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/doorwayFront.glb'); 47 + </script> 48 + 49 + <T.Group bind:ref dispose={false} {...props}> 50 + {#await gltf} 51 + {@render fallback?.()} 52 + {:then gltf} 53 + <T.Mesh 54 + castShadow 55 + receiveShadow 56 + geometry={gltf.nodes['doorwayFront(Clone)'].geometry} 57 + material={gltf.materials.carpetWhite.clone()} 58 + material.color={colors?.[0] ?? gltf.materials.carpetWhite.color} 59 + material.opacity={opacity ?? gltf.materials.carpetWhite.opacity} 60 + material.transparent={opacity !== undefined} 61 + position={[-0.23, 0.0, 0.0]} 62 + > 63 + <T.Group position={[0.03, 0, -0.04]}> 64 + <T.Mesh 65 + castShadow 66 + receiveShadow 67 + geometry={gltf.nodes.Mesh_door.geometry} 68 + material={gltf.materials.metal.clone()} 69 + material.color={colors?.[1] ?? gltf.materials.metal.color} 70 + material.opacity={opacity ?? gltf.materials.metal.opacity} 71 + material.transparent={opacity !== undefined} 72 + /> 73 + <T.Mesh 74 + castShadow 75 + receiveShadow 76 + geometry={gltf.nodes.Mesh_door_1.geometry} 77 + material={gltf.materials.metalDark.clone()} 78 + material.color={colors?.[2] ?? gltf.materials.metalDark.color} 79 + material.opacity={opacity ?? gltf.materials.metalDark.opacity} 80 + material.transparent={opacity !== undefined} 81 + /> 82 + <T.Mesh 83 + castShadow 84 + receiveShadow 85 + geometry={gltf.nodes.Mesh_door_2.geometry} 86 + material={gltf.materials.glass.clone()} 87 + material.color={colors?.[3] ?? gltf.materials.glass.color} 88 + material.opacity={opacity ?? gltf.materials.glass.opacity} 89 + material.transparent={opacity !== undefined} 90 + /> 91 + </T.Group> 92 + </T.Mesh> 93 + {:catch err} 94 + {@render error?.({ error: err })} 95 + {/await} 96 + 97 + {@render children?.({ ref })} 98 + </T.Group>
+96
src/lib/room/models/kenney-furniture-kit/dryer.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/dryer.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_dryer: THREE.Mesh; 34 + Mesh_dryer_1: THREE.Mesh; 35 + Mesh_dryer_2: THREE.Mesh; 36 + dryerDoor: THREE.Mesh; 37 + }; 38 + materials: { 39 + metalLight: THREE.MeshStandardMaterial; 40 + metalMedium: THREE.MeshStandardMaterial; 41 + metalDark: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/dryer.glb'); 46 + </script> 47 + 48 + <T.Group bind:ref dispose={false} {...props}> 49 + {#await gltf} 50 + {@render fallback?.()} 51 + {:then gltf} 52 + <T.Group position={[-0.2, 0.0, 0.15]}> 53 + <T.Mesh 54 + castShadow 55 + receiveShadow 56 + geometry={gltf.nodes.Mesh_dryer.geometry} 57 + material={gltf.materials.metalLight.clone()} 58 + material.color={colors?.[0] ?? gltf.materials.metalLight.color} 59 + material.opacity={opacity ?? gltf.materials.metalLight.opacity} 60 + material.transparent={opacity !== undefined} 61 + /> 62 + <T.Mesh 63 + castShadow 64 + receiveShadow 65 + geometry={gltf.nodes.Mesh_dryer_1.geometry} 66 + material={gltf.materials.metalMedium.clone()} 67 + material.color={colors?.[1] ?? gltf.materials.metalMedium.color} 68 + material.opacity={opacity ?? gltf.materials.metalMedium.opacity} 69 + material.transparent={opacity !== undefined} 70 + /> 71 + <T.Mesh 72 + castShadow 73 + receiveShadow 74 + geometry={gltf.nodes.Mesh_dryer_2.geometry} 75 + material={gltf.materials.metalDark.clone()} 76 + material.color={colors?.[2] ?? gltf.materials.metalDark.color} 77 + material.opacity={opacity ?? gltf.materials.metalDark.opacity} 78 + material.transparent={opacity !== undefined} 79 + /> 80 + <T.Mesh 81 + castShadow 82 + receiveShadow 83 + geometry={gltf.nodes.dryerDoor.geometry} 84 + material={gltf.materials.metalLight.clone()} 85 + material.color={colors?.[0] ?? gltf.materials.metalLight.color} 86 + material.opacity={opacity ?? gltf.materials.metalLight.opacity} 87 + material.transparent={opacity !== undefined} 88 + position={[0.07, 0.23, 0]} 89 + /> 90 + </T.Group> 91 + {:catch err} 92 + {@render error?.({ error: err })} 93 + {/await} 94 + 95 + {@render children?.({ ref })} 96 + </T.Group>
+85
src/lib/room/models/kenney-furniture-kit/kitchenBar.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/kitchenBar.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + colors, 19 + opacity, 20 + ref = $bindable(), 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_kitchenBar: THREE.Mesh; 34 + Mesh_kitchenBar_1: THREE.Mesh; 35 + Mesh_kitchenBar_2: THREE.Mesh; 36 + }; 37 + materials: { 38 + wood: THREE.MeshStandardMaterial; 39 + metal: THREE.MeshStandardMaterial; 40 + woodDark: THREE.MeshStandardMaterial; 41 + }; 42 + }; 43 + 44 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/kitchenBar.glb'); 45 + </script> 46 + 47 + <T.Group bind:ref dispose={false} {...props}> 48 + {#await gltf} 49 + {@render fallback?.()} 50 + {:then gltf} 51 + <T.Group position={[-0.22, 0.0, 0.1]}> 52 + <T.Mesh 53 + castShadow 54 + receiveShadow 55 + geometry={gltf.nodes.Mesh_kitchenBar.geometry} 56 + material={gltf.materials.wood.clone()} 57 + material.color={colors?.[0] ?? gltf.materials.wood.color} 58 + material.opacity={opacity ?? gltf.materials.wood.opacity} 59 + material.transparent={opacity !== undefined} 60 + /> 61 + <T.Mesh 62 + castShadow 63 + receiveShadow 64 + geometry={gltf.nodes.Mesh_kitchenBar_1.geometry} 65 + material={gltf.materials.metal.clone()} 66 + material.color={colors?.[1] ?? gltf.materials.metal.color} 67 + material.opacity={opacity ?? gltf.materials.metal.opacity} 68 + material.transparent={opacity !== undefined} 69 + /> 70 + <T.Mesh 71 + castShadow 72 + receiveShadow 73 + geometry={gltf.nodes.Mesh_kitchenBar_2.geometry} 74 + material={gltf.materials.woodDark.clone()} 75 + material.color={colors?.[2] ?? gltf.materials.woodDark.color} 76 + material.opacity={opacity ?? gltf.materials.woodDark.opacity} 77 + material.transparent={opacity !== undefined} 78 + /> 79 + </T.Group> 80 + {:catch err} 81 + {@render error?.({ error: err })} 82 + {/await} 83 + 84 + {@render children?.({ ref })} 85 + </T.Group>
+107
src/lib/room/models/kenney-furniture-kit/kitchenCabinet.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/kitchenCabinet.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + colors, 19 + opacity, 20 + ref = $bindable(), 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_kitchenCabinet: THREE.Mesh; 34 + Mesh_kitchenCabinet_1: THREE.Mesh; 35 + Mesh_door: THREE.Mesh; 36 + Mesh_door_1: THREE.Mesh; 37 + Mesh_door_2: THREE.Mesh; 38 + }; 39 + materials: { 40 + metal: THREE.MeshStandardMaterial; 41 + wood: THREE.MeshStandardMaterial; 42 + woodDark: THREE.MeshStandardMaterial; 43 + }; 44 + }; 45 + 46 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/kitchenCabinet.glb'); 47 + </script> 48 + 49 + <T.Group bind:ref dispose={false} {...props}> 50 + {#await gltf} 51 + {@render fallback?.()} 52 + {:then gltf} 53 + <T.Group position={[-0.23, 0.0, 0.2]}> 54 + <T.Mesh 55 + castShadow 56 + receiveShadow 57 + geometry={gltf.nodes.Mesh_kitchenCabinet.geometry} 58 + material={gltf.materials.metal.clone()} 59 + material.color={colors?.[0] ?? gltf.materials.metal.color} 60 + material.opacity={opacity ?? gltf.materials.metal.opacity} 61 + material.transparent={opacity !== undefined} 62 + /> 63 + <T.Mesh 64 + castShadow 65 + receiveShadow 66 + geometry={gltf.nodes.Mesh_kitchenCabinet_1.geometry} 67 + material={gltf.materials.wood.clone()} 68 + material.color={colors?.[1] ?? gltf.materials.wood.color} 69 + material.opacity={opacity ?? gltf.materials.wood.opacity} 70 + material.transparent={opacity !== undefined} 71 + /> 72 + <T.Group position={[0.03, 0.09, -0.03]}> 73 + <T.Mesh 74 + castShadow 75 + receiveShadow 76 + geometry={gltf.nodes.Mesh_door.geometry} 77 + material={gltf.materials.wood.clone()} 78 + material.color={colors?.[1] ?? gltf.materials.wood.color} 79 + material.opacity={opacity ?? gltf.materials.wood.opacity} 80 + material.transparent={opacity !== undefined} 81 + /> 82 + <T.Mesh 83 + castShadow 84 + receiveShadow 85 + geometry={gltf.nodes.Mesh_door_1.geometry} 86 + material={gltf.materials.woodDark.clone()} 87 + material.color={colors?.[2] ?? gltf.materials.woodDark.color} 88 + material.opacity={opacity ?? gltf.materials.woodDark.opacity} 89 + material.transparent={opacity !== undefined} 90 + /> 91 + <T.Mesh 92 + castShadow 93 + receiveShadow 94 + geometry={gltf.nodes.Mesh_door_2.geometry} 95 + material={gltf.materials.metal.clone()} 96 + material.color={colors?.[0] ?? gltf.materials.metal.color} 97 + material.opacity={opacity ?? gltf.materials.metal.opacity} 98 + material.transparent={opacity !== undefined} 99 + /> 100 + </T.Group> 101 + </T.Group> 102 + {:catch err} 103 + {@render error?.({ error: err })} 104 + {/await} 105 + 106 + {@render children?.({ ref })} 107 + </T.Group>
+139
src/lib/room/models/kenney-furniture-kit/kitchenCabinetDrawer.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/kitchenCabinetDrawer.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_kitchenCabinetDrawer: THREE.Mesh; 34 + Mesh_kitchenCabinetDrawer_1: THREE.Mesh; 35 + Mesh_door: THREE.Mesh; 36 + Mesh_door_1: THREE.Mesh; 37 + Mesh_door_2: THREE.Mesh; 38 + Mesh_drawer: THREE.Mesh; 39 + Mesh_drawer_1: THREE.Mesh; 40 + Mesh_drawer_2: THREE.Mesh; 41 + }; 42 + materials: { 43 + metal: THREE.MeshStandardMaterial; 44 + wood: THREE.MeshStandardMaterial; 45 + woodDark: THREE.MeshStandardMaterial; 46 + }; 47 + }; 48 + 49 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/kitchenCabinetDrawer.glb'); 50 + </script> 51 + 52 + <T.Group bind:ref dispose={false} {...props}> 53 + {#await gltf} 54 + {@render fallback?.()} 55 + {:then gltf} 56 + <T.Group position={[-0.23, 0.0, 0.2]}> 57 + <T.Mesh 58 + castShadow 59 + receiveShadow 60 + geometry={gltf.nodes.Mesh_kitchenCabinetDrawer.geometry} 61 + material={gltf.materials.metal.clone()} 62 + material.color={colors?.[0] ?? gltf.materials.metal.color} 63 + material.opacity={opacity ?? gltf.materials.metal.opacity} 64 + material.transparent={opacity !== undefined} 65 + /> 66 + <T.Mesh 67 + castShadow 68 + receiveShadow 69 + geometry={gltf.nodes.Mesh_kitchenCabinetDrawer_1.geometry} 70 + material={gltf.materials.wood.clone()} 71 + material.color={colors?.[1] ?? gltf.materials.wood.color} 72 + material.opacity={opacity ?? gltf.materials.wood.opacity} 73 + material.transparent={opacity !== undefined} 74 + /> 75 + <T.Group position={[0.03, 0.09, -0.03]}> 76 + <T.Mesh 77 + castShadow 78 + receiveShadow 79 + geometry={gltf.nodes.Mesh_door.geometry} 80 + material={gltf.materials.wood.clone()} 81 + material.color={colors?.[1] ?? gltf.materials.wood.color} 82 + material.opacity={opacity ?? gltf.materials.wood.opacity} 83 + material.transparent={opacity !== undefined} 84 + /> 85 + <T.Mesh 86 + castShadow 87 + receiveShadow 88 + geometry={gltf.nodes.Mesh_door_1.geometry} 89 + material={gltf.materials.woodDark.clone()} 90 + material.color={colors?.[2] ?? gltf.materials.woodDark.color} 91 + material.opacity={opacity ?? gltf.materials.woodDark.opacity} 92 + material.transparent={opacity !== undefined} 93 + /> 94 + <T.Mesh 95 + castShadow 96 + receiveShadow 97 + geometry={gltf.nodes.Mesh_door_2.geometry} 98 + material={gltf.materials.metal.clone()} 99 + material.color={colors?.[0] ?? gltf.materials.metal.color} 100 + material.opacity={opacity ?? gltf.materials.metal.opacity} 101 + material.transparent={opacity !== undefined} 102 + /> 103 + </T.Group> 104 + <T.Group position={[0.03, 0.28, -0.02]}> 105 + <T.Mesh 106 + castShadow 107 + receiveShadow 108 + geometry={gltf.nodes.Mesh_drawer.geometry} 109 + material={gltf.materials.woodDark.clone()} 110 + material.color={colors?.[2] ?? gltf.materials.woodDark.color} 111 + material.opacity={opacity ?? gltf.materials.woodDark.opacity} 112 + material.transparent={opacity !== undefined} 113 + /> 114 + <T.Mesh 115 + castShadow 116 + receiveShadow 117 + geometry={gltf.nodes.Mesh_drawer_1.geometry} 118 + material={gltf.materials.wood.clone()} 119 + material.color={colors?.[1] ?? gltf.materials.wood.color} 120 + material.opacity={opacity ?? gltf.materials.wood.opacity} 121 + material.transparent={opacity !== undefined} 122 + /> 123 + <T.Mesh 124 + castShadow 125 + receiveShadow 126 + geometry={gltf.nodes.Mesh_drawer_2.geometry} 127 + material={gltf.materials.metal.clone()} 128 + material.color={colors?.[0] ?? gltf.materials.metal.color} 129 + material.opacity={opacity ?? gltf.materials.metal.opacity} 130 + material.transparent={opacity !== undefined} 131 + /> 132 + </T.Group> 133 + </T.Group> 134 + {:catch err} 135 + {@render error?.({ error: err })} 136 + {/await} 137 + 138 + {@render children?.({ ref })} 139 + </T.Group>
+101
src/lib/room/models/kenney-furniture-kit/lampRoundFloor.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/lampRoundFloor.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useCursor, useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + import { editorState } from '$lib/room/state.svelte'; 14 + 15 + const { onPointerEnter, onPointerLeave } = useCursor(); 16 + 17 + let { 18 + fallback, 19 + error, 20 + children, 21 + ref = $bindable(), 22 + colors, 23 + opacity, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + colors?: (number | string)[]; 31 + opacity?: number; 32 + } = $props(); 33 + 34 + type GLTFResult = { 35 + nodes: { 36 + Mesh_lampRoundFloor: THREE.Mesh; 37 + Mesh_lampRoundFloor_1: THREE.Mesh; 38 + }; 39 + materials: { 40 + metal: THREE.MeshStandardMaterial; 41 + lamp: THREE.MeshStandardMaterial; 42 + }; 43 + }; 44 + 45 + let lampOn = $state(true); 46 + 47 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/lampRoundFloor.glb'); 48 + </script> 49 + 50 + <T.Group bind:ref dispose={false} {...props}> 51 + {#await gltf} 52 + {@render fallback?.()} 53 + {:then gltf} 54 + <T.Group 55 + onclick={() => { 56 + if (editorState.isEditing) return; 57 + lampOn = !lampOn; 58 + }} 59 + onpointerenter={() => { 60 + if (editorState.isEditing) return; 61 + onPointerEnter(); 62 + }} 63 + onpointerleave={() => { 64 + if (editorState.isEditing) return; 65 + onPointerLeave(); 66 + }} 67 + > 68 + <T.Mesh 69 + castShadow 70 + receiveShadow 71 + geometry={gltf.nodes.Mesh_lampRoundFloor.geometry} 72 + material={gltf.materials.metal.clone()} 73 + material.color={colors?.[0] ?? gltf.materials.metal.color} 74 + material.opacity={opacity ?? gltf.materials.metal.opacity} 75 + material.transparent={opacity !== undefined} 76 + position={[-0.05, 0, 0.05]} 77 + /> 78 + <T.Mesh 79 + castShadow 80 + receiveShadow 81 + geometry={gltf.nodes.Mesh_lampRoundFloor_1.geometry} 82 + material={gltf.materials.lamp.clone()} 83 + material.emissive={colors?.[1] ?? '#ffffff'} 84 + material.opacity={opacity ?? gltf.materials.lamp.opacity} 85 + material.transparent={opacity !== undefined} 86 + position={[-0.05, 0, 0.05]} 87 + /> 88 + 89 + <T.PointLight 90 + position={[0, 1, 0]} 91 + castShadow 92 + color={colors?.[1] ?? '#ffffff'} 93 + intensity={lampOn ? 1 : 0} 94 + /> 95 + </T.Group> 96 + {:catch err} 97 + {@render error?.({ error: err })} 98 + {/await} 99 + 100 + {@render children?.({ ref })} 101 + </T.Group>
+74
src/lib/room/models/kenney-furniture-kit/loungeChair.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/loungeChair.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_loungeChair: THREE.Mesh; 34 + Mesh_loungeChair_1: THREE.Mesh; 35 + }; 36 + materials: { 37 + carpet: THREE.MeshStandardMaterial; 38 + wood: THREE.MeshStandardMaterial; 39 + }; 40 + }; 41 + 42 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/loungeChair.glb'); 43 + </script> 44 + 45 + <T.Group bind:ref dispose={false} {...props}> 46 + {#await gltf} 47 + {@render fallback?.()} 48 + {:then gltf} 49 + <T.Mesh 50 + castShadow 51 + receiveShadow 52 + geometry={gltf.nodes.Mesh_loungeChair.geometry} 53 + material={gltf.materials.carpet.clone()} 54 + material.color={colors?.[0] ?? gltf.materials.carpet.color} 55 + position={[-0.25, 0, 0.25]} 56 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 57 + material.transparent={opacity !== undefined} 58 + /> 59 + <T.Mesh 60 + castShadow 61 + receiveShadow 62 + geometry={gltf.nodes.Mesh_loungeChair_1.geometry} 63 + material={gltf.materials.wood.clone()} 64 + material.color={colors?.[1] ?? gltf.materials.wood.color} 65 + position={[-0.25, 0, 0.25]} 66 + material.opacity={opacity ?? gltf.materials.wood.opacity} 67 + material.transparent={opacity !== undefined} 68 + /> 69 + {:catch err} 70 + {@render error?.({ error: err })} 71 + {/await} 72 + 73 + {@render children?.({ ref })} 74 + </T.Group>
+74
src/lib/room/models/kenney-furniture-kit/loungeSofa.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/loungeSofa.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + colors, 19 + opacity, 20 + ref = $bindable(), 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_loungeSofa: THREE.Mesh; 34 + Mesh_loungeSofa_1: THREE.Mesh; 35 + }; 36 + materials: { 37 + carpet: THREE.MeshStandardMaterial; 38 + wood: THREE.MeshStandardMaterial; 39 + }; 40 + }; 41 + 42 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/loungeSofa.glb'); 43 + </script> 44 + 45 + <T.Group bind:ref dispose={false} {...props}> 46 + {#await gltf} 47 + {@render fallback?.()} 48 + {:then gltf} 49 + <T.Mesh 50 + castShadow 51 + receiveShadow 52 + geometry={gltf.nodes.Mesh_loungeSofa.geometry} 53 + material={gltf.materials.carpet.clone()} 54 + material.color={colors?.[0] ?? gltf.materials.carpet.color} 55 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 56 + material.transparent={opacity !== undefined} 57 + position={[-0.5, 0, 0.25]} 58 + /> 59 + <T.Mesh 60 + castShadow 61 + receiveShadow 62 + geometry={gltf.nodes.Mesh_loungeSofa_1.geometry} 63 + material={gltf.materials.wood.clone()} 64 + material.color={colors?.[1] ?? gltf.materials.wood.color} 65 + material.opacity={opacity ?? gltf.materials.wood.opacity} 66 + material.transparent={opacity !== undefined} 67 + position={[-0.5, 0, 0.25]} 68 + /> 69 + {:catch err} 70 + {@render error?.({ error: err })} 71 + {/await} 72 + 73 + {@render children?.({ ref })} 74 + </T.Group>
+87
src/lib/room/models/kenney-furniture-kit/pottedPlant.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/pottedPlant.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_pottedPlant: THREE.Mesh; 34 + Mesh_pottedPlant_1: THREE.Mesh; 35 + plant: THREE.Mesh; 36 + }; 37 + materials: { 38 + wood: THREE.MeshStandardMaterial; 39 + woodDark: THREE.MeshStandardMaterial; 40 + plant: THREE.MeshStandardMaterial; 41 + }; 42 + }; 43 + 44 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/pottedPlant.glb'); 45 + </script> 46 + 47 + <T.Group bind:ref dispose={false} {...props}> 48 + {#await gltf} 49 + {@render fallback?.()} 50 + {:then gltf} 51 + <T.Group scale={2}> 52 + <T.Mesh 53 + castShadow 54 + receiveShadow 55 + geometry={gltf.nodes.Mesh_pottedPlant.geometry} 56 + material={gltf.materials.wood.clone()} 57 + material.color={colors?.[0] ?? gltf.materials.wood.color} 58 + material.opacity={opacity ?? gltf.materials.wood.opacity} 59 + material.transparent={opacity !== undefined} 60 + /> 61 + <T.Mesh 62 + castShadow 63 + receiveShadow 64 + geometry={gltf.nodes.Mesh_pottedPlant_1.geometry} 65 + material={gltf.materials.woodDark.clone()} 66 + material.color={colors?.[1] ?? gltf.materials.woodDark.color} 67 + material.opacity={opacity ?? gltf.materials.woodDark.opacity} 68 + material.transparent={opacity !== undefined} 69 + /> 70 + <T.Mesh 71 + castShadow 72 + receiveShadow 73 + geometry={gltf.nodes.plant.geometry} 74 + material={gltf.materials.plant.clone()} 75 + material.color={colors?.[2] ?? gltf.materials.plant.color} 76 + material.opacity={opacity ?? gltf.materials.plant.opacity} 77 + material.transparent={opacity !== undefined} 78 + position={[-0.05, 0.06, 0.06]} 79 + scale={0.5} 80 + /> 81 + </T.Group> 82 + {:catch err} 83 + {@render error?.({ error: err })} 84 + {/await} 85 + 86 + {@render children?.({ ref })} 87 + </T.Group>
+62
src/lib/room/models/kenney-furniture-kit/rugDoormat.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/rugDoormat.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: string[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + ['rugDoormat(Clone)']: THREE.Mesh; 34 + }; 35 + materials: { 36 + wood: THREE.MeshStandardMaterial; 37 + }; 38 + }; 39 + 40 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/rugDoormat.glb'); 41 + </script> 42 + 43 + <T.Group bind:ref dispose={false} {...props}> 44 + {#await gltf} 45 + {@render fallback?.()} 46 + {:then gltf} 47 + <T.Mesh 48 + castShadow 49 + receiveShadow 50 + geometry={gltf.nodes['rugDoormat(Clone)'].geometry} 51 + material={gltf.materials.wood.clone()} 52 + material.color={colors?.[0] ?? gltf.materials.wood.color} 53 + material.opacity={opacity ?? gltf.materials.wood.opacity} 54 + material.transparent={opacity !== undefined} 55 + position={[-0.22, 0, 0.11]} 56 + /> 57 + {:catch err} 58 + {@render error?.({ error: err })} 59 + {/await} 60 + 61 + {@render children?.({ ref })} 62 + </T.Group>
+74
src/lib/room/models/kenney-furniture-kit/rugRectangle.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/rugRectangle.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: string[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_rugRectangle: THREE.Mesh; 34 + Mesh_rugRectangle_1: THREE.Mesh; 35 + }; 36 + materials: { 37 + carpet: THREE.MeshStandardMaterial; 38 + carpetDarker: THREE.MeshStandardMaterial; 39 + }; 40 + }; 41 + 42 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/rugRectangle.glb'); 43 + </script> 44 + 45 + <T.Group bind:ref dispose={false} {...props}> 46 + {#await gltf} 47 + {@render fallback?.()} 48 + {:then gltf} 49 + <T.Group position={[-0.8, 0, 0.44]}> 50 + <T.Mesh 51 + castShadow 52 + receiveShadow 53 + geometry={gltf.nodes.Mesh_rugRectangle.geometry} 54 + material={gltf.materials.carpet.clone()} 55 + material.color={colors?.[0] ?? gltf.materials.carpet.color} 56 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 57 + material.transparent={opacity !== undefined} 58 + /> 59 + <T.Mesh 60 + castShadow 61 + receiveShadow 62 + geometry={gltf.nodes.Mesh_rugRectangle_1.geometry} 63 + material={gltf.materials.carpetDarker.clone()} 64 + material.color={colors?.[1] ?? gltf.materials.carpetDarker.color} 65 + material.opacity={opacity ?? gltf.materials.carpetDarker.opacity} 66 + material.transparent={opacity !== undefined} 67 + /> 68 + </T.Group> 69 + {:catch err} 70 + {@render error?.({ error: err })} 71 + {/await} 72 + 73 + {@render children?.({ ref })} 74 + </T.Group>
+74
src/lib/room/models/kenney-furniture-kit/rugRound.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/rugRound.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: string[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_rugRound: THREE.Mesh; 34 + Mesh_rugRound_1: THREE.Mesh; 35 + }; 36 + materials: { 37 + carpet: THREE.MeshStandardMaterial; 38 + carpetDarker: THREE.MeshStandardMaterial; 39 + }; 40 + }; 41 + 42 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/rugRound.glb'); 43 + </script> 44 + 45 + <T.Group bind:ref dispose={false} {...props}> 46 + {#await gltf} 47 + {@render fallback?.()} 48 + {:then gltf} 49 + <T.Group position={[-0.45, 0, 0.45]}> 50 + <T.Mesh 51 + castShadow 52 + receiveShadow 53 + geometry={gltf.nodes.Mesh_rugRound.geometry} 54 + material={gltf.materials.carpet.clone()} 55 + material.color={colors?.[0] ?? gltf.materials.carpet.color} 56 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 57 + material.transparent={opacity !== undefined} 58 + /> 59 + <T.Mesh 60 + castShadow 61 + receiveShadow 62 + geometry={gltf.nodes.Mesh_rugRound_1.geometry} 63 + material={gltf.materials.carpetDarker.clone()} 64 + material.color={colors?.[1] ?? gltf.materials.carpetDarker.color} 65 + material.opacity={opacity ?? gltf.materials.carpetDarker.opacity} 66 + material.transparent={opacity !== undefined} 67 + /> 68 + </T.Group> 69 + {:catch err} 70 + {@render error?.({ error: err })} 71 + {/await} 72 + 73 + {@render children?.({ ref })} 74 + </T.Group>
+74
src/lib/room/models/kenney-furniture-kit/rugRounded.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/rugRounded.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: string[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_rugRounded: THREE.Mesh; 34 + Mesh_rugRounded_1: THREE.Mesh; 35 + }; 36 + materials: { 37 + carpetDarker: THREE.MeshStandardMaterial; 38 + carpet: THREE.MeshStandardMaterial; 39 + }; 40 + }; 41 + 42 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/rugRounded.glb'); 43 + </script> 44 + 45 + <T.Group bind:ref dispose={false} {...props}> 46 + {#await gltf} 47 + {@render fallback?.()} 48 + {:then gltf} 49 + <T.Group position={[-0.75, 0, 0.45]}> 50 + <T.Mesh 51 + castShadow 52 + receiveShadow 53 + geometry={gltf.nodes.Mesh_rugRounded.geometry} 54 + material={gltf.materials.carpetDarker.clone()} 55 + material.color={colors?.[1] ?? gltf.materials.carpetDarker.color} 56 + material.opacity={opacity ?? gltf.materials.carpetDarker.opacity} 57 + material.transparent={opacity !== undefined} 58 + /> 59 + <T.Mesh 60 + castShadow 61 + receiveShadow 62 + geometry={gltf.nodes.Mesh_rugRounded_1.geometry} 63 + material={gltf.materials.carpet.clone()} 64 + material.color={colors?.[0] ?? gltf.materials.carpet.color} 65 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 66 + material.transparent={opacity !== undefined} 67 + /> 68 + </T.Group> 69 + {:catch err} 70 + {@render error?.({ error: err })} 71 + {/await} 72 + 73 + {@render children?.({ ref })} 74 + </T.Group>
+74
src/lib/room/models/kenney-furniture-kit/rugSquare.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/rugSquare.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: string[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_rugSquare: THREE.Mesh; 34 + Mesh_rugSquare_1: THREE.Mesh; 35 + }; 36 + materials: { 37 + carpet: THREE.MeshStandardMaterial; 38 + carpetDarker: THREE.MeshStandardMaterial; 39 + }; 40 + }; 41 + 42 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/rugSquare.glb'); 43 + </script> 44 + 45 + <T.Group bind:ref dispose={false} {...props}> 46 + {#await gltf} 47 + {@render fallback?.()} 48 + {:then gltf} 49 + <T.Group position={[-0.45, 0, 0.45]}> 50 + <T.Mesh 51 + castShadow 52 + receiveShadow 53 + geometry={gltf.nodes.Mesh_rugSquare.geometry} 54 + material={gltf.materials.carpet.clone()} 55 + material.color={colors?.[0] ?? gltf.materials.carpet.color} 56 + material.opacity={opacity ?? gltf.materials.carpet.opacity} 57 + material.transparent={opacity !== undefined} 58 + /> 59 + <T.Mesh 60 + castShadow 61 + receiveShadow 62 + geometry={gltf.nodes.Mesh_rugSquare_1.geometry} 63 + material={gltf.materials.carpetDarker.clone()} 64 + material.color={colors?.[1] ?? gltf.materials.carpetDarker.color} 65 + material.opacity={opacity ?? gltf.materials.carpetDarker.opacity} 66 + material.transparent={opacity !== undefined} 67 + /> 68 + </T.Group> 69 + {:catch err} 70 + {@render error?.({ error: err })} 71 + {/await} 72 + 73 + {@render children?.({ ref })} 74 + </T.Group>
+74
src/lib/room/models/kenney-furniture-kit/sideTable.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/sideTable.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + colors, 19 + opacity, 20 + ref = $bindable(), 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + Mesh_sideTable: THREE.Mesh; 34 + Mesh_sideTable_1: THREE.Mesh; 35 + }; 36 + materials: { 37 + wood: THREE.MeshStandardMaterial; 38 + _defaultMat: THREE.MeshStandardMaterial; 39 + }; 40 + }; 41 + 42 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/sideTable.glb'); 43 + </script> 44 + 45 + <T.Group bind:ref dispose={false} {...props}> 46 + {#await gltf} 47 + {@render fallback?.()} 48 + {:then gltf} 49 + <T.Mesh 50 + castShadow 51 + receiveShadow 52 + geometry={gltf.nodes.Mesh_sideTable.geometry} 53 + material={gltf.materials.wood.clone()} 54 + material.color={colors?.[0] ?? gltf.materials.wood.color} 55 + material.opacity={opacity ?? gltf.materials.wood.opacity} 56 + material.transparent={opacity !== undefined} 57 + position={[-0.25, 0, 0.1]} 58 + /> 59 + <T.Mesh 60 + castShadow 61 + receiveShadow 62 + geometry={gltf.nodes.Mesh_sideTable_1.geometry} 63 + material={gltf.materials._defaultMat.clone()} 64 + material.color={colors?.[1] ?? gltf.materials._defaultMat.color} 65 + material.opacity={opacity ?? gltf.materials._defaultMat.opacity} 66 + material.transparent={opacity !== undefined} 67 + position={[-0.25, 0, 0.1]} 68 + /> 69 + {:catch err} 70 + {@render error?.({ error: err })} 71 + {/await} 72 + 73 + {@render children?.({ ref })} 74 + </T.Group>
+62
src/lib/room/models/kenney-furniture-kit/table.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/table.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + 14 + let { 15 + fallback, 16 + error, 17 + children, 18 + ref = $bindable(), 19 + colors, 20 + opacity, 21 + ...props 22 + }: Props<THREE.Group> & { 23 + ref?: THREE.Group; 24 + children?: Snippet<[{ ref: THREE.Group }]>; 25 + fallback?: Snippet; 26 + error?: Snippet<[{ error: Error }]>; 27 + colors?: (number | string)[]; 28 + opacity?: number; 29 + } = $props(); 30 + 31 + type GLTFResult = { 32 + nodes: { 33 + ['table(Clone)']: THREE.Mesh; 34 + }; 35 + materials: { 36 + wood: THREE.MeshStandardMaterial; 37 + }; 38 + }; 39 + 40 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/table.glb'); 41 + </script> 42 + 43 + <T.Group bind:ref dispose={false} {...props}> 44 + {#await gltf} 45 + {@render fallback?.()} 46 + {:then gltf} 47 + <T.Mesh 48 + castShadow 49 + receiveShadow 50 + geometry={gltf.nodes['table(Clone)'].geometry} 51 + material={gltf.materials.wood.clone()} 52 + material.color={colors?.[0] ?? gltf.materials.wood.color} 53 + material.opacity={opacity ?? gltf.materials.wood.opacity} 54 + material.transparent={opacity !== undefined} 55 + position={[-0.4, 0, 0.2]} 56 + /> 57 + {:catch err} 58 + {@render error?.({ error: err })} 59 + {/await} 60 + 61 + {@render children?.({ ref })} 62 + </T.Group>
+99
src/lib/room/models/kenney-furniture-kit/televisionModern.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 static/models/kenney-furniture-kit/televisionModern.glb -t -s 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useCursor, useGltf } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + import Youtube from '$lib/room/Youtube.svelte'; 14 + import { editorState } from '$lib/room/state.svelte'; 15 + 16 + let { 17 + fallback, 18 + error, 19 + children, 20 + ref = $bindable(), 21 + colors, 22 + opacity, 23 + videoId, 24 + ...props 25 + }: Props<THREE.Group> & { 26 + ref?: THREE.Group; 27 + children?: Snippet<[{ ref: THREE.Group }]>; 28 + fallback?: Snippet; 29 + error?: Snippet<[{ error: Error }]>; 30 + colors?: (number | string)[]; 31 + opacity?: number; 32 + videoId?: string; 33 + } = $props(); 34 + 35 + type GLTFResult = { 36 + nodes: { 37 + Mesh_televisionModern: THREE.Mesh; 38 + Mesh_televisionModern_1: THREE.Mesh; 39 + }; 40 + materials: { 41 + metalDark: THREE.MeshStandardMaterial; 42 + metal: THREE.MeshStandardMaterial; 43 + }; 44 + }; 45 + 46 + let playPause: (() => void) | undefined = $state(); 47 + 48 + const { onPointerEnter, onPointerLeave } = useCursor(); 49 + 50 + const gltf = useGltf<GLTFResult>(base + '/models/kenney-furniture-kit/televisionModern.glb'); 51 + </script> 52 + 53 + <T.Group bind:ref dispose={false} {...props}> 54 + {#await gltf} 55 + {@render fallback?.()} 56 + {:then gltf} 57 + <T.Group 58 + onclick={() => { 59 + if (editorState.isEditing) return; 60 + playPause?.(); 61 + }} 62 + onpointerenter={() => { 63 + if (editorState.isEditing) return; 64 + onPointerEnter(); 65 + }} 66 + onpointerleave={() => { 67 + if (editorState.isEditing) return; 68 + onPointerLeave(); 69 + }} 70 + > 71 + <T.Mesh 72 + castShadow 73 + receiveShadow 74 + geometry={gltf.nodes.Mesh_televisionModern.geometry} 75 + material={gltf.materials.metalDark.clone()} 76 + material.color={colors?.[0] ?? gltf.materials.metalDark.color} 77 + material.opacity={opacity ?? gltf.materials.metalDark.opacity} 78 + material.transparent={opacity !== undefined} 79 + /> 80 + {#if !videoId || editorState.isEditing} 81 + <T.Mesh 82 + castShadow 83 + receiveShadow 84 + geometry={gltf.nodes.Mesh_televisionModern_1.geometry} 85 + material={gltf.materials.metal.clone()} 86 + material.color={colors?.[1] ?? gltf.materials.metal.color} 87 + material.opacity={opacity ?? gltf.materials.metal.opacity} 88 + material.transparent={opacity !== undefined} 89 + /> 90 + {:else} 91 + <Youtube position={[0, 0.26, 0.025]} {videoId} bind:playPause /> 92 + {/if} 93 + </T.Group> 94 + {:catch err} 95 + {@render error?.({ error: err })} 96 + {/await} 97 + 98 + {@render children?.({ ref })} 99 + </T.Group>
+62
src/lib/room/models/tiny-treats-bubbly-bathroom/plant.svelte
··· 1 + <!-- 2 + Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf 3 + Command: npx @threlte/gltf@3.0.0 -t -s -u models/tiny-treats-bubbly-bathroom/plant.glb 4 + --> 5 + 6 + <script lang="ts"> 7 + import type * as THREE from 'three'; 8 + 9 + import type { Snippet } from 'svelte'; 10 + import { T, type Props } from '@threlte/core'; 11 + import { useGltf, useSuspense } from '@threlte/extras'; 12 + import { base } from '$app/paths'; 13 + import type { ExtraRoomObjectProps } from '../types'; 14 + import RoomObjectMaterial from '../RoomObjectMaterial.svelte'; 15 + 16 + let { 17 + fallback, 18 + error, 19 + children, 20 + ref = $bindable(), 21 + colors, 22 + opacity, 23 + ...props 24 + }: Props<THREE.Group> & { 25 + ref?: THREE.Group; 26 + children?: Snippet<[{ ref: THREE.Group }]>; 27 + fallback?: Snippet; 28 + error?: Snippet<[{ error: Error }]>; 29 + } & ExtraRoomObjectProps = $props(); 30 + 31 + const suspend = useSuspense(); 32 + 33 + type GLTFResult = { 34 + nodes: { 35 + plant_1: THREE.Mesh; 36 + plant_2: THREE.Mesh; 37 + }; 38 + materials: { 39 + a: THREE.MeshStandardMaterial; 40 + b: THREE.MeshStandardMaterial; 41 + }; 42 + }; 43 + 44 + const gltf = suspend(useGltf<GLTFResult>(base + '/models/tiny-treats-bubbly-bathroom/plant.glb')); 45 + </script> 46 + 47 + <T.Group bind:ref dispose={false} {...props}> 48 + {#await gltf} 49 + {@render fallback?.()} 50 + {:then gltf} 51 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.plant_1.geometry}> 52 + <RoomObjectMaterial {colors} {opacity} index={0} /> 53 + </T.Mesh> 54 + <T.Mesh castShadow receiveShadow geometry={gltf.nodes.plant_2.geometry}> 55 + <RoomObjectMaterial {colors} {opacity} index={1} /> 56 + </T.Mesh> 57 + {:catch err} 58 + {@render error?.({ error: err })} 59 + {/await} 60 + 61 + {@render children?.({ ref })} 62 + </T.Group>
+1 -1
src/lib/components/extra/post/embeds/Embed.svelte
··· 1 1 <script lang="ts"> 2 - import type { PostData } from '../'; 2 + import type { PostData } from '..'; 3 3 import External from './External.svelte'; 4 4 import Images from './Images.svelte'; 5 5 import Video from './Video.svelte';