Icard/angular-clarity-master(work.../node_modules/ngx-drag-drop/fesm2022/ngx-drag-drop.mjs

727 lines
30 KiB
JavaScript
Raw Permalink Normal View History

2024-07-16 14:55:36 +00:00
import * as i0 from '@angular/core';
import { inject, forwardRef, ElementRef, Directive, EventEmitter, Renderer2, NgZone, Input, Output, HostBinding, HostListener, ContentChild, NgModule } from '@angular/core';
const DROP_EFFECTS = ['move', 'copy', 'link'];
const CUSTOM_MIME_TYPE = 'application/x-dnd';
const JSON_MIME_TYPE = 'application/json';
const MSIE_MIME_TYPE = 'Text';
function mimeTypeIsCustom(mimeType) {
return mimeType.substr(0, CUSTOM_MIME_TYPE.length) === CUSTOM_MIME_TYPE;
}
function getWellKnownMimeType(event) {
if (event.dataTransfer) {
const types = event.dataTransfer.types;
// IE 9 workaround.
if (!types) {
return MSIE_MIME_TYPE;
}
for (let i = 0; i < types.length; i++) {
if (types[i] === MSIE_MIME_TYPE ||
types[i] === JSON_MIME_TYPE ||
mimeTypeIsCustom(types[i])) {
return types[i];
}
}
}
return null;
}
function setDragData(event, data, effectAllowed) {
// Internet Explorer and Microsoft Edge don't support custom mime types, see design doc:
// https://github.com/marceljuenemann/angular-drag-and-drop-lists/wiki/Data-Transfer-Design
const mimeType = CUSTOM_MIME_TYPE + (data.type ? '-' + data.type : '');
const dataString = JSON.stringify(data);
try {
event.dataTransfer?.setData(mimeType, dataString);
}
catch (e) {
// Setting a custom MIME type did not work, we are probably in IE or Edge.
try {
event.dataTransfer?.setData(JSON_MIME_TYPE, dataString);
}
catch (e) {
// We are in Internet Explorer and can only use the Text MIME type. Also note that IE
// does not allow changing the cursor in the dragover event, therefore we have to choose
// the one we want to display now by setting effectAllowed.
const effectsAllowed = filterEffects(DROP_EFFECTS, effectAllowed);
if (event.dataTransfer) {
event.dataTransfer.effectAllowed = effectsAllowed[0];
}
event.dataTransfer?.setData(MSIE_MIME_TYPE, dataString);
}
}
}
function getDropData(event, dragIsExternal) {
// check if the mime type is well known
const mimeType = getWellKnownMimeType(event);
// drag did not originate from [dndDraggable]
if (dragIsExternal === true) {
if (mimeType !== null && mimeTypeIsCustom(mimeType)) {
// the type of content is well known and safe to handle
return JSON.parse(event.dataTransfer?.getData(mimeType) ?? '{}');
}
// the contained data is unknown, let user handle it
return {};
}
if (mimeType !== null) {
// the type of content is well known and safe to handle
return JSON.parse(event.dataTransfer?.getData(mimeType) ?? '{}');
}
// the contained data is unknown, let user handle it
return {};
}
function filterEffects(effects, allowed) {
if (allowed === 'all' || allowed === 'uninitialized') {
return effects;
}
return effects.filter(function (effect) {
return allowed.toLowerCase().indexOf(effect) !== -1;
});
}
function getDirectChildElement(parentElement, childElement) {
let directChild = childElement;
while (directChild.parentNode !== parentElement) {
// reached root node without finding given parent
if (!directChild.parentNode) {
return null;
}
directChild = directChild.parentNode;
}
return directChild;
}
function shouldPositionPlaceholderBeforeElement(event, element, horizontal) {
const bounds = element.getBoundingClientRect();
// If the pointer is in the upper half of the list item element,
// we position the placeholder before the list item, otherwise after it.
if (horizontal) {
return event.clientX < bounds.left + bounds.width / 2;
}
return event.clientY < bounds.top + bounds.height / 2;
}
function calculateDragImageOffset(event, dragImage) {
const dragImageComputedStyle = window.getComputedStyle(dragImage);
const paddingTop = parseFloat(dragImageComputedStyle.paddingTop) || 0;
const paddingLeft = parseFloat(dragImageComputedStyle.paddingLeft) || 0;
const borderTop = parseFloat(dragImageComputedStyle.borderTopWidth) || 0;
const borderLeft = parseFloat(dragImageComputedStyle.borderLeftWidth) || 0;
return {
x: event.offsetX + paddingLeft + borderLeft,
y: event.offsetY + paddingTop + borderTop,
};
}
function setDragImage(event, dragImage, offsetFunction) {
const offset = offsetFunction(event, dragImage) || { x: 0, y: 0 };
event.dataTransfer.setDragImage(dragImage, offset.x, offset.y);
}
const _dndState = {
isDragging: false,
dropEffect: 'none',
effectAllowed: 'all',
type: undefined,
};
function startDrag(event, effectAllowed, type) {
_dndState.isDragging = true;
_dndState.dropEffect = 'none';
_dndState.effectAllowed = effectAllowed;
_dndState.type = type;
if (event.dataTransfer) {
event.dataTransfer.effectAllowed = effectAllowed;
}
}
function endDrag() {
_dndState.isDragging = false;
_dndState.dropEffect = undefined;
_dndState.effectAllowed = undefined;
_dndState.type = undefined;
}
function setDropEffect(event, dropEffect) {
if (_dndState.isDragging === true) {
_dndState.dropEffect = dropEffect;
}
if (event.dataTransfer) {
event.dataTransfer.dropEffect = dropEffect;
}
}
function getDropEffect(event, effectAllowed) {
const dataTransferEffectAllowed = event.dataTransfer
? event.dataTransfer.effectAllowed
: 'uninitialized';
let effects = filterEffects(DROP_EFFECTS, dataTransferEffectAllowed);
if (_dndState.isDragging === true) {
effects = filterEffects(effects, _dndState.effectAllowed);
}
if (effectAllowed) {
effects = filterEffects(effects, effectAllowed);
}
// MacOS automatically filters dataTransfer.effectAllowed depending on the modifier keys,
// therefore the following modifier keys will only affect other operating systems.
if (effects.length === 0) {
return 'none';
}
if (event.ctrlKey && effects.indexOf('copy') !== -1) {
return 'copy';
}
if (event.altKey && effects.indexOf('link') !== -1) {
return 'link';
}
return effects[0];
}
function getDndType(event) {
if (_dndState.isDragging === true) {
return _dndState.type;
}
const mimeType = getWellKnownMimeType(event);
if (mimeType === null) {
return undefined;
}
if (mimeType === MSIE_MIME_TYPE || mimeType === JSON_MIME_TYPE) {
return undefined;
}
return mimeType.substr(CUSTOM_MIME_TYPE.length + 1) || undefined;
}
function isExternalDrag() {
return _dndState.isDragging === false;
}
const dndState = _dndState;
class DndDragImageRefDirective {
dndDraggableDirective = inject(forwardRef(() => DndDraggableDirective));
elementRef = inject(ElementRef);
ngOnInit() {
this.dndDraggableDirective.registerDragImage(this.elementRef);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndDragImageRefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.1", type: DndDragImageRefDirective, isStandalone: true, selector: "[dndDragImageRef]", ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndDragImageRefDirective, decorators: [{
type: Directive,
args: [{ selector: '[dndDragImageRef]', standalone: true }]
}] });
class DndDraggableDirective {
dndDraggable;
dndEffectAllowed = 'copy';
dndType;
dndDraggingClass = 'dndDragging';
dndDraggingSourceClass = 'dndDraggingSource';
dndDraggableDisabledClass = 'dndDraggableDisabled';
dndDragImageOffsetFunction = calculateDragImageOffset;
dndStart = new EventEmitter();
dndDrag = new EventEmitter();
dndEnd = new EventEmitter();
dndMoved = new EventEmitter();
dndCopied = new EventEmitter();
dndLinked = new EventEmitter();
dndCanceled = new EventEmitter();
draggable = true;
dndHandle;
dndDragImageElementRef;
dragImage;
isDragStarted = false;
elementRef = inject(ElementRef);
renderer = inject(Renderer2);
ngZone = inject(NgZone);
set dndDisableIf(value) {
this.draggable = !value;
if (this.draggable) {
this.renderer.removeClass(this.elementRef.nativeElement, this.dndDraggableDisabledClass);
}
else {
this.renderer.addClass(this.elementRef.nativeElement, this.dndDraggableDisabledClass);
}
}
set dndDisableDragIf(value) {
this.dndDisableIf = value;
}
ngAfterViewInit() {
this.ngZone.runOutsideAngular(() => {
this.elementRef.nativeElement.addEventListener('drag', this.dragEventHandler);
});
}
ngOnDestroy() {
this.elementRef.nativeElement.removeEventListener('drag', this.dragEventHandler);
if (this.isDragStarted) {
endDrag();
}
}
onDragStart(event) {
if (!this.draggable) {
return false;
}
// check if there is dnd handle and if the dnd handle was used to start the drag
if (this.dndHandle != null && event._dndUsingHandle == null) {
event.stopPropagation();
return false;
}
// initialize global state
startDrag(event, this.dndEffectAllowed, this.dndType);
this.isDragStarted = true;
setDragData(event, { data: this.dndDraggable, type: this.dndType }, dndState.effectAllowed);
this.dragImage = this.determineDragImage();
// set dragging css class prior to setDragImage so styles are applied before
// TODO breaking change: add class to elementRef rather than drag image which could be another element
this.renderer.addClass(this.dragImage, this.dndDraggingClass);
// set custom dragimage if present
// set dragimage if drag is started from dndHandle
if (this.dndDragImageElementRef != null || event._dndUsingHandle != null) {
setDragImage(event, this.dragImage, this.dndDragImageOffsetFunction);
}
// add dragging source css class on first drag event
const unregister = this.renderer.listen(this.elementRef.nativeElement, 'drag', () => {
this.renderer.addClass(this.elementRef.nativeElement, this.dndDraggingSourceClass);
unregister();
});
this.dndStart.emit(event);
event.stopPropagation();
setTimeout(() => {
this.renderer.setStyle(this.dragImage, 'pointer-events', 'none');
}, 100);
return true;
}
onDrag(event) {
this.dndDrag.emit(event);
}
onDragEnd(event) {
if (!this.draggable || !this.isDragStarted) {
return;
}
// get drop effect from custom stored state as its not reliable across browsers
const dropEffect = dndState.dropEffect;
this.renderer.setStyle(this.dragImage, 'pointer-events', 'unset');
let dropEffectEmitter;
switch (dropEffect) {
case 'copy':
dropEffectEmitter = this.dndCopied;
break;
case 'link':
dropEffectEmitter = this.dndLinked;
break;
case 'move':
dropEffectEmitter = this.dndMoved;
break;
default:
dropEffectEmitter = this.dndCanceled;
break;
}
dropEffectEmitter.emit(event);
this.dndEnd.emit(event);
// reset global state
endDrag();
this.isDragStarted = false;
this.renderer.removeClass(this.dragImage, this.dndDraggingClass);
// IE9 special hammering
window.setTimeout(() => {
this.renderer.removeClass(this.elementRef.nativeElement, this.dndDraggingSourceClass);
}, 0);
event.stopPropagation();
}
registerDragHandle(handle) {
this.dndHandle = handle;
}
registerDragImage(elementRef) {
this.dndDragImageElementRef = elementRef;
}
dragEventHandler = (event) => this.onDrag(event);
determineDragImage() {
// evaluate custom drag image existence
if (typeof this.dndDragImageElementRef !== 'undefined') {
return this.dndDragImageElementRef.nativeElement;
}
else {
return this.elementRef.nativeElement;
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndDraggableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.1", type: DndDraggableDirective, isStandalone: true, selector: "[dndDraggable]", inputs: { dndDraggable: "dndDraggable", dndEffectAllowed: "dndEffectAllowed", dndType: "dndType", dndDraggingClass: "dndDraggingClass", dndDraggingSourceClass: "dndDraggingSourceClass", dndDraggableDisabledClass: "dndDraggableDisabledClass", dndDragImageOffsetFunction: "dndDragImageOffsetFunction", dndDisableIf: "dndDisableIf", dndDisableDragIf: "dndDisableDragIf" }, outputs: { dndStart: "dndStart", dndDrag: "dndDrag", dndEnd: "dndEnd", dndMoved: "dndMoved", dndCopied: "dndCopied", dndLinked: "dndLinked", dndCanceled: "dndCanceled" }, host: { listeners: { "dragstart": "onDragStart($event)", "dragend": "onDragEnd($event)" }, properties: { "attr.draggable": "this.draggable" } }, ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndDraggableDirective, decorators: [{
type: Directive,
args: [{ selector: '[dndDraggable]', standalone: true }]
}], propDecorators: { dndDraggable: [{
type: Input
}], dndEffectAllowed: [{
type: Input
}], dndType: [{
type: Input
}], dndDraggingClass: [{
type: Input
}], dndDraggingSourceClass: [{
type: Input
}], dndDraggableDisabledClass: [{
type: Input
}], dndDragImageOffsetFunction: [{
type: Input
}], dndStart: [{
type: Output
}], dndDrag: [{
type: Output
}], dndEnd: [{
type: Output
}], dndMoved: [{
type: Output
}], dndCopied: [{
type: Output
}], dndLinked: [{
type: Output
}], dndCanceled: [{
type: Output
}], draggable: [{
type: HostBinding,
args: ['attr.draggable']
}], dndDisableIf: [{
type: Input
}], dndDisableDragIf: [{
type: Input
}], onDragStart: [{
type: HostListener,
args: ['dragstart', ['$event']]
}], onDragEnd: [{
type: HostListener,
args: ['dragend', ['$event']]
}] } });
class DndPlaceholderRefDirective {
elementRef;
constructor(elementRef) {
this.elementRef = elementRef;
}
ngOnInit() {
// placeholder has to be "invisible" to the cursor, or it would interfere with the dragover detection for the same dropzone
this.elementRef.nativeElement.style.pointerEvents = 'none';
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndPlaceholderRefDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.1", type: DndPlaceholderRefDirective, isStandalone: true, selector: "[dndPlaceholderRef]", ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndPlaceholderRefDirective, decorators: [{
type: Directive,
args: [{ selector: '[dndPlaceholderRef]', standalone: true }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
class DndDropzoneDirective {
ngZone;
elementRef;
renderer;
dndDropzone = '';
dndEffectAllowed = 'uninitialized';
dndAllowExternal = false;
dndHorizontal = false;
dndDragoverClass = 'dndDragover';
dndDropzoneDisabledClass = 'dndDropzoneDisabled';
dndDragover = new EventEmitter();
dndDrop = new EventEmitter();
dndPlaceholderRef;
placeholder = null;
disabled = false;
constructor(ngZone, elementRef, renderer) {
this.ngZone = ngZone;
this.elementRef = elementRef;
this.renderer = renderer;
}
set dndDisableIf(value) {
this.disabled = value;
if (this.disabled) {
this.renderer.addClass(this.elementRef.nativeElement, this.dndDropzoneDisabledClass);
}
else {
this.renderer.removeClass(this.elementRef.nativeElement, this.dndDropzoneDisabledClass);
}
}
set dndDisableDropIf(value) {
this.dndDisableIf = value;
}
ngAfterViewInit() {
this.placeholder = this.tryGetPlaceholder();
this.removePlaceholderFromDOM();
this.ngZone.runOutsideAngular(() => {
this.elementRef.nativeElement.addEventListener('dragenter', this.dragEnterEventHandler);
this.elementRef.nativeElement.addEventListener('dragover', this.dragOverEventHandler);
this.elementRef.nativeElement.addEventListener('dragleave', this.dragLeaveEventHandler);
});
}
ngOnDestroy() {
this.elementRef.nativeElement.removeEventListener('dragenter', this.dragEnterEventHandler);
this.elementRef.nativeElement.removeEventListener('dragover', this.dragOverEventHandler);
this.elementRef.nativeElement.removeEventListener('dragleave', this.dragLeaveEventHandler);
}
onDragEnter(event) {
// check if another dropzone is activated
if (event._dndDropzoneActive === true) {
this.cleanupDragoverState();
return;
}
// set as active if the target element is inside this dropzone
if (event._dndDropzoneActive == null) {
const newTarget = document.elementFromPoint(event.clientX, event.clientY);
if (this.elementRef.nativeElement.contains(newTarget)) {
event._dndDropzoneActive = true;
}
}
// check if this drag event is allowed to drop on this dropzone
const type = getDndType(event);
if (!this.isDropAllowed(type)) {
return;
}
// allow the dragenter
event.preventDefault();
}
onDragOver(event) {
// With nested dropzones, we want to ignore this event if a child dropzone
// has already handled a dragover. Historically, event.stopPropagation() was
// used to prevent this bubbling, but that prevents any dragovers outside the
// ngx-drag-drop component, and stops other use cases such as scrolling on drag.
// Instead, we can check if the event was already prevented by a child and bail early.
if (event.defaultPrevented) {
return;
}
// check if this drag event is allowed to drop on this dropzone
const type = getDndType(event);
if (!this.isDropAllowed(type)) {
return;
}
this.checkAndUpdatePlaceholderPosition(event);
const dropEffect = getDropEffect(event, this.dndEffectAllowed);
if (dropEffect === 'none') {
this.cleanupDragoverState();
return;
}
// allow the dragover
event.preventDefault();
// set the drop effect
setDropEffect(event, dropEffect);
this.dndDragover.emit(event);
this.renderer.addClass(this.elementRef.nativeElement, this.dndDragoverClass);
}
onDrop(event) {
try {
// check if this drag event is allowed to drop on this dropzone
const type = getDndType(event);
if (!this.isDropAllowed(type)) {
return;
}
const data = getDropData(event, isExternalDrag());
if (!this.isDropAllowed(data.type)) {
return;
}
// signal custom drop handling
event.preventDefault();
const dropEffect = getDropEffect(event);
setDropEffect(event, dropEffect);
if (dropEffect === 'none') {
return;
}
const dropIndex = this.getPlaceholderIndex();
// if for whatever reason the placeholder is not present in the DOM but it should be there
// we don't allow/emit the drop event since it breaks the contract
// seems to only happen if drag and drop is executed faster than the DOM updates
if (dropIndex === -1) {
return;
}
this.dndDrop.emit({
event: event,
dropEffect: dropEffect,
isExternal: isExternalDrag(),
data: data.data,
index: dropIndex,
type: type,
});
event.stopPropagation();
}
finally {
this.cleanupDragoverState();
}
}
onDragLeave(event) {
event.preventDefault();
event.stopPropagation();
// check if still inside this dropzone and not yet handled by another dropzone
if (event._dndDropzoneActive == null) {
if (this.elementRef.nativeElement.contains(event.relatedTarget)) {
event._dndDropzoneActive = true;
return;
}
}
this.cleanupDragoverState();
// cleanup drop effect when leaving dropzone
setDropEffect(event, 'none');
}
dragEnterEventHandler = (event) => this.onDragEnter(event);
dragOverEventHandler = (event) => this.onDragOver(event);
dragLeaveEventHandler = (event) => this.onDragLeave(event);
isDropAllowed(type) {
// dropzone is disabled -> deny it
if (this.disabled) {
return false;
}
// if drag did not start from our directive
// and external drag sources are not allowed -> deny it
if (isExternalDrag() && !this.dndAllowExternal) {
return false;
}
// no filtering by types -> allow it
if (!this.dndDropzone) {
return true;
}
// no type set -> allow it
if (!type) {
return true;
}
if (!Array.isArray(this.dndDropzone)) {
throw new Error('dndDropzone: bound value to [dndDropzone] must be an array!');
}
// if dropzone contains type -> allow it
return this.dndDropzone.indexOf(type) !== -1;
}
tryGetPlaceholder() {
if (typeof this.dndPlaceholderRef !== 'undefined') {
return this.dndPlaceholderRef.elementRef.nativeElement;
}
// TODO nasty workaround needed because if ng-container / template is used @ContentChild() or DI will fail because
// of wrong context see angular bug https://github.com/angular/angular/issues/13517
return this.elementRef.nativeElement.querySelector('[dndPlaceholderRef]');
}
removePlaceholderFromDOM() {
if (this.placeholder !== null && this.placeholder.parentNode !== null) {
this.placeholder.parentNode.removeChild(this.placeholder);
}
}
checkAndUpdatePlaceholderPosition(event) {
if (this.placeholder === null) {
return;
}
// make sure the placeholder is in the DOM
if (this.placeholder.parentNode !== this.elementRef.nativeElement) {
this.renderer.appendChild(this.elementRef.nativeElement, this.placeholder);
}
// update the position if the event originates from a child element of the dropzone
const directChild = getDirectChildElement(this.elementRef.nativeElement, event.target);
// early exit if no direct child or direct child is placeholder
if (directChild === null || directChild === this.placeholder) {
return;
}
const positionPlaceholderBeforeDirectChild = shouldPositionPlaceholderBeforeElement(event, directChild, this.dndHorizontal);
if (positionPlaceholderBeforeDirectChild) {
// do insert before only if necessary
if (directChild.previousSibling !== this.placeholder) {
this.renderer.insertBefore(this.elementRef.nativeElement, this.placeholder, directChild);
}
}
else {
// do insert after only if necessary
if (directChild.nextSibling !== this.placeholder) {
this.renderer.insertBefore(this.elementRef.nativeElement, this.placeholder, directChild.nextSibling);
}
}
}
getPlaceholderIndex() {
if (this.placeholder === null) {
return undefined;
}
const element = this.elementRef.nativeElement;
return Array.prototype.indexOf.call(element.children, this.placeholder);
}
cleanupDragoverState() {
this.renderer.removeClass(this.elementRef.nativeElement, this.dndDragoverClass);
this.removePlaceholderFromDOM();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndDropzoneDirective, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.1", type: DndDropzoneDirective, isStandalone: true, selector: "[dndDropzone]", inputs: { dndDropzone: "dndDropzone", dndEffectAllowed: "dndEffectAllowed", dndAllowExternal: "dndAllowExternal", dndHorizontal: "dndHorizontal", dndDragoverClass: "dndDragoverClass", dndDropzoneDisabledClass: "dndDropzoneDisabledClass", dndDisableIf: "dndDisableIf", dndDisableDropIf: "dndDisableDropIf" }, outputs: { dndDragover: "dndDragover", dndDrop: "dndDrop" }, host: { listeners: { "drop": "onDrop($event)" } }, queries: [{ propertyName: "dndPlaceholderRef", first: true, predicate: DndPlaceholderRefDirective, descendants: true }], ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndDropzoneDirective, decorators: [{
type: Directive,
args: [{ selector: '[dndDropzone]', standalone: true }]
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { dndDropzone: [{
type: Input
}], dndEffectAllowed: [{
type: Input
}], dndAllowExternal: [{
type: Input
}], dndHorizontal: [{
type: Input
}], dndDragoverClass: [{
type: Input
}], dndDropzoneDisabledClass: [{
type: Input
}], dndDragover: [{
type: Output
}], dndDrop: [{
type: Output
}], dndPlaceholderRef: [{
type: ContentChild,
args: [DndPlaceholderRefDirective]
}], dndDisableIf: [{
type: Input
}], dndDisableDropIf: [{
type: Input
}], onDrop: [{
type: HostListener,
args: ['drop', ['$event']]
}] } });
class DndHandleDirective {
draggable = true;
dndDraggableDirective = inject(DndDraggableDirective);
ngOnInit() {
this.dndDraggableDirective.registerDragHandle(this);
}
onDragEvent(event) {
event._dndUsingHandle = true;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndHandleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.1", type: DndHandleDirective, isStandalone: true, selector: "[dndHandle]", host: { listeners: { "dragstart": "onDragEvent($event)", "dragend": "onDragEvent($event)" }, properties: { "attr.draggable": "this.draggable" } }, ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndHandleDirective, decorators: [{
type: Directive,
args: [{ selector: '[dndHandle]', standalone: true }]
}], propDecorators: { draggable: [{
type: HostBinding,
args: ['attr.draggable']
}], onDragEvent: [{
type: HostListener,
args: ['dragstart', ['$event']]
}, {
type: HostListener,
args: ['dragend', ['$event']]
}] } });
class DndModule {
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: DndModule, imports: [DndDragImageRefDirective,
DndDropzoneDirective,
DndHandleDirective,
DndPlaceholderRefDirective,
DndDraggableDirective], exports: [DndDraggableDirective,
DndDropzoneDirective,
DndHandleDirective,
DndPlaceholderRefDirective,
DndDragImageRefDirective] });
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndModule });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: DndModule, decorators: [{
type: NgModule,
args: [{
exports: [
DndDraggableDirective,
DndDropzoneDirective,
DndHandleDirective,
DndPlaceholderRefDirective,
DndDragImageRefDirective,
],
imports: [
DndDragImageRefDirective,
DndDropzoneDirective,
DndHandleDirective,
DndPlaceholderRefDirective,
DndDraggableDirective,
],
}]
}] });
/*
* Public API Surface of dnd
*/
/**
* Generated bundle index. Do not edit.
*/
export { DndDragImageRefDirective, DndDraggableDirective, DndDropzoneDirective, DndHandleDirective, DndModule, DndPlaceholderRefDirective };
//# sourceMappingURL=ngx-drag-drop.mjs.map