Skip to content

Commit d680aac

Browse files
ctranctran
ctran
authored and
ctran
committed
wip
1 parent 8bde9ce commit d680aac

File tree

1 file changed

+30
-26
lines changed

1 file changed

+30
-26
lines changed

libs/core/src/lib/canvas.ts

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,24 @@ import {
44
DestroyRef,
55
ElementRef,
66
EnvironmentInjector,
7-
EventEmitter,
87
Injector,
9-
Input,
108
NgZone,
11-
Output,
129
ViewChild,
1310
ViewContainerRef,
1411
afterNextRender,
12+
booleanAttribute,
1513
computed,
1614
createEnvironmentInjector,
1715
inject,
16+
input,
1817
signal,
1918
untracked,
2019
type ComponentRef,
2120
type Type,
2221
} from '@angular/core';
2322
import { injectAutoEffect } from 'ngxtension/auto-effect';
2423
import { NgxResize, provideResizeOptions, type ResizeOptions, type ResizeResult } from 'ngxtension/resize';
24+
import type { Raycaster, Scene, Vector3 } from 'three';
2525
import * as THREE from 'three';
2626
import { createPointerEvents } from './dom/events';
2727
import type { NgtCamera, NgtDomEvent, NgtEventManager } from './events';
@@ -39,7 +39,7 @@ import {
3939
import type { NgtObject3DNode } from './three-types';
4040
import type { NgtAnyRecord, NgtProperties } from './types';
4141
import { is } from './utils/is';
42-
import { signalStore, type NgtSignalStore } from './utils/signal-store';
42+
import { type NgtSignalStore } from './utils/signal-store';
4343

4444
export type NgtGLOptions =
4545
| NgtRendererLike
@@ -137,29 +137,33 @@ export class NgtCanvas {
137137
private environmentInjector = inject(EnvironmentInjector);
138138
private injector = inject(Injector);
139139

140-
@Input({ required: true }) sceneGraph!: Type<any>;
141-
@Input() compoundPrefixes: string[] = [];
142-
143-
private sceneGraphInputs = signal<NgtAnyRecord>({}, { equal: Object.is });
144-
@Input({ alias: 'sceneGraphInputs' }) set _sceneGraphInputs(value: NgtAnyRecord) {
145-
this.sceneGraphInputs.set(value);
146-
}
147-
148-
private canvasInputs = signalStore<NgtCanvasInputs>({
149-
shadows: false,
150-
linear: false,
151-
flat: false,
152-
legacy: false,
153-
orthographic: false,
154-
frameloop: 'always',
155-
dpr: [1, 2],
156-
events: createPointerEvents,
140+
sceneGraph = input.required<Type<any>>();
141+
compoundPrefixes = input<string[]>([]);
142+
sceneGraphInputs = input<NgtAnyRecord>({});
143+
gl = input<NgtGLOptions>();
144+
size = input<NgtSize>();
145+
shadows = input(false, {
146+
transform: (value) => {
147+
if (value === '') return booleanAttribute(value);
148+
return value as NonNullable<NgtCanvasInputs['shadows']>;
149+
},
157150
});
158-
@Input({ alias: 'options' }) set _canvasInputs(value: Partial<NgtCanvasInputs>) {
159-
this.canvasInputs.update(value);
160-
}
161-
162-
@Output() created = new EventEmitter<NgtState>();
151+
legacy = input(false, { transform: booleanAttribute });
152+
linear = input(false, { transform: booleanAttribute });
153+
flat = input(false, { transform: booleanAttribute });
154+
orthographic = input(false, { transform: booleanAttribute });
155+
frameloop = input<NonNullable<NgtCanvasInputs['frameloop']>>('always');
156+
performance = input<Partial<Omit<NgtPerformance, 'regress'>>>();
157+
dpr = input<NgtDpr>([1, 2]);
158+
raycaster = input<Partial<Raycaster>>();
159+
scene = input<Scene | Partial<Scene>>();
160+
camera = input<NonNullable<NgtCanvasInputs['camera']>>();
161+
events = input(createPointerEvents);
162+
eventSource = input<HTMLElement | ElementRef<HTMLElement>>();
163+
eventPrefix = input<NonNullable<NgtCanvasInputs['eventPrefix']>>('offset');
164+
lookAt = input<Vector3 | Parameters<Vector3['set']>>();
165+
created = output<NgtState>();
166+
pointerMissed = outputFromObservable(this.store.get('pointerMissed$'));
163167

164168
@ViewChild('glCanvas', { static: true }) glCanvas!: ElementRef<HTMLCanvasElement>;
165169

0 commit comments

Comments
 (0)