angular-three-soba 4.0.7 → 4.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/angular-three-soba-loaders.mjs +1 -0
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/package.json +1 -1
- package/types/angular-three-soba-abstractions.d.ts +71 -71
- package/types/angular-three-soba-materials.d.ts +6 -6
- package/types/angular-three-soba-misc.d.ts +3 -3
- package/types/angular-three-soba-staging.d.ts +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-three-soba-loaders.mjs","sources":["../../../../libs/soba/loaders/src/lib/fbx-resource.ts","../../../../libs/soba/loaders/src/lib/fbx-loader.ts","../../../../libs/soba/loaders/src/lib/font-resource.ts","../../../../libs/soba/loaders/src/lib/font-loader.ts","../../../../libs/soba/loaders/src/lib/gltf-loader.ts","../../../../libs/soba/loaders/src/lib/gltf-resource.ts","../../../../libs/soba/loaders/src/lib/progress.ts","../../../../libs/soba/loaders/src/lib/loader.ts","../../../../libs/soba/loaders/src/lib/texture-loader.ts","../../../../libs/soba/loaders/src/lib/texture-resource.ts","../../../../libs/soba/loaders/src/angular-three-soba-loaders.ts"],"sourcesContent":["import { Injector } from '@angular/core';\nimport { loaderResource } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { FBXLoader } from 'three-stdlib';\n\n/**\n * Creates a resource for loading FBX 3D models using Angular's resource API.\n *\n * This function wraps the FBXLoader from three-stdlib and provides a reactive\n * resource-based approach to loading FBX files. It supports loading single files,\n * arrays of files, or record objects mapping keys to URLs.\n *\n * @param input - Signal of the URL(s) of the FBX file(s) to load\n * @param options - Configuration options\n * @param options.injector - Optional injector for dependency injection context\n * @returns A ResourceRef containing the loaded FBX Group(s)\n *\n * @example\n * ```typescript\n * // Single file\n * const fbx = fbxResource(() => '/models/character.fbx');\n * // Access: fbx.value()\n *\n * // Multiple files\n * const fbxs = fbxResource(() => ['/models/a.fbx', '/models/b.fbx']);\n *\n * // Named files\n * const models = fbxResource(() => ({ hero: '/models/hero.fbx', enemy: '/models/enemy.fbx' }));\n * ```\n */\nexport function fbxResource<TUrl extends string | string[] | Record<string, string>>(\n\tinput: () => TUrl,\n\t{ injector }: { injector?: Injector } = {},\n) {\n\treturn assertInjector(fbxResource, injector, () => {\n\t\treturn loaderResource(() => FBXLoader, input);\n\t});\n}\n\n/**\n * Preloads FBX models into the cache for faster subsequent loading.\n *\n * @param input - The URL(s) of the FBX file(s) to preload\n *\n * @example\n * ```typescript\n * // Preload a single model\n * fbxResource.preload('/models/character.fbx');\n *\n * // Preload multiple models\n * fbxResource.preload(['/models/a.fbx', '/models/b.fbx']);\n * ```\n */\nfbxResource.preload = <TUrl extends string | string[] | Record<string, string>>(input: TUrl) => {\n\tloaderResource.preload(FBXLoader, input);\n};\n","import { Injector } from '@angular/core';\nimport { injectLoader } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { FBXLoader } from 'three-stdlib';\nimport { fbxResource } from './fbx-resource';\n\n/**\n * Loads FBX models using the FBXLoader from three-stdlib.\n *\n * @deprecated Use fbxResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @param input - Signal of the URL(s) of the FBX file(s) to load\n * @param options - Configuration options\n * @param options.injector - Optional injector for dependency injection context\n * @returns A readonly signal containing the loaded FBX Group(s)\n */\nfunction _injectFBX<TUrl extends string | string[] | Record<string, string>>(\n\tinput: () => TUrl,\n\t{ injector }: { injector?: Injector } = {},\n) {\n\treturn assertInjector(_injectFBX, injector, () => {\n\t\tconst resource = fbxResource(input, { injector });\n\t\treturn resource.value.asReadonly();\n\t});\n}\n\n_injectFBX.preload = <TUrl extends string | string[] | Record<string, string>>(input: () => TUrl) => {\n\tinjectLoader.preload(() => FBXLoader, input);\n};\n\n/**\n * Type definition for the injectFBX function, including its static preload method.\n *\n * @deprecated Use fbxResource instead. Will be removed in v5.0.0\n */\nexport type NgtsFBXLoader = typeof _injectFBX;\n\n/**\n * Injectable function for loading FBX 3D models.\n *\n * Supports loading single files, arrays of files, or record objects mapping keys to URLs.\n * Includes a static `preload` method for preloading assets.\n *\n * @deprecated Use fbxResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @example\n * ```typescript\n * // Single file\n * const fbx = injectFBX(() => '/models/character.fbx');\n *\n * // Multiple files\n * const fbxs = injectFBX(() => ['/models/a.fbx', '/models/b.fbx']);\n *\n * // Preload\n * injectFBX.preload(() => '/models/character.fbx');\n * ```\n */\nexport const injectFBX: NgtsFBXLoader = _injectFBX;\n","import { Injector, resource } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { Font, FontLoader } from 'three-stdlib';\n\n/**\n * Represents a single glyph in a font.\n */\ntype Glyph = {\n\t/** Cached outline paths for the glyph */\n\t_cachedOutline: string[];\n\t/** Horizontal advance width */\n\tha: number;\n\t/** Outline path data */\n\to: string;\n};\n\n/**\n * Font data structure compatible with typeface.js format.\n */\ntype FontData = {\n\t/** Bounding box dimensions */\n\tboundingBox: {\n\t\t/** Maximum Y coordinate */\n\t\tyMax: number;\n\t\t/** Minimum Y coordinate */\n\t\tyMin: number;\n\t};\n\t/** Font family name */\n\tfamilyName: string;\n\t/** Map of character codes to glyph data */\n\tglyphs: {\n\t\t[k: string]: Glyph;\n\t};\n\t/** Font resolution in units per em */\n\tresolution: number;\n\t/** Thickness of underline stroke */\n\tunderlineThickness: number;\n};\n\n/**\n * Input type for font loading functions.\n * Can be either a URL string pointing to a typeface.js JSON file,\n * or a pre-loaded FontData object.\n */\nexport type NgtsFontInput = string | FontData;\n\nlet fontLoader: FontLoader | null = null;\n\nasync function loadFontData(font: NgtsFontInput): Promise<FontData> {\n\treturn typeof font === 'string' ? await (await fetch(font)).json() : font;\n}\n\nfunction parseFontData(fontData: FontData) {\n\tif (!fontLoader) {\n\t\tfontLoader = new FontLoader();\n\t}\n\treturn fontLoader.parse(fontData);\n}\n\nconst cache = new Map<NgtsFontInput, Font>();\n\n/**\n * Creates a resource for loading font files for use with Three.js TextGeometry.\n *\n * This function provides a reactive resource-based approach to loading fonts.\n * It supports loading from URLs (typeface.js JSON format) or pre-loaded font data.\n * Results are cached for efficient reuse.\n *\n * @param input - Signal of the font URL or font data object\n * @param options - Configuration options\n * @param options.injector - Optional injector for dependency injection context\n * @returns A ResourceRef containing the loaded Font instance\n *\n * @example\n * ```typescript\n * // Load font from URL\n * const font = fontResource(() => '/fonts/helvetiker_regular.typeface.json');\n *\n * // Use in template or effect\n * effect(() => {\n * const f = font.value();\n * if (f) {\n * const geometry = new TextGeometry('Hello', { font: f, size: 1 });\n * }\n * });\n * ```\n */\nexport function fontResource(input: () => NgtsFontInput, { injector }: { injector?: Injector } = {}) {\n\treturn assertInjector(fontResource, injector, () => {\n\t\treturn resource({\n\t\t\tparams: input,\n\t\t\tloader: async ({ params }) => {\n\t\t\t\tif (cache.has(params)) {\n\t\t\t\t\treturn cache.get(params) as Font;\n\t\t\t\t}\n\n\t\t\t\tconst fontData = await loadFontData(params);\n\t\t\t\tconst parsed = parseFontData(fontData);\n\t\t\t\tcache.set(params, parsed);\n\t\t\t\treturn parsed;\n\t\t\t},\n\t\t});\n\t});\n}\n\n/**\n * Preloads a font into the cache for faster subsequent loading.\n *\n * @param input - The font URL or font data to preload\n *\n * @example\n * ```typescript\n * // Preload font before component renders\n * fontResource.preload('/fonts/helvetiker_regular.typeface.json');\n * ```\n */\nfontResource.preload = (input: NgtsFontInput) => {\n\tloadFontData(input).then((data) => {\n\t\tconst parsed = parseFontData(data);\n\t\tcache.set(input, parsed);\n\t});\n};\n\n/**\n * Clears cached font data.\n *\n * @param input - Optional font URL or data to clear from cache.\n * If not provided, clears all cached fonts.\n *\n * @example\n * ```typescript\n * // Clear specific font\n * fontResource.clear('/fonts/helvetiker_regular.typeface.json');\n *\n * // Clear all cached fonts\n * fontResource.clear();\n * ```\n */\nfontResource.clear = (input?: NgtsFontInput) => {\n\tif (input) {\n\t\tcache.delete(input);\n\t} else {\n\t\tcache.clear();\n\t}\n};\n","import { Injector } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { fontResource, type NgtsFontInput } from './font-resource';\n\n/**\n * Injectable function for loading font files for use with TextGeometry.\n *\n * Loads JSON font files (typeface.js format) or accepts pre-loaded font data.\n * Includes static `preload` and `clear` methods for cache management.\n *\n * @deprecated Use fontResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @param input - Signal of the font URL or font data object\n * @param options - Configuration options\n * @param options.injector - Optional injector for dependency injection context\n * @returns A readonly signal containing the loaded Font instance\n *\n * @example\n * ```typescript\n * // Load font from URL\n * const font = injectFont(() => '/fonts/helvetiker_regular.typeface.json');\n *\n * // Preload font\n * injectFont.preload(() => '/fonts/helvetiker_regular.typeface.json');\n *\n * // Clear cached font\n * injectFont.clear(() => '/fonts/helvetiker_regular.typeface.json');\n * ```\n */\nexport function injectFont(input: () => NgtsFontInput, { injector }: { injector?: Injector } = {}) {\n\treturn assertInjector(injectFont, injector, () => {\n\t\tconst resource = fontResource(input, { injector });\n\t\treturn resource.value.asReadonly();\n\t});\n}\n\n/**\n * Preloads a font into the cache for faster subsequent loading.\n *\n * @param input - Signal of the font URL or font data to preload\n */\ninjectFont.preload = (input: () => NgtsFontInput) => {\n\tfontResource.preload(input());\n};\n\n/**\n * Clears cached font data.\n *\n * @param input - Optional Signal of the font to clear. If not provided, clears all cached fonts.\n */\ninjectFont.clear = (input?: () => NgtsFontInput) => {\n\tfontResource.clear(input?.());\n};\n","import { computed, Injector, Signal } from '@angular/core';\nimport { injectLoader, NgtLoaderResults, NgtObjectMap } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { DRACOLoader, GLTF, GLTFLoader, MeshoptDecoder } from 'three-stdlib';\n\nlet dracoLoader: DRACOLoader | null = null;\nlet decoderPath = 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/';\n\nfunction _extensions(useDraco: boolean | string, useMeshOpt: boolean, extensions?: (loader: GLTFLoader) => void) {\n\treturn (loader: THREE.Loader) => {\n\t\tif (extensions) {\n\t\t\textensions(loader as GLTFLoader);\n\t\t}\n\n\t\tif (useDraco) {\n\t\t\tif (!dracoLoader) {\n\t\t\t\tdracoLoader = new DRACOLoader();\n\t\t\t}\n\n\t\t\tdracoLoader.setDecoderPath(typeof useDraco === 'string' ? useDraco : decoderPath);\n\t\t\t(loader as GLTFLoader).setDRACOLoader(dracoLoader);\n\t\t}\n\t\tif (useMeshOpt) {\n\t\t\t(loader as GLTFLoader).setMeshoptDecoder(\n\t\t\t\ttypeof MeshoptDecoder === 'function' ? MeshoptDecoder() : MeshoptDecoder,\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * Maps a GLTF type to its corresponding URL input type.\n */\ntype InjectGLTFUrl<TGltf extends GLTF | GLTF[] | Record<string, GLTF>> = TGltf extends GLTF\n\t? string\n\t: TGltf extends GLTF[]\n\t\t? string[]\n\t\t: TGltf extends Record<string, GLTF>\n\t\t\t? Record<string, string>\n\t\t\t: never;\n\n/**\n * Maps a GLTF type to its result type with NgtObjectMap for easy access to nodes and materials.\n */\ntype InjectGLTFObjectMap<TGltf extends GLTF | GLTF[] | Record<string, GLTF>> = TGltf extends GLTF\n\t? TGltf & NgtObjectMap\n\t: TGltf extends Array<infer _GLTF extends GLTF>\n\t\t? Array<_GLTF & NgtObjectMap>\n\t\t: TGltf extends Record<string, infer _GLTF extends GLTF>\n\t\t\t? Record<string, _GLTF & NgtObjectMap>\n\t\t\t: never;\n\n/**\n * Loads GLTF/GLB 3D models with support for Draco compression and Meshopt optimization.\n *\n * @deprecated Use gltfResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nfunction _injectGLTF<\n\tTGltf extends GLTF | GLTF[] | Record<string, GLTF> = GLTF,\n\tTUrl extends string | string[] | Record<string, string> = InjectGLTFUrl<TGltf>,\n>(\n\tpath: () => TUrl,\n\t{\n\t\tuseDraco = true,\n\t\tuseMeshOpt = true,\n\t\tinjector,\n\t\textensions,\n\t\tonLoad,\n\t}: {\n\t\tuseDraco?: boolean | string;\n\t\tuseMeshOpt?: boolean;\n\t\tinjector?: Injector;\n\t\textensions?: (loader: GLTFLoader) => void;\n\t\tonLoad?: (data: InjectGLTFObjectMap<TGltf>) => void;\n\t} = {},\n): Signal<InjectGLTFObjectMap<TGltf> | null> & { scene: Signal<GLTF['scene'] | null> } {\n\treturn assertInjector(_injectGLTF, injector, () => {\n\t\tconst result = injectLoader(() => GLTFLoader, path, {\n\t\t\textensions: _extensions(useDraco, useMeshOpt, extensions),\n\t\t\t// @ts-expect-error - we know the type of the data\n\t\t\tonLoad,\n\t\t});\n\n\t\tObject.defineProperty(result, 'scene', {\n\t\t\tvalue: computed(() => {\n\t\t\t\tconst gltf = result() as unknown as GLTF;\n\t\t\t\tif (!gltf) return null;\n\t\t\t\treturn gltf.scene;\n\t\t\t}),\n\t\t});\n\n\t\treturn result;\n\t}) as Signal<InjectGLTFObjectMap<TGltf> | null> & { scene: Signal<GLTF['scene'] | null> };\n}\n\n_injectGLTF.preload = <TUrl extends string | string[] | Record<string, string>>(\n\tpath: () => TUrl,\n\t{\n\t\tuseDraco = true,\n\t\tuseMeshOpt = true,\n\t\textensions,\n\t\tonLoad,\n\t}: {\n\t\tuseDraco?: boolean | string;\n\t\tuseMeshOpt?: boolean;\n\t\textensions?: (loader: GLTFLoader) => void;\n\t\tonLoad?: (data: NgtLoaderResults<TUrl, GLTF & NgtObjectMap>) => void;\n\t} = {},\n) => {\n\tinjectLoader.preload(\n\t\t() => GLTFLoader,\n\t\tpath,\n\t\t_extensions(useDraco, useMeshOpt, extensions) as any,\n\t\t// @ts-expect-error - we know the type of the data\n\t\tonLoad,\n\t);\n};\n\n_injectGLTF.setDecoderPath = (path: string) => {\n\tdecoderPath = path;\n};\n\n/**\n * Type definition for the injectGLTF function, including its static methods.\n *\n * @deprecated Use gltfResource instead. Will be removed in v5.0.0\n */\nexport type NgtsGLTFLoader = typeof _injectGLTF;\n\n/**\n * Injectable function for loading GLTF/GLB 3D models.\n *\n * Supports Draco compression and Meshopt optimization out of the box.\n * Returns a signal with the loaded GLTF data including an NgtObjectMap\n * for easy access to nodes and materials by name.\n *\n * Includes static methods:\n * - `preload`: Preload models into cache\n * - `setDecoderPath`: Set custom Draco decoder path\n *\n * @deprecated Use gltfResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @example\n * ```typescript\n * // Basic usage\n * const gltf = injectGLTF(() => '/models/robot.glb');\n *\n * // With typed nodes\n * interface RobotGLTF extends GLTF {\n * nodes: { Head: THREE.Mesh; Body: THREE.Mesh };\n * }\n * const robot = injectGLTF<RobotGLTF>(() => '/models/robot.glb');\n *\n * // Access scene directly\n * const scene = gltf.scene;\n *\n * // Preload\n * injectGLTF.preload(() => '/models/robot.glb');\n * ```\n */\nexport const injectGLTF: NgtsGLTFLoader = _injectGLTF;\n","import { computed, Injector, ResourceRef, Signal } from '@angular/core';\nimport { loaderResource, type NgtObjectMap } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { DRACOLoader, type GLTF, GLTFLoader, MeshoptDecoder } from 'three-stdlib';\n\nlet dracoLoader: DRACOLoader | null = null;\nlet decoderPath = 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/';\n\n/**\n * Maps a GLTF type to its corresponding URL input type.\n */\ntype GLTFUrl<TGLTF extends GLTF | GLTF[] | Record<string, GLTF>> = TGLTF extends GLTF\n\t? string\n\t: TGLTF extends GLTF[]\n\t\t? string[]\n\t\t: TGLTF extends Record<string, GLTF>\n\t\t\t? Record<string, string>\n\t\t\t: never;\n\n/**\n * Maps a GLTF type to its result type with NgtObjectMap for easy access to nodes and materials.\n */\ntype GLTFObjectMap<\n\tTGLTF extends GLTF | GLTF[] | Record<string, GLTF>,\n\tTUrl extends string | string[] | Record<string, string>,\n> = [TGLTF, TUrl] extends [GLTF, string]\n\t? TGLTF & NgtObjectMap\n\t: [TGLTF, TUrl] extends [Array<infer _GLTF extends GLTF>, string[]]\n\t\t? Array<_GLTF & NgtObjectMap>\n\t\t: [TGLTF, TUrl] extends [Record<string, infer _GLTF extends GLTF>, Record<string, string>]\n\t\t\t? { [Key in keyof TGLTF]: _GLTF & NgtObjectMap }\n\t\t\t: [TGLTF, TUrl] extends [GLTF, string[] | Record<string, string>]\n\t\t\t\t? TUrl extends string[]\n\t\t\t\t\t? Array<TGLTF & NgtObjectMap>\n\t\t\t\t\t: { [K in keyof TUrl]: TGLTF & NgtObjectMap }\n\t\t\t\t: never;\n\n/**\n * Maps a GLTF type to its scene type(s).\n */\ntype GLTFObjectSceneMap<\n\tTGLTF extends GLTF | GLTF[] | Record<string, GLTF>,\n\tTUrl extends string | string[] | Record<string, string>,\n> = [TGLTF, TUrl] extends [GLTF, string]\n\t? GLTF['scene']\n\t: [TGLTF, TUrl] extends [Array<infer _GLTF extends GLTF>, string[]]\n\t\t? Array<_GLTF['scene']>\n\t\t: [TGLTF, TUrl] extends [Record<string, infer _GLTF extends GLTF>, Record<string, string>]\n\t\t\t? { [Key in keyof TGLTF]: _GLTF['scene'] }\n\t\t\t: [TGLTF, TUrl] extends [GLTF, string[] | Record<string, string>]\n\t\t\t\t? TUrl extends string[]\n\t\t\t\t\t? Array<GLTF['scene']>\n\t\t\t\t\t: { [K in keyof TUrl]: GLTF['scene'] }\n\t\t\t\t: never;\n\nfunction _extensions(useDraco: boolean | string, useMeshOpt: boolean, extensions?: (loader: GLTFLoader) => void) {\n\treturn (loader: THREE.Loader) => {\n\t\tif (extensions) {\n\t\t\textensions(loader as GLTFLoader);\n\t\t}\n\n\t\tif (useDraco) {\n\t\t\tif (!dracoLoader) {\n\t\t\t\tdracoLoader = new DRACOLoader();\n\t\t\t}\n\n\t\t\tdracoLoader.setDecoderPath(typeof useDraco === 'string' ? useDraco : decoderPath);\n\t\t\t(loader as GLTFLoader).setDRACOLoader(dracoLoader);\n\t\t}\n\t\tif (useMeshOpt) {\n\t\t\t(loader as GLTFLoader).setMeshoptDecoder(\n\t\t\t\ttypeof MeshoptDecoder === 'function' ? MeshoptDecoder() : MeshoptDecoder,\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * Creates a resource for loading GLTF/GLB 3D models using Angular's resource API.\n *\n * This function wraps the GLTFLoader from three-stdlib and provides a reactive\n * resource-based approach to loading GLTF files. It supports Draco compression\n * and Meshopt optimization out of the box.\n *\n * The returned resource includes a `scene` computed signal for direct access to\n * the loaded scene(s).\n *\n * @param input - Signal of the URL(s) of the GLTF/GLB file(s) to load\n * @param options - Configuration options\n * @param options.useDraco - Enable Draco compression support. Pass a string to specify custom decoder path\n * @param options.useMeshOpt - Enable Meshopt optimization support\n * @param options.injector - Optional injector for dependency injection context\n * @param options.extensions - Custom extensions callback for the GLTFLoader\n * @param options.onLoad - Callback fired when loading completes\n * @returns A ResourceRef containing the loaded GLTF data with a `scene` signal\n *\n * @example\n * ```typescript\n * // Basic usage\n * const gltf = gltfResource(() => '/models/robot.glb');\n *\n * // With typed nodes\n * interface RobotGLTF extends GLTF {\n * nodes: { Head: THREE.Mesh; Body: THREE.Mesh };\n * }\n * const robot = gltfResource<RobotGLTF>(() => '/models/robot.glb');\n *\n * // Access scene directly via computed signal\n * effect(() => {\n * const scene = robot.scene();\n * if (scene) { ... }\n * });\n *\n * // Disable Draco\n * const gltf = gltfResource(() => '/models/simple.glb', { useDraco: false });\n * ```\n */\nexport function gltfResource<\n\tTGLTF extends GLTF | GLTF[] | Record<string, GLTF> = GLTF,\n\tTUrl extends string | string[] | Record<string, string> = GLTFUrl<TGLTF>,\n>(\n\tinput: () => TUrl,\n\t{\n\t\tuseDraco = true,\n\t\tuseMeshOpt = true,\n\t\tinjector,\n\t\textensions,\n\t\tonLoad,\n\t}: {\n\t\t/** Enable Draco compression. Pass string for custom decoder path. @default true */\n\t\tuseDraco?: boolean | string;\n\t\t/** Enable Meshopt optimization. @default true */\n\t\tuseMeshOpt?: boolean;\n\t\t/** Optional injector for DI context */\n\t\tinjector?: Injector;\n\t\t/** Custom extensions callback for GLTFLoader */\n\t\textensions?: (loader: GLTFLoader) => void;\n\t\t/** Callback fired when loading completes */\n\t\tonLoad?: (data: GLTFObjectMap<TGLTF, TUrl>) => void;\n\t} = {},\n) {\n\treturn assertInjector(gltfResource, injector, () => {\n\t\tconst resource = loaderResource(() => GLTFLoader, input, {\n\t\t\textensions: _extensions(useDraco, useMeshOpt, extensions),\n\t\t\t// @ts-expect-error - we know the type of the data\n\t\t\tonLoad,\n\t\t}) as ResourceRef<GLTFObjectMap<TGLTF, TUrl> | undefined> & {\n\t\t\tscene: Signal<GLTFObjectSceneMap<TGLTF, TUrl> | null>;\n\t\t};\n\n\t\tObject.defineProperty(resource, 'scene', {\n\t\t\tvalue: computed(() => {\n\t\t\t\tconst data = resource.value();\n\t\t\t\tif (!data) return null;\n\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\treturn data.map((item) => item.scene);\n\t\t\t\t}\n\t\t\t\tif ('parser' in data) {\n\t\t\t\t\treturn data.scene;\n\t\t\t\t}\n\t\t\t\treturn Object.keys(data).reduce(\n\t\t\t\t\t(acc, key) => {\n\t\t\t\t\t\tacc[key] = data[key as keyof typeof data].scene;\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{} as Record<string, THREE.Group>,\n\t\t\t\t);\n\t\t\t}),\n\t\t});\n\n\t\treturn resource;\n\t});\n}\n\n/**\n * Preloads GLTF/GLB models into the cache for faster subsequent loading.\n *\n * @param input - The URL(s) of the GLTF/GLB file(s) to preload\n * @param options - Configuration options\n * @param options.useDraco - Enable Draco compression support\n * @param options.useMeshOpt - Enable Meshopt optimization support\n * @param options.extensions - Custom extensions callback for the GLTFLoader\n *\n * @example\n * ```typescript\n * // Preload a model\n * gltfResource.preload('/models/robot.glb');\n *\n * // Preload with custom Draco decoder path\n * gltfResource.preload('/models/robot.glb', { useDraco: '/draco/' });\n * ```\n */\ngltfResource.preload = <TUrl extends string | string[] | Record<string, string>>(\n\tinput: TUrl,\n\t{\n\t\tuseDraco = true,\n\t\tuseMeshOpt = true,\n\t\textensions,\n\t}: {\n\t\t/** Enable Draco compression. Pass string for custom decoder path. @default true */\n\t\tuseDraco?: boolean | string;\n\t\t/** Enable Meshopt optimization. @default true */\n\t\tuseMeshOpt?: boolean;\n\t\t/** Custom extensions callback for GLTFLoader */\n\t\textensions?: (loader: GLTFLoader) => void;\n\t} = {},\n) => {\n\tloaderResource.preload(GLTFLoader, input, _extensions(useDraco, useMeshOpt, extensions));\n};\n\n/**\n * Sets the global Draco decoder path for all subsequent GLTF loads.\n *\n * @param path - The URL path to the Draco decoder files\n *\n * @example\n * ```typescript\n * // Use local Draco decoder files\n * gltfResource.setDecoderPath('/draco/');\n * ```\n */\ngltfResource.setDecoderPath = (path: string) => {\n\tdecoderPath = path;\n};\n","import { DestroyRef, inject, Injector } from '@angular/core';\nimport { signalState } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\n/**\n * Creates a reactive state object that tracks Three.js asset loading progress.\n *\n * This function hooks into THREE.DefaultLoadingManager to monitor all asset\n * loading operations and provides reactive signals for progress tracking.\n * The state includes progress percentage, active status, error tracking, and\n * details about the currently loading item.\n *\n * The loading manager hooks are automatically cleaned up when the injection\n * context is destroyed.\n *\n * @param injector - Optional injector for dependency injection context\n * @returns A signal state object with the following properties:\n * - `errors`: Array of URLs that failed to load\n * - `active`: Whether loading is currently in progress\n * - `progress`: Loading progress percentage (0-100)\n * - `item`: URL of the currently loading item\n * - `loaded`: Number of items loaded\n * - `total`: Total number of items to load\n *\n * @example\n * ```typescript\n * // In a component or service\n * const loadingState = progress();\n *\n * effect(() => {\n * if (loadingState.active()) {\n * console.log(`Loading: ${loadingState.progress()}%`);\n * }\n * });\n *\n * // Check for errors\n * effect(() => {\n * const errors = loadingState.errors();\n * if (errors.length > 0) {\n * console.error('Failed to load:', errors);\n * }\n * });\n * ```\n */\nexport function progress(injector?: Injector) {\n\treturn assertInjector(progress, injector, () => {\n\t\tconst progressState = signalState<{\n\t\t\terrors: string[];\n\t\t\tactive: boolean;\n\t\t\tprogress: number;\n\t\t\titem: string;\n\t\t\tloaded: number;\n\t\t\ttotal: number;\n\t\t}>({ errors: [], active: false, progress: 0, item: '', loaded: 0, total: 0 });\n\n\t\tconst defaultOnStart = THREE.DefaultLoadingManager.onStart?.bind(THREE.DefaultLoadingManager);\n\t\tconst defaultOnLoad = THREE.DefaultLoadingManager.onLoad?.bind(THREE.DefaultLoadingManager);\n\t\tconst defaultOnError = THREE.DefaultLoadingManager.onError?.bind(THREE.DefaultLoadingManager);\n\t\tconst defaultOnProgress = THREE.DefaultLoadingManager.onProgress?.bind(THREE.DefaultLoadingManager);\n\n\t\tlet saveLastTotalLoaded = 0;\n\n\t\tTHREE.DefaultLoadingManager.onStart = (item, loaded, total) => {\n\t\t\tprogressState.update({\n\t\t\t\tactive: true,\n\t\t\t\titem,\n\t\t\t\tloaded,\n\t\t\t\ttotal,\n\t\t\t\tprogress: ((loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded)) * 100,\n\t\t\t});\n\t\t};\n\n\t\tTHREE.DefaultLoadingManager.onLoad = () => {\n\t\t\tprogressState.update({ active: false });\n\t\t};\n\n\t\tTHREE.DefaultLoadingManager.onError = (url) => {\n\t\t\tprogressState.update((prev) => ({ errors: [...prev.errors, url] }));\n\t\t};\n\n\t\tTHREE.DefaultLoadingManager.onProgress = (item, loaded, total) => {\n\t\t\tif (loaded === total) saveLastTotalLoaded = total;\n\n\t\t\tprogressState.update({\n\t\t\t\titem,\n\t\t\t\tloaded,\n\t\t\t\ttotal,\n\t\t\t\tprogress: ((loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded)) * 100 || 100,\n\t\t\t});\n\t\t};\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tTHREE.DefaultLoadingManager.onStart = defaultOnStart;\n\t\t\tTHREE.DefaultLoadingManager.onLoad = defaultOnLoad;\n\t\t\tTHREE.DefaultLoadingManager.onError = defaultOnError;\n\t\t\tTHREE.DefaultLoadingManager.onProgress = defaultOnProgress;\n\t\t});\n\n\t\treturn progressState;\n\t});\n}\n\n/**\n * Alias for the `progress` function.\n *\n * @deprecated Use `progress` instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @see {@link progress}\n */\nexport const injectProgress = progress;\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\teffect,\n\tinput,\n\tsignal,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport { pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { progress } from './progress';\n\nconst defaultDataInterpolation = (p: number) => `Loading ${p.toFixed(2)}%`;\n\n/**\n * Configuration options for the NgtsLoader component.\n */\nexport interface NgtsLoaderOptions {\n\t/**\n\t * CSS class to apply to the outer container element.\n\t * @default ''\n\t */\n\tcontainerClass?: string;\n\t/**\n\t * CSS class to apply to the inner wrapper element.\n\t * @default ''\n\t */\n\tinnerClass?: string;\n\t/**\n\t * CSS class to apply to the progress bar element.\n\t * @default ''\n\t */\n\tbarClass?: string;\n\t/**\n\t * CSS class to apply to the data/percentage text element.\n\t * @default ''\n\t */\n\tdataClass?: string;\n\t/**\n\t * Function to format the progress percentage display text.\n\t * @param value - Current progress value (0-100)\n\t * @returns Formatted string to display\n\t * @default (p) => `Loading ${p.toFixed(2)}%`\n\t */\n\tdataInterpolation: (value: number) => string;\n\t/**\n\t * Function to determine initial visibility state.\n\t * @param value - Current active loading state\n\t * @returns Whether the loader should be shown initially\n\t * @default (value) => value\n\t */\n\tinitialState: (value: boolean) => boolean;\n}\n\nconst defaultOptions: NgtsLoaderOptions = {\n\tcontainerClass: '',\n\tinnerClass: '',\n\tbarClass: '',\n\tdataClass: '',\n\tdataInterpolation: defaultDataInterpolation,\n\tinitialState: (value) => value,\n};\n\n/**\n * A loading indicator component that displays asset loading progress.\n *\n * This component automatically tracks Three.js asset loading progress using the\n * DefaultLoadingManager and displays an animated progress bar with percentage.\n *\n * The loader fades in when loading starts and fades out when complete.\n * CSS classes can be customized via options for styling flexibility.\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <ngts-loader />\n *\n * <!-- With custom options -->\n * <ngts-loader [options]=\"{\n * containerClass: 'my-loader',\n * dataInterpolation: (p) => `${Math.round(p)}% loaded`\n * }\" />\n * ```\n */\n@Component({\n\tselector: 'ngts-loader',\n\ttemplate: `\n\t\t@if (shown()) {\n\t\t\t<div\n\t\t\t\tclass=\"ngts-loader-container\"\n\t\t\t\t[class]=\"containerClass() || ''\"\n\t\t\t\t[style.--ngts-loader-container-opacity]=\"active() ? 1 : 0\"\n\t\t\t>\n\t\t\t\t<div>\n\t\t\t\t\t<div class=\"ngts-loader-inner\" [class]=\"innerClass() || ''\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"ngts-loader-bar\"\n\t\t\t\t\t\t\t[class]=\"barClass() || ''\"\n\t\t\t\t\t\t\t[style.--ngts-loader-bar-scale]=\"progress() / 100\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t\t<span #progressSpanRef class=\"ngts-loader-data\" [class]=\"dataClass() || ''\"></span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t}\n\t`,\n\tstyleUrls: ['./loader.css'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsLoader {\n\tprivate progressState = progress();\n\n\tprotected active = this.progressState.active;\n\tprotected progress = this.progressState.progress;\n\n\t/**\n\t * Configuration options for the loader appearance and behavior.\n\t */\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprotected containerClass = pick(this.options, 'containerClass');\n\tprotected innerClass = pick(this.options, 'innerClass');\n\tprotected barClass = pick(this.options, 'barClass');\n\tprotected dataClass = pick(this.options, 'dataClass');\n\tprivate initialState = pick(this.options, 'initialState');\n\tprivate dataInterpolation = pick(this.options, 'dataInterpolation');\n\n\tprivate progressSpanRef = viewChild<ElementRef<HTMLSpanElement>>('progressSpanRef');\n\n\tprotected shown = signal(this.initialState()(this.active()));\n\n\tconstructor() {\n\t\teffect((onCleanup) => {\n\t\t\tconst [active, lastShown] = [this.active(), untracked(this.shown)];\n\t\t\tif (lastShown !== active) {\n\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\tthis.shown.set(active);\n\t\t\t\t}, 300);\n\t\t\t\tonCleanup(() => clearTimeout(timeoutId));\n\t\t\t}\n\t\t});\n\n\t\tlet progressRef = 0;\n\t\tlet rafId: ReturnType<typeof requestAnimationFrame>;\n\t\teffect((onCleanup) => {\n\t\t\tconst [dataInterpolation, progress] = [this.dataInterpolation(), this.progress()];\n\t\t\tconst updateProgress = () => {\n\t\t\t\tconst progressSpan = this.progressSpanRef()?.nativeElement;\n\t\t\t\tif (!progressSpan) return;\n\t\t\t\tprogressRef += (progress - progressRef) / 2;\n\t\t\t\tif (progressRef > 0.95 * progress || progress === 100) progressRef = progress;\n\t\t\t\tprogressSpan.innerText = dataInterpolation(progressRef);\n\t\t\t\tif (progressRef < progress) {\n\t\t\t\t\trafId = requestAnimationFrame(updateProgress);\n\t\t\t\t}\n\t\t\t};\n\t\t\tupdateProgress();\n\t\t\tonCleanup(() => cancelAnimationFrame(rafId));\n\t\t});\n\t}\n}\n","import { effect, Injector, Signal } from '@angular/core';\nimport { injectLoader, injectStore, is, NgtLoaderResults } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\n/**\n * Loads texture images using THREE.TextureLoader.\n *\n * @deprecated Use textureResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @param input - Signal of the URL(s) of the texture(s) to load\n * @param options - Configuration options\n * @param options.onLoad - Callback fired when textures are loaded\n * @param options.injector - Optional injector for dependency injection context\n * @returns A signal containing the loaded texture(s)\n */\nfunction _injectTexture<TInput extends string[] | string | Record<string, string>>(\n\tinput: () => TInput,\n\t{ onLoad, injector }: { onLoad?: (texture: THREE.Texture[]) => void; injector?: Injector } = {},\n): Signal<NgtLoaderResults<TInput, THREE.Texture> | null> {\n\treturn assertInjector(_injectTexture, injector, () => {\n\t\tconst store = injectStore();\n\t\tconst result = injectLoader(() => THREE.TextureLoader, input);\n\n\t\teffect(() => {\n\t\t\tconst textures = result();\n\t\t\tif (!textures) return;\n\t\t\tconst gl = store.snapshot.gl;\n\t\t\tif ('initTexture' in gl) {\n\t\t\t\tconst array = Array.isArray(textures)\n\t\t\t\t\t? textures\n\t\t\t\t\t: is.three<THREE.Texture>(textures, 'isTexture')\n\t\t\t\t\t\t? [textures]\n\t\t\t\t\t\t: Object.values(textures);\n\t\t\t\tif (onLoad) onLoad(array);\n\t\t\t\tarray.forEach(gl.initTexture.bind(gl));\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t});\n}\n\n_injectTexture.preload = <TInput extends string[] | string | Record<string, string>>(input: () => TInput) => {\n\tinjectLoader.preload(() => THREE.TextureLoader, input);\n};\n\n/**\n * Type definition for the injectTexture function, including its static preload method.\n *\n * @deprecated Use textureResource instead. Will be removed in v5.0.0\n */\nexport type NgtsTextureLoader = typeof _injectTexture;\n\n/**\n * Injectable function for loading texture images.\n *\n * Loads textures using THREE.TextureLoader and automatically initializes them\n * with the WebGL renderer for optimal performance. Supports loading single textures,\n * arrays of textures, or record objects mapping keys to URLs.\n *\n * Includes a static `preload` method for preloading textures.\n *\n * @deprecated Use textureResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @example\n * ```typescript\n * // Single texture\n * const texture = injectTexture(() => '/textures/diffuse.jpg');\n *\n * // Multiple textures\n * const textures = injectTexture(() => ['/textures/diffuse.jpg', '/textures/normal.jpg']);\n *\n * // Named textures\n * const maps = injectTexture(() => ({\n * diffuse: '/textures/diffuse.jpg',\n * normal: '/textures/normal.jpg'\n * }));\n *\n * // Preload\n * injectTexture.preload(() => '/textures/diffuse.jpg');\n * ```\n */\nexport const injectTexture: NgtsTextureLoader = _injectTexture;\n","import { effect, Injector } from '@angular/core';\nimport { injectStore, is, loaderResource, NgtLoaderResults } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\n/**\n * Creates a resource for loading texture images using Angular's resource API.\n *\n * This function wraps THREE.TextureLoader and provides a reactive resource-based\n * approach to loading textures. Loaded textures are automatically initialized\n * with the WebGL renderer for optimal performance.\n *\n * Supports loading single textures, arrays of textures, or record objects mapping\n * keys to URLs.\n *\n * @param input - Signal of the URL(s) of the texture(s) to load\n * @param options - Configuration options\n * @param options.onLoad - Callback fired when textures are loaded\n * @param options.injector - Optional injector for dependency injection context\n * @returns A ResourceRef containing the loaded texture(s)\n *\n * @example\n * ```typescript\n * // Single texture\n * const texture = textureResource(() => '/textures/diffuse.jpg');\n *\n * // Multiple textures\n * const textures = textureResource(() => ['/textures/diffuse.jpg', '/textures/normal.jpg']);\n *\n * // Named textures\n * const maps = textureResource(() => ({\n * diffuse: '/textures/diffuse.jpg',\n * normal: '/textures/normal.jpg'\n * }));\n *\n * // With onLoad callback\n * const texture = textureResource(() => '/textures/diffuse.jpg', {\n * onLoad: (tex) => console.log('Texture loaded:', tex)\n * });\n * ```\n */\nexport function textureResource<TUrl extends string[] | string | Record<string, string>>(\n\tinput: () => TUrl,\n\t{\n\t\tonLoad,\n\t\tinjector,\n\t}: {\n\t\t/** Callback fired when textures are loaded */\n\t\tonLoad?: (result: NgtLoaderResults<TUrl, THREE.Texture>) => void;\n\t\t/** Optional injector for DI context */\n\t\tinjector?: Injector;\n\t} = {},\n) {\n\treturn assertInjector(textureResource, injector, () => {\n\t\tconst store = injectStore();\n\t\tconst resource = loaderResource(() => THREE.TextureLoader, input);\n\n\t\teffect(() => {\n\t\t\tif (!resource.hasValue()) return;\n\t\t\tconst result = resource.value();\n\n\t\t\tif (onLoad) onLoad(result);\n\n\t\t\tconst gl = store.snapshot.gl;\n\t\t\tif ('initTexture' in gl) {\n\t\t\t\tlet textures: THREE.Texture[];\n\n\t\t\t\tif (Array.isArray(result)) {\n\t\t\t\t\ttextures = result;\n\t\t\t\t} else if (is.three<THREE.Texture>(result, 'isTexture')) {\n\t\t\t\t\ttextures = [result];\n\t\t\t\t} else {\n\t\t\t\t\ttextures = Object.values(result);\n\t\t\t\t}\n\n\t\t\t\ttextures.forEach(gl.initTexture.bind(gl));\n\t\t\t}\n\t\t});\n\n\t\treturn resource;\n\t});\n}\n\n/**\n * Preloads textures into the cache for faster subsequent loading.\n *\n * @param input - The URL(s) of the texture(s) to preload\n *\n * @example\n * ```typescript\n * // Preload a single texture\n * textureResource.preload('/textures/diffuse.jpg');\n *\n * // Preload multiple textures\n * textureResource.preload(['/textures/diffuse.jpg', '/textures/normal.jpg']);\n * ```\n */\ntextureResource.preload = <TUrl extends string[] | string | Record<string, string>>(input: TUrl) => {\n\tloaderResource.preload(THREE.TextureLoader, input);\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["dracoLoader","decoderPath","_extensions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-three-soba-loaders.mjs","sources":["../../../../libs/soba/loaders/src/lib/fbx-resource.ts","../../../../libs/soba/loaders/src/lib/fbx-loader.ts","../../../../libs/soba/loaders/src/lib/font-resource.ts","../../../../libs/soba/loaders/src/lib/font-loader.ts","../../../../libs/soba/loaders/src/lib/gltf-loader.ts","../../../../libs/soba/loaders/src/lib/gltf-resource.ts","../../../../libs/soba/loaders/src/lib/progress.ts","../../../../libs/soba/loaders/src/lib/loader.ts","../../../../libs/soba/loaders/src/lib/texture-loader.ts","../../../../libs/soba/loaders/src/lib/texture-resource.ts","../../../../libs/soba/loaders/src/angular-three-soba-loaders.ts"],"sourcesContent":["import { Injector } from '@angular/core';\nimport { loaderResource } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { FBXLoader } from 'three-stdlib';\n\n/**\n * Creates a resource for loading FBX 3D models using Angular's resource API.\n *\n * This function wraps the FBXLoader from three-stdlib and provides a reactive\n * resource-based approach to loading FBX files. It supports loading single files,\n * arrays of files, or record objects mapping keys to URLs.\n *\n * @param input - Signal of the URL(s) of the FBX file(s) to load\n * @param options - Configuration options\n * @param options.injector - Optional injector for dependency injection context\n * @returns A ResourceRef containing the loaded FBX Group(s)\n *\n * @example\n * ```typescript\n * // Single file\n * const fbx = fbxResource(() => '/models/character.fbx');\n * // Access: fbx.value()\n *\n * // Multiple files\n * const fbxs = fbxResource(() => ['/models/a.fbx', '/models/b.fbx']);\n *\n * // Named files\n * const models = fbxResource(() => ({ hero: '/models/hero.fbx', enemy: '/models/enemy.fbx' }));\n * ```\n */\nexport function fbxResource<TUrl extends string | string[] | Record<string, string>>(\n\tinput: () => TUrl,\n\t{ injector }: { injector?: Injector } = {},\n) {\n\treturn assertInjector(fbxResource, injector, () => {\n\t\treturn loaderResource(() => FBXLoader, input);\n\t});\n}\n\n/**\n * Preloads FBX models into the cache for faster subsequent loading.\n *\n * @param input - The URL(s) of the FBX file(s) to preload\n *\n * @example\n * ```typescript\n * // Preload a single model\n * fbxResource.preload('/models/character.fbx');\n *\n * // Preload multiple models\n * fbxResource.preload(['/models/a.fbx', '/models/b.fbx']);\n * ```\n */\nfbxResource.preload = <TUrl extends string | string[] | Record<string, string>>(input: TUrl) => {\n\tloaderResource.preload(FBXLoader, input);\n};\n","import { Injector } from '@angular/core';\nimport { injectLoader } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { FBXLoader } from 'three-stdlib';\nimport { fbxResource } from './fbx-resource';\n\n/**\n * Loads FBX models using the FBXLoader from three-stdlib.\n *\n * @deprecated Use fbxResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @param input - Signal of the URL(s) of the FBX file(s) to load\n * @param options - Configuration options\n * @param options.injector - Optional injector for dependency injection context\n * @returns A readonly signal containing the loaded FBX Group(s)\n */\nfunction _injectFBX<TUrl extends string | string[] | Record<string, string>>(\n\tinput: () => TUrl,\n\t{ injector }: { injector?: Injector } = {},\n) {\n\treturn assertInjector(_injectFBX, injector, () => {\n\t\tconst resource = fbxResource(input, { injector });\n\t\treturn resource.value.asReadonly();\n\t});\n}\n\n_injectFBX.preload = <TUrl extends string | string[] | Record<string, string>>(input: () => TUrl) => {\n\tinjectLoader.preload(() => FBXLoader, input);\n};\n\n/**\n * Type definition for the injectFBX function, including its static preload method.\n *\n * @deprecated Use fbxResource instead. Will be removed in v5.0.0\n */\nexport type NgtsFBXLoader = typeof _injectFBX;\n\n/**\n * Injectable function for loading FBX 3D models.\n *\n * Supports loading single files, arrays of files, or record objects mapping keys to URLs.\n * Includes a static `preload` method for preloading assets.\n *\n * @deprecated Use fbxResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @example\n * ```typescript\n * // Single file\n * const fbx = injectFBX(() => '/models/character.fbx');\n *\n * // Multiple files\n * const fbxs = injectFBX(() => ['/models/a.fbx', '/models/b.fbx']);\n *\n * // Preload\n * injectFBX.preload(() => '/models/character.fbx');\n * ```\n */\nexport const injectFBX: NgtsFBXLoader = _injectFBX;\n","import { Injector, resource } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { Font, FontLoader } from 'three-stdlib';\n\n/**\n * Represents a single glyph in a font.\n */\ntype Glyph = {\n\t/** Cached outline paths for the glyph */\n\t_cachedOutline: string[];\n\t/** Horizontal advance width */\n\tha: number;\n\t/** Outline path data */\n\to: string;\n};\n\n/**\n * Font data structure compatible with typeface.js format.\n */\ntype FontData = {\n\t/** Bounding box dimensions */\n\tboundingBox: {\n\t\t/** Maximum Y coordinate */\n\t\tyMax: number;\n\t\t/** Minimum Y coordinate */\n\t\tyMin: number;\n\t};\n\t/** Font family name */\n\tfamilyName: string;\n\t/** Map of character codes to glyph data */\n\tglyphs: {\n\t\t[k: string]: Glyph;\n\t};\n\t/** Font resolution in units per em */\n\tresolution: number;\n\t/** Thickness of underline stroke */\n\tunderlineThickness: number;\n};\n\n/**\n * Input type for font loading functions.\n * Can be either a URL string pointing to a typeface.js JSON file,\n * or a pre-loaded FontData object.\n */\nexport type NgtsFontInput = string | FontData;\n\nlet fontLoader: FontLoader | null = null;\n\nasync function loadFontData(font: NgtsFontInput): Promise<FontData> {\n\treturn typeof font === 'string' ? await (await fetch(font)).json() : font;\n}\n\nfunction parseFontData(fontData: FontData) {\n\tif (!fontLoader) {\n\t\tfontLoader = new FontLoader();\n\t}\n\treturn fontLoader.parse(fontData);\n}\n\nconst cache = new Map<NgtsFontInput, Font>();\n\n/**\n * Creates a resource for loading font files for use with Three.js TextGeometry.\n *\n * This function provides a reactive resource-based approach to loading fonts.\n * It supports loading from URLs (typeface.js JSON format) or pre-loaded font data.\n * Results are cached for efficient reuse.\n *\n * @param input - Signal of the font URL or font data object\n * @param options - Configuration options\n * @param options.injector - Optional injector for dependency injection context\n * @returns A ResourceRef containing the loaded Font instance\n *\n * @example\n * ```typescript\n * // Load font from URL\n * const font = fontResource(() => '/fonts/helvetiker_regular.typeface.json');\n *\n * // Use in template or effect\n * effect(() => {\n * const f = font.value();\n * if (f) {\n * const geometry = new TextGeometry('Hello', { font: f, size: 1 });\n * }\n * });\n * ```\n */\nexport function fontResource(input: () => NgtsFontInput, { injector }: { injector?: Injector } = {}) {\n\treturn assertInjector(fontResource, injector, () => {\n\t\treturn resource({\n\t\t\tparams: input,\n\t\t\tloader: async ({ params }) => {\n\t\t\t\tif (cache.has(params)) {\n\t\t\t\t\treturn cache.get(params) as Font;\n\t\t\t\t}\n\n\t\t\t\tconst fontData = await loadFontData(params);\n\t\t\t\tconst parsed = parseFontData(fontData);\n\t\t\t\tcache.set(params, parsed);\n\t\t\t\treturn parsed;\n\t\t\t},\n\t\t});\n\t});\n}\n\n/**\n * Preloads a font into the cache for faster subsequent loading.\n *\n * @param input - The font URL or font data to preload\n *\n * @example\n * ```typescript\n * // Preload font before component renders\n * fontResource.preload('/fonts/helvetiker_regular.typeface.json');\n * ```\n */\nfontResource.preload = (input: NgtsFontInput) => {\n\tloadFontData(input).then((data) => {\n\t\tconst parsed = parseFontData(data);\n\t\tcache.set(input, parsed);\n\t});\n};\n\n/**\n * Clears cached font data.\n *\n * @param input - Optional font URL or data to clear from cache.\n * If not provided, clears all cached fonts.\n *\n * @example\n * ```typescript\n * // Clear specific font\n * fontResource.clear('/fonts/helvetiker_regular.typeface.json');\n *\n * // Clear all cached fonts\n * fontResource.clear();\n * ```\n */\nfontResource.clear = (input?: NgtsFontInput) => {\n\tif (input) {\n\t\tcache.delete(input);\n\t} else {\n\t\tcache.clear();\n\t}\n};\n","import { Injector } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { fontResource, type NgtsFontInput } from './font-resource';\n\n/**\n * Injectable function for loading font files for use with TextGeometry.\n *\n * Loads JSON font files (typeface.js format) or accepts pre-loaded font data.\n * Includes static `preload` and `clear` methods for cache management.\n *\n * @deprecated Use fontResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @param input - Signal of the font URL or font data object\n * @param options - Configuration options\n * @param options.injector - Optional injector for dependency injection context\n * @returns A readonly signal containing the loaded Font instance\n *\n * @example\n * ```typescript\n * // Load font from URL\n * const font = injectFont(() => '/fonts/helvetiker_regular.typeface.json');\n *\n * // Preload font\n * injectFont.preload(() => '/fonts/helvetiker_regular.typeface.json');\n *\n * // Clear cached font\n * injectFont.clear(() => '/fonts/helvetiker_regular.typeface.json');\n * ```\n */\nexport function injectFont(input: () => NgtsFontInput, { injector }: { injector?: Injector } = {}) {\n\treturn assertInjector(injectFont, injector, () => {\n\t\tconst resource = fontResource(input, { injector });\n\t\treturn resource.value.asReadonly();\n\t});\n}\n\n/**\n * Preloads a font into the cache for faster subsequent loading.\n *\n * @param input - Signal of the font URL or font data to preload\n */\ninjectFont.preload = (input: () => NgtsFontInput) => {\n\tfontResource.preload(input());\n};\n\n/**\n * Clears cached font data.\n *\n * @param input - Optional Signal of the font to clear. If not provided, clears all cached fonts.\n */\ninjectFont.clear = (input?: () => NgtsFontInput) => {\n\tfontResource.clear(input?.());\n};\n","import { computed, Injector, Signal } from '@angular/core';\nimport { injectLoader, NgtLoaderResults, NgtObjectMap } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { DRACOLoader, GLTF, GLTFLoader, MeshoptDecoder } from 'three-stdlib';\n\nlet dracoLoader: DRACOLoader | null = null;\nlet decoderPath = 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/';\n\nfunction _extensions(useDraco: boolean | string, useMeshOpt: boolean, extensions?: (loader: GLTFLoader) => void) {\n\treturn (loader: THREE.Loader) => {\n\t\tif (extensions) {\n\t\t\textensions(loader as GLTFLoader);\n\t\t}\n\n\t\tif (useDraco) {\n\t\t\tif (!dracoLoader) {\n\t\t\t\tdracoLoader = new DRACOLoader();\n\t\t\t}\n\n\t\t\tdracoLoader.setDecoderPath(typeof useDraco === 'string' ? useDraco : decoderPath);\n\t\t\t(loader as GLTFLoader).setDRACOLoader(dracoLoader);\n\t\t}\n\t\tif (useMeshOpt) {\n\t\t\t(loader as GLTFLoader).setMeshoptDecoder(\n\t\t\t\ttypeof MeshoptDecoder === 'function' ? MeshoptDecoder() : MeshoptDecoder,\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * Maps a GLTF type to its corresponding URL input type.\n */\ntype InjectGLTFUrl<TGltf extends GLTF | GLTF[] | Record<string, GLTF>> = TGltf extends GLTF\n\t? string\n\t: TGltf extends GLTF[]\n\t\t? string[]\n\t\t: TGltf extends Record<string, GLTF>\n\t\t\t? Record<string, string>\n\t\t\t: never;\n\n/**\n * Maps a GLTF type to its result type with NgtObjectMap for easy access to nodes and materials.\n */\ntype InjectGLTFObjectMap<TGltf extends GLTF | GLTF[] | Record<string, GLTF>> = TGltf extends GLTF\n\t? TGltf & NgtObjectMap\n\t: TGltf extends Array<infer _GLTF extends GLTF>\n\t\t? Array<_GLTF & NgtObjectMap>\n\t\t: TGltf extends Record<string, infer _GLTF extends GLTF>\n\t\t\t? Record<string, _GLTF & NgtObjectMap>\n\t\t\t: never;\n\n/**\n * Loads GLTF/GLB 3D models with support for Draco compression and Meshopt optimization.\n *\n * @deprecated Use gltfResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nfunction _injectGLTF<\n\tTGltf extends GLTF | GLTF[] | Record<string, GLTF> = GLTF,\n\tTUrl extends string | string[] | Record<string, string> = InjectGLTFUrl<TGltf>,\n>(\n\tpath: () => TUrl,\n\t{\n\t\tuseDraco = true,\n\t\tuseMeshOpt = true,\n\t\tinjector,\n\t\textensions,\n\t\tonLoad,\n\t}: {\n\t\tuseDraco?: boolean | string;\n\t\tuseMeshOpt?: boolean;\n\t\tinjector?: Injector;\n\t\textensions?: (loader: GLTFLoader) => void;\n\t\tonLoad?: (data: InjectGLTFObjectMap<TGltf>) => void;\n\t} = {},\n): Signal<InjectGLTFObjectMap<TGltf> | null> & { scene: Signal<GLTF['scene'] | null> } {\n\treturn assertInjector(_injectGLTF, injector, () => {\n\t\tconst result = injectLoader(() => GLTFLoader, path, {\n\t\t\textensions: _extensions(useDraco, useMeshOpt, extensions),\n\t\t\t// @ts-expect-error - we know the type of the data\n\t\t\tonLoad,\n\t\t});\n\n\t\tObject.defineProperty(result, 'scene', {\n\t\t\tvalue: computed(() => {\n\t\t\t\tconst gltf = result() as unknown as GLTF;\n\t\t\t\tif (!gltf) return null;\n\t\t\t\treturn gltf.scene;\n\t\t\t}),\n\t\t});\n\n\t\treturn result;\n\t}) as Signal<InjectGLTFObjectMap<TGltf> | null> & { scene: Signal<GLTF['scene'] | null> };\n}\n\n_injectGLTF.preload = <TUrl extends string | string[] | Record<string, string>>(\n\tpath: () => TUrl,\n\t{\n\t\tuseDraco = true,\n\t\tuseMeshOpt = true,\n\t\textensions,\n\t\tonLoad,\n\t}: {\n\t\tuseDraco?: boolean | string;\n\t\tuseMeshOpt?: boolean;\n\t\textensions?: (loader: GLTFLoader) => void;\n\t\tonLoad?: (data: NgtLoaderResults<TUrl, GLTF & NgtObjectMap>) => void;\n\t} = {},\n) => {\n\tinjectLoader.preload(\n\t\t() => GLTFLoader,\n\t\tpath,\n\t\t_extensions(useDraco, useMeshOpt, extensions) as any,\n\t\t// @ts-expect-error - we know the type of the data\n\t\tonLoad,\n\t);\n};\n\n_injectGLTF.setDecoderPath = (path: string) => {\n\tdecoderPath = path;\n};\n\n/**\n * Type definition for the injectGLTF function, including its static methods.\n *\n * @deprecated Use gltfResource instead. Will be removed in v5.0.0\n */\nexport type NgtsGLTFLoader = typeof _injectGLTF;\n\n/**\n * Injectable function for loading GLTF/GLB 3D models.\n *\n * Supports Draco compression and Meshopt optimization out of the box.\n * Returns a signal with the loaded GLTF data including an NgtObjectMap\n * for easy access to nodes and materials by name.\n *\n * Includes static methods:\n * - `preload`: Preload models into cache\n * - `setDecoderPath`: Set custom Draco decoder path\n *\n * @deprecated Use gltfResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @example\n * ```typescript\n * // Basic usage\n * const gltf = injectGLTF(() => '/models/robot.glb');\n *\n * // With typed nodes\n * interface RobotGLTF extends GLTF {\n * nodes: { Head: THREE.Mesh; Body: THREE.Mesh };\n * }\n * const robot = injectGLTF<RobotGLTF>(() => '/models/robot.glb');\n *\n * // Access scene directly\n * const scene = gltf.scene;\n *\n * // Preload\n * injectGLTF.preload(() => '/models/robot.glb');\n * ```\n */\nexport const injectGLTF: NgtsGLTFLoader = _injectGLTF;\n","import { computed, Injector, ResourceRef, Signal } from '@angular/core';\nimport { loaderResource, type NgtObjectMap } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { DRACOLoader, type GLTF, GLTFLoader, MeshoptDecoder } from 'three-stdlib';\n\nlet dracoLoader: DRACOLoader | null = null;\nlet decoderPath = 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/';\n\n/**\n * Maps a GLTF type to its corresponding URL input type.\n */\ntype GLTFUrl<TGLTF extends GLTF | GLTF[] | Record<string, GLTF>> = TGLTF extends GLTF\n\t? string\n\t: TGLTF extends GLTF[]\n\t\t? string[]\n\t\t: TGLTF extends Record<string, GLTF>\n\t\t\t? Record<string, string>\n\t\t\t: never;\n\n/**\n * Maps a GLTF type to its result type with NgtObjectMap for easy access to nodes and materials.\n */\ntype GLTFObjectMap<\n\tTGLTF extends GLTF | GLTF[] | Record<string, GLTF>,\n\tTUrl extends string | string[] | Record<string, string>,\n> = [TGLTF, TUrl] extends [GLTF, string]\n\t? TGLTF & NgtObjectMap\n\t: [TGLTF, TUrl] extends [Array<infer _GLTF extends GLTF>, string[]]\n\t\t? Array<_GLTF & NgtObjectMap>\n\t\t: [TGLTF, TUrl] extends [Record<string, infer _GLTF extends GLTF>, Record<string, string>]\n\t\t\t? { [Key in keyof TGLTF]: _GLTF & NgtObjectMap }\n\t\t\t: [TGLTF, TUrl] extends [GLTF, string[] | Record<string, string>]\n\t\t\t\t? TUrl extends string[]\n\t\t\t\t\t? Array<TGLTF & NgtObjectMap>\n\t\t\t\t\t: { [K in keyof TUrl]: TGLTF & NgtObjectMap }\n\t\t\t\t: never;\n\n/**\n * Maps a GLTF type to its scene type(s).\n */\ntype GLTFObjectSceneMap<\n\tTGLTF extends GLTF | GLTF[] | Record<string, GLTF>,\n\tTUrl extends string | string[] | Record<string, string>,\n> = [TGLTF, TUrl] extends [GLTF, string]\n\t? GLTF['scene']\n\t: [TGLTF, TUrl] extends [Array<infer _GLTF extends GLTF>, string[]]\n\t\t? Array<_GLTF['scene']>\n\t\t: [TGLTF, TUrl] extends [Record<string, infer _GLTF extends GLTF>, Record<string, string>]\n\t\t\t? { [Key in keyof TGLTF]: _GLTF['scene'] }\n\t\t\t: [TGLTF, TUrl] extends [GLTF, string[] | Record<string, string>]\n\t\t\t\t? TUrl extends string[]\n\t\t\t\t\t? Array<GLTF['scene']>\n\t\t\t\t\t: { [K in keyof TUrl]: GLTF['scene'] }\n\t\t\t\t: never;\n\nfunction _extensions(useDraco: boolean | string, useMeshOpt: boolean, extensions?: (loader: GLTFLoader) => void) {\n\treturn (loader: THREE.Loader) => {\n\t\tif (extensions) {\n\t\t\textensions(loader as GLTFLoader);\n\t\t}\n\n\t\tif (useDraco) {\n\t\t\tif (!dracoLoader) {\n\t\t\t\tdracoLoader = new DRACOLoader();\n\t\t\t}\n\n\t\t\tdracoLoader.setDecoderPath(typeof useDraco === 'string' ? useDraco : decoderPath);\n\t\t\t(loader as GLTFLoader).setDRACOLoader(dracoLoader);\n\t\t}\n\t\tif (useMeshOpt) {\n\t\t\t(loader as GLTFLoader).setMeshoptDecoder(\n\t\t\t\ttypeof MeshoptDecoder === 'function' ? MeshoptDecoder() : MeshoptDecoder,\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * Creates a resource for loading GLTF/GLB 3D models using Angular's resource API.\n *\n * This function wraps the GLTFLoader from three-stdlib and provides a reactive\n * resource-based approach to loading GLTF files. It supports Draco compression\n * and Meshopt optimization out of the box.\n *\n * The returned resource includes a `scene` computed signal for direct access to\n * the loaded scene(s).\n *\n * @param input - Signal of the URL(s) of the GLTF/GLB file(s) to load\n * @param options - Configuration options\n * @param options.useDraco - Enable Draco compression support. Pass a string to specify custom decoder path\n * @param options.useMeshOpt - Enable Meshopt optimization support\n * @param options.injector - Optional injector for dependency injection context\n * @param options.extensions - Custom extensions callback for the GLTFLoader\n * @param options.onLoad - Callback fired when loading completes\n * @returns A ResourceRef containing the loaded GLTF data with a `scene` signal\n *\n * @example\n * ```typescript\n * // Basic usage\n * const gltf = gltfResource(() => '/models/robot.glb');\n *\n * // With typed nodes\n * interface RobotGLTF extends GLTF {\n * nodes: { Head: THREE.Mesh; Body: THREE.Mesh };\n * }\n * const robot = gltfResource<RobotGLTF>(() => '/models/robot.glb');\n *\n * // Access scene directly via computed signal\n * effect(() => {\n * const scene = robot.scene();\n * if (scene) { ... }\n * });\n *\n * // Disable Draco\n * const gltf = gltfResource(() => '/models/simple.glb', { useDraco: false });\n * ```\n */\nexport function gltfResource<\n\tTGLTF extends GLTF | GLTF[] | Record<string, GLTF> = GLTF,\n\tTUrl extends string | string[] | Record<string, string> = GLTFUrl<TGLTF>,\n>(\n\tinput: () => TUrl,\n\t{\n\t\tuseDraco = true,\n\t\tuseMeshOpt = true,\n\t\tinjector,\n\t\textensions,\n\t\tonLoad,\n\t}: {\n\t\t/** Enable Draco compression. Pass string for custom decoder path. @default true */\n\t\tuseDraco?: boolean | string;\n\t\t/** Enable Meshopt optimization. @default true */\n\t\tuseMeshOpt?: boolean;\n\t\t/** Optional injector for DI context */\n\t\tinjector?: Injector;\n\t\t/** Custom extensions callback for GLTFLoader */\n\t\textensions?: (loader: GLTFLoader) => void;\n\t\t/** Callback fired when loading completes */\n\t\tonLoad?: (data: GLTFObjectMap<TGLTF, TUrl>) => void;\n\t} = {},\n) {\n\treturn assertInjector(gltfResource, injector, () => {\n\t\tconst resource = loaderResource(() => GLTFLoader, input, {\n\t\t\textensions: _extensions(useDraco, useMeshOpt, extensions),\n\t\t\t// @ts-expect-error - we know the type of the data\n\t\t\tonLoad,\n\t\t}) as ResourceRef<GLTFObjectMap<TGLTF, TUrl> | undefined> & {\n\t\t\tscene: Signal<GLTFObjectSceneMap<TGLTF, TUrl> | null>;\n\t\t};\n\n\t\tObject.defineProperty(resource, 'scene', {\n\t\t\tvalue: computed(() => {\n\t\t\t\tconst data = resource.value();\n\t\t\t\tif (!data) return null;\n\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\treturn data.map((item) => item.scene);\n\t\t\t\t}\n\t\t\t\tif ('parser' in data) {\n\t\t\t\t\treturn data.scene;\n\t\t\t\t}\n\t\t\t\treturn Object.keys(data).reduce(\n\t\t\t\t\t(acc, key) => {\n\t\t\t\t\t\tacc[key] = data[key as keyof typeof data].scene;\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{} as Record<string, THREE.Group>,\n\t\t\t\t);\n\t\t\t}),\n\t\t});\n\n\t\treturn resource;\n\t});\n}\n\n/**\n * Preloads GLTF/GLB models into the cache for faster subsequent loading.\n *\n * @param input - The URL(s) of the GLTF/GLB file(s) to preload\n * @param options - Configuration options\n * @param options.useDraco - Enable Draco compression support\n * @param options.useMeshOpt - Enable Meshopt optimization support\n * @param options.extensions - Custom extensions callback for the GLTFLoader\n *\n * @example\n * ```typescript\n * // Preload a model\n * gltfResource.preload('/models/robot.glb');\n *\n * // Preload with custom Draco decoder path\n * gltfResource.preload('/models/robot.glb', { useDraco: '/draco/' });\n * ```\n */\ngltfResource.preload = <TUrl extends string | string[] | Record<string, string>>(\n\tinput: TUrl,\n\t{\n\t\tuseDraco = true,\n\t\tuseMeshOpt = true,\n\t\textensions,\n\t}: {\n\t\t/** Enable Draco compression. Pass string for custom decoder path. @default true */\n\t\tuseDraco?: boolean | string;\n\t\t/** Enable Meshopt optimization. @default true */\n\t\tuseMeshOpt?: boolean;\n\t\t/** Custom extensions callback for GLTFLoader */\n\t\textensions?: (loader: GLTFLoader) => void;\n\t} = {},\n) => {\n\tloaderResource.preload(GLTFLoader, input, _extensions(useDraco, useMeshOpt, extensions));\n};\n\n/**\n * Sets the global Draco decoder path for all subsequent GLTF loads.\n *\n * @param path - The URL path to the Draco decoder files\n *\n * @example\n * ```typescript\n * // Use local Draco decoder files\n * gltfResource.setDecoderPath('/draco/');\n * ```\n */\ngltfResource.setDecoderPath = (path: string) => {\n\tdecoderPath = path;\n};\n","import { DestroyRef, inject, Injector } from '@angular/core';\nimport { signalState } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\n/**\n * Creates a reactive state object that tracks Three.js asset loading progress.\n *\n * This function hooks into THREE.DefaultLoadingManager to monitor all asset\n * loading operations and provides reactive signals for progress tracking.\n * The state includes progress percentage, active status, error tracking, and\n * details about the currently loading item.\n *\n * The loading manager hooks are automatically cleaned up when the injection\n * context is destroyed.\n *\n * @param injector - Optional injector for dependency injection context\n * @returns A signal state object with the following properties:\n * - `errors`: Array of URLs that failed to load\n * - `active`: Whether loading is currently in progress\n * - `progress`: Loading progress percentage (0-100)\n * - `item`: URL of the currently loading item\n * - `loaded`: Number of items loaded\n * - `total`: Total number of items to load\n *\n * @example\n * ```typescript\n * // In a component or service\n * const loadingState = progress();\n *\n * effect(() => {\n * if (loadingState.active()) {\n * console.log(`Loading: ${loadingState.progress()}%`);\n * }\n * });\n *\n * // Check for errors\n * effect(() => {\n * const errors = loadingState.errors();\n * if (errors.length > 0) {\n * console.error('Failed to load:', errors);\n * }\n * });\n * ```\n */\nexport function progress(injector?: Injector) {\n\treturn assertInjector(progress, injector, () => {\n\t\tconst progressState = signalState<{\n\t\t\terrors: string[];\n\t\t\tactive: boolean;\n\t\t\tprogress: number;\n\t\t\titem: string;\n\t\t\tloaded: number;\n\t\t\ttotal: number;\n\t\t}>({ errors: [], active: false, progress: 0, item: '', loaded: 0, total: 0 });\n\n\t\tconst defaultOnStart = THREE.DefaultLoadingManager.onStart?.bind(THREE.DefaultLoadingManager);\n\t\tconst defaultOnLoad = THREE.DefaultLoadingManager.onLoad?.bind(THREE.DefaultLoadingManager);\n\t\tconst defaultOnError = THREE.DefaultLoadingManager.onError?.bind(THREE.DefaultLoadingManager);\n\t\tconst defaultOnProgress = THREE.DefaultLoadingManager.onProgress?.bind(THREE.DefaultLoadingManager);\n\n\t\tlet saveLastTotalLoaded = 0;\n\n\t\tTHREE.DefaultLoadingManager.onStart = (item, loaded, total) => {\n\t\t\tprogressState.update({\n\t\t\t\tactive: true,\n\t\t\t\titem,\n\t\t\t\tloaded,\n\t\t\t\ttotal,\n\t\t\t\tprogress: ((loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded)) * 100,\n\t\t\t});\n\t\t};\n\n\t\tTHREE.DefaultLoadingManager.onLoad = () => {\n\t\t\tprogressState.update({ active: false });\n\t\t};\n\n\t\tTHREE.DefaultLoadingManager.onError = (url) => {\n\t\t\tprogressState.update((prev) => ({ errors: [...prev.errors, url] }));\n\t\t};\n\n\t\tTHREE.DefaultLoadingManager.onProgress = (item, loaded, total) => {\n\t\t\tif (loaded === total) saveLastTotalLoaded = total;\n\n\t\t\tprogressState.update({\n\t\t\t\tactive: true,\n\t\t\t\titem,\n\t\t\t\tloaded,\n\t\t\t\ttotal,\n\t\t\t\tprogress: ((loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded)) * 100 || 100,\n\t\t\t});\n\t\t};\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tTHREE.DefaultLoadingManager.onStart = defaultOnStart;\n\t\t\tTHREE.DefaultLoadingManager.onLoad = defaultOnLoad;\n\t\t\tTHREE.DefaultLoadingManager.onError = defaultOnError;\n\t\t\tTHREE.DefaultLoadingManager.onProgress = defaultOnProgress;\n\t\t});\n\n\t\treturn progressState;\n\t});\n}\n\n/**\n * Alias for the `progress` function.\n *\n * @deprecated Use `progress` instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @see {@link progress}\n */\nexport const injectProgress = progress;\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\teffect,\n\tinput,\n\tsignal,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport { pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { progress } from './progress';\n\nconst defaultDataInterpolation = (p: number) => `Loading ${p.toFixed(2)}%`;\n\n/**\n * Configuration options for the NgtsLoader component.\n */\nexport interface NgtsLoaderOptions {\n\t/**\n\t * CSS class to apply to the outer container element.\n\t * @default ''\n\t */\n\tcontainerClass?: string;\n\t/**\n\t * CSS class to apply to the inner wrapper element.\n\t * @default ''\n\t */\n\tinnerClass?: string;\n\t/**\n\t * CSS class to apply to the progress bar element.\n\t * @default ''\n\t */\n\tbarClass?: string;\n\t/**\n\t * CSS class to apply to the data/percentage text element.\n\t * @default ''\n\t */\n\tdataClass?: string;\n\t/**\n\t * Function to format the progress percentage display text.\n\t * @param value - Current progress value (0-100)\n\t * @returns Formatted string to display\n\t * @default (p) => `Loading ${p.toFixed(2)}%`\n\t */\n\tdataInterpolation: (value: number) => string;\n\t/**\n\t * Function to determine initial visibility state.\n\t * @param value - Current active loading state\n\t * @returns Whether the loader should be shown initially\n\t * @default (value) => value\n\t */\n\tinitialState: (value: boolean) => boolean;\n}\n\nconst defaultOptions: NgtsLoaderOptions = {\n\tcontainerClass: '',\n\tinnerClass: '',\n\tbarClass: '',\n\tdataClass: '',\n\tdataInterpolation: defaultDataInterpolation,\n\tinitialState: (value) => value,\n};\n\n/**\n * A loading indicator component that displays asset loading progress.\n *\n * This component automatically tracks Three.js asset loading progress using the\n * DefaultLoadingManager and displays an animated progress bar with percentage.\n *\n * The loader fades in when loading starts and fades out when complete.\n * CSS classes can be customized via options for styling flexibility.\n *\n * @example\n * ```html\n * <!-- Basic usage -->\n * <ngts-loader />\n *\n * <!-- With custom options -->\n * <ngts-loader [options]=\"{\n * containerClass: 'my-loader',\n * dataInterpolation: (p) => `${Math.round(p)}% loaded`\n * }\" />\n * ```\n */\n@Component({\n\tselector: 'ngts-loader',\n\ttemplate: `\n\t\t@if (shown()) {\n\t\t\t<div\n\t\t\t\tclass=\"ngts-loader-container\"\n\t\t\t\t[class]=\"containerClass() || ''\"\n\t\t\t\t[style.--ngts-loader-container-opacity]=\"active() ? 1 : 0\"\n\t\t\t>\n\t\t\t\t<div>\n\t\t\t\t\t<div class=\"ngts-loader-inner\" [class]=\"innerClass() || ''\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"ngts-loader-bar\"\n\t\t\t\t\t\t\t[class]=\"barClass() || ''\"\n\t\t\t\t\t\t\t[style.--ngts-loader-bar-scale]=\"progress() / 100\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t\t<span #progressSpanRef class=\"ngts-loader-data\" [class]=\"dataClass() || ''\"></span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t}\n\t`,\n\tstyleUrls: ['./loader.css'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsLoader {\n\tprivate progressState = progress();\n\n\tprotected active = this.progressState.active;\n\tprotected progress = this.progressState.progress;\n\n\t/**\n\t * Configuration options for the loader appearance and behavior.\n\t */\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprotected containerClass = pick(this.options, 'containerClass');\n\tprotected innerClass = pick(this.options, 'innerClass');\n\tprotected barClass = pick(this.options, 'barClass');\n\tprotected dataClass = pick(this.options, 'dataClass');\n\tprivate initialState = pick(this.options, 'initialState');\n\tprivate dataInterpolation = pick(this.options, 'dataInterpolation');\n\n\tprivate progressSpanRef = viewChild<ElementRef<HTMLSpanElement>>('progressSpanRef');\n\n\tprotected shown = signal(this.initialState()(this.active()));\n\n\tconstructor() {\n\t\teffect((onCleanup) => {\n\t\t\tconst [active, lastShown] = [this.active(), untracked(this.shown)];\n\t\t\tif (lastShown !== active) {\n\t\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\t\tthis.shown.set(active);\n\t\t\t\t}, 300);\n\t\t\t\tonCleanup(() => clearTimeout(timeoutId));\n\t\t\t}\n\t\t});\n\n\t\tlet progressRef = 0;\n\t\tlet rafId: ReturnType<typeof requestAnimationFrame>;\n\t\teffect((onCleanup) => {\n\t\t\tconst [dataInterpolation, progress] = [this.dataInterpolation(), this.progress()];\n\t\t\tconst updateProgress = () => {\n\t\t\t\tconst progressSpan = this.progressSpanRef()?.nativeElement;\n\t\t\t\tif (!progressSpan) return;\n\t\t\t\tprogressRef += (progress - progressRef) / 2;\n\t\t\t\tif (progressRef > 0.95 * progress || progress === 100) progressRef = progress;\n\t\t\t\tprogressSpan.innerText = dataInterpolation(progressRef);\n\t\t\t\tif (progressRef < progress) {\n\t\t\t\t\trafId = requestAnimationFrame(updateProgress);\n\t\t\t\t}\n\t\t\t};\n\t\t\tupdateProgress();\n\t\t\tonCleanup(() => cancelAnimationFrame(rafId));\n\t\t});\n\t}\n}\n","import { effect, Injector, Signal } from '@angular/core';\nimport { injectLoader, injectStore, is, NgtLoaderResults } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\n/**\n * Loads texture images using THREE.TextureLoader.\n *\n * @deprecated Use textureResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @param input - Signal of the URL(s) of the texture(s) to load\n * @param options - Configuration options\n * @param options.onLoad - Callback fired when textures are loaded\n * @param options.injector - Optional injector for dependency injection context\n * @returns A signal containing the loaded texture(s)\n */\nfunction _injectTexture<TInput extends string[] | string | Record<string, string>>(\n\tinput: () => TInput,\n\t{ onLoad, injector }: { onLoad?: (texture: THREE.Texture[]) => void; injector?: Injector } = {},\n): Signal<NgtLoaderResults<TInput, THREE.Texture> | null> {\n\treturn assertInjector(_injectTexture, injector, () => {\n\t\tconst store = injectStore();\n\t\tconst result = injectLoader(() => THREE.TextureLoader, input);\n\n\t\teffect(() => {\n\t\t\tconst textures = result();\n\t\t\tif (!textures) return;\n\t\t\tconst gl = store.snapshot.gl;\n\t\t\tif ('initTexture' in gl) {\n\t\t\t\tconst array = Array.isArray(textures)\n\t\t\t\t\t? textures\n\t\t\t\t\t: is.three<THREE.Texture>(textures, 'isTexture')\n\t\t\t\t\t\t? [textures]\n\t\t\t\t\t\t: Object.values(textures);\n\t\t\t\tif (onLoad) onLoad(array);\n\t\t\t\tarray.forEach(gl.initTexture.bind(gl));\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t});\n}\n\n_injectTexture.preload = <TInput extends string[] | string | Record<string, string>>(input: () => TInput) => {\n\tinjectLoader.preload(() => THREE.TextureLoader, input);\n};\n\n/**\n * Type definition for the injectTexture function, including its static preload method.\n *\n * @deprecated Use textureResource instead. Will be removed in v5.0.0\n */\nexport type NgtsTextureLoader = typeof _injectTexture;\n\n/**\n * Injectable function for loading texture images.\n *\n * Loads textures using THREE.TextureLoader and automatically initializes them\n * with the WebGL renderer for optimal performance. Supports loading single textures,\n * arrays of textures, or record objects mapping keys to URLs.\n *\n * Includes a static `preload` method for preloading textures.\n *\n * @deprecated Use textureResource instead. Will be removed in v5.0.0\n * @since v4.0.0\n *\n * @example\n * ```typescript\n * // Single texture\n * const texture = injectTexture(() => '/textures/diffuse.jpg');\n *\n * // Multiple textures\n * const textures = injectTexture(() => ['/textures/diffuse.jpg', '/textures/normal.jpg']);\n *\n * // Named textures\n * const maps = injectTexture(() => ({\n * diffuse: '/textures/diffuse.jpg',\n * normal: '/textures/normal.jpg'\n * }));\n *\n * // Preload\n * injectTexture.preload(() => '/textures/diffuse.jpg');\n * ```\n */\nexport const injectTexture: NgtsTextureLoader = _injectTexture;\n","import { effect, Injector } from '@angular/core';\nimport { injectStore, is, loaderResource, NgtLoaderResults } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\n/**\n * Creates a resource for loading texture images using Angular's resource API.\n *\n * This function wraps THREE.TextureLoader and provides a reactive resource-based\n * approach to loading textures. Loaded textures are automatically initialized\n * with the WebGL renderer for optimal performance.\n *\n * Supports loading single textures, arrays of textures, or record objects mapping\n * keys to URLs.\n *\n * @param input - Signal of the URL(s) of the texture(s) to load\n * @param options - Configuration options\n * @param options.onLoad - Callback fired when textures are loaded\n * @param options.injector - Optional injector for dependency injection context\n * @returns A ResourceRef containing the loaded texture(s)\n *\n * @example\n * ```typescript\n * // Single texture\n * const texture = textureResource(() => '/textures/diffuse.jpg');\n *\n * // Multiple textures\n * const textures = textureResource(() => ['/textures/diffuse.jpg', '/textures/normal.jpg']);\n *\n * // Named textures\n * const maps = textureResource(() => ({\n * diffuse: '/textures/diffuse.jpg',\n * normal: '/textures/normal.jpg'\n * }));\n *\n * // With onLoad callback\n * const texture = textureResource(() => '/textures/diffuse.jpg', {\n * onLoad: (tex) => console.log('Texture loaded:', tex)\n * });\n * ```\n */\nexport function textureResource<TUrl extends string[] | string | Record<string, string>>(\n\tinput: () => TUrl,\n\t{\n\t\tonLoad,\n\t\tinjector,\n\t}: {\n\t\t/** Callback fired when textures are loaded */\n\t\tonLoad?: (result: NgtLoaderResults<TUrl, THREE.Texture>) => void;\n\t\t/** Optional injector for DI context */\n\t\tinjector?: Injector;\n\t} = {},\n) {\n\treturn assertInjector(textureResource, injector, () => {\n\t\tconst store = injectStore();\n\t\tconst resource = loaderResource(() => THREE.TextureLoader, input);\n\n\t\teffect(() => {\n\t\t\tif (!resource.hasValue()) return;\n\t\t\tconst result = resource.value();\n\n\t\t\tif (onLoad) onLoad(result);\n\n\t\t\tconst gl = store.snapshot.gl;\n\t\t\tif ('initTexture' in gl) {\n\t\t\t\tlet textures: THREE.Texture[];\n\n\t\t\t\tif (Array.isArray(result)) {\n\t\t\t\t\ttextures = result;\n\t\t\t\t} else if (is.three<THREE.Texture>(result, 'isTexture')) {\n\t\t\t\t\ttextures = [result];\n\t\t\t\t} else {\n\t\t\t\t\ttextures = Object.values(result);\n\t\t\t\t}\n\n\t\t\t\ttextures.forEach(gl.initTexture.bind(gl));\n\t\t\t}\n\t\t});\n\n\t\treturn resource;\n\t});\n}\n\n/**\n * Preloads textures into the cache for faster subsequent loading.\n *\n * @param input - The URL(s) of the texture(s) to preload\n *\n * @example\n * ```typescript\n * // Preload a single texture\n * textureResource.preload('/textures/diffuse.jpg');\n *\n * // Preload multiple textures\n * textureResource.preload(['/textures/diffuse.jpg', '/textures/normal.jpg']);\n * ```\n */\ntextureResource.preload = <TUrl extends string[] | string | Record<string, string>>(input: TUrl) => {\n\tloaderResource.preload(THREE.TextureLoader, input);\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["dracoLoader","decoderPath","_extensions"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -121,7 +121,7 @@ declare class NgtsLine {
|
|
|
121
121
|
* Configuration options for the line appearance and behavior.
|
|
122
122
|
*/
|
|
123
123
|
options: _angular_core.InputSignalWithTransform<NgtsLineOptions, "" | Partial<NgtsLineOptions>>;
|
|
124
|
-
protected parameters: _angular_core.Signal<Omit<NgtsLineOptions, "
|
|
124
|
+
protected parameters: _angular_core.Signal<Omit<NgtsLineOptions, "vertexColors" | "color" | "dashed" | "linewidth" | "lineWidth" | "segments">>;
|
|
125
125
|
/**
|
|
126
126
|
* Reference to the underlying Line2 or LineSegments2 Three.js object.
|
|
127
127
|
*/
|
|
@@ -313,43 +313,10 @@ declare class NgtsCatmullRomLine {
|
|
|
313
313
|
}[T]) => void)>)) | undefined;
|
|
314
314
|
dispose?: (((() => void) | Readonly<() => void> | null) & (((() => void) & (() => void)) | Readonly<(() => void) & (() => void)>)) | undefined;
|
|
315
315
|
parameters?: ((Partial<three_stdlib.Line2> | Readonly<Partial<three_stdlib.Line2>>) & (Partial<three_stdlib.LineMaterial> | Readonly<Partial<three_stdlib.LineMaterial>>)) | undefined;
|
|
316
|
-
geometry?: three_stdlib.LineGeometry | Readonly<three_stdlib.LineGeometry | undefined>;
|
|
317
|
-
material?: three_stdlib.LineMaterial | Readonly<three_stdlib.LineMaterial | undefined>;
|
|
318
|
-
isLine2?: true | undefined;
|
|
319
|
-
isLineSegments2?: true | undefined;
|
|
320
|
-
computeLineDistances?: (() => three_stdlib.Line2) | Readonly<(() => three_stdlib.Line2) | undefined>;
|
|
321
|
-
isMesh?: true | undefined;
|
|
322
|
-
morphTargetInfluences?: number[] | Readonly<number[] | undefined>;
|
|
323
|
-
morphTargetDictionary?: {
|
|
324
|
-
[key: string]: number;
|
|
325
|
-
} | Readonly<{
|
|
326
|
-
[key: string]: number;
|
|
327
|
-
} | undefined>;
|
|
328
|
-
count?: Readonly<number | undefined>;
|
|
329
|
-
updateMorphTargets?: (() => void) | Readonly<(() => void) | undefined>;
|
|
330
|
-
getVertexPosition?: ((index: number, target: THREE.Vector3) => THREE.Vector3) | Readonly<((index: number, target: THREE.Vector3) => THREE.Vector3) | undefined>;
|
|
331
316
|
color?: THREE.ColorRepresentation | undefined;
|
|
332
|
-
dashed?: boolean | undefined | undefined;
|
|
333
|
-
dashScale?: number | undefined | undefined;
|
|
334
|
-
dashSize?: number | undefined | undefined;
|
|
335
|
-
dashOffset?: number | undefined | undefined;
|
|
336
|
-
gapSize?: number | undefined | undefined;
|
|
337
|
-
opacity?: number | undefined;
|
|
338
|
-
isLineMaterial?: true | undefined;
|
|
339
|
-
linewidth?: number | undefined | undefined;
|
|
340
|
-
resolution?: (THREE.Vector2 & (number | THREE.Vector2 | [x: number, y: number] | Readonly<THREE.Vector2> | readonly [x: number, y: number])) | undefined;
|
|
341
|
-
alphaToCoverage?: boolean | undefined | undefined;
|
|
342
|
-
worldUnits?: boolean | undefined | undefined;
|
|
343
|
-
isShaderMaterial?: Readonly<boolean | undefined>;
|
|
344
|
-
setValues?: ((values?: THREE.ShaderMaterialParameters) => void) | Readonly<((values?: THREE.ShaderMaterialParameters) => void) | undefined>;
|
|
345
|
-
defines?: Record<string, unknown> | Readonly<Record<string, unknown> | undefined>;
|
|
346
|
-
isMaterial?: Readonly<boolean | undefined>;
|
|
347
|
-
version?: Readonly<number | undefined>;
|
|
348
|
-
onBeforeCompile?: ((parameters: THREE.WebGLProgramParametersWithUniforms, renderer: THREE.WebGLRenderer) => void) | Readonly<((parameters: THREE.WebGLProgramParametersWithUniforms, renderer: THREE.WebGLRenderer) => void) | undefined>;
|
|
349
|
-
customProgramCacheKey?: (() => string) | Readonly<(() => string) | undefined>;
|
|
350
|
-
needsUpdate?: Readonly<boolean | undefined>;
|
|
351
317
|
blending?: 0 | 1 | 2 | 3 | 4 | 5 | undefined;
|
|
352
318
|
side?: 0 | 1 | 2 | undefined;
|
|
319
|
+
opacity?: number | undefined;
|
|
353
320
|
transparent?: boolean | undefined;
|
|
354
321
|
alphaHash?: boolean | undefined;
|
|
355
322
|
blendSrc?: 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | undefined;
|
|
@@ -381,11 +348,45 @@ declare class NgtsCatmullRomLine {
|
|
|
381
348
|
polygonOffsetFactor?: number | undefined;
|
|
382
349
|
polygonOffsetUnits?: number | undefined;
|
|
383
350
|
dithering?: boolean | undefined;
|
|
351
|
+
alphaToCoverage?: boolean | undefined | undefined;
|
|
384
352
|
premultipliedAlpha?: boolean | undefined;
|
|
385
353
|
forceSinglePass?: boolean | undefined;
|
|
386
354
|
allowOverride?: boolean | undefined;
|
|
387
355
|
toneMapped?: boolean | undefined;
|
|
388
356
|
alphaTest?: number | undefined;
|
|
357
|
+
dashed?: boolean | undefined | undefined;
|
|
358
|
+
dashScale?: number | undefined | undefined;
|
|
359
|
+
dashSize?: number | undefined | undefined;
|
|
360
|
+
dashOffset?: number | undefined | undefined;
|
|
361
|
+
gapSize?: number | undefined | undefined;
|
|
362
|
+
linewidth?: number | undefined | undefined;
|
|
363
|
+
resolution?: (THREE.Vector2 & (number | THREE.Vector2 | [x: number, y: number] | Readonly<THREE.Vector2> | readonly [x: number, y: number])) | undefined;
|
|
364
|
+
wireframe?: boolean | undefined | undefined;
|
|
365
|
+
worldUnits?: boolean | undefined | undefined;
|
|
366
|
+
geometry?: three_stdlib.LineGeometry | Readonly<three_stdlib.LineGeometry | undefined>;
|
|
367
|
+
material?: three_stdlib.LineMaterial | Readonly<three_stdlib.LineMaterial | undefined>;
|
|
368
|
+
isLine2?: true | undefined;
|
|
369
|
+
isLineSegments2?: true | undefined;
|
|
370
|
+
computeLineDistances?: (() => three_stdlib.Line2) | Readonly<(() => three_stdlib.Line2) | undefined>;
|
|
371
|
+
isMesh?: true | undefined;
|
|
372
|
+
morphTargetInfluences?: number[] | Readonly<number[] | undefined>;
|
|
373
|
+
morphTargetDictionary?: {
|
|
374
|
+
[key: string]: number;
|
|
375
|
+
} | Readonly<{
|
|
376
|
+
[key: string]: number;
|
|
377
|
+
} | undefined>;
|
|
378
|
+
count?: Readonly<number | undefined>;
|
|
379
|
+
updateMorphTargets?: (() => void) | Readonly<(() => void) | undefined>;
|
|
380
|
+
getVertexPosition?: ((index: number, target: THREE.Vector3) => THREE.Vector3) | Readonly<((index: number, target: THREE.Vector3) => THREE.Vector3) | undefined>;
|
|
381
|
+
isLineMaterial?: true | undefined;
|
|
382
|
+
isShaderMaterial?: Readonly<boolean | undefined>;
|
|
383
|
+
setValues?: ((values?: THREE.ShaderMaterialParameters) => void) | Readonly<((values?: THREE.ShaderMaterialParameters) => void) | undefined>;
|
|
384
|
+
defines?: Record<string, unknown> | Readonly<Record<string, unknown> | undefined>;
|
|
385
|
+
isMaterial?: Readonly<boolean | undefined>;
|
|
386
|
+
version?: Readonly<number | undefined>;
|
|
387
|
+
onBeforeCompile?: ((parameters: THREE.WebGLProgramParametersWithUniforms, renderer: THREE.WebGLRenderer) => void) | Readonly<((parameters: THREE.WebGLProgramParametersWithUniforms, renderer: THREE.WebGLRenderer) => void) | undefined>;
|
|
388
|
+
customProgramCacheKey?: (() => string) | Readonly<(() => string) | undefined>;
|
|
389
|
+
needsUpdate?: Readonly<boolean | undefined>;
|
|
389
390
|
uniforms?: {
|
|
390
391
|
[uniform: string]: THREE.IUniform<any>;
|
|
391
392
|
} | Readonly<{
|
|
@@ -394,7 +395,6 @@ declare class NgtsCatmullRomLine {
|
|
|
394
395
|
uniformsGroups?: THREE.UniformsGroup[] | Readonly<THREE.UniformsGroup[] | undefined>;
|
|
395
396
|
vertexShader?: Readonly<string | undefined>;
|
|
396
397
|
fragmentShader?: Readonly<string | undefined>;
|
|
397
|
-
wireframe?: boolean | undefined | undefined;
|
|
398
398
|
wireframeLinewidth?: Readonly<number | undefined>;
|
|
399
399
|
fog?: Readonly<boolean | undefined>;
|
|
400
400
|
lights?: Readonly<boolean | undefined>;
|
|
@@ -610,42 +610,10 @@ declare class NgtsEdges {
|
|
|
610
610
|
dispose?: (((() => void) | Readonly<() => void> | null) & (((() => void) & (() => void)) | Readonly<(() => void) & (() => void)>)) | undefined;
|
|
611
611
|
parameters?: ((Partial<THREE.Mesh<THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>, THREE.Material | THREE.Material[], THREE.Object3DEventMap>> | Readonly<Partial<THREE.Mesh<THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>, THREE.Material | THREE.Material[], THREE.Object3DEventMap>>>) & ((Partial<three_stdlib.Line2> | Readonly<Partial<three_stdlib.Line2>>) & (Partial<three_stdlib.LineMaterial> | Readonly<Partial<three_stdlib.LineMaterial>>))) | undefined;
|
|
612
612
|
__ngt_args__?: (([geometry?: THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap> | undefined, material?: THREE.Material | THREE.Material[] | undefined] | readonly [geometry?: THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap> | undefined, material?: THREE.Material | THREE.Material[] | undefined]) & (([geometry?: three_stdlib.LineGeometry | undefined, material?: three_stdlib.LineMaterial | undefined] | readonly [geometry?: three_stdlib.LineGeometry | undefined, material?: three_stdlib.LineMaterial | undefined]) & ([parameters?: LineMaterialParameters | undefined] | readonly [parameters?: LineMaterialParameters | undefined]))) | undefined;
|
|
613
|
-
material?: ((THREE.Material | THREE.Material[] | Readonly<THREE.Material> | readonly THREE.Material[]) & (three_stdlib.LineMaterial | Readonly<three_stdlib.LineMaterial>)) | undefined;
|
|
614
|
-
isLine2?: true | undefined;
|
|
615
|
-
isLineSegments2?: true | undefined;
|
|
616
|
-
computeLineDistances?: (() => three_stdlib.Line2) | Readonly<(() => three_stdlib.Line2) | undefined>;
|
|
617
|
-
isMesh?: true | undefined;
|
|
618
|
-
morphTargetInfluences?: number[] | Readonly<number[] | undefined>;
|
|
619
|
-
morphTargetDictionary?: {
|
|
620
|
-
[key: string]: number;
|
|
621
|
-
} | Readonly<{
|
|
622
|
-
[key: string]: number;
|
|
623
|
-
} | undefined>;
|
|
624
|
-
count?: Readonly<number | undefined>;
|
|
625
|
-
updateMorphTargets?: (() => void) | Readonly<(() => void) | undefined>;
|
|
626
|
-
getVertexPosition?: ((index: number, target: THREE.Vector3) => THREE.Vector3) | Readonly<((index: number, target: THREE.Vector3) => THREE.Vector3) | undefined>;
|
|
627
613
|
color?: THREE.ColorRepresentation | undefined;
|
|
628
|
-
dashed?: boolean | undefined | undefined;
|
|
629
|
-
dashScale?: number | undefined | undefined;
|
|
630
|
-
dashSize?: number | undefined | undefined;
|
|
631
|
-
dashOffset?: number | undefined | undefined;
|
|
632
|
-
gapSize?: number | undefined | undefined;
|
|
633
|
-
opacity?: number | undefined;
|
|
634
|
-
isLineMaterial?: true | undefined;
|
|
635
|
-
linewidth?: number | undefined | undefined;
|
|
636
|
-
resolution?: (THREE.Vector2 & (number | THREE.Vector2 | [x: number, y: number] | Readonly<THREE.Vector2> | readonly [x: number, y: number])) | undefined;
|
|
637
|
-
alphaToCoverage?: boolean | undefined | undefined;
|
|
638
|
-
worldUnits?: boolean | undefined | undefined;
|
|
639
|
-
isShaderMaterial?: Readonly<boolean | undefined>;
|
|
640
|
-
setValues?: ((values?: THREE.ShaderMaterialParameters) => void) | Readonly<((values?: THREE.ShaderMaterialParameters) => void) | undefined>;
|
|
641
|
-
defines?: Record<string, unknown> | Readonly<Record<string, unknown> | undefined>;
|
|
642
|
-
isMaterial?: Readonly<boolean | undefined>;
|
|
643
|
-
version?: Readonly<number | undefined>;
|
|
644
|
-
onBeforeCompile?: ((parameters: THREE.WebGLProgramParametersWithUniforms, renderer: THREE.WebGLRenderer) => void) | Readonly<((parameters: THREE.WebGLProgramParametersWithUniforms, renderer: THREE.WebGLRenderer) => void) | undefined>;
|
|
645
|
-
customProgramCacheKey?: (() => string) | Readonly<(() => string) | undefined>;
|
|
646
|
-
needsUpdate?: Readonly<boolean | undefined>;
|
|
647
614
|
blending?: 0 | 1 | 2 | 3 | 4 | 5 | undefined;
|
|
648
615
|
side?: 0 | 1 | 2 | undefined;
|
|
616
|
+
opacity?: number | undefined;
|
|
649
617
|
transparent?: boolean | undefined;
|
|
650
618
|
alphaHash?: boolean | undefined;
|
|
651
619
|
blendSrc?: 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | undefined;
|
|
@@ -677,11 +645,44 @@ declare class NgtsEdges {
|
|
|
677
645
|
polygonOffsetFactor?: number | undefined;
|
|
678
646
|
polygonOffsetUnits?: number | undefined;
|
|
679
647
|
dithering?: boolean | undefined;
|
|
648
|
+
alphaToCoverage?: boolean | undefined | undefined;
|
|
680
649
|
premultipliedAlpha?: boolean | undefined;
|
|
681
650
|
forceSinglePass?: boolean | undefined;
|
|
682
651
|
allowOverride?: boolean | undefined;
|
|
683
652
|
toneMapped?: boolean | undefined;
|
|
684
653
|
alphaTest?: number | undefined;
|
|
654
|
+
dashed?: boolean | undefined | undefined;
|
|
655
|
+
dashScale?: number | undefined | undefined;
|
|
656
|
+
dashSize?: number | undefined | undefined;
|
|
657
|
+
dashOffset?: number | undefined | undefined;
|
|
658
|
+
gapSize?: number | undefined | undefined;
|
|
659
|
+
linewidth?: number | undefined | undefined;
|
|
660
|
+
resolution?: (THREE.Vector2 & (number | THREE.Vector2 | [x: number, y: number] | Readonly<THREE.Vector2> | readonly [x: number, y: number])) | undefined;
|
|
661
|
+
wireframe?: boolean | undefined | undefined;
|
|
662
|
+
worldUnits?: boolean | undefined | undefined;
|
|
663
|
+
material?: ((THREE.Material | THREE.Material[] | Readonly<THREE.Material> | readonly THREE.Material[]) & (three_stdlib.LineMaterial | Readonly<three_stdlib.LineMaterial>)) | undefined;
|
|
664
|
+
isLine2?: true | undefined;
|
|
665
|
+
isLineSegments2?: true | undefined;
|
|
666
|
+
computeLineDistances?: (() => three_stdlib.Line2) | Readonly<(() => three_stdlib.Line2) | undefined>;
|
|
667
|
+
isMesh?: true | undefined;
|
|
668
|
+
morphTargetInfluences?: number[] | Readonly<number[] | undefined>;
|
|
669
|
+
morphTargetDictionary?: {
|
|
670
|
+
[key: string]: number;
|
|
671
|
+
} | Readonly<{
|
|
672
|
+
[key: string]: number;
|
|
673
|
+
} | undefined>;
|
|
674
|
+
count?: Readonly<number | undefined>;
|
|
675
|
+
updateMorphTargets?: (() => void) | Readonly<(() => void) | undefined>;
|
|
676
|
+
getVertexPosition?: ((index: number, target: THREE.Vector3) => THREE.Vector3) | Readonly<((index: number, target: THREE.Vector3) => THREE.Vector3) | undefined>;
|
|
677
|
+
isLineMaterial?: true | undefined;
|
|
678
|
+
isShaderMaterial?: Readonly<boolean | undefined>;
|
|
679
|
+
setValues?: ((values?: THREE.ShaderMaterialParameters) => void) | Readonly<((values?: THREE.ShaderMaterialParameters) => void) | undefined>;
|
|
680
|
+
defines?: Record<string, unknown> | Readonly<Record<string, unknown> | undefined>;
|
|
681
|
+
isMaterial?: Readonly<boolean | undefined>;
|
|
682
|
+
version?: Readonly<number | undefined>;
|
|
683
|
+
onBeforeCompile?: ((parameters: THREE.WebGLProgramParametersWithUniforms, renderer: THREE.WebGLRenderer) => void) | Readonly<((parameters: THREE.WebGLProgramParametersWithUniforms, renderer: THREE.WebGLRenderer) => void) | undefined>;
|
|
684
|
+
customProgramCacheKey?: (() => string) | Readonly<(() => string) | undefined>;
|
|
685
|
+
needsUpdate?: Readonly<boolean | undefined>;
|
|
685
686
|
uniforms?: {
|
|
686
687
|
[uniform: string]: THREE.IUniform<any>;
|
|
687
688
|
} | Readonly<{
|
|
@@ -690,7 +691,6 @@ declare class NgtsEdges {
|
|
|
690
691
|
uniformsGroups?: THREE.UniformsGroup[] | Readonly<THREE.UniformsGroup[] | undefined>;
|
|
691
692
|
vertexShader?: Readonly<string | undefined>;
|
|
692
693
|
fragmentShader?: Readonly<string | undefined>;
|
|
693
|
-
wireframe?: boolean | undefined | undefined;
|
|
694
694
|
wireframeLinewidth?: Readonly<number | undefined>;
|
|
695
695
|
fog?: Readonly<boolean | undefined>;
|
|
696
696
|
lights?: Readonly<boolean | undefined>;
|
|
@@ -1338,7 +1338,7 @@ declare class NgtsText {
|
|
|
1338
1338
|
* Configuration options for text appearance and behavior.
|
|
1339
1339
|
*/
|
|
1340
1340
|
options: _angular_core.InputSignalWithTransform<NgtsTextOptions, "" | Partial<NgtsTextOptions>>;
|
|
1341
|
-
protected parameters: _angular_core.Signal<Omit<NgtsTextOptions, "
|
|
1341
|
+
protected parameters: _angular_core.Signal<Omit<NgtsTextOptions, "font" | "fontSize" | "sdfGlyphSize" | "anchorX" | "anchorY" | "characters">>;
|
|
1342
1342
|
/**
|
|
1343
1343
|
* Emitted when the text has been synced and is ready for rendering.
|
|
1344
1344
|
* Returns the Troika Text mesh instance.
|
|
@@ -29,7 +29,7 @@ declare class NgtsCustomShaderMaterial {
|
|
|
29
29
|
/**
|
|
30
30
|
* The base Three.js material to extend. Can be a material instance, material class, or ElementRef to a material.
|
|
31
31
|
*/
|
|
32
|
-
baseMaterial: _angular_core.InputSignal<
|
|
32
|
+
baseMaterial: _angular_core.InputSignal<THREE.Material | typeof THREE.Material | ElementRef<THREE.Material>>;
|
|
33
33
|
/**
|
|
34
34
|
* How to attach the material to its parent object.
|
|
35
35
|
* @default 'material'
|
|
@@ -41,7 +41,7 @@ declare class NgtsCustomShaderMaterial {
|
|
|
41
41
|
*/
|
|
42
42
|
options: _angular_core.InputSignal<Omit<any, "baseMaterial">>;
|
|
43
43
|
/** Material parameters excluding shader-specific options. */
|
|
44
|
-
parameters: _angular_core.Signal<Omit<Omit<any, "baseMaterial">, "
|
|
44
|
+
parameters: _angular_core.Signal<Omit<Omit<any, "baseMaterial">, "fragmentShader" | "vertexShader" | "uniforms" | "cacheKey">>;
|
|
45
45
|
private base;
|
|
46
46
|
private fragmentShader;
|
|
47
47
|
private vertexShader;
|
|
@@ -418,12 +418,12 @@ declare class NgtsMeshRefractionMaterial {
|
|
|
418
418
|
* Configuration options for the refraction material.
|
|
419
419
|
*/
|
|
420
420
|
options: _angular_core.InputSignalWithTransform<NgtsMeshRefractionMaterialOptions, "" | Partial<NgtsMeshRefractionMaterialOptions>>;
|
|
421
|
-
protected parameters: _angular_core.Signal<Omit<NgtsMeshRefractionMaterialOptions, "
|
|
421
|
+
protected parameters: _angular_core.Signal<Omit<NgtsMeshRefractionMaterialOptions, "fastChroma" | "aberrationStrength">>;
|
|
422
422
|
private fastChroma;
|
|
423
423
|
protected aberrationStrength: _angular_core.Signal<number>;
|
|
424
424
|
/** Reference to the underlying MeshRefractionMaterial element. */
|
|
425
425
|
materialRef: _angular_core.Signal<ElementRef<THREE.ShaderMaterial & {
|
|
426
|
-
[name: string]: number | boolean | any[] | THREE.Color | THREE.
|
|
426
|
+
[name: string]: number | boolean | any[] | THREE.Color | THREE.Matrix3 | THREE.Matrix4 | THREE.Quaternion | THREE.Vector2 | THREE.Vector3 | THREE.Vector4 | THREE.Texture<unknown> | THREE.CubeTexture<unknown> | Int32Array<ArrayBufferLike> | Float32Array<ArrayBufferLike> | null;
|
|
427
427
|
}> | undefined>;
|
|
428
428
|
private store;
|
|
429
429
|
protected resolution: _angular_core.Signal<number[]>;
|
|
@@ -432,7 +432,7 @@ declare class NgtsMeshRefractionMaterial {
|
|
|
432
432
|
}>;
|
|
433
433
|
private defineKeys;
|
|
434
434
|
protected material: _angular_core.Signal<THREE.ShaderMaterial & {
|
|
435
|
-
[name: string]: number | boolean | any[] | THREE.Color | THREE.
|
|
435
|
+
[name: string]: number | boolean | any[] | THREE.Color | THREE.Matrix3 | THREE.Matrix4 | THREE.Quaternion | THREE.Vector2 | THREE.Vector3 | THREE.Vector4 | THREE.Texture<unknown> | THREE.CubeTexture<unknown> | Int32Array<ArrayBufferLike> | Float32Array<ArrayBufferLike> | null;
|
|
436
436
|
}>;
|
|
437
437
|
constructor();
|
|
438
438
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgtsMeshRefractionMaterial, never>;
|
|
@@ -525,7 +525,7 @@ declare class NgtsMeshTransmissionMaterial {
|
|
|
525
525
|
* Configuration options for the transmission material.
|
|
526
526
|
*/
|
|
527
527
|
options: _angular_core.InputSignalWithTransform<NgtsMeshTransmissionMaterialOptions, "" | Partial<NgtsMeshTransmissionMaterialOptions>>;
|
|
528
|
-
protected parameters: _angular_core.Signal<Omit<NgtsMeshTransmissionMaterialOptions, "
|
|
528
|
+
protected parameters: _angular_core.Signal<Omit<NgtsMeshTransmissionMaterialOptions, "thickness" | "anisotropy" | "transmission" | "side" | "resolution" | "background" | "buffer" | "anisotropicBlur" | "samples" | "transmissionSampler" | "backside" | "backsideThickness" | "backsideEnvMapIntensity" | "backsideResolution">>;
|
|
529
529
|
private resolution;
|
|
530
530
|
private backsideResolution;
|
|
531
531
|
private samples;
|
|
@@ -694,7 +694,7 @@ declare class NgtsHTMLImpl {
|
|
|
694
694
|
* HTML anchor configuration including position, occlusion, and transform settings.
|
|
695
695
|
*/
|
|
696
696
|
options: _angular_core.InputSignalWithTransform<NgtsHTMLOptions, "" | Partial<NgtsHTMLOptions>>;
|
|
697
|
-
protected parameters: _angular_core.Signal<Omit<NgtsHTMLOptions, "
|
|
697
|
+
protected parameters: _angular_core.Signal<Omit<NgtsHTMLOptions, "castShadow" | "receiveShadow" | "transform" | "occlude">>;
|
|
698
698
|
/** Reference to the THREE.Group that serves as the 3D anchor point */
|
|
699
699
|
groupRef: _angular_core.Signal<ElementRef<THREE.Group<THREE.Object3DEventMap>>>;
|
|
700
700
|
/** Reference to the occlusion mesh (when using blending occlusion mode) */
|
|
@@ -704,7 +704,7 @@ declare class NgtsHTMLImpl {
|
|
|
704
704
|
protected castShadow: _angular_core.Signal<boolean>;
|
|
705
705
|
protected receiveShadow: _angular_core.Signal<boolean>;
|
|
706
706
|
/** Current occlusion mode setting */
|
|
707
|
-
occlude: _angular_core.Signal<boolean | THREE.Object3D<THREE.Object3DEventMap>[] | "
|
|
707
|
+
occlude: _angular_core.Signal<boolean | "raycast" | THREE.Object3D<THREE.Object3DEventMap>[] | "blending" | ElementRef<THREE.Object3D<THREE.Object3DEventMap>>[]>;
|
|
708
708
|
/** Whether CSS 3D transform mode is enabled */
|
|
709
709
|
transform: _angular_core.Signal<boolean>;
|
|
710
710
|
isRaycastOcclusion: _angular_core.Signal<boolean | 0>;
|
|
@@ -980,7 +980,7 @@ declare class NgtsSampler {
|
|
|
980
980
|
* Sampler configuration including count, weight attribute, and transform function.
|
|
981
981
|
*/
|
|
982
982
|
options: _angular_core.InputSignalWithTransform<NgtsSamplerOptions, "" | Partial<NgtsSamplerOptions>>;
|
|
983
|
-
protected parameters: _angular_core.Signal<Omit<NgtsSamplerOptions, "
|
|
983
|
+
protected parameters: _angular_core.Signal<Omit<NgtsSamplerOptions, "count" | "transform" | "weight">>;
|
|
984
984
|
groupRef: _angular_core.Signal<ElementRef<THREE.Group<THREE.Object3DEventMap>>>;
|
|
985
985
|
private count;
|
|
986
986
|
private weight;
|
|
@@ -88,7 +88,7 @@ declare class NgtsAccumulativeShadows {
|
|
|
88
88
|
protected readonly nullTraversal: () => null;
|
|
89
89
|
protected readonly Math: Math;
|
|
90
90
|
options: _angular_core.InputSignalWithTransform<NgtsAccumulativeShadowsOptions, "" | Partial<NgtsAccumulativeShadowsOptions>>;
|
|
91
|
-
parameters: _angular_core.Signal<Omit<NgtsAccumulativeShadowsOptions, "scale" | "
|
|
91
|
+
parameters: _angular_core.Signal<Omit<NgtsAccumulativeShadowsOptions, "scale" | "temporal" | "frames" | "limit" | "blend" | "opacity" | "alphaTest" | "color" | "colorBlend" | "resolution" | "toneMapped">>;
|
|
92
92
|
lightsRef: _angular_core.Signal<ElementRef<three.Group<three.Object3DEventMap>>>;
|
|
93
93
|
planeRef: _angular_core.Signal<ElementRef<three.Mesh<three.PlaneGeometry, three.ShaderMaterial & {
|
|
94
94
|
map: three.Texture | null;
|
|
@@ -653,7 +653,7 @@ interface NgtsCenterOptions {
|
|
|
653
653
|
declare class NgtsCenter {
|
|
654
654
|
/** Configuration options for centering behavior. */
|
|
655
655
|
options: _angular_core.InputSignalWithTransform<Partial<angular_three.NgtThreeElement<typeof three.Group>> & NgtsCenterOptions, "" | Partial<Partial<angular_three.NgtThreeElement<typeof three.Group>> & NgtsCenterOptions>>;
|
|
656
|
-
protected parameters: _angular_core.Signal<Omit<Partial<angular_three.NgtThreeElement<typeof three.Group>> & NgtsCenterOptions, "object" | "disable" | "top" | "left" | "right" | "bottom" | "
|
|
656
|
+
protected parameters: _angular_core.Signal<Omit<Partial<angular_three.NgtThreeElement<typeof three.Group>> & NgtsCenterOptions, "object" | "disable" | "top" | "left" | "right" | "bottom" | "front" | "back" | "disableX" | "disableY" | "disableZ" | "precise" | "cacheKey">>;
|
|
657
657
|
/** Emits when centering calculation completes with dimension and alignment info. */
|
|
658
658
|
centered: _angular_core.OutputEmitterRef<NgtsCenterState>;
|
|
659
659
|
/** Reference to the outer group element containing the centered content. */
|
|
@@ -797,7 +797,7 @@ declare class NgtsClouds {
|
|
|
797
797
|
protected readonly DynamicDrawUsage: 35048;
|
|
798
798
|
/** Configuration options for the clouds container. */
|
|
799
799
|
options: _angular_core.InputSignalWithTransform<NgtsCloudsOptions, "" | Partial<NgtsCloudsOptions>>;
|
|
800
|
-
protected parameters: _angular_core.Signal<Omit<NgtsCloudsOptions, "frustumCulled" | "limit" | "
|
|
800
|
+
protected parameters: _angular_core.Signal<Omit<NgtsCloudsOptions, "frustumCulled" | "limit" | "material" | "texture" | "range">>;
|
|
801
801
|
private texture;
|
|
802
802
|
private material;
|
|
803
803
|
private range;
|
|
@@ -985,7 +985,7 @@ interface NgtsCloudOptions extends Partial<NgtThreeElements['ngt-group']> {
|
|
|
985
985
|
declare class NgtsCloudInstance {
|
|
986
986
|
/** Configuration options for this cloud formation. */
|
|
987
987
|
options: _angular_core.InputSignalWithTransform<NgtsCloudOptions, "" | Partial<NgtsCloudOptions>>;
|
|
988
|
-
protected parameters: _angular_core.Signal<Omit<NgtsCloudOptions, "opacity" | "color" | "segments" | "
|
|
988
|
+
protected parameters: _angular_core.Signal<Omit<NgtsCloudOptions, "opacity" | "color" | "segments" | "bounds" | "seed" | "concentrate" | "distribute" | "growth" | "volume" | "smallestVolume" | "speed" | "fade">>;
|
|
989
989
|
private cloudInstanceRef;
|
|
990
990
|
private uuid;
|
|
991
991
|
private segments;
|
|
@@ -2295,7 +2295,7 @@ interface NgtsSkyOptions extends Partial<Omit<NgtThreeElements['ngt-mesh'], 'sca
|
|
|
2295
2295
|
declare class NgtsSky {
|
|
2296
2296
|
/** Configuration options for the sky appearance. */
|
|
2297
2297
|
options: _angular_core.InputSignalWithTransform<NgtsSkyOptions, "" | Partial<NgtsSkyOptions>>;
|
|
2298
|
-
protected parameters: _angular_core.Signal<Omit<NgtsSkyOptions, "distance" | "inclination" | "azimuth" | "
|
|
2298
|
+
protected parameters: _angular_core.Signal<Omit<NgtsSkyOptions, "distance" | "inclination" | "azimuth" | "sunPosition" | "turbidity" | "mieCoefficient" | "mieDirectionalG">>;
|
|
2299
2299
|
private distance;
|
|
2300
2300
|
protected turbidity: _angular_core.Signal<number>;
|
|
2301
2301
|
protected mieCoefficient: _angular_core.Signal<number>;
|
|
@@ -2468,7 +2468,7 @@ declare class NgtsSpotLight {
|
|
|
2468
2468
|
protected readonly SpotLightHelper: typeof three.SpotLightHelper;
|
|
2469
2469
|
/** Configuration options for the spot light. */
|
|
2470
2470
|
options: _angular_core.InputSignalWithTransform<NgtsSpotLightOptions, "" | Partial<NgtsSpotLightOptions>>;
|
|
2471
|
-
protected parameters: _angular_core.Signal<Omit<NgtsSpotLightOptions, "opacity" | "color" | "debug" | "distance" | "depthBuffer" | "angle" | "attenuation" | "anglePower" | "radiusTop" | "radiusBottom"
|
|
2471
|
+
protected parameters: _angular_core.Signal<Omit<NgtsSpotLightOptions, "opacity" | "color" | "debug" | "distance" | "depthBuffer" | "volumetric" | "angle" | "attenuation" | "anglePower" | "radiusTop" | "radiusBottom">>;
|
|
2472
2472
|
protected volumetricOptions: _angular_core.Signal<Pick<NgtsSpotLightOptions, "opacity" | "color" | "debug" | "distance" | "depthBuffer" | "angle" | "attenuation" | "anglePower" | "radiusTop" | "radiusBottom">>;
|
|
2473
2473
|
/** Reference to the underlying spot light element. */
|
|
2474
2474
|
spotLightRef: _angular_core.Signal<ElementRef<three.SpotLight>>;
|
|
@@ -2613,6 +2613,9 @@ declare class NgtsStage {
|
|
|
2613
2613
|
protected environment: _angular_core.Signal<"apartment" | "city" | "dawn" | "forest" | "lobby" | "night" | "park" | "studio" | "sunset" | "warehouse" | Partial<NgtsEnvironmentOptions> | null>;
|
|
2614
2614
|
private preset;
|
|
2615
2615
|
protected config: _angular_core.Signal<{
|
|
2616
|
+
main: [x: number, y: number, z: number];
|
|
2617
|
+
fill: [x: number, y: number, z: number];
|
|
2618
|
+
} | {
|
|
2616
2619
|
readonly main: readonly [1, 2, 1];
|
|
2617
2620
|
readonly fill: readonly [-2, -0.5, -2];
|
|
2618
2621
|
} | {
|
|
@@ -2624,9 +2627,6 @@ declare class NgtsStage {
|
|
|
2624
2627
|
} | {
|
|
2625
2628
|
readonly main: readonly [-2, 4, 4];
|
|
2626
2629
|
readonly fill: readonly [-1, 0.5, -1.5];
|
|
2627
|
-
} | {
|
|
2628
|
-
main: [x: number, y: number, z: number];
|
|
2629
|
-
fill: [x: number, y: number, z: number];
|
|
2630
2630
|
}>;
|
|
2631
2631
|
protected shadowBias: _angular_core.Signal<number>;
|
|
2632
2632
|
protected normalBias: _angular_core.Signal<number>;
|