angular-three 2.0.0-beta.294 → 2.0.0-beta.296

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/lib/canvas.d.ts CHANGED
@@ -97,7 +97,6 @@ export declare class NgtCanvas {
97
97
  getWorldQuaternion?: ((target: import("three").Quaternion) => import("three").Quaternion) | undefined;
98
98
  getWorldScale?: ((target: Vector3) => Vector3) | undefined;
99
99
  getWorldDirection?: ((target: Vector3) => Vector3) | undefined;
100
- raycast?: ((raycaster: Raycaster, intersects: import("three").Intersection[]) => void) | undefined;
101
100
  traverse?: ((callback: (object: import("three").Object3D) => any) => void) | undefined;
102
101
  traverseVisible?: ((callback: (object: import("three").Object3D) => any) => void) | undefined;
103
102
  traverseAncestors?: ((callback: (object: import("three").Object3D) => any) => void) | undefined;
@@ -118,6 +117,7 @@ export declare class NgtCanvas {
118
117
  quaternion: import("angular-three").NgtQuaternion;
119
118
  layers: import("angular-three").NgtLayers;
120
119
  dispose: (() => void) | null;
120
+ raycast: import("three").Object3D["raycast"] | null;
121
121
  } & {
122
122
  addEventListener: (<TEventKey extends keyof import("angular-three").NgtNodeEventMap<import("three").PerspectiveCamera>>(type: TEventKey, listener: (this: import("angular-three").NgtNodeElement<import("three").PerspectiveCamera, typeof import("three").PerspectiveCamera>, ev: import("angular-three").NgtNodeEventMap<import("three").PerspectiveCamera>[TEventKey]) => any) => void) & (<TEventKey extends keyof import("angular-three").NgtAllObject3DEventsMap>(type: TEventKey, listener: (this: any, ev: import("angular-three").NgtAllObject3DEventsMap[TEventKey]) => any) => void);
123
123
  removeEventListener: (<TEventKey extends keyof import("angular-three").NgtNodeEventMap<import("three").PerspectiveCamera>>(type: TEventKey, listener: (this: import("angular-three").NgtNodeElement<import("three").PerspectiveCamera, typeof import("three").PerspectiveCamera>, ev: import("angular-three").NgtNodeEventMap<import("three").PerspectiveCamera>[TEventKey]) => any) => void) & (<TEventKey extends keyof import("angular-three").NgtAllObject3DEventsMap>(type: TEventKey, listener: (this: any, ev: import("angular-three").NgtAllObject3DEventsMap[TEventKey]) => any) => void);
@@ -199,7 +199,6 @@ export declare class NgtCanvas {
199
199
  getWorldQuaternion?: ((target: import("three").Quaternion) => import("three").Quaternion) | undefined;
200
200
  getWorldScale?: ((target: Vector3) => Vector3) | undefined;
201
201
  getWorldDirection?: ((target: Vector3) => Vector3) | undefined;
202
- raycast?: ((raycaster: Raycaster, intersects: import("three").Intersection[]) => void) | undefined;
203
202
  traverse?: ((callback: (object: import("three").Object3D) => any) => void) | undefined;
204
203
  traverseVisible?: ((callback: (object: import("three").Object3D) => any) => void) | undefined;
205
204
  traverseAncestors?: ((callback: (object: import("three").Object3D) => any) => void) | undefined;
@@ -240,6 +239,7 @@ export declare class NgtCanvas {
240
239
  quaternion: import("angular-three").NgtQuaternion;
241
240
  layers: import("angular-three").NgtLayers;
242
241
  dispose: (() => void) | null;
242
+ raycast: import("three").Object3D["raycast"] | null;
243
243
  } & {
244
244
  addEventListener: (<TEventKey extends keyof import("angular-three").NgtNodeEventMap<import("three").OrthographicCamera>>(type: TEventKey, listener: (this: import("angular-three").NgtNodeElement<import("three").OrthographicCamera, typeof import("three").OrthographicCamera>, ev: import("angular-three").NgtNodeEventMap<import("three").OrthographicCamera>[TEventKey]) => any) => void) & (<TEventKey extends keyof import("angular-three").NgtAllObject3DEventsMap>(type: TEventKey, listener: (this: any, ev: import("angular-three").NgtAllObject3DEventsMap[TEventKey]) => any) => void);
245
245
  removeEventListener: (<TEventKey extends keyof import("angular-three").NgtNodeEventMap<import("three").OrthographicCamera>>(type: TEventKey, listener: (this: import("angular-three").NgtNodeElement<import("three").OrthographicCamera, typeof import("three").OrthographicCamera>, ev: import("angular-three").NgtNodeEventMap<import("three").OrthographicCamera>[TEventKey]) => any) => void) & (<TEventKey extends keyof import("angular-three").NgtAllObject3DEventsMap>(type: TEventKey, listener: (this: any, ev: import("angular-three").NgtAllObject3DEventsMap[TEventKey]) => any) => void);
@@ -321,7 +321,6 @@ export declare class NgtCanvas {
321
321
  getWorldQuaternion?: ((target: import("three").Quaternion) => import("three").Quaternion) | undefined;
322
322
  getWorldScale?: ((target: Vector3) => Vector3) | undefined;
323
323
  getWorldDirection?: ((target: Vector3) => Vector3) | undefined;
324
- raycast?: ((raycaster: Raycaster, intersects: import("three").Intersection[]) => void) | undefined;
325
324
  traverse?: ((callback: (object: import("three").Object3D) => any) => void) | undefined;
326
325
  traverseVisible?: ((callback: (object: import("three").Object3D) => any) => void) | undefined;
327
326
  traverseAncestors?: ((callback: (object: import("three").Object3D) => any) => void) | undefined;
@@ -353,6 +352,7 @@ export declare class NgtCanvas {
353
352
  quaternion: import("angular-three").NgtQuaternion;
354
353
  layers: import("angular-three").NgtLayers;
355
354
  dispose: (() => void) | null;
355
+ raycast: import("three").Object3D["raycast"] | null;
356
356
  }>) & {
357
357
  manual?: boolean;
358
358
  }) | undefined> | undefined>;
package/lib/loader.d.ts CHANGED
@@ -21,11 +21,11 @@ export type NgtLoaderResults<TInput extends string | string[] | Record<string, s
21
21
  declare function _injectLoader<TData, TUrl extends string | string[] | Record<string, string>, TLoaderConstructor extends NgtLoaderProto<TData>, TReturn = NgtLoaderReturnType<TData, TLoaderConstructor>>(loaderConstructorFactory: (inputs: string[]) => TLoaderConstructor, inputs: () => TUrl, { extensions, onProgress, onLoad, injector, }?: {
22
22
  extensions?: NgtLoaderExtensions<TLoaderConstructor>;
23
23
  onProgress?: (event: ProgressEvent) => void;
24
- onLoad?: (data: TData) => void;
24
+ onLoad?: (data: NoInfer<TData>) => void;
25
25
  injector?: Injector;
26
26
  }): Signal<NgtLoaderResults<TUrl, NgtBranchingReturn<TReturn, NgtGLTFLike, NgtGLTFLike & NgtObjectMap>> | null>;
27
27
  declare namespace _injectLoader {
28
- var preload: <TData, TUrl extends string | string[] | Record<string, string>, TLoaderConstructor extends NgtLoaderProto<TData>>(loaderConstructorFactory: (inputs: string[]) => TLoaderConstructor, inputs: () => TUrl, extensions?: NgtLoaderExtensions<TLoaderConstructor>) => void;
28
+ var preload: <TData, TUrl extends string | string[] | Record<string, string>, TLoaderConstructor extends NgtLoaderProto<TData>>(loaderConstructorFactory: (inputs: string[]) => TLoaderConstructor, inputs: () => TUrl, extensions?: NgtLoaderExtensions<TLoaderConstructor>, onLoad?: (data: NoInfer<TData>) => void) => void;
29
29
  var destroy: () => void;
30
30
  var clear: (urls: string | string[]) => void;
31
31
  }
@@ -51,6 +51,7 @@ export type NgtObject3DNode<TOriginal, TConstructor, TNoEvent = NoEvent<TOrigina
51
51
  quaternion: NgtQuaternion;
52
52
  layers: NgtLayers;
53
53
  dispose: (() => void) | null;
54
+ raycast: Object3D['raycast'] | null;
54
55
  addEventListener<TEventKey extends keyof NgtAllObject3DEventsMap>(type: TEventKey, listener: (this: NgtObject3DNode<TOriginal, TConstructor>, ev: NgtAllObject3DEventsMap[TEventKey]) => any): void;
55
56
  removeEventListener<TEventKey extends keyof NgtAllObject3DEventsMap>(type: TEventKey, listener: (this: NgtObject3DNode<TOriginal, TConstructor>, ev: NgtAllObject3DEventsMap[TEventKey]) => any): void;
56
57
  }>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-three",
3
- "version": "2.0.0-beta.294",
3
+ "version": "2.0.0-beta.296",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -10,6 +10,11 @@
10
10
  "factory": "./src/generators/add-soba/generator",
11
11
  "schema": "./src/generators/add-soba/schema.json",
12
12
  "description": "Add angular-three-soba to your project"
13
+ },
14
+ "gltf": {
15
+ "factory": "./src/generators/gltf/generator",
16
+ "schema": "./src/generators/gltf/schema.json",
17
+ "description": "gltf generator"
13
18
  }
14
19
  },
15
20
  "schematics": {
@@ -18,10 +23,15 @@
18
23
  "schema": "./src/generators/init/schema.json",
19
24
  "description": "Add Angular Three with proper packages and config"
20
25
  },
21
- "add-soba": {
22
- "factory": "./src/generators/add-soba/compat",
23
- "schema": "./src/generators/add-soba/schema.json",
24
- "description": "Add angular-three-soba to your project"
26
+ "add-soba": {
27
+ "factory": "./src/generators/add-soba/compat",
28
+ "schema": "./src/generators/add-soba/schema.json",
29
+ "description": "Add angular-three-soba to your project"
30
+ },
31
+ "gltf": {
32
+ "factory": "./src/generators/gltf/compat",
33
+ "schema": "./src/generators/gltf/schema.json",
34
+ "description": "gltf generator"
25
35
  }
26
36
  }
27
37
  }
@@ -0,0 +1,2 @@
1
+ declare const _default: (generatorOptions: import("./generator").GltfGeneratorSchema) => (tree: any, context: any) => Promise<any>;
2
+ export default _default;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const devkit_1 = require("@nx/devkit");
4
+ const generator_1 = require("./generator");
5
+ exports.default = (0, devkit_1.convertNxGenerator)(generator_1.default);
6
+ //# sourceMappingURL=compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat.js","sourceRoot":"","sources":["../../../../../../../libs/plugin/src/generators/gltf/compat.ts"],"names":[],"mappings":";;AAAA,uCAAgD;AAChD,2CAAwC;AAExC,kBAAe,IAAA,2BAAkB,EAAC,mBAAa,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { CUSTOM_ELEMENTS_SCHEMA, Component, ChangeDetectionStrategy } from '@angular/core';
2
+ import { extend, NgtGroup } from 'angular-three';
3
+ import { injectGLTF } from 'angular-three-soba/loaders';
4
+ import * as THREE from 'three';
5
+ import { GLTF } from 'three-stdlib';
6
+
7
+ interface <%= className %>GLTFResult extends GLTF {
8
+ nodes: {},
9
+ materials: {}
10
+ }
11
+
12
+ interface <%= className %>Options extends Partial<NgtGroup> {
13
+ /* more options */
14
+ }
15
+
16
+ @Component({
17
+ selector: '<%= selector %>',
18
+ standalone: true,
19
+ template: `
20
+ @if (gltf(); as gltf) {
21
+ <ngt-group [dispose]="null" [parameters]="options()">
22
+ </ngt-group>
23
+ }
24
+ `,
25
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
26
+ changeDetection: ChangeDetectionStrategy.OnPush,
27
+ })
28
+ export class <%= className %> {
29
+ options = input({} as <%= className %>Options);
30
+
31
+ gltf = injectGLTF(() => '<%= runtimeGltfPath %>') as Signal<<%= className %>GLTFResult | null>;
32
+
33
+ constructor() {
34
+ extend({ Group: THREE.Group });
35
+ }
36
+ }
@@ -0,0 +1,12 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export interface GltfGeneratorSchema {
3
+ gltfPath: string;
4
+ project: string;
5
+ console: boolean;
6
+ modelName: string;
7
+ meshopt: boolean;
8
+ outputPath?: string;
9
+ draco?: boolean | string;
10
+ }
11
+ export declare function gltfGenerator(tree: Tree, options: GltfGeneratorSchema): Promise<void>;
12
+ export default gltfGenerator;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gltfGenerator = gltfGenerator;
4
+ const devkit_1 = require("@nx/devkit");
5
+ const enquirer_1 = require("enquirer");
6
+ const generator_1 = require("../add-soba/generator");
7
+ function normalizeOptions(options) {
8
+ let { gltfPath, project, console, modelName, outputPath, draco, meshopt } = options;
9
+ if (draco == null) {
10
+ draco = true;
11
+ }
12
+ return { gltfPath, project, console, modelName, outputPath, draco, meshopt };
13
+ }
14
+ function buildSelector(fileName, prefix) {
15
+ return `${prefix}-${fileName}`;
16
+ }
17
+ async function gltfGenerator(tree, options) {
18
+ const packageJson = (0, devkit_1.readJson)(tree, 'package.json');
19
+ const hasAngularThreeSoba = packageJson['dependencies']['angular-three-soba'] || packageJson['devDependencies']['angular-three-soba'];
20
+ if (!hasAngularThreeSoba) {
21
+ devkit_1.logger.warn(`[NGT] angular-three-soba must be installed to use the GLTF generator`);
22
+ const { initSoba } = await (0, enquirer_1.prompt)({
23
+ type: 'confirm',
24
+ name: 'initSoba',
25
+ message: 'Would you like to initialize angular-three-soba?',
26
+ initial: true,
27
+ });
28
+ if (!initSoba)
29
+ return;
30
+ await (0, generator_1.addSobaGenerator)(tree);
31
+ }
32
+ try {
33
+ const injectGLTF = await Promise.resolve().then(() => require('angular-three-soba/loaders')).then((m) => m.injectGLTF);
34
+ const { gltfPath, project, console: toConsole, modelName, outputPath, draco, meshopt } = normalizeOptions(options);
35
+ let runtimeGltfPath;
36
+ if (!gltfPath.startsWith('http')) {
37
+ const { path } = await (0, enquirer_1.prompt)({
38
+ type: 'input',
39
+ name: 'path',
40
+ message: 'What is the path to the asset file to be used at runtime (with injectGLTF)?',
41
+ required: true,
42
+ });
43
+ runtimeGltfPath = path;
44
+ }
45
+ else {
46
+ runtimeGltfPath = gltfPath;
47
+ }
48
+ injectGLTF.preload(() => runtimeGltfPath, {
49
+ useDraco: draco,
50
+ useMeshOpt: meshopt,
51
+ onLoad: (data) => {
52
+ console.log('data', data);
53
+ },
54
+ });
55
+ const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, project);
56
+ const modelNames = (0, devkit_1.names)(modelName);
57
+ const tmpPath = `${devkit_1.workspaceRoot}/tmp/ngt-gltf/${modelNames.fileName}`;
58
+ const output = toConsole ? tmpPath : (outputPath ?? (projectConfig.sourceRoot || `${projectConfig.root}/src`));
59
+ // NOTE: even if user passes in "console", we still generate the files.
60
+ // But we generate them to a temporary destination then we'll remove them printing to console.
61
+ // generateFiles(tree, 'files', output, {
62
+ // tmpl: '',
63
+ // fileName: modelNames.fileName,
64
+ // className: modelNames.className,
65
+ // selector: buildSelector(
66
+ // modelNames.fileName,
67
+ // 'prefix' in projectConfig && typeof projectConfig.prefix === 'string' ? projectConfig.prefix : 'app',
68
+ // ),
69
+ // runtimeGltfPath,
70
+ // });
71
+ await (0, devkit_1.formatFiles)(tree);
72
+ if (toConsole) {
73
+ // print to console
74
+ // delete the files in tmp
75
+ }
76
+ }
77
+ catch (e) {
78
+ devkit_1.logger.error(`[NGT] Error generating GLTF files: ${e}`);
79
+ }
80
+ }
81
+ exports.default = gltfGenerator;
82
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../libs/plugin/src/generators/gltf/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "$id": "Gltf",
4
+ "title": "",
5
+ "type": "object",
6
+ "properties": {
7
+ "gltfPath": {
8
+ "type": "string",
9
+ "description": "",
10
+ "$default": {
11
+ "$source": "argv",
12
+ "index": 0
13
+ },
14
+ "x-prompt": "Where is your gltf file located?"
15
+ },
16
+ "project": {
17
+ "type": "string",
18
+ "description": "The name of the project to generate the model component for.",
19
+ "x-prompt": "What project would you like to generate the model component for?",
20
+ "pattern": "(?:^@[a-zA-Z0-9-*~][a-zA-Z0-9-*._~]*\\/[a-zA-Z0-9-~][a-zA-Z0-9-._~]*|^[a-zA-Z][^:]*)$",
21
+ "x-dropdown": "projects",
22
+ "x-priority": "important"
23
+ },
24
+ "console": {
25
+ "type": "boolean",
26
+ "description": "Print to console instead of writing to file",
27
+ "default": false
28
+ },
29
+ "modelName": {
30
+ "type": "string",
31
+ "description": "Name of the model",
32
+ "default": "Model"
33
+ },
34
+ "outputPath": {
35
+ "type": "string",
36
+ "description": "The output path of the generated component",
37
+ "alias": ["o", "output"]
38
+ },
39
+ "draco": {
40
+ "oneOf": [
41
+ {
42
+ "type": "boolean",
43
+ "description": "Use Draco compression"
44
+ },
45
+ {
46
+ "type": "string",
47
+ "description": "Use Draco compression with a specific path"
48
+ }
49
+ ]
50
+ },
51
+ "meshopt": {
52
+ "type": "boolean",
53
+ "description": "Use Meshopt compression",
54
+ "default": true
55
+ }
56
+ },
57
+ "required": ["gltfPath", "project"]
58
+ }