@acorex/cdk 21.0.0-next.5 → 21.0.0-next.51

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.
Files changed (53) hide show
  1. package/accordion/index.d.ts +1 -0
  2. package/common/index.d.ts +9 -7
  3. package/drag-drop/index.d.ts +57 -44
  4. package/drawer/index.d.ts +12 -9
  5. package/fesm2022/acorex-cdk-accordion.mjs +55 -70
  6. package/fesm2022/acorex-cdk-accordion.mjs.map +1 -1
  7. package/fesm2022/acorex-cdk-carousel.mjs +14 -11
  8. package/fesm2022/acorex-cdk-carousel.mjs.map +1 -1
  9. package/fesm2022/acorex-cdk-clipboard.mjs +7 -7
  10. package/fesm2022/acorex-cdk-clipboard.mjs.map +1 -1
  11. package/fesm2022/acorex-cdk-common.mjs +174 -119
  12. package/fesm2022/acorex-cdk-common.mjs.map +1 -1
  13. package/fesm2022/acorex-cdk-dom.mjs +4 -4
  14. package/fesm2022/acorex-cdk-dom.mjs.map +1 -1
  15. package/fesm2022/acorex-cdk-drag-drop.mjs +279 -88
  16. package/fesm2022/acorex-cdk-drag-drop.mjs.map +1 -1
  17. package/fesm2022/acorex-cdk-drawer.mjs +44 -33
  18. package/fesm2022/acorex-cdk-drawer.mjs.map +1 -1
  19. package/fesm2022/acorex-cdk-focus-trap.mjs +3 -3
  20. package/fesm2022/acorex-cdk-focus-trap.mjs.map +1 -1
  21. package/fesm2022/acorex-cdk-input-mask.mjs +68 -63
  22. package/fesm2022/acorex-cdk-input-mask.mjs.map +1 -1
  23. package/fesm2022/acorex-cdk-list-navigation.mjs +41 -23
  24. package/fesm2022/acorex-cdk-list-navigation.mjs.map +1 -1
  25. package/fesm2022/acorex-cdk-outline.mjs +8 -8
  26. package/fesm2022/acorex-cdk-outline.mjs.map +1 -1
  27. package/fesm2022/acorex-cdk-overlay.mjs +3 -3
  28. package/fesm2022/acorex-cdk-overlay.mjs.map +1 -1
  29. package/fesm2022/acorex-cdk-pan-view.mjs +4 -4
  30. package/fesm2022/acorex-cdk-pan-view.mjs.map +1 -1
  31. package/fesm2022/acorex-cdk-qrcode.mjs.map +1 -1
  32. package/fesm2022/acorex-cdk-resizable.mjs +167 -119
  33. package/fesm2022/acorex-cdk-resizable.mjs.map +1 -1
  34. package/fesm2022/acorex-cdk-selection.mjs +12 -12
  35. package/fesm2022/acorex-cdk-selection.mjs.map +1 -1
  36. package/fesm2022/acorex-cdk-sliding-item.mjs +3 -3
  37. package/fesm2022/acorex-cdk-sliding-item.mjs.map +1 -1
  38. package/fesm2022/acorex-cdk-sticky.mjs +3 -3
  39. package/fesm2022/acorex-cdk-sticky.mjs.map +1 -1
  40. package/fesm2022/acorex-cdk-uploader.mjs +746 -0
  41. package/fesm2022/acorex-cdk-uploader.mjs.map +1 -0
  42. package/fesm2022/acorex-cdk-virtual-scroll.mjs +11 -11
  43. package/fesm2022/acorex-cdk-virtual-scroll.mjs.map +1 -1
  44. package/fesm2022/acorex-cdk-wysiwyg.mjs +5 -1
  45. package/fesm2022/acorex-cdk-wysiwyg.mjs.map +1 -1
  46. package/fesm2022/acorex-cdk.mjs.map +1 -1
  47. package/input-mask/index.d.ts +1 -0
  48. package/list-navigation/index.d.ts +1 -0
  49. package/package.json +6 -2
  50. package/resizable/index.d.ts +19 -7
  51. package/uploader/README.md +3 -0
  52. package/uploader/index.d.ts +378 -0
  53. package/wysiwyg/index.d.ts +1 -0
@@ -9,10 +9,10 @@ class AXDragHandleDirective {
9
9
  this.el = inject(ElementRef);
10
10
  this.element = signal(this.el.nativeElement, ...(ngDevMode ? [{ debugName: "element" }] : []));
11
11
  }
12
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDragHandleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
13
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.3", type: AXDragHandleDirective, isStandalone: true, selector: "[axDragHandle]", ngImport: i0 }); }
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXDragHandleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
13
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: AXDragHandleDirective, isStandalone: true, selector: "[axDragHandle]", ngImport: i0 }); }
14
14
  }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDragHandleDirective, decorators: [{
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXDragHandleDirective, decorators: [{
16
16
  type: Directive,
17
17
  args: [{
18
18
  selector: '[axDragHandle]',
@@ -38,6 +38,8 @@ class AXDropListDirective extends NXComponent {
38
38
  this._platformId = inject(PLATFORM_ID);
39
39
  this._hostEl = inject(ElementRef);
40
40
  // --- Public API: Inputs and Outputs ---
41
+ /** Boolean input matching the directive selector name for conditional application. */
42
+ this.axDropList = input(true, ...(ngDevMode ? [{ debugName: "axDropList", transform: (value) => value === '' || value === true }] : [{ transform: (value) => value === '' || value === true }]));
41
43
  /** Whether sorting within this list is disabled. */
42
44
  this.sortingDisabled = input(false, ...(ngDevMode ? [{ debugName: "sortingDisabled" }] : []));
43
45
  /** The group this drop list belongs to. Dragging is only allowed between lists of the same group. */
@@ -63,16 +65,24 @@ class AXDropListDirective extends NXComponent {
63
65
  this._listGap = signal(0, ...(ngDevMode ? [{ debugName: "_listGap" }] : []));
64
66
  /** A signal-based alias for the orientation input for internal use. */
65
67
  this._orientation = this.dropListOrientation;
68
+ /** DOM placeholder element for inter-list drags */
69
+ this._placeholderElement = null;
66
70
  }
67
71
  ngOnInit() {
68
72
  if (isPlatformBrowser(this._platformId)) {
69
73
  this.element.dataset['axDropList'] = 'true';
70
74
  this.element.classList.add('ax-drop-list-sorting-transition');
75
+ // Store reference to this directive instance on the element for drag directive access
76
+ this.element['__axContext__'] = this;
71
77
  }
72
78
  }
73
79
  ngAfterContentInit() {
74
80
  this._cdr.detectChanges();
75
81
  }
82
+ ngOnDestroy() {
83
+ // Clean up placeholder element if directive destroyed during drag
84
+ this._removePlaceholderElement();
85
+ }
76
86
  // --- Public Methods (for internal library use) ---
77
87
  /** Checks if the given drag item is the one currently active in this list. */
78
88
  isDragActiveForThisList(dragItem) {
@@ -83,7 +93,7 @@ class AXDropListDirective extends NXComponent {
83
93
  * @param dragItem The item that is being dragged.
84
94
  */
85
95
  prepareSort(dragItem) {
86
- if (this.sortingDisabled() || this._activeDragItem() || dragItem.dragDisabled())
96
+ if (!this.axDropList() || this.sortingDisabled() || this._activeDragItem() || dragItem.dragDisabled())
87
97
  return;
88
98
  this._activeDragItem.set(dragItem);
89
99
  this.element.classList.add('ax-drop-list-sorting-active');
@@ -100,8 +110,10 @@ class AXDropListDirective extends NXComponent {
100
110
  * @param dragItem The item entering this list.
101
111
  */
102
112
  enter(dragItem) {
103
- if (this.sortingDisabled() || this.isDragActiveForThisList(dragItem))
113
+ if (!this.axDropList() || this.sortingDisabled() || this.isDragActiveForThisList(dragItem))
104
114
  return;
115
+ // Clean up any existing placeholder from previous list
116
+ this._removePlaceholderElement();
105
117
  this._activeDragItem.set(dragItem);
106
118
  this.element.classList.add('ax-drop-list-sorting-active');
107
119
  requestAnimationFrame(() => this._zone.run(() => this._cacheGeometry()));
@@ -112,7 +124,10 @@ class AXDropListDirective extends NXComponent {
112
124
  * @param dragItem The item being dragged.
113
125
  */
114
126
  sort(event, dragItem) {
115
- if (!this.isDragActiveForThisList(dragItem) || this.sortingDisabled() || !this._listInitialRect())
127
+ if (!this.axDropList() ||
128
+ !this.isDragActiveForThisList(dragItem) ||
129
+ this.sortingDisabled() ||
130
+ !this._listInitialRect())
116
131
  return;
117
132
  const pointerPosition = this._orientation() === 'vertical' ? event.clientY : event.clientX;
118
133
  const newPlaceholderIndex = this._calculatePlaceholderIndex(pointerPosition);
@@ -128,7 +143,7 @@ class AXDropListDirective extends NXComponent {
128
143
  * @param sourceList The list where the drag originated.
129
144
  */
130
145
  finalizeSort(event, droppedItem, sourceList) {
131
- if (!this.isDragActiveForThisList(droppedItem) || this.sortingDisabled()) {
146
+ if (!this.axDropList() || !this.isDragActiveForThisList(droppedItem) || this.sortingDisabled()) {
132
147
  this.resetSortStateAndStyles(sourceList);
133
148
  return;
134
149
  }
@@ -262,38 +277,77 @@ class AXDropListDirective extends NXComponent {
262
277
  }
263
278
  return potentialPlaceholderIndex;
264
279
  }
265
- /** Applies `transform` styles to all items to create the visual sorting effect. */
280
+ /** Applies visual shifts - uses placeholder for inter-list, transforms for intra-list. */
266
281
  _applyVisualShifts() {
267
282
  const activeItem = this._activeDragItem();
268
283
  const originalIndex = this._cachedItems().findIndex((d) => d.item === activeItem);
269
284
  const isIntraListDrag = originalIndex > -1;
270
- // A helper to get the total space an item occupies (size + margins).
271
- const getItemSpace = (itemData) => this._orientation() === 'vertical'
272
- ? itemData.height + itemData.margins.top + itemData.margins.bottom
273
- : itemData.width + itemData.margins.left + itemData.margins.right;
274
- let draggedItemSize = 0;
275
- if (isIntraListDrag) {
276
- draggedItemSize = getItemSpace(this._cachedItems()[originalIndex]);
277
- }
278
- else if (activeItem) {
279
- const rect = activeItem.elementRect();
280
- if (rect) {
281
- const style = window.getComputedStyle(activeItem.element());
282
- draggedItemSize =
283
- this._orientation() === 'vertical'
284
- ? rect.height + parseFloat(style.marginTop) + parseFloat(style.marginBottom)
285
- : rect.width + parseFloat(style.marginLeft) + parseFloat(style.marginRight);
286
- }
285
+ const placeholderIndex = this._placeholderIndex();
286
+ // Check if this is an "onto-node" drop list (no items, just a drop target)
287
+ const isOntoNodeList = this.element.dataset['dropType'] === 'onto-node';
288
+ if (!isIntraListDrag && activeItem && !isOntoNodeList && this._cachedItems().length > 0) {
289
+ // --- INTER-LIST DRAG: Use DOM placeholder for reorder lists with items ---
290
+ this._updatePlaceholderElement(activeItem, placeholderIndex);
287
291
  }
288
- this._cachedItems().forEach((data, index) => {
289
- // --- New logic: Do not transform disabled items ---
290
- if (data.item.dragDisabled()) {
291
- this._renderer.removeStyle(data.element, 'transform');
292
- return;
292
+ else {
293
+ // --- INTRA-LIST DRAG: Use transforms (works well for same-list reordering) ---
294
+ this._removePlaceholderElement();
295
+ const getItemSpace = (itemData) => this._orientation() === 'vertical'
296
+ ? itemData.height + itemData.margins.top + itemData.margins.bottom
297
+ : itemData.width + itemData.margins.left + itemData.margins.right;
298
+ const draggedItemSize = isIntraListDrag ? getItemSpace(this._cachedItems()[originalIndex]) : 0;
299
+ this._cachedItems().forEach((data, index) => {
300
+ if (data.item.dragDisabled()) {
301
+ this._renderer.removeStyle(data.element, 'transform');
302
+ return;
303
+ }
304
+ const transform = this._calculateTransform(index, originalIndex, draggedItemSize, getItemSpace);
305
+ this._renderer.setStyle(data.element, 'transform', transform ? `${this._orientation() === 'vertical' ? 'translateY' : 'translateX'}(${transform}px)` : '');
306
+ });
307
+ }
308
+ }
309
+ /** Creates or moves the placeholder element for inter-list drags */
310
+ _updatePlaceholderElement(activeItem, targetIndex) {
311
+ const rect = activeItem.elementRect();
312
+ if (!rect)
313
+ return;
314
+ // Create placeholder as a clone of the dragged element
315
+ if (!this._placeholderElement) {
316
+ // Clone the entire dragged element
317
+ const sourceElement = activeItem.element();
318
+ this._placeholderElement = sourceElement.cloneNode(true);
319
+ // Mark it as a placeholder
320
+ this._renderer.addClass(this._placeholderElement, 'ax-drop-placeholder');
321
+ this._renderer.addClass(this._placeholderElement, 'ax-drag-placeholder');
322
+ // Prevent interaction with cloned content
323
+ this._renderer.setStyle(this._placeholderElement, 'pointerEvents', 'none');
324
+ // Add faded styling to indicate it's a placeholder
325
+ this._renderer.setStyle(this._placeholderElement, 'opacity', '0.4');
326
+ this._renderer.setStyle(this._placeholderElement, 'transition', 'all 200ms ease');
327
+ }
328
+ // Insert/move placeholder at target index
329
+ const items = this._cachedItems();
330
+ if (targetIndex >= 0 && targetIndex < items.length) {
331
+ const targetItem = items[targetIndex];
332
+ if (targetItem && targetItem.element) {
333
+ this._renderer.insertBefore(this.element, this._placeholderElement, targetItem.element);
293
334
  }
294
- const transform = this._calculateTransform(index, originalIndex, draggedItemSize, getItemSpace);
295
- this._renderer.setStyle(data.element, 'transform', transform ? `${this._orientation() === 'vertical' ? 'translateY' : 'translateX'}(${transform}px)` : '');
296
- });
335
+ else {
336
+ // Fallback: append at end if target item invalid
337
+ this._renderer.appendChild(this.element, this._placeholderElement);
338
+ }
339
+ }
340
+ else {
341
+ // Insert at end
342
+ this._renderer.appendChild(this.element, this._placeholderElement);
343
+ }
344
+ }
345
+ /** Removes the placeholder element if it exists */
346
+ _removePlaceholderElement() {
347
+ if (this._placeholderElement) {
348
+ this._renderer.removeChild(this.element, this._placeholderElement);
349
+ this._placeholderElement = null;
350
+ }
297
351
  }
298
352
  /**
299
353
  * Calculates the required transform in pixels for a single item.
@@ -359,6 +413,7 @@ class AXDropListDirective extends NXComponent {
359
413
  /** Removes all `transform` styles from the items in this list. */
360
414
  _resetAllTransforms() {
361
415
  this._cachedItems().forEach((data) => this._renderer.setStyle(data.element, 'transform', ''));
416
+ this._removePlaceholderElement(); // Clean up inter-list placeholder
362
417
  }
363
418
  /** Resets the internal state of the directive to its initial values. */
364
419
  resetSortState() {
@@ -369,17 +424,21 @@ class AXDropListDirective extends NXComponent {
369
424
  this._listInitialRect.set(null);
370
425
  this._listGap.set(0);
371
426
  }
372
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDropListDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
373
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.3", type: AXDropListDirective, isStandalone: true, selector: "[axDropList]", inputs: { sortingDisabled: { classPropertyName: "sortingDisabled", publicName: "sortingDisabled", isSignal: true, isRequired: false, transformFunction: null }, dropListGroup: { classPropertyName: "dropListGroup", publicName: "dropListGroup", isSignal: true, isRequired: false, transformFunction: null }, dropListOrientation: { classPropertyName: "dropListOrientation", publicName: "dropListOrientation", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dropListDropped: "dropListDropped" }, queries: [{ propertyName: "_draggableItems", predicate: AXDragDirective, isSignal: true }], exportAs: ["axDropList"], usesInheritance: true, ngImport: i0 }); }
427
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXDropListDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
428
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.15", type: AXDropListDirective, isStandalone: true, selector: "[axDropList]", inputs: { axDropList: { classPropertyName: "axDropList", publicName: "axDropList", isSignal: true, isRequired: false, transformFunction: null }, sortingDisabled: { classPropertyName: "sortingDisabled", publicName: "sortingDisabled", isSignal: true, isRequired: false, transformFunction: null }, dropListGroup: { classPropertyName: "dropListGroup", publicName: "dropListGroup", isSignal: true, isRequired: false, transformFunction: null }, dropListOrientation: { classPropertyName: "dropListOrientation", publicName: "dropListOrientation", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dropListDropped: "dropListDropped" }, queries: [{ propertyName: "_draggableItems", predicate: AXDragDirective, isSignal: true }], exportAs: ["axDropList"], usesInheritance: true, ngImport: i0 }); }
374
429
  }
375
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDropListDirective, decorators: [{
430
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXDropListDirective, decorators: [{
376
431
  type: Directive,
377
432
  args: [{
378
433
  selector: '[axDropList]',
379
434
  exportAs: 'axDropList',
380
435
  }]
381
- }] });
436
+ }], propDecorators: { axDropList: [{ type: i0.Input, args: [{ isSignal: true, alias: "axDropList", required: false }] }], sortingDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortingDisabled", required: false }] }], dropListGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropListGroup", required: false }] }], dropListOrientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropListOrientation", required: false }] }], dropListDropped: [{ type: i0.Output, args: ["dropListDropped"] }], _draggableItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => AXDragDirective), { ...{ descendants: false }, isSignal: true }] }] } });
382
437
 
438
+ // Zone detection constants for nested drop lists (tree nodes)
439
+ const ZONE_TOP_THRESHOLD = 0.3; // Top 30% triggers reorder BEFORE
440
+ const ZONE_BOTTOM_THRESHOLD = 0.7; // Bottom 30% triggers reorder AFTER
441
+ // Middle 40% (between thresholds) triggers drop INTO
383
442
  class AXDragDirective {
384
443
  constructor() {
385
444
  this.zone = inject(NgZone);
@@ -390,6 +449,7 @@ class AXDragDirective {
390
449
  this.viewContainerRef = inject(ViewContainerRef);
391
450
  this.el = inject(ElementRef);
392
451
  this.handleDirective = contentChild(AXDragHandleDirective, ...(ngDevMode ? [{ debugName: "handleDirective" }] : []));
452
+ this.axDrag = input(true, ...(ngDevMode ? [{ debugName: "axDrag", transform: (value) => value === '' || value === true }] : [{ transform: (value) => value === '' || value === true }]));
393
453
  this.dragData = input(...(ngDevMode ? [undefined, { debugName: "dragData" }] : []));
394
454
  this.dragDisabled = input(false, ...(ngDevMode ? [{ debugName: "dragDisabled" }] : []));
395
455
  this.dragTransition = input(true, ...(ngDevMode ? [{ debugName: "dragTransition" }] : []));
@@ -412,13 +472,14 @@ class AXDragDirective {
412
472
  this.dragStartTime = signal(0, ...(ngDevMode ? [{ debugName: "dragStartTime" }] : []));
413
473
  this.isDragging = signal(false, ...(ngDevMode ? [{ debugName: "isDragging" }] : []));
414
474
  this.elementOpacity = signal('1', ...(ngDevMode ? [{ debugName: "elementOpacity" }] : []));
415
- this.isDelayStarted = signal(false, ...(ngDevMode ? [{ debugName: "isDelayStarted" }] : []));
416
475
  this.movedAfterDelay = signal(false, ...(ngDevMode ? [{ debugName: "movedAfterDelay" }] : []));
417
476
  this.activePointerId = signal(null, ...(ngDevMode ? [{ debugName: "activePointerId" }] : []));
418
477
  this.prevDropZone = signal(null, ...(ngDevMode ? [{ debugName: "prevDropZone" }] : []));
419
478
  this.dragStartOffset = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "dragStartOffset" }] : []));
420
479
  this.clonePointerOffset = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "clonePointerOffset" }] : []));
421
480
  this.clonedElementViewRef = signal(null, ...(ngDevMode ? [{ debugName: "clonedElementViewRef" }] : []));
481
+ this.rafId = null;
482
+ this.pendingPointerEvent = null;
422
483
  this._parentDropList = inject(AXDropListDirective, { optional: true, skipSelf: true, host: false });
423
484
  this._currentDropList = signal(null, ...(ngDevMode ? [{ debugName: "_currentDropList" }] : []));
424
485
  this.createCloneElement = computed(() => this.dragElementClone() || !!this._parentDropList, ...(ngDevMode ? [{ debugName: "createCloneElement" }] : []));
@@ -449,6 +510,7 @@ class AXDragDirective {
449
510
  this.boundHandlePointerUp = this.handlePointerUp.bind(this);
450
511
  this.boundHandlePointerDown = this.handlePointerDown.bind(this);
451
512
  this.boundHandlePointerMove = this.handlePointerMove.bind(this);
513
+ this.listenersAttached = signal(null, ...(ngDevMode ? [{ debugName: "listenersAttached" }] : []));
452
514
  this.#dragDisabledEffect = effect(() => {
453
515
  if (this.dragCursor() === 'none') {
454
516
  return;
@@ -462,14 +524,30 @@ class AXDragDirective {
462
524
  this.renderer.removeStyle(this.handle(), 'touch-action');
463
525
  }
464
526
  }, ...(ngDevMode ? [{ debugName: "#dragDisabledEffect" }] : []));
527
+ this.#handleChangeEffect = effect(() => {
528
+ if (!isPlatformBrowser(this.platformId))
529
+ return;
530
+ const currentHandle = this.handle();
531
+ const previousHandle = this.listenersAttached();
532
+ // Remove listeners from previous handle if it changed
533
+ if (previousHandle && previousHandle !== currentHandle) {
534
+ previousHandle.removeEventListener('dblclick', this.boundHandleDblClick);
535
+ previousHandle.removeEventListener('pointerdown', this.boundHandlePointerDown);
536
+ }
537
+ // Attach listeners to new handle
538
+ if (currentHandle && currentHandle !== previousHandle) {
539
+ this.zone.runOutsideAngular(() => {
540
+ currentHandle.addEventListener('dblclick', this.boundHandleDblClick);
541
+ currentHandle.addEventListener('pointerdown', this.boundHandlePointerDown, { passive: false });
542
+ });
543
+ this.listenersAttached.set(currentHandle);
544
+ }
545
+ }, ...(ngDevMode ? [{ debugName: "#handleChangeEffect" }] : []));
465
546
  }
466
547
  #dragDisabledEffect;
548
+ #handleChangeEffect;
467
549
  ngOnInit() {
468
550
  if (isPlatformBrowser(this.platformId)) {
469
- this.zone.runOutsideAngular(() => {
470
- this.handle().addEventListener('dblclick', this.boundHandleDblClick);
471
- this.handle().addEventListener('pointerdown', this.boundHandlePointerDown, { passive: false });
472
- });
473
551
  if (this._parentDropList) {
474
552
  this.setElementTransition(this.element());
475
553
  }
@@ -479,8 +557,11 @@ class AXDragDirective {
479
557
  }
480
558
  ngOnDestroy() {
481
559
  if (isPlatformBrowser(this.platformId)) {
482
- this.handle().removeEventListener('dblclick', this.boundHandleDblClick);
483
- this.handle().removeEventListener('pointerdown', this.boundHandlePointerDown);
560
+ const handle = this.listenersAttached();
561
+ if (handle) {
562
+ handle.removeEventListener('dblclick', this.boundHandleDblClick);
563
+ handle.removeEventListener('pointerdown', this.boundHandlePointerDown);
564
+ }
484
565
  this.removeDocumentListeners();
485
566
  if (this.createCloneElement()) {
486
567
  this.removeCloneElement();
@@ -501,7 +582,7 @@ class AXDragDirective {
501
582
  handlePointerDown(e) {
502
583
  if (!isPlatformBrowser(this.platformId))
503
584
  return;
504
- if (this.dragDisabled() || e.button !== 0 || this._parentDropList?.sortingDisabled())
585
+ if (!this.axDrag() || this.dragDisabled() || e.button !== 0 || this._parentDropList?.sortingDisabled())
505
586
  return;
506
587
  this.isDragging.set(true);
507
588
  this.movedAfterDelay.set(false);
@@ -523,42 +604,54 @@ class AXDragDirective {
523
604
  this.setPosition(0, 0);
524
605
  }
525
606
  handlePointerMove(e) {
526
- if (this.movedAfterDelay() ||
527
- !this.isDragging() ||
528
- this.isDelayStarted() ||
529
- !isPlatformBrowser(this.platformId) ||
530
- e.pointerId !== this.activePointerId()) {
607
+ if (!this.isDragging() || !isPlatformBrowser(this.platformId) || e.pointerId !== this.activePointerId()) {
531
608
  return;
532
609
  }
533
610
  e.preventDefault();
534
611
  if (!this.isMoving()) {
535
612
  const delay = this.dragStartDelay() ?? 0;
613
+ // FIX: Delay logic was inverted
536
614
  if (Date.now() - this.dragStartTime() < delay) {
537
- this.movedAfterDelay.set(true);
538
- return;
615
+ return; // Still waiting for delay
539
616
  }
540
617
  this.isMoving.set(true);
541
618
  this.handle().setPointerCapture(e.pointerId);
542
619
  this.startDrag(e);
543
620
  }
544
- if (this.createCloneElement()) {
545
- const newCloneX = e.clientX - this.clonePointerOffset().x;
546
- const newCloneY = e.clientY - this.clonePointerOffset().y;
547
- this.setClonePosition(newCloneX, newCloneY);
548
- }
549
- else {
550
- const newX = e.clientX - this.dragStartOffset().x;
551
- const newY = e.clientY - this.dragStartOffset().y;
552
- this.setPosition(newX, newY);
553
- }
621
+ // Run position updates outside Angular zone for better performance
622
+ this.zone.runOutsideAngular(() => {
623
+ if (this.createCloneElement()) {
624
+ const newCloneX = e.clientX - this.clonePointerOffset().x;
625
+ const newCloneY = e.clientY - this.clonePointerOffset().y;
626
+ this.setClonePosition(newCloneX, newCloneY);
627
+ }
628
+ else {
629
+ const newX = e.clientX - this.dragStartOffset().x;
630
+ const newY = e.clientY - this.dragStartOffset().y;
631
+ this.setPosition(newX, newY);
632
+ }
633
+ });
634
+ // Throttle drop list interactions using requestAnimationFrame
554
635
  if (this._parentDropList) {
555
- this.handleDropListInteractions(e);
636
+ this.pendingPointerEvent = e;
637
+ if (this.rafId === null) {
638
+ this.rafId = requestAnimationFrame(() => {
639
+ if (this.pendingPointerEvent) {
640
+ this.handleDropListInteractions(this.pendingPointerEvent);
641
+ this.pendingPointerEvent = null;
642
+ }
643
+ this.rafId = null;
644
+ });
645
+ }
556
646
  }
557
647
  else {
558
648
  this.dropZoneHoverHandler(e);
559
649
  }
560
650
  }
561
651
  startDrag(e) {
652
+ // Add CDK-style classes
653
+ this.renderer.addClass(this.element(), 'ax-dragging');
654
+ this.renderer.addClass(this.element(), 'ax-drag-placeholder');
562
655
  if (this._parentDropList) {
563
656
  this._currentDropList.set(this._parentDropList);
564
657
  this._parentDropList.prepareSort(this);
@@ -572,7 +665,11 @@ class AXDragDirective {
572
665
  x: e.clientX - elementRect.left,
573
666
  y: e.clientY - elementRect.top,
574
667
  });
575
- this.createCloneElementHandler(this.element());
668
+ const clone = this.createCloneElementHandler(this.element());
669
+ if (clone) {
670
+ this.renderer.addClass(clone, 'ax-drag-preview');
671
+ this.renderer.addClass(clone, 'ax-dragging');
672
+ }
576
673
  }
577
674
  }
578
675
  handlePointerUp(e) {
@@ -585,6 +682,9 @@ class AXDragDirective {
585
682
  const wasMoving = this.isMoving();
586
683
  this.isMoving.set(false);
587
684
  this.isDragging.set(false);
685
+ // Remove CDK-style classes
686
+ this.renderer.removeClass(this.element(), 'ax-dragging');
687
+ this.renderer.removeClass(this.element(), 'ax-drag-placeholder');
588
688
  if (!wasMoving) {
589
689
  this.activePointerId.set(null);
590
690
  this.removeDocumentListeners();
@@ -610,6 +710,12 @@ class AXDragDirective {
610
710
  else {
611
711
  this.dropZoneDropHandler(e);
612
712
  }
713
+ // Cancel any pending RAF callbacks
714
+ if (this.rafId !== null) {
715
+ cancelAnimationFrame(this.rafId);
716
+ this.rafId = null;
717
+ }
718
+ this.pendingPointerEvent = null;
613
719
  this.activePointerId.set(null);
614
720
  this.removeDocumentListeners();
615
721
  this._currentDropList.set(null);
@@ -633,9 +739,21 @@ class AXDragDirective {
633
739
  const listUnderPointer = this.getDropListFromPoint(e.clientX, e.clientY);
634
740
  const previousList = this._currentDropList();
635
741
  let targetList = null;
636
- if (listUnderPointer && this.canDropInList(listUnderPointer)) {
742
+ const canDrop = listUnderPointer && this.canDropInList(listUnderPointer);
743
+ if (canDrop) {
637
744
  targetList = listUnderPointer;
638
745
  }
746
+ // Update cursor based on whether drop is allowed
747
+ if (listUnderPointer) {
748
+ const cloneEl = this.clonedElement();
749
+ const cursor = canDrop ? 'move' : 'not-allowed';
750
+ if (cloneEl) {
751
+ this.renderer.setStyle(cloneEl, 'cursor', cursor);
752
+ }
753
+ else {
754
+ this.renderer.setStyle(this.element(), 'cursor', cursor);
755
+ }
756
+ }
639
757
  if (targetList !== previousList) {
640
758
  if (previousList) {
641
759
  previousList.cancelSortPreview();
@@ -659,7 +777,40 @@ class AXDragDirective {
659
777
  }
660
778
  const dragGroup = this._parentDropList.dropListGroup();
661
779
  const targetGroup = list.dropListGroup();
662
- return !!dragGroup && dragGroup === targetGroup;
780
+ if (!dragGroup || dragGroup !== targetGroup) {
781
+ return false;
782
+ }
783
+ // Check for circular reference (tree-specific validation)
784
+ const draggedNode = this.dragData();
785
+ const targetNodeId = list.element.getAttribute('data-node-id');
786
+ if (draggedNode && this.isCircularReference(targetNodeId, draggedNode)) {
787
+ return false;
788
+ }
789
+ return true;
790
+ }
791
+ isCircularReference(targetNodeId, draggedNode) {
792
+ if (!draggedNode || typeof draggedNode !== 'object') {
793
+ return false;
794
+ }
795
+ const node = draggedNode;
796
+ // Check if dropping into itself
797
+ if (targetNodeId === node.id) {
798
+ return true;
799
+ }
800
+ // Check if targetNodeId is in draggedNode's descendants
801
+ if (!node.children || !Array.isArray(node.children)) {
802
+ return false;
803
+ }
804
+ for (const child of node.children) {
805
+ const childNode = child;
806
+ if (childNode.id === targetNodeId) {
807
+ return true;
808
+ }
809
+ if (this.isCircularReference(targetNodeId, child)) {
810
+ return true;
811
+ }
812
+ }
813
+ return false;
663
814
  }
664
815
  dropZoneHoverHandler(e) {
665
816
  const dropZones = this.getDropZonesFromPoint(e.clientX, e.clientY);
@@ -695,10 +846,37 @@ class AXDragDirective {
695
846
  .map((el) => el['__axContext__']);
696
847
  }
697
848
  getDropListFromPoint(x, y) {
698
- const dropListElement = this.document
849
+ const dropListElements = this.document
699
850
  .elementsFromPoint(x, y)
700
- .find((el) => el instanceof HTMLElement && el.dataset['axDropList'] === 'true');
701
- return dropListElement ? dropListElement['__axContext__'] : null;
851
+ .filter((el) => el instanceof HTMLElement && el.dataset['axDropList'] === 'true');
852
+ if (dropListElements.length === 0) {
853
+ return null;
854
+ }
855
+ // If only one drop list, use it
856
+ if (dropListElements.length === 1) {
857
+ return dropListElements[0]['__axContext__'];
858
+ }
859
+ // Multiple drop lists detected (nested scenario like tree2)
860
+ // Prioritize based on pointer position and drop type
861
+ const ontoNodeList = dropListElements.find((el) => el.dataset['dropType'] === 'onto-node');
862
+ const reorderList = dropListElements.find((el) => el.dataset['dropType'] !== 'onto-node');
863
+ // If no special handling needed, return first
864
+ if (!ontoNodeList || !reorderList) {
865
+ return dropListElements[0]['__axContext__'];
866
+ }
867
+ // Calculate pointer position relative to the "onto-node" element
868
+ const ontoNodeRect = ontoNodeList.getBoundingClientRect();
869
+ const relativeY = y - ontoNodeRect.top;
870
+ const heightRatio = relativeY / ontoNodeRect.height;
871
+ // Smart zone detection based on pointer position
872
+ if (heightRatio < ZONE_TOP_THRESHOLD || heightRatio > ZONE_BOTTOM_THRESHOLD) {
873
+ // Top or bottom zone: reorder (drop BEFORE/AFTER node)
874
+ return reorderList['__axContext__'];
875
+ }
876
+ else {
877
+ // Center zone: onto-node (drop INTO node as child)
878
+ return ontoNodeList['__axContext__'];
879
+ }
702
880
  }
703
881
  dropZoneValidation(dropZone) {
704
882
  if (!dropZone)
@@ -739,9 +917,14 @@ class AXDragDirective {
739
917
  constrainedY = this.currentAxis().y;
740
918
  if (this.dragLockAxis() === 'y')
741
919
  constrainedX = this.currentAxis().x;
742
- this.currentAxis.set({ x: constrainedX, y: constrainedY });
920
+ // Direct DOM manipulation without triggering change detection
743
921
  this.renderer.setStyle(this.element(), 'translate', `${constrainedX}px ${constrainedY}px`);
744
- this.dragPositionChanged.emit(this.currentAxis());
922
+ // Only update signal and emit if position actually changed significantly (throttle)
923
+ const current = this.currentAxis();
924
+ if (Math.abs(current.x - constrainedX) > 0.5 || Math.abs(current.y - constrainedY) > 0.5) {
925
+ this.currentAxis.set({ x: constrainedX, y: constrainedY });
926
+ this.dragPositionChanged.emit({ x: constrainedX, y: constrainedY });
927
+ }
745
928
  }
746
929
  setClonePosition(x, y) {
747
930
  let constrainedX = x;
@@ -758,9 +941,14 @@ class AXDragDirective {
758
941
  constrainedY = this.currentCloneAxis().y;
759
942
  if (this.dragLockAxis() === 'y')
760
943
  constrainedX = this.currentCloneAxis().x;
761
- this.currentCloneAxis.set({ x: constrainedX, y: constrainedY });
944
+ // Direct DOM manipulation without triggering change detection
762
945
  this.renderer.setStyle(cloneEl, 'translate', `${constrainedX}px ${constrainedY}px`);
763
- this.dragPositionChanged.emit(this.currentCloneAxis());
946
+ // Only update signal and emit if position actually changed significantly (throttle)
947
+ const current = this.currentCloneAxis();
948
+ if (Math.abs(current.x - constrainedX) > 0.5 || Math.abs(current.y - constrainedY) > 0.5) {
949
+ this.currentCloneAxis.set({ x: constrainedX, y: constrainedY });
950
+ this.dragPositionChanged.emit({ x: constrainedX, y: constrainedY });
951
+ }
764
952
  }
765
953
  createCloneElementHandler(originalElement) {
766
954
  if (!isPlatformBrowser(this.platformId)) {
@@ -819,8 +1007,8 @@ class AXDragDirective {
819
1007
  try {
820
1008
  target.style.setProperty(propName, computedStyles.getPropertyValue(propName), computedStyles.getPropertyPriority(propName));
821
1009
  }
822
- catch (e) {
823
- console.log(e);
1010
+ catch {
1011
+ // Some CSS properties cannot be set directly, skip silently
824
1012
  }
825
1013
  }
826
1014
  }
@@ -950,6 +1138,9 @@ class AXDragDirective {
950
1138
  return;
951
1139
  const clone = this.clonedElement();
952
1140
  if (clone?.parentNode) {
1141
+ // Remove classes before removing element
1142
+ this.renderer.removeClass(clone, 'ax-drag-preview');
1143
+ this.renderer.removeClass(clone, 'ax-dragging');
953
1144
  this.renderer.removeChild(clone.parentNode, clone);
954
1145
  }
955
1146
  this.clonedElement.set(null);
@@ -977,15 +1168,15 @@ class AXDragDirective {
977
1168
  this.document.removeEventListener('pointercancel', this.boundHandlePointerUp);
978
1169
  });
979
1170
  }
980
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDragDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
981
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.3", type: AXDragDirective, isStandalone: true, selector: "[axDrag]", inputs: { dragData: { classPropertyName: "dragData", publicName: "dragData", isSignal: true, isRequired: false, transformFunction: null }, dragDisabled: { classPropertyName: "dragDisabled", publicName: "dragDisabled", isSignal: true, isRequired: false, transformFunction: null }, dragTransition: { classPropertyName: "dragTransition", publicName: "dragTransition", isSignal: true, isRequired: false, transformFunction: null }, dragElementClone: { classPropertyName: "dragElementClone", publicName: "dragElementClone", isSignal: true, isRequired: false, transformFunction: null }, dropZoneGroup: { classPropertyName: "dropZoneGroup", publicName: "dropZoneGroup", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, dragResetOnDblClick: { classPropertyName: "dragResetOnDblClick", publicName: "dragResetOnDblClick", isSignal: true, isRequired: false, transformFunction: null }, dragLockAxis: { classPropertyName: "dragLockAxis", publicName: "dragLockAxis", isSignal: true, isRequired: false, transformFunction: null }, dragClonedTemplate: { classPropertyName: "dragClonedTemplate", publicName: "dragClonedTemplate", isSignal: true, isRequired: false, transformFunction: null }, dragCursor: { classPropertyName: "dragCursor", publicName: "dragCursor", isSignal: true, isRequired: false, transformFunction: null }, dragBoundary: { classPropertyName: "dragBoundary", publicName: "dragBoundary", isSignal: true, isRequired: false, transformFunction: null }, dragTransitionDuration: { classPropertyName: "dragTransitionDuration", publicName: "dragTransitionDuration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dragPositionChanged: "dragPositionChanged" }, queries: [{ propertyName: "handleDirective", first: true, predicate: AXDragHandleDirective, descendants: true, isSignal: true }], ngImport: i0 }); }
1171
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXDragDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1172
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.15", type: AXDragDirective, isStandalone: true, selector: "[axDrag]", inputs: { axDrag: { classPropertyName: "axDrag", publicName: "axDrag", isSignal: true, isRequired: false, transformFunction: null }, dragData: { classPropertyName: "dragData", publicName: "dragData", isSignal: true, isRequired: false, transformFunction: null }, dragDisabled: { classPropertyName: "dragDisabled", publicName: "dragDisabled", isSignal: true, isRequired: false, transformFunction: null }, dragTransition: { classPropertyName: "dragTransition", publicName: "dragTransition", isSignal: true, isRequired: false, transformFunction: null }, dragElementClone: { classPropertyName: "dragElementClone", publicName: "dragElementClone", isSignal: true, isRequired: false, transformFunction: null }, dropZoneGroup: { classPropertyName: "dropZoneGroup", publicName: "dropZoneGroup", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: "dragStartDelay", publicName: "dragStartDelay", isSignal: true, isRequired: false, transformFunction: null }, dragResetOnDblClick: { classPropertyName: "dragResetOnDblClick", publicName: "dragResetOnDblClick", isSignal: true, isRequired: false, transformFunction: null }, dragLockAxis: { classPropertyName: "dragLockAxis", publicName: "dragLockAxis", isSignal: true, isRequired: false, transformFunction: null }, dragClonedTemplate: { classPropertyName: "dragClonedTemplate", publicName: "dragClonedTemplate", isSignal: true, isRequired: false, transformFunction: null }, dragCursor: { classPropertyName: "dragCursor", publicName: "dragCursor", isSignal: true, isRequired: false, transformFunction: null }, dragBoundary: { classPropertyName: "dragBoundary", publicName: "dragBoundary", isSignal: true, isRequired: false, transformFunction: null }, dragTransitionDuration: { classPropertyName: "dragTransitionDuration", publicName: "dragTransitionDuration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dragPositionChanged: "dragPositionChanged" }, queries: [{ propertyName: "handleDirective", first: true, predicate: AXDragHandleDirective, descendants: true, isSignal: true }], ngImport: i0 }); }
982
1173
  }
983
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDragDirective, decorators: [{
1174
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXDragDirective, decorators: [{
984
1175
  type: Directive,
985
1176
  args: [{
986
1177
  selector: '[axDrag]',
987
1178
  }]
988
- }] });
1179
+ }], propDecorators: { handleDirective: [{ type: i0.ContentChild, args: [i0.forwardRef(() => AXDragHandleDirective), { isSignal: true }] }], axDrag: [{ type: i0.Input, args: [{ isSignal: true, alias: "axDrag", required: false }] }], dragData: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragData", required: false }] }], dragDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragDisabled", required: false }] }], dragTransition: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragTransition", required: false }] }], dragElementClone: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragElementClone", required: false }] }], dropZoneGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropZoneGroup", required: false }] }], dragStartDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragStartDelay", required: false }] }], dragResetOnDblClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragResetOnDblClick", required: false }] }], dragLockAxis: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragLockAxis", required: false }] }], dragClonedTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragClonedTemplate", required: false }] }], dragCursor: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragCursor", required: false }] }], dragBoundary: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragBoundary", required: false }] }], dragTransitionDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragTransitionDuration", required: false }] }], dragPositionChanged: [{ type: i0.Output, args: ["dragPositionChanged"] }] } });
989
1180
 
990
1181
  class AXDropZoneDirective extends NXComponent {
991
1182
  constructor() {
@@ -999,24 +1190,24 @@ class AXDropZoneDirective extends NXComponent {
999
1190
  ngOnInit() {
1000
1191
  this.element().dataset['axDropZone'] = 'true';
1001
1192
  }
1002
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDropZoneDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1003
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.3", type: AXDropZoneDirective, isStandalone: true, selector: "[axDropZone]", inputs: { dropZoneGroup: { classPropertyName: "dropZoneGroup", publicName: "dropZoneGroup", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onElementDrop: "onElementDrop", onElementHover: "onElementHover" }, exportAs: ["axDropZone"], usesInheritance: true, ngImport: i0 }); }
1193
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXDropZoneDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
1194
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.15", type: AXDropZoneDirective, isStandalone: true, selector: "[axDropZone]", inputs: { dropZoneGroup: { classPropertyName: "dropZoneGroup", publicName: "dropZoneGroup", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onElementDrop: "onElementDrop", onElementHover: "onElementHover" }, exportAs: ["axDropZone"], usesInheritance: true, ngImport: i0 }); }
1004
1195
  }
1005
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDropZoneDirective, decorators: [{
1196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXDropZoneDirective, decorators: [{
1006
1197
  type: Directive,
1007
1198
  args: [{
1008
1199
  selector: '[axDropZone]',
1009
1200
  exportAs: 'axDropZone',
1010
1201
  }]
1011
- }] });
1202
+ }], propDecorators: { dropZoneGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropZoneGroup", required: false }] }], onElementDrop: [{ type: i0.Output, args: ["onElementDrop"] }], onElementHover: [{ type: i0.Output, args: ["onElementHover"] }] } });
1012
1203
 
1013
- const COMPONENT = [AXDragDirective, AXDragHandleDirective, AXDropZoneDirective];
1204
+ const COMPONENT = [AXDragDirective, AXDragHandleDirective, AXDropListDirective, AXDropZoneDirective];
1014
1205
  class AXDragDropModule {
1015
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDragDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1016
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.3", ngImport: i0, type: AXDragDropModule, imports: [AXDragDirective, AXDragHandleDirective, AXDropZoneDirective], exports: [AXDragDirective, AXDragHandleDirective, AXDropZoneDirective] }); }
1017
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDragDropModule }); }
1206
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXDragDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1207
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: AXDragDropModule, imports: [AXDragDirective, AXDragHandleDirective, AXDropListDirective, AXDropZoneDirective], exports: [AXDragDirective, AXDragHandleDirective, AXDropListDirective, AXDropZoneDirective] }); }
1208
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXDragDropModule }); }
1018
1209
  }
1019
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXDragDropModule, decorators: [{
1210
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXDragDropModule, decorators: [{
1020
1211
  type: NgModule,
1021
1212
  args: [{
1022
1213
  imports: [...COMPONENT],