1- import { afterNextRender , Directive , effect , inject , input , isSignal , signal } from '@angular/core' ;
1+ import { afterNextRender , DestroyRef , Directive , effect , inject , input , isSignal , signal } from '@angular/core' ;
2+ import { injectStore } from 'angular-three' ;
23import { Pane } from 'tweakpane' ;
34import { NgtTweakFolder } from './folder' ;
45import { NgtTweakTitle } from './title' ;
@@ -16,18 +17,39 @@ export class NgtTweakPane {
1617
1718 private title = inject ( NgtTweakTitle , { host : true } ) ;
1819 private folder = inject ( NgtTweakFolder , { host : true } ) ;
20+ private store = injectStore ( ) ;
1921 private pane = signal < Pane | null > ( null ) ;
2022
2123 constructor ( ) {
2224 this . folder . isSelf = false ;
2325
2426 afterNextRender ( ( ) => {
25- const pane = new Pane ( { title : this . title . title ( ) , expanded : this . folder . expanded ( ) } ) ;
27+ // the ngt-canvas
28+ const parentElement = this . store . snapshot . gl . domElement . parentElement ?. parentElement ;
29+
30+ const pane = new Pane ( {
31+ title : this . title . title ( ) ,
32+ expanded : this . folder . expanded ( ) ,
33+ } ) ;
34+
35+ if ( parentElement && pane . element . parentElement ) {
36+ parentElement . appendChild ( pane . element . parentElement ) ;
37+ }
2638
2739 this . pane . set ( pane ) ;
2840 this . folder . parentFolder . set ( pane ) ;
2941 } ) ;
3042
43+ inject ( DestroyRef ) . onDestroy ( ( ) => {
44+ const pane = this . pane ( ) ;
45+ if ( ! pane ) return ;
46+
47+ const parentElement = this . store . snapshot . gl . domElement . parentElement ?. parentElement ;
48+ if ( ! parentElement || ! pane . element . parentElement ) return ;
49+
50+ pane . element . parentElement . remove ( ) ;
51+ } ) ;
52+
3153 effect ( ( ) => {
3254 this . updateStyleEffect ( 'top' ) ;
3355 } ) ;
0 commit comments