{"version":3,"file":"deja-js-component-v2-mouse-dragdrop.mjs","sources":["../../../../projects/deja-js/component/v2/mouse-dragdrop/mouse-dragdrop.service.ts","../../../../projects/deja-js/component/v2/mouse-dragdrop/mouse-dragdrop-cursor.component.ts","../../../../projects/deja-js/component/v2/mouse-dragdrop/mouse-dragdrop-cursor.component.html","../../../../projects/deja-js/component/v2/mouse-dragdrop/mouse-draggable.directive.ts","../../../../projects/deja-js/component/v2/mouse-dragdrop/mouse-droppable.directive.ts","../../../../projects/deja-js/component/v2/mouse-dragdrop/index.ts","../../../../projects/deja-js/component/v2/mouse-dragdrop/deja-js-component-v2-mouse-dragdrop.ts"],"sourcesContent":["/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\n/**\n * Dragdrop service for mouse drag and drop\n */\nimport { Injectable } from '@angular/core';\nimport { Destroy } from '@deja-js/component/core';\nimport { Position } from '@deja-js/component/core/graphics';\nimport { BehaviorSubject, filter, takeUntil, tap } from 'rxjs';\n\nexport interface DropCursorInfos {\n    html?: string;\n    width?: number;\n    height?: number;\n    className?: string;\n}\n\nexport interface DragCursorInfos extends DropCursorInfos {\n    position: Position;\n    originalHtml: string;\n    originalEvent: MouseEvent;\n}\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class MouseDragDropService<T> extends Destroy {\n    public dragCursor$ = new BehaviorSubject<DragCursorInfos>(null);\n    public dropCursor$ = new BehaviorSubject<DropCursorInfos>(null);\n    public dragging$ = new BehaviorSubject<boolean>(false);\n    public context: T;\n\n    private _isDragging = false;\n\n    public constructor() {\n        super();\n\n        this.dragging$.pipe(\n            tap(value => this._isDragging = value),\n            filter(value => !value),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => this.context = undefined);\n    }\n\n    public get isDragging(): boolean {\n        return this._isDragging;\n    }\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { Component, ElementRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { Destroy } from '@deja-js/component/core';\nimport { Position } from '@deja-js/component/core/graphics';\nimport { BehaviorSubject, combineLatestWith, delay, filter, takeUntil, tap } from 'rxjs';\n\nimport { DragCursorInfos, MouseDragDropService } from './mouse-dragdrop.service';\n\n@Component({\n    encapsulation: ViewEncapsulation.None,\n    selector: 'mouse-dragdrop-cursor',\n    styleUrls: [\n        './mouse-dragdrop-cursor.component.scss'\n    ],\n    templateUrl: './mouse-dragdrop-cursor.component.html'\n})\nexport class MouseDragDropCursorComponent extends Destroy {\n    @ViewChild('block', { static: true }) private icon: ElementRef<HTMLElement>;\n    @ViewChild('content', { static: true }) private content: ElementRef<HTMLElement>;\n    private cursor$ = new BehaviorSubject<DragCursorInfos>(null);\n    private currentCursor: DragCursorInfos;\n\n    public set position(value: Position) {\n        if (value) {\n            this.elementRef.nativeElement.style.left = `${value.left}px`;\n            this.elementRef.nativeElement.style.top = `${value.top}px`;\n            this.elementRef.nativeElement.style.display = '';\n        } else {\n            this.elementRef.nativeElement.style.display = 'none';\n        }\n    }\n\n    public constructor(private elementRef: ElementRef<HTMLElement>, private dragDropService: MouseDragDropService<unknown>) {\n        super();\n\n        // Hide\n        this.cursor$.pipe(\n            filter(cursor => !cursor),\n            tap(cursor => {\n                if (this.currentCursor) {\n                    if (this.contentElement) {\n                        this.contentElement.style.opacity = '0';\n                    }\n                    if (this.iconElement) {\n                        this.iconElement.style.opacity = '0';\n                    }\n                }\n                this.currentCursor = cursor;\n            }),\n            delay(300),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => {\n            this.position = undefined;\n        });\n\n        // Show\n        this.cursor$.pipe(\n            filter(cursor => !!cursor),\n            tap(cursor => {\n                elementRef.nativeElement.style.display = '';\n                if (this.contentElement) {\n                    this.contentElement.style.opacity = '0';\n                }\n                if (this.iconElement) {\n                    this.iconElement.style.opacity = '0';\n                }\n                this.currentCursor = cursor;\n            }),\n            filter(cursor => !cursor.className || cursor.className !== 'hidden'),\n            tap(cursor => {\n                if (cursor.html) {\n                    elementRef.nativeElement.className = cursor.className;\n                    if (this.contentElement) {\n                        this.contentElement.innerHTML = cursor.html;\n                        this.contentElement.style.width = `${cursor.width || 48}px`;\n                        this.contentElement.style.height = `${cursor.height || 48}px`;\n                    }\n                } else if (this.iconElement) {\n                    this.iconElement.style.opacity = '1';\n                }\n            }),\n            delay(1),\n            takeUntil(this.destroyed$)\n        ).subscribe(cursor => {\n            if (!!cursor.html && this.contentElement) {\n                this.contentElement.style.opacity = '1';\n            }\n        });\n\n        this.dragDropService.dragCursor$.pipe(\n            combineLatestWith(this.dragDropService.dropCursor$),\n            takeUntil(this.destroyed$)\n        ).subscribe(([dragCursor, dropCursor]) => {\n            const cursor = (dragCursor || dropCursor) && {\n                className: dropCursor?.className || dragCursor?.className,\n                html: dropCursor?.html || dragCursor?.html || (dropCursor && dragCursor?.originalHtml),\n                width: dropCursor?.width || dragCursor?.width,\n                height: dropCursor?.height || dragCursor?.height,\n                position: dragCursor?.position,\n                originalEvent: dragCursor?.originalEvent\n            } as DragCursorInfos;\n\n            if (cursor?.html !== this.currentCursor?.html || cursor?.className !== this.currentCursor?.className || cursor?.width !== this.currentCursor?.width || cursor?.height !== this.currentCursor?.height) {\n                // Update Content\n                this.cursor$.next(cursor);\n            } else {\n                // Update only Position\n                this.position = cursor?.position;\n            }\n        });\n    }\n\n    private get iconElement(): HTMLElement {\n        return this.icon?.nativeElement;\n    }\n\n    private get contentElement(): HTMLElement {\n        return this.content?.nativeElement;\n    }\n}\n","<div id=\"block\" #block>\n    <mat-icon #block>block</mat-icon>\n</div>\n<div #content id=\"content\"></div>\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { Directive, ElementRef, Input } from '@angular/core';\nimport { Destroy } from '@deja-js/component/core';\nimport { Position, Rect } from '@deja-js/component/core/graphics';\nimport { filter, fromEvent, isObservable, map, mergeWith, Observable, of, Subject, switchMap, take, takeUntil, tap } from 'rxjs';\n\nimport { DragCursorInfos, MouseDragDropService } from './mouse-dragdrop.service';\n\n\n@Directive({\n    selector: '[mouse-draggable]'\n})\nexport class MouseDraggableDirective<T> extends Destroy {\n    private _context: MouseDraggableContext<T>;\n\n    @Input('mouse-draggable')\n    public set context(value: MouseDraggableContext<T>) {\n        this._context = value;\n    }\n\n    public get context(): MouseDraggableContext<T> {\n        return this._context;\n    }\n\n    public constructor(elementRef: ElementRef, dragDropService: MouseDragDropService<T>) {\n        super();\n\n        const element = elementRef.nativeElement as HTMLElement;\n\n        const mouseLeaveEvent$ = fromEvent<MouseEvent>(element, 'mouseleave');\n        const mouseEnterEvent$ = fromEvent<MouseEvent>(element, 'mouseenter');\n        const mouseUpEvent$ = fromEvent<MouseEvent>(element.ownerDocument, 'mouseup');\n        const mouseDownEvent$ = fromEvent<MouseEvent>(element, 'mousedown');\n        const mouseMoveEvent$ = fromEvent<MouseEvent>(element.ownerDocument, 'mousemove');\n\n        mouseEnterEvent$.pipe(\n            filter(() => !dragDropService.isDragging),\n            switchMap(() => mouseDownEvent$.pipe(\n                filter(event => event.buttons === 1),\n                // eslint-disable-next-line rxjs/no-unsafe-takeuntil\n                takeUntil(mouseLeaveEvent$),\n                switchMap(mouseDownEvent => {\n                    const match = (el: HTMLElement): boolean => el.tagName === this.context.target.toUpperCase() || `#${el.id}` === this.context.target || el.hasAttribute(this.context.target.substring(1, this.context.target.length - 1)) || el.className.split(' ').some(className => `.${className}` === this.context.target);\n\n                    let target$ = of(null as HTMLElement);\n                    if (this.context) {\n                        let target: HTMLElement;\n                        if (this.context.target) {\n                            target = mouseDownEvent.target as HTMLElement;\n                            // eslint-disable-next-line no-loops/no-loops\n                            while (target && !match(target)) {\n                                target = target.parentElement;\n                            }\n                        } else {\n                            target = element;\n                        }\n\n                        if (target && this.context.dragStart) {\n                            const dragContext = this.context.dragStart(target);\n                            if (dragContext) {\n                                if (isObservable(dragContext)) {\n                                    const dragContext$ = dragContext as Observable<T>;\n                                    // Observable\n                                    target$ = dragContext$.pipe(\n                                        take(1),\n                                        map(context => {\n                                            dragDropService.context = context;\n                                            return context && target; // Map to target if ddctx is defined\n                                        })\n                                    );\n                                } else {\n                                    dragDropService.context = dragContext;\n                                    target$ = of(target);\n                                }\n                            }\n                        }\n                    }\n                    return target$.pipe(\n                        filter(target => !!target), // Start Drag if target is defined\n                        switchMap(target => {\n                            dragDropService.dragging$.next(true);\n\n                            const moveUp$ = new Subject<void>();\n\n                            const enterWhileNotDragDropEvent$ = mouseEnterEvent$.pipe(\n                                filter(event => event.buttons !== 1 && dragDropService.isDragging)\n                            );\n\n                            const kill$ = mouseUpEvent$.pipe(\n                                mergeWith(enterWhileNotDragDropEvent$, moveUp$),\n                                take(1),\n                                tap(() => {\n                                    dragDropService.dragCursor$.next(null);\n                                    dragDropService.dragging$.next(false);\n                                }));\n\n                            return mouseMoveEvent$.pipe(\n                                // eslint-disable-next-line rxjs/no-unsafe-takeuntil\n                                takeUntil(kill$),\n                                tap(mouseMoveEvent => {\n                                    if (target && mouseMoveEvent.buttons === 1) {\n                                        const bounds = new Rect(element.getBoundingClientRect());\n                                        const position = new Position(mouseMoveEvent.pageX, mouseMoveEvent.pageY);\n                                        const html = bounds.containsPoint(position) ? target.innerHTML : undefined;\n\n                                        const padding = 5;\n                                        let deadBounds = new Rect(mouseDownEvent.pageX, mouseDownEvent.pageY, padding * 2, padding * 2);\n                                        deadBounds = deadBounds.offset(-padding, -padding);\n\n                                        if (!deadBounds.containsPoint(position)) {\n                                            // Post cursor infos to service\n                                            dragDropService.dragCursor$.next({\n                                                position: position,\n                                                html: html,\n                                                originalHtml: target.innerHTML,\n                                                width: target.offsetWidth,\n                                                height: target.offsetHeight,\n                                                className: this.context.className,\n                                                originalEvent: mouseMoveEvent\n                                            } as DragCursorInfos);\n                                        }\n                                    } else {\n                                        moveUp$.next();\n                                    }\n\n                                    // ev.preventDefault();\n                                    return false;\n                                })\n                            );\n                        })\n                    );\n                })\n            )),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n}\n\nexport interface MouseDraggableContext<T> {\n    target?: string; // Tagname or #id or [attribute]\n    className?: string;\n    dragStart?: (element: HTMLElement) => T;\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { Directive, ElementRef, Input } from '@angular/core';\nimport { Destroy } from '@deja-js/component/core';\nimport { Position, Rect } from '@deja-js/component/core/graphics';\nimport { distinctUntilChanged, filter, Observable, of, switchMap, take, takeUntil, tap } from 'rxjs';\n\nimport { DragCursorInfos, DropCursorInfos, MouseDragDropService } from './mouse-dragdrop.service';\n\n\n@Directive({\n    selector: '[mouse-droppable]'\n})\nexport class MouseDroppableDirective<T> extends Destroy {\n    private _context: MouseDroppableContext<T>;\n\n    @Input('mouse-droppable')\n    public set context(value: MouseDroppableContext<T>) {\n        this._context = value;\n    }\n\n    public get context(): MouseDroppableContext<T> {\n        return this._context;\n    }\n\n    public constructor(elementRef: ElementRef<HTMLElement>, dragDropService: MouseDragDropService<T>) {\n        super();\n\n        const element = elementRef.nativeElement;\n        let dragContext: T;\n\n        const dragging$ = dragDropService.dragging$.pipe(\n            distinctUntilChanged()\n        );\n\n        const drop$ = dragDropService.dragCursor$.pipe(\n            filter(value => !!value),\n            switchMap(dragCursor => dragging$.pipe(\n                filter(value => !value),\n                take(1),\n                tap(() => {\n                    // console.log(`Drop ${!!this._dragContext}`)\n                    if (dragContext && this.context?.drop) {\n                        this.context.drop(dragContext, dragCursor);\n                    }\n                    dragContext = undefined;\n                    dragDropService.dropCursor$.next(null);\n                })\n            ))\n        );\n\n        dragging$.pipe(\n            filter(value => value),\n            switchMap(() =>\n                // console.log(`Drag ${!!this._dragContext}`)\n                dragDropService.dragCursor$.pipe(\n                    // eslint-disable-next-line rxjs/no-unsafe-takeuntil\n                    takeUntil(drop$),\n                    switchMap(dragCursor => {\n                        const bounds = new Rect(element.getBoundingClientRect());\n                        if (this.context && dragCursor) {\n                            const { pageX, pageY } = dragCursor.originalEvent;\n                            if (bounds.containsPoint(new Position(pageX, pageY))) {\n                                if (!dragContext) {\n                                    dragContext = dragDropService.context;\n                                    if (this.context.dragEnter) {\n                                        const dropCursor$ = this.context.dragEnter(dragContext, dragCursor);\n                                        if (dropCursor$) {\n                                            const dropCursorObs$ = dropCursor$ as Observable<DropCursorInfos>;\n                                            if (dropCursorObs$.subscribe) {\n                                                // Observable\n                                                return dropCursorObs$;\n                                            } else {\n                                                return of(dropCursor$ as DropCursorInfos);\n                                            }\n                                        }\n                                    }\n                                } else if (this.context.dragOver) {\n                                    const dropCursor = this.context.dragOver(dragContext, dragCursor);\n                                    if (dropCursor) {\n                                        return of(dropCursor);\n                                    }\n                                }\n                            } else if (dragContext) {\n                                if (this.context?.dragLeave) {\n                                    this.context.dragLeave(dragContext);\n                                }\n                                dragContext = undefined;\n                                dragDropService.dropCursor$.next(null);\n                            }\n                        }\n\n                        return of(null as DropCursorInfos);\n                    })\n                )\n            ),\n            filter(dropCursor => !!dropCursor),\n            takeUntil(this.destroyed$)\n        ).subscribe(dropCursor => dragDropService.dropCursor$.next(dropCursor));\n    }\n}\n\nexport interface MouseDroppableContext<T> {\n    // eslint-disable-next-line rxjs/finnish\n    dragEnter?: (dragContext$: T, dragCursor: DragCursorInfos) => DropCursorInfos | Observable<DropCursorInfos>; // Return object or observable<object>\n    dragOver?: (dragContext$: T, dragCursor: DragCursorInfos) => DropCursorInfos;\n    dragLeave?: (dragContext$: T) => void;\n    drop?: (dragContext$: T, dragCursor: DragCursorInfos) => void;\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { MouseDragDropCursorComponent } from './mouse-dragdrop-cursor.component';\nimport { MouseDraggableDirective } from './mouse-draggable.directive';\nimport { MouseDroppableDirective } from './mouse-droppable.directive';\n\n@NgModule({\n    declarations: [\n        MouseDragDropCursorComponent,\n        MouseDraggableDirective,\n        MouseDroppableDirective\n    ],\n    imports: [\n        MatIconModule\n    ],\n    exports: [\n        MouseDragDropCursorComponent,\n        MouseDraggableDirective,\n        MouseDroppableDirective\n    ]\n})\nexport class MouseDragDropModule { }\n\nexport * from './mouse-draggable.directive';\nexport * from './mouse-droppable.directive';\nexport * from './mouse-dragdrop-cursor.component';\nexport * from './mouse-dragdrop.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.MouseDragDropService"],"mappings":"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"}