@@ -47,11 +47,14 @@ export default class PgTreeItem extends HTMLElement {
4747 this . $item . addEventListener ( 'contextmenu' , this . #handleContextMenu. bind ( this ) ) ;
4848 this . $input . addEventListener ( 'blur' , this . #handleBlur. bind ( this ) ) ;
4949 this . $input . addEventListener ( 'keydown' , this . #handleInputKeyDown. bind ( this ) ) ;
50+ // Append Indexes
5051 this . $items . addEventListener ( 'toggle' , this . #handleToggle. bind ( this ) ) ;
5152 this . $items . addEventListener ( 'select' , this . #handleSelect. bind ( this ) ) ;
5253 this . $items . addEventListener ( 'rename' , this . #handleRename. bind ( this ) ) ;
5354 this . $items . addEventListener ( 'up' , this . #handleUp. bind ( this ) ) ;
5455 this . $items . addEventListener ( 'down' , this . #handleDown. bind ( this ) ) ;
56+ this . $items . addEventListener ( 'itemdragstart' , this . #handleItemDragStart. bind ( this ) ) ;
57+ this . $items . addEventListener ( 'itemdragend' , this . #handleItemDragEnd. bind ( this ) ) ;
5558 forEach ( {
5659 container : this . $actions ,
5760 items : this . actions ,
@@ -307,6 +310,19 @@ export default class PgTreeItem extends HTMLElement {
307310 }
308311
309312 #handleDragStart( event ) {
313+ let dragCount = 0 ;
314+ this . dispatchEvent ( new CustomEvent ( 'itemdragstart' , {
315+ bubbles : true ,
316+ composed : true ,
317+ detail : {
318+ ctrlKey : event . ctrlKey ,
319+ shiftKey : event . shiftKey ,
320+ indexes : [ this . index ] ,
321+ callback : ( count ) => {
322+ dragCount = count ;
323+ }
324+ }
325+ } ) ) ;
310326 this . $item . classList . toggle ( 'dragging' , true ) ;
311327 // Generate drag image showing selected item count
312328 const size = window . devicePixelRatio ;
@@ -323,7 +339,7 @@ export default class PgTreeItem extends HTMLElement {
323339 const paddingInline = 6 ;
324340 var ctx = canvas . getContext ( '2d' ) ;
325341 if ( ctx ) {
326- const text = '0' ;
342+ const text = ` ${ dragCount } ` ;
327343 ctx . font = `bold ${ fontSize * size } px Segoe UI` ;
328344 const textSize = ctx . measureText ( text ) ;
329345 ctx . fillStyle = '#453C4F' ;
@@ -353,12 +369,25 @@ export default class PgTreeItem extends HTMLElement {
353369 ( fontSize + paddingBlock - 2 ) * size
354370 ) ;
355371 }
356-
357372 event . dataTransfer . setDragImage ( canvas , 0 , 0 ) ;
358373 }
359374
360375 #handleDragEnd( event ) {
376+ this . dispatchEvent ( new CustomEvent ( 'itemdragend' , {
377+ bubbles : true ,
378+ composed : true ,
379+ detail : { indexes : [ this . index ] }
380+ } ) ) ;
361381 this . $item . classList . toggle ( 'dragging' , false ) ;
362382 }
363383
384+
385+ #handleItemDragStart( e : any ) {
386+ e . detail . indexes . unshift ( this . index ) ;
387+ }
388+
389+ #handleItemDragEnd( e : any ) {
390+ e . detail . indexes . unshift ( this . index ) ;
391+ }
392+
364393}
0 commit comments