@@ -41,34 +41,13 @@ export class URDFControls extends GUI {
4141 this . domElement . setAttribute ( 'class' , 'dg main urdf-gui' ) ;
4242
4343 // Add resize functionality
44- let isResizing = false ;
45- let startX : number ;
46- let startWidth : number ;
47-
48- this . domElement . addEventListener ( 'mousedown' , ( e : MouseEvent ) => {
49- // Only trigger on left border
50- if ( e . clientX < this . domElement . getBoundingClientRect ( ) . left + 6 ) {
51- isResizing = true ;
52- startX = e . clientX ;
53- startWidth = parseInt ( getComputedStyle ( this . domElement ) . width , 10 ) ;
54- }
44+ this . _setupResizeHandling ( {
45+ minWidth : 150 ,
46+ maxWidth : 500 ,
47+ grabZoneWidth : 12
5548 } ) ;
5649
57- document . addEventListener ( 'mousemove' , ( e : MouseEvent ) => {
58- if ( ! isResizing ) return ;
59-
60- const width = startWidth - ( e . clientX - startX ) ;
61- if ( width >= 250 && width <= 500 ) {
62- this . domElement . style . width = `${ width } px` ;
63- }
64- } ) ;
65-
66- document . addEventListener ( 'mouseup' , ( ) => {
67- isResizing = false ;
68- } ) ;
69-
70- //
71-
50+ // Create folders
7251 this . _workspaceFolder = this . addFolder ( 'Workspace' ) ;
7352 this . _workspaceFolder . domElement . setAttribute (
7453 'class' ,
@@ -236,4 +215,48 @@ export class URDFControls extends GUI {
236215 }
237216 return this . controls . joints ;
238217 }
218+
219+ /**
220+ * Sets up panel resizing functionality
221+ */
222+ private _setupResizeHandling ( options : {
223+ minWidth : number ;
224+ maxWidth : number ;
225+ grabZoneWidth : number ;
226+ } ) : void {
227+ let isResizing = false ;
228+ let startX : number ;
229+ let startWidth : number ;
230+
231+ const { minWidth, maxWidth, grabZoneWidth } = options ;
232+
233+ const onMouseMove = ( e : MouseEvent ) => {
234+ if ( ! isResizing ) return ;
235+
236+ const width = startWidth - ( e . clientX - startX ) ;
237+ if ( width >= minWidth && width <= maxWidth ) {
238+ this . domElement . style . width = `${ width } px` ;
239+ }
240+ } ;
241+
242+ const onMouseUp = ( ) => {
243+ isResizing = false ;
244+ document . removeEventListener ( 'mousemove' , onMouseMove ) ;
245+ document . removeEventListener ( 'mouseup' , onMouseUp ) ;
246+ } ;
247+
248+ this . domElement . addEventListener ( 'mousedown' , ( e : MouseEvent ) => {
249+ if ( e . clientX < this . domElement . getBoundingClientRect ( ) . left + grabZoneWidth ) {
250+ isResizing = true ;
251+ startX = e . clientX ;
252+ startWidth = parseInt ( getComputedStyle ( this . domElement ) . width , 10 ) ;
253+ e . preventDefault ( ) ;
254+
255+ document . addEventListener ( 'mousemove' , onMouseMove ) ;
256+ document . addEventListener ( 'mouseup' , onMouseUp ) ;
257+ }
258+ } ) ;
259+ }
260+
239261}
262+
0 commit comments