@libs-ui/components-drag-drop 0.2.343-0 → 0.2.344-1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-drag-drop.mjs","sources":["../../../../../libs-ui/components/drag-drop/src/defines/css.define.ts","../../../../../libs-ui/components/drag-drop/src/drag-drop.service.ts","../../../../../libs-ui/components/drag-drop/src/drag-scroll.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-drop.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-item-in-container-virtual-scroll.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-item.directive.ts","../../../../../libs-ui/components/drag-drop/src/demo/demo.component.ts","../../../../../libs-ui/components/drag-drop/src/libs-ui-components-drag-drop.ts"],"sourcesContent":["export const styleContainer = (config: Array<{ className: string; styles: string }>, viewEncapsulation: 'emulated' | 'none', groupID: string): string => {\n const defaultConfig = [\n {\n className: 'libs-ui-drag-drop-container',\n styles: `display:block;`,\n },\n {\n className: 'libs-ui-drag-drop-item',\n styles: `\n cursor:move;`,\n },\n {\n className: 'libs-ui-drag-drop-item-placeholder',\n styles: `visibility: hidden;`,\n },\n {\n className: 'libs-ui-drag-drop-item-origin-placeholder',\n styles: `visibility: hidden;`,\n },\n {\n className: 'libs-ui-drag-drop-item-drop-placeholder',\n styles: `visibility: hidden;`,\n },\n {\n className: 'libs-ui-drag-drop-item-dragging',\n styles: `cursor:move; user-select: none; `,\n },\n {\n className: 'libs-ui-drag-drop-item-disable',\n styles: ` cursor:not-allowed;`,\n },\n {\n className: 'libs-ui-drag-drop-item-translate-bottom',\n styles: `position:relative;animation: translateBottom 0.35s 1 ease;`,\n },\n {\n className: 'libs-ui-drag-drop-item-translate-top',\n styles: `position:relative;animation: translateTop 0.35s 1 ease;`,\n },\n {\n className: 'libs-ui-drag-drop-item-translate-left',\n styles: `position:relative;animation: translateLeft 0.35s 1 ease;`,\n },\n {\n className: 'libs-ui-drag-drop-item-translate-right',\n styles: `position:relative;animation: translateRight 0.35s 1 ease;`,\n },\n ];\n\n config.forEach((item) => {\n const itemExits = defaultConfig.find((defaultItem) => defaultItem.className === item.className);\n\n if (itemExits) {\n itemExits.styles = item.styles;\n\n return;\n }\n defaultConfig.push(item);\n });\n const groupAttr = viewEncapsulation ? `[groupID~=\"${groupID}\"]` : '';\n let styles = '';\n\n defaultConfig.forEach((item) => {\n const style = `${groupAttr}.${item.className}{${item.styles}}`;\n\n styles = `${styles}${style}\\n`;\n });\n\n styles = ` @keyframes translateTop {\n 0% {\n transform: translateY(30px);\n }\n \n 100% {\n transform: translateX(0);\n }\n }\n \n @keyframes translateBottom {\n 0% {\n transform: translateY(-30px);\n }\n \n 100% {\n transform: translateX(0px);\n }\n }\n @keyframes translateLeft {\n 0% {\n transform: translateX(30px);\n }\n \n 100% {\n transform: translateX(0);\n }\n }\n \n @keyframes translateRight {\n 0% {\n transform: translateX(-30px);\n }\n \n 100% {\n transform: translateX(0px);\n }\n }\n ${styles}`.replace(/\\n+/g, '');\n\n return styles;\n};\n","import { Injectable, WritableSignal, signal } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IDragEnd, IDragItemInContainerVirtualScroll, IDragLeave, IDragOver, IDragStart, IDragging, IDrop, IItemDragInfo } from './interfaces/event.interface';\n@Injectable({\n providedIn: 'any',\n})\nexport class MoLibsSharedDragDropService {\n private itemsClick = new Array<HTMLElement>();\n private onDragItemInContainerVirtualScroll = new Subject<IDragItemInContainerVirtualScroll>();\n private itemDragInfo?: IItemDragInfo;\n private container = signal(new Map<string, { element: HTMLElement; elementScroll?: HTMLElement }>());\n private targetItemDragFlag = 'item-drag-target';\n private classContainerDefine = 'libs-ui-drag-drop-container';\n private classItemDefine = 'libs-ui-drag-drop-item';\n private onDragging = new Subject<IDragging>();\n private onDragStart = new Subject<IDragStart>();\n private onDragEnd = new Subject<IDragEnd>();\n private onDragOver = new Subject<IDragOver>();\n private onDragLeave = new Subject<IDragLeave>();\n private onDrop = new Subject<IDrop>();\n private onDropContainer = new Subject<IDrop>();\n private onItemInit = new Subject<string>();\n\n public get OnDragItemInContainerVirtualScroll(): Subject<IDragItemInContainerVirtualScroll> {\n return this.onDragItemInContainerVirtualScroll;\n }\n\n public set ItemDragInfo(data: IItemDragInfo | undefined) {\n this.itemDragInfo = data;\n }\n\n public get ItemDragInfo(): IItemDragInfo | undefined {\n return this.itemDragInfo;\n }\n\n public get Container(): WritableSignal<Map<string, { element: HTMLElement; elementScroll?: HTMLElement }>> {\n return this.container;\n }\n\n public get TargetItemDragFlag() {\n return this.targetItemDragFlag;\n }\n\n public get ClassContainerDefine() {\n return this.classContainerDefine;\n }\n\n public get ClassItemDefine() {\n return this.classItemDefine;\n }\n\n public get OnDragging() {\n return this.onDragging;\n }\n\n public get OnDragOver() {\n return this.onDragOver;\n }\n\n public get OnDragLeave() {\n return this.onDragLeave;\n }\n\n public get OnDragStart() {\n return this.onDragStart;\n }\n\n public get OnDragEnd() {\n return this.onDragEnd;\n }\n\n public get OnDropContainer() {\n return this.onDropContainer;\n }\n\n public get OnDrop() {\n return this.onDrop;\n }\n\n public get OnItemInit() {\n return this.onItemInit;\n }\n\n public get ItemClick(): Array<HTMLElement> {\n return [...this.itemsClick];\n }\n\n public set ItemClick(item: HTMLElement) {\n this.itemsClick.push(item);\n }\n\n public resetItemClick() {\n this.itemsClick.length = 0;\n }\n\n public checkElementOverAcceptElementDrag(groupNameOfContainer: string | null, groupNameOfElementDrag: string | null, groupNameOfDropTo: string | null): boolean {\n if (groupNameOfContainer !== groupNameOfElementDrag && !groupNameOfDropTo) {\n return false;\n }\n\n if (\n groupNameOfDropTo !== null &&\n !groupNameOfDropTo\n .toString()\n .split(';')\n .includes(groupNameOfContainer || 'undefinedName')\n ) {\n return false;\n }\n\n return true;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, Directive, ElementRef, OnDestroy, inject, input, signal } from '@angular/core';\nimport { IPageInfo, VirtualScrollerComponent } from '@iharbeck/ngx-virtual-scroller';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { checkMouseOverInContainer, cloneIBoundingClientRect, get } from '@libs-ui/utils';\nimport { Subject, takeUntil } from 'rxjs';\nimport { MoLibsSharedDragDropService } from './drag-drop.service';\nimport { IDragging } from './interfaces/event.interface';\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsDragScrollDirective]',\n standalone: true,\n})\nexport class LibsUiComponentsDragScrollDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private stopScroll = signal<boolean>(false);\n private virtualScrollPageInfo = signal<IPageInfo | undefined>(undefined);\n protected intervalScrollToElement = signal<number | undefined>(undefined);\n protected onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly ignoreAutoScroll = input<boolean>();\n readonly widthZoneDetect = input<number, number | undefined>(16, { transform: (value) => value ?? 16 });\n readonly movementLength = input<number, number | undefined>(6, { transform: (value) => value ?? 6 });\n readonly rootElementScroll = input<HTMLElement>();\n readonly virtualScrollerComponent = input<VirtualScrollerComponent>();\n\n // #region INJECT\n protected elementRef = inject(ElementRef);\n protected dragDropService = inject(MoLibsSharedDragDropService);\n\n ngAfterViewInit(): void {\n this.dragDropService.OnDragging.pipe(takeUntil(this.onDestroy)).subscribe((eventDragging) => this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll()));\n this.dragDropService.OnDragEnd.pipe(takeUntil(this.onDestroy)).subscribe(() => {\n clearInterval(this.intervalScrollToElement());\n if (this.virtualScrollPageInfo()) {\n const firstElement = get<any>(this.virtualScrollerComponent(), 'element')?.nativeElement.firstElementChild;\n const isHorizontal = get<any>(this.virtualScrollerComponent(), '_horizontal');\n if (isHorizontal) {\n firstElement.style.transform = `scaleX(${this.virtualScrollPageInfo()?.scrollEndPosition})`;\n }\n if (!isHorizontal) {\n firstElement.style.transform = `scaleY(${this.virtualScrollPageInfo()?.scrollEndPosition})`;\n }\n this.virtualScrollPageInfo.set(undefined);\n }\n this.stopScroll.set(false);\n });\n this.dragDropService.OnDragStart.pipe(takeUntil(this.onDestroy)).subscribe(() => {\n if (this.virtualScrollerComponent) {\n this.virtualScrollerComponent()?.scrollToIndex(0);\n }\n });\n if (!this.virtualScrollerComponent) {\n return;\n }\n this.virtualScrollerComponent()\n ?.vsChange.pipe(takeUntil(this.onDestroy))\n .subscribe((pageInfo) => {\n const items = get<any>(this.virtualScrollerComponent, '_items');\n\n if (items && items.length === pageInfo.endIndex) {\n this.virtualScrollPageInfo.set(pageInfo);\n const elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n const isHorizontal = get<any>(this.virtualScrollerComponent, '_horizontal');\n\n if (isHorizontal && pageInfo.scrollEndPosition < elementSetScroll.offsetWidth + elementSetScroll.scrollLeft + 3) {\n this.stopScroll.set(true);\n clearInterval(this.intervalScrollToElement());\n\n return;\n }\n\n if (!isHorizontal && pageInfo.scrollEndPosition < elementSetScroll.offsetHeight + elementSetScroll.scrollTop + 3) {\n this.stopScroll.set(true);\n clearInterval(this.intervalScrollToElement());\n\n return;\n }\n }\n this.stopScroll.set(false);\n });\n }\n\n /* FUNCTIONS */\n protected checkAndScrollElementToPosition(eventDragging: IDragging, ignoreAutoScroll?: boolean) {\n let elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n\n if (ignoreAutoScroll || !checkMouseOverInContainer(eventDragging.mousePosition, elementSetScroll)) {\n return;\n }\n const rectElement = cloneIBoundingClientRect(this.elementRef.nativeElement.getBoundingClientRect());\n\n if (this.rootElementScroll()) {\n const rectElementScroll = this.rootElementScroll()?.getBoundingClientRect() as IBoundingClientRect;\n\n rectElement.left = rectElementScroll.left;\n rectElement.top = rectElementScroll.top;\n }\n\n const { width, height, top, left } = rectElement;\n const { clientX, clientY } = eventDragging.mousePosition;\n const limitLeft = left + elementSetScroll.offsetWidth;\n const limitTop = top + elementSetScroll.offsetHeight;\n\n clearInterval(this.intervalScrollToElement());\n if ((clientX < left || clientX > left + width) && (clientY < top || clientY > top + height)) {\n return;\n }\n\n this.intervalScrollToElement.set(\n setInterval(() => {\n elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n let directionTop = 0;\n let directionLeft = 0;\n\n if (top <= clientY && clientY <= top + this.widthZoneDetect()) {\n elementSetScroll.scrollTop -= this.movementLength();\n directionTop = -1;\n }\n\n if (limitTop - this.widthZoneDetect() <= clientY && clientY <= limitTop) {\n if (this.stopScroll()) {\n return;\n }\n elementSetScroll.scrollTop += this.movementLength();\n directionTop = 1;\n }\n\n if (limitLeft - this.widthZoneDetect() <= clientX && clientX <= limitLeft) {\n if (this.stopScroll()) {\n return;\n }\n elementSetScroll.scrollLeft += this.movementLength();\n directionLeft = +1;\n }\n if (left <= clientX && clientX <= left + this.widthZoneDetect()) {\n elementSetScroll.scrollLeft -= this.movementLength();\n directionLeft = -1;\n }\n\n if (elementSetScroll.scrollLeft && elementSetScroll.scrollLeft + elementSetScroll.offsetWidth >= elementSetScroll.scrollWidth) {\n elementSetScroll.scrollLeft -= elementSetScroll.scrollLeft + elementSetScroll.offsetWidth - elementSetScroll.scrollWidth;\n }\n\n if (elementSetScroll.scrollTop && elementSetScroll.scrollTop + elementSetScroll.offsetHeight >= elementSetScroll.scrollHeight) {\n elementSetScroll.scrollTop -= elementSetScroll.scrollTop + elementSetScroll.offsetHeight - elementSetScroll.scrollHeight;\n }\n\n if (\n (directionTop < 0 && !elementSetScroll.scrollTop) ||\n (!elementSetScroll.scrollLeft && directionLeft < 0) ||\n (directionTop && elementSetScroll.scrollHeight <= elementSetScroll.scrollTop + elementSetScroll.offsetHeight + 3) ||\n (directionLeft && elementSetScroll.scrollWidth <= elementSetScroll.scrollLeft + elementSetScroll.offsetWidth + 3)\n ) {\n return clearInterval(this.intervalScrollToElement());\n }\n }, 10)\n );\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","import { AfterViewInit, ChangeDetectorRef, Directive, OnDestroy, effect, inject, input, model, output, signal, untracked } from '@angular/core';\nimport { checkMouseOverInContainer, cloneDeep, get, set, uuid } from '@libs-ui/utils';\nimport { Observable, debounceTime, filter, takeUntil } from 'rxjs';\nimport { styleContainer } from './defines/css.define';\nimport { LibsUiComponentsDragScrollDirective } from './drag-scroll.directive';\nimport { IDragDropFunctionControlEvent, IDragEnd, IDragLeave, IDragOver, IDragStart, IDragging, IDrop } from './interfaces/event.interface';\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsDragContainerDirective]',\n standalone: true,\n})\nexport class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDragScrollDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private groupID = signal<string>(uuid());\n private isDragOver = signal<boolean>(false);\n private cdr = inject(ChangeDetectorRef);\n\n // #region INPUT\n readonly disableDragContainer = input<boolean>();\n readonly mode = input<string, 'move' | 'copy'>('move', { transform: (value) => value ?? 'move' });\n readonly directionDrag = input<'horizontal' | 'vertical'>();\n readonly viewEncapsulation = input<'emulated' | 'none', 'emulated' | 'none' | undefined>('emulated', { transform: (value) => value ?? 'emulated' });\n readonly acceptDragSameGroup = input<boolean, boolean | undefined>(false, { transform: (value) => value ?? false });\n readonly placeholder = input<boolean, boolean | undefined>(true, { transform: (value) => value ?? true });\n readonly groupName = input<string, string | undefined>('groupDragAndDropDefault', { transform: (value) => value ?? 'groupDragAndDropDefault' }); // nếu các group có tên trùng nhau sẽ được drop\n readonly dropToGroupName = input<Array<string> | null>(null); // nếu item trong các group A được drop vào group B nhưng group B không được drop vào group A\n readonly items = model.required<Array<unknown>>();\n readonly stylesOverride = input<Array<{ className: string; styles: string }>>();\n\n // #region OUTPUT\n readonly outDragStartContainer = output<IDragStart>();\n readonly outDragOverContainer = output<IDragOver>();\n readonly outDragLeaveContainer = output<IDragLeave>();\n readonly outDragEndContainer = output<IDragEnd>();\n readonly outDroppedContainer = output<IDrop>();\n readonly outDroppedContainerEmpty = output<IDrop>();\n readonly outFunctionControl = output<IDragDropFunctionControlEvent>();\n\n constructor() {\n super();\n const element = this.elementRef.nativeElement as HTMLElement;\n const container: { element: HTMLElement, elementScroll?: HTMLElement } = { element };\n\n this.dragDropService.Container().set(this.groupID(), container);\n\n effect(() => {\n const elementScroll = this.rootElementScroll();\n if (!elementScroll) {\n return;\n }\n untracked(() => {\n set(container, 'elementScroll', elementScroll);\n });\n });\n\n effect(() => {\n if (this.directionDrag() && this.elementRef.nativeElement) {\n this.setAttributeElementAndItemDrag(this.elementRef.nativeElement);\n }\n });\n effect(() => {\n if (this.disableDragContainer() && this.elementRef.nativeElement) {\n this.setAttributeElementAndItemDrag(this.elementRef.nativeElement);\n }\n });\n }\n\n override ngAfterViewInit(): void {\n this.outFunctionControl.emit(this.FunctionsControl);\n\n this.outDroppedContainer.subscribe((eventDropped) => {\n this.dragDropService.OnDropContainer.next(eventDropped);\n });\n this.onDestroy.subscribe(() => {\n if (indexSpliceListTo > -1) {\n this.items.update((items) => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n }\n\n this.dragDropService.Container().delete(this.groupID());\n });\n const elementContainer = this.elementRef.nativeElement as HTMLElement;\n\n this.initStyleAndAttribute(elementContainer, true);\n this.dragDropService.OnItemInit.pipe(\n debounceTime(250),\n filter((groupName) => groupName === this.groupName()),\n takeUntil(this.onDestroy)\n ).subscribe(() => this.initStyleAndAttribute(elementContainer));\n const styleTag = document.createElement('style');\n\n styleTag.textContent = styleContainer(this.stylesOverride() || [], this.viewEncapsulation(), this.groupID());\n elementContainer.appendChild(styleTag);\n elementContainer.classList.add(this.dragDropService.ClassContainerDefine);\n\n const handlerDragStart = (eventDragStart: IDragStart) => {\n this.setAttributeElementAndItemDrag(elementContainer, true);\n if (this.groupID() === eventDragStart.elementDrag.getAttribute('groupID')) {\n this.outDragStartContainer.emit({ ...eventDragStart, itemDragInfo: this.dragDropService.ItemDragInfo });\n }\n };\n\n const storeIndex = { indexDrag: -1, indexDragOver: -1 };\n let indexSpliceListTo = -1;\n const handlerDragOver = (eventDragOver: IDragOver) => {\n const { elementDrag, elementDragOver } = eventDragOver;\n\n if (this.disableDragContainer() || !this.dragDropService.checkElementOverAcceptElementDrag(this.groupName(), elementDrag.getAttribute('groupName'), elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n const indexDrag = Number(elementDrag.getAttribute('index')).valueOf();\n const indexDragOver = Number(elementDragOver.getAttribute('index')).valueOf();\n const idGroupElementDrag = elementDrag.getAttribute('groupID');\n const idGroupElementDragOver = elementDragOver.getAttribute('groupID');\n\n if (this.groupID() !== idGroupElementDrag || idGroupElementDrag !== idGroupElementDragOver) {\n // xử lý cho item drag over qua 1 item khác container\n if (idGroupElementDragOver === this.groupID() && this.placeholder()) {\n const item = this.mode() === 'copy' ? cloneDeep(this.dragDropService.ItemDragInfo?.item) : this.dragDropService.ItemDragInfo?.item;\n this.items.update((items) => {\n if (indexSpliceListTo >= 0) {\n items.splice(indexSpliceListTo, 1);\n }\n items.splice(indexDragOver, 0, item);\n return [...items];\n });\n indexSpliceListTo = indexDragOver;\n this.cdr.detectChanges();\n this.setAttributeElementAndItemDrag(elementContainer, false, indexSpliceListTo);\n }\n\n return;\n }\n\n if (\n !this.acceptDragSameGroup() ||\n indexDrag < 0 ||\n indexDragOver < 0 ||\n !this.items().length ||\n indexDrag > this.items().length ||\n indexDragOver > this.items().length ||\n (storeIndex.indexDrag === indexDrag && storeIndex.indexDragOver === indexDragOver)\n ) {\n return;\n }\n // xử lý cho item drag over qua 1 item cùng container\n const itemDrag = this.items()[indexDrag];\n\n this.setAnimationElementDragOver(indexDrag, indexDragOver, elementDragOver);\n storeIndex.indexDrag = indexDrag;\n storeIndex.indexDragOver = indexDragOver;\n this.items.update((items) => {\n items.splice(indexDrag, 1);\n items.splice(indexDragOver, 0, itemDrag);\n return [...items];\n });\n elementDrag.setAttribute('index', indexDragOver.toString());\n this.cdr.detectChanges();\n this.setAttributeElementAndItemDrag(elementContainer);\n };\n\n const removePlaceholderDrag = (eventDrag: IDragEnd, isDragging?: boolean) => {\n clearInterval(this.intervalScrollToElement());\n storeIndex.indexDrag = -1;\n storeIndex.indexDragOver = -1;\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n\n if (!checkMouseOverInContainer(eventDrag.mousePosition, this.rootElementScroll() || elementContainer)) {\n const childElementIndex = Array.from<HTMLElement>(childrenElement).findIndex((child) => child.classList.contains('libs-ui-drag-drop-item-drop-placeholder'));\n\n if (childElementIndex >= 0 && this.groupID() !== eventDrag.elementDrag.getAttribute('groupID')) {\n this.items.update((items) => {\n items.splice(childElementIndex, 1);\n return [...items];\n });\n }\n indexSpliceListTo = -1;\n\n this.removeAttributes(elementContainer, isDragging);\n this.setIndexElement(elementContainer);\n\n return;\n }\n if (indexSpliceListTo >= 0) {\n this.items.update((items) => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n }\n indexSpliceListTo = -1;\n };\n\n const handlerDragging = (eventDragging: IDragging) => {\n this.setAttributeElementAndItemDrag(elementContainer);\n const { elementDrag } = eventDragging;\n const fieldIdItem = elementDrag.getAttribute('field_id');\n const idItemDrag = elementDrag.getAttribute('item_id');\n\n if (fieldIdItem && idItemDrag && this.items().find((item) => get(item, fieldIdItem) === idItemDrag)) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n const childElement = Array.from<HTMLElement>(childrenElement).find((child) => child.getAttribute('item_id') === idItemDrag);\n\n if (this.items() === eventDragging.itemDragInfo?.itemsDrag() && childElement && !childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder') && !childElement.getAttribute(this.dragDropService.TargetItemDragFlag)) {\n childElement.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');\n this.groupID.set(elementDrag.getAttribute('groupID') || '');\n styleTag.remove();\n styleTag.textContent = styleContainer(this.stylesOverride() || [], this.viewEncapsulation(), this.groupID());\n elementContainer.appendChild(styleTag);\n this.setAttributeElementAndItemDrag(elementContainer, true);\n }\n }\n\n if (this.disableDragContainer()) {\n return;\n }\n\n if (this.groupID() === elementDrag.getAttribute('groupID') && !this.acceptDragSameGroup()) {\n this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll() || !this.acceptDragSameGroup());\n return;\n }\n\n if (!checkMouseOverInContainer(eventDragging.mousePosition, this.rootElementScroll() || elementContainer)) {\n if (this.isDragOver()) {\n this.isDragOver.set(false);\n this.outDragLeaveContainer.emit({ ...eventDragging, elementDragLeave: elementContainer });\n }\n\n return removePlaceholderDrag(eventDragging, true);\n }\n this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll());\n\n // Đoạn code xử lý cho việc kéo một element vào 1 container nhưng container không có item hoặc item drag không over qua item trong container\n if (!this.isDragOver()) {\n elementContainer.classList.add('libs-ui-drag-drop-container-dragover');\n this.isDragOver.set(true);\n this.outDragOverContainer.emit({ ...eventDragging, elementDragOver: elementContainer });\n }\n const eventDragOver = { ...eventDragging, elementDragOver: elementContainer };\n\n if (!this.items().length) {\n eventDragOver.elementDragOver = {\n getAttribute: (name: string) => {\n if (name === 'groupID') {\n return this.groupID();\n }\n if (name !== 'index') {\n return null;\n }\n\n return 0;\n },\n } as unknown as HTMLElement;\n this.dragDropService.OnDragOver.next(eventDragOver);\n\n return;\n }\n\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let childElement = Array.from<HTMLElement>(childrenElement).find((child) => checkMouseOverInContainer(eventDragging.mousePosition, child));\n\n if (childElement) {\n // nếu tìm thấy thì sẽ nhận qua sự kiện của drag-item.directive emit\n return;\n }\n childElement = Array.from<HTMLElement>(childrenElement).pop();\n\n if (childElement) {\n eventDragOver.elementDragOver = childElement;\n this.dragDropService.OnDragOver.next(eventDragOver);\n }\n };\n\n const handlerDragEnd = (eventDragEnd: IDragEnd) => {\n if (this.disableDragContainer()) {\n return;\n }\n let rect = undefined;\n\n if (this.rootElementScroll() || elementContainer) {\n rect = (this.rootElementScroll() || elementContainer)?.getBoundingClientRect();\n }\n removePlaceholderDrag(eventDragEnd);\n const { elementDrag, mousePosition, itemDragInfo } = eventDragEnd;\n\n if (this.groupID() === elementDrag.getAttribute('groupID')) {\n this.outDragEndContainer.emit({ ...eventDragEnd });\n }\n if (!checkMouseOverInContainer(mousePosition, this.rootElementScroll() || elementContainer, rect)) {\n return;\n }\n const eventDrop = { elementDrag: elementDrag, elementDrop: elementContainer, itemDragInfo: itemDragInfo };\n\n if (this.disableDragContainer() || !this.dragDropService.checkElementOverAcceptElementDrag(this.groupName(), elementDrag.getAttribute('groupName'), elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n const childElement = Array.from<HTMLElement>(childrenElement).find((child) => checkMouseOverInContainer(mousePosition, child));\n\n if (childElement) {\n eventDrop.elementDrop = childElement;\n this.dragDropService.OnDrop.next(eventDrop);\n\n return;\n }\n eventDrop.elementDrop = {\n getAttribute: (name: string) => {\n if (name === 'dropContainer') {\n return true;\n }\n if (name === 'groupID') {\n return this.groupID();\n }\n if (name !== 'index') {\n return null;\n }\n\n return childrenElement.length;\n },\n } as unknown as HTMLElement;\n this.dragDropService.OnDrop.next(eventDrop);\n };\n\n const handlerDrop = (eventDrop: IDrop) => {\n if (this.disableDragContainer()) {\n return;\n }\n const { elementDrag, elementDrop, itemDragInfo } = eventDrop;\n\n if (this.groupID() === elementDrag.getAttribute('groupID') && this.groupID() === elementDrop.getAttribute('groupID')) {\n if (itemDragInfo) {\n itemDragInfo.indexDrop = Number(elementDrop.getAttribute('index')).valueOf();\n itemDragInfo.itemsDrop = this.items;\n itemDragInfo.containerDrop = elementContainer;\n }\n if (this.acceptDragSameGroup()) {\n this.outDroppedContainer.emit(eventDrop);\n }\n this.removeAttributes(elementContainer);\n this.setIndexElement(elementContainer);\n return;\n }\n\n if (this.groupID() !== elementDrop.getAttribute('groupID') || elementDrag.getAttribute('groupID') === elementDrop.getAttribute('groupID')) {\n return;\n }\n const indexDragOver = this.groupID() !== elementDrag.getAttribute('groupID') ? Number(elementDrop.getAttribute('index')).valueOf() : Number(elementDrop.getAttribute('index')).valueOf() - (elementDrop.getAttribute('dropContainer') ? 0 : 1);\n const item = this.mode() === 'copy' ? cloneDeep(itemDragInfo?.item) : itemDragInfo?.item;\n\n if (itemDragInfo) {\n itemDragInfo.indexDrop = indexDragOver;\n itemDragInfo.itemsDrop = this.items;\n itemDragInfo.containerDrop = elementContainer;\n }\n\n if (!this.items().length) {\n this.outDroppedContainerEmpty.emit(eventDrop);\n }\n\n this.items.update((items) => {\n items.splice(indexDragOver, 0, item);\n return [...items];\n });\n if (itemDragInfo && itemDragInfo.itemsMove && itemDragInfo.itemsMove()) {\n itemDragInfo.itemsDrag.set([...itemDragInfo.itemsMove()]);\n this.setAttributeElementAndItemDrag(elementContainer);\n }\n this.outDroppedContainer.emit(eventDrop);\n this.removeAttributes(elementContainer);\n this.setIndexElement(elementContainer);\n };\n\n [\n {\n name: 'OnDragStart',\n event: this.dragDropService.OnDragStart,\n functionCall: handlerDragStart,\n },\n {\n name: 'OnDragOver',\n event: this.dragDropService.OnDragOver,\n functionCall: handlerDragOver,\n },\n {\n name: 'OnDragging',\n event: this.dragDropService.OnDragging,\n functionCall: handlerDragging,\n },\n {\n name: 'OnDragEnd',\n event: this.dragDropService.OnDragEnd,\n functionCall: handlerDragEnd,\n },\n {\n name: 'OnDrop',\n event: this.dragDropService.OnDrop,\n functionCall: handlerDrop,\n },\n ].forEach((item: { name: string; event: Observable<unknown>; functionCall: object }) => item.event.pipe(takeUntil(this.onDestroy)).subscribe(item.functionCall));\n }\n\n public get FunctionsControl(): IDragDropFunctionControlEvent {\n return {\n setAttributeElementAndItemDrag: () => this.setAttributeElementAndItemDrag(this.elementRef.nativeElement),\n };\n }\n\n /* */\n private async setAttributeElementAndItemDrag(elementContainer: HTMLElement, setItemDrag?: boolean, indexInsert?: number) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let index = -1;\n\n elementContainer.setAttribute('groupID', this.groupID());\n elementContainer.removeAttribute('disableDragContainer');\n\n if (this.disableDragContainer()) {\n elementContainer.setAttribute('disableDragContainer', `${this.disableDragContainer()}`);\n }\n if (this.groupName()) {\n elementContainer.setAttribute('groupName', this.groupName() || '');\n }\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (!childElement.hasAttribute('groupName') || childElement.getAttribute('groupName') === this.groupName()) {\n childElement.setAttribute('groupID', this.groupID());\n }\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n index += 1;\n childElement.setAttribute('index', `${index}`);\n childElement.removeAttribute('disableDragContainer');\n if (this.disableDragContainer()) {\n childElement.setAttribute('disableDragContainer', `${this.disableDragContainer()}`);\n }\n if (this.groupName() && !childElement.hasAttribute('groupName')) {\n childElement.setAttribute('groupName', this.groupName() || '');\n }\n if (this.placeholder()) {\n childElement.setAttribute('placeholder', `${this.placeholder()}`);\n }\n if (this.dropToGroupName()) {\n childElement.setAttribute('dropToGroupName', `${this.dropToGroupName()?.join(';')}`);\n }\n if (indexInsert === index && this.placeholder()) {\n if (!childElement.classList.contains('libs-ui-drag-drop-item-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-placeholder');\n }\n if (!childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-drop-placeholder');\n }\n }\n\n if (setItemDrag && childElement.getAttribute(this.dragDropService.TargetItemDragFlag) && this.items().length >= index) {\n if (this.placeholder()) {\n if (!childElement.classList.contains('libs-ui-drag-drop-item-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-placeholder');\n }\n if (!childElement.classList.contains('libs-ui-drag-drop-item-origin-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-origin-placeholder');\n }\n }\n\n this.dragDropService.ItemDragInfo = { item: this.items()[index] as object, indexDrag: index, itemsDrag: this.items, containerDrag: elementContainer, itemsMove: signal([...this.items()]) };\n if (this.mode() === 'move') {\n this.dragDropService.ItemDragInfo.itemsMove?.update((items) => {\n items.splice(index, 1);\n return [...items];\n });\n }\n }\n });\n }\n\n private initStyleAndAttribute(elementContainer: HTMLElement, hasRemoveAttribute = false) {\n this.setAttributeElementAndItemDrag(elementContainer);\n if (hasRemoveAttribute) {\n this.removeAttributes(elementContainer);\n }\n this.setIndexElement(elementContainer);\n }\n\n private setAnimationElementDragOver(indexDrag: number, indexDragOver: number, elementDragOver: HTMLElement) {\n if (!this.directionDrag() || !elementDragOver) {\n return;\n }\n if (this.directionDrag() === 'vertical') {\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-bottom');\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-top');\n if (indexDrag > indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-bottom');\n }\n if (indexDrag < indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-top');\n }\n\n return;\n }\n\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-left');\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-right');\n if (indexDrag > indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-right');\n }\n if (indexDrag < indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-left');\n }\n }\n\n private setIndexElement(elementContainer: HTMLElement) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let index = -1;\n\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n index += 1;\n childElement.setAttribute('index', `${index}`);\n });\n }\n\n private removeAttributes(elementContainer: HTMLElement, ignoreRemoveClassItemOriginPlaceholder?: boolean) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n\n elementContainer.classList.remove('libs-ui-drag-drop-container-dragover');\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n childElement.removeAttribute('index');\n if (!this.dropToGroupName() || !this.dropToGroupName()?.length) {\n childElement.removeAttribute('dropToGroupName');\n }\n if (!this.placeholder()) {\n childElement.removeAttribute('placeholder');\n }\n if (this.placeholder()) {\n childElement.classList.remove('libs-ui-drag-drop-item-placeholder');\n if (!ignoreRemoveClassItemOriginPlaceholder) {\n childElement.classList.remove('libs-ui-drag-drop-item-origin-placeholder');\n }\n childElement.classList.remove('libs-ui-drag-drop-item-drop-placeholder');\n }\n });\n }\n}\n","import { AfterViewInit, Directive, OnDestroy, inject, output } from '@angular/core';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { cloneIBoundingClientRect, getViewport } from '@libs-ui/utils';\nimport { Subject, fromEvent, takeUntil, tap } from 'rxjs';\nimport { MoLibsSharedDragDropService } from './drag-drop.service';\nimport { IDragEnd } from './interfaces/event.interface';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiDragItemInContainerVirtualScrollDirective]',\n standalone: true,\n})\nexport class LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n protected onDestroy = new Subject<void>();\n\n // #region OUTPUT\n readonly outDragEndContainer = output<IDragEnd>();\n\n // #region INJECT\n protected dragDropService = inject(MoLibsSharedDragDropService);\n\n ngAfterViewInit(): void {\n const addClass = (ignoreUserSelectNone: boolean) => {\n if (!ignoreUserSelectNone) {\n document.body.classList.add('!select-none');\n }\n document.body.classList.add('!cursor-move');\n };\n const removeClass = (ignoreUserSelectNone: boolean) => {\n if (!ignoreUserSelectNone) {\n document.body.classList.remove('!select-none');\n }\n document.body.classList.remove('!cursor-move');\n };\n this.dragDropService.OnDragEnd.pipe(takeUntil(this.onDestroy)).subscribe((e) => {\n this.outDragEndContainer.emit(e);\n });\n this.dragDropService.OnDragItemInContainerVirtualScroll.pipe(takeUntil(this.onDestroy)).subscribe((dragItemInContainerVirtualScrollEvent) => {\n addClass(dragItemInContainerVirtualScrollEvent.ignoreUserSelectNone);\n const stopEventMouse = (mouseEvent: MouseEvent) => {\n if (!dragItemInContainerVirtualScrollEvent.ignoreStopEvent) {\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n }\n };\n const documentMouseUp = fromEvent<MouseEvent>(document, 'mouseup').pipe(\n tap((eventMouseUp) => {\n this.updateMouseEventsWhenMoveOverIframe('auto');\n stopEventMouse(eventMouseUp);\n const mousePosition = { clientX: eventMouseUp.clientX, clientY: eventMouseUp.clientY };\n\n if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {\n const result = this.getClientPosition(\n dragItemInContainerVirtualScrollEvent.elementDrag,\n mousePosition,\n dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft,\n dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop,\n dragItemInContainerVirtualScrollEvent.dragBoundary,\n dragItemInContainerVirtualScrollEvent.elementContainer\n );\n\n mousePosition.clientX = result.clientX;\n mousePosition.clientY = result.clientY;\n }\n const dragEndEvent = { mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.ItemDragInfo = undefined;\n this.dragDropService.OnDragEnd.next(dragEndEvent);\n dragItemInContainerVirtualScrollEvent.elementDrag.remove();\n removeClass(dragItemInContainerVirtualScrollEvent.ignoreUserSelectNone);\n })\n );\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(\n tap((eventMousemove) => {\n stopEventMouse(eventMousemove);\n const { clientX, clientY } = eventMousemove;\n const mousePosition = { clientX, clientY };\n\n const result = this.getClientPosition(\n dragItemInContainerVirtualScrollEvent.elementDrag,\n mousePosition,\n dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft,\n dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop,\n dragItemInContainerVirtualScrollEvent.dragBoundary,\n dragItemInContainerVirtualScrollEvent.elementContainer\n );\n const elementKeepContainer = result.elementKeepContainer;\n const left = result.clientX - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft;\n const top = result.clientY - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop;\n\n if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {\n if (clientX < result.viewport.left) {\n mousePosition.clientX = result.viewport.left;\n }\n if (clientX > result.viewport.width) {\n mousePosition.clientX = result.viewport.width;\n }\n if (clientY < result.viewport.top) {\n mousePosition.clientY = result.viewport.top;\n }\n if (clientY > result.viewport.height) {\n mousePosition.clientY = result.viewport.height;\n }\n }\n dragItemInContainerVirtualScrollEvent.elementDrag.style.left = `${left}px`;\n dragItemInContainerVirtualScrollEvent.elementDrag.style.top = `${top}px`;\n\n this.dragDropService.OnDragging.next({ mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo });\n }),\n takeUntil(documentMouseUp),\n takeUntil(this.onDestroy)\n )\n .subscribe();\n });\n }\n\n /* FUNCTIONS */\n\n protected getClientPosition(\n element: HTMLElement,\n mousePosition: { clientX: number; clientY: number },\n distanceStartElementAndMouseLeft: number,\n distanceStartElementAndMouseTop: number,\n dragBoundary?: boolean,\n elementContainer?: HTMLElement\n ): { clientX: number; clientY: number; elementKeepContainer: boolean; viewport: IBoundingClientRect } {\n let viewport = getViewport() as IBoundingClientRect;\n const rectElement = element.getBoundingClientRect();\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n const containerItem = elementContainer || containerById?.elementScroll || containerById?.element || document.body;\n let { clientX, clientY } = mousePosition;\n\n viewport.left = 0;\n viewport.top = 0;\n if (dragBoundary) {\n viewport = cloneIBoundingClientRect(containerItem.getBoundingClientRect());\n viewport.height = viewport.top + viewport.height;\n viewport.width = viewport.left + viewport.width;\n }\n let elementKeepContainer = false;\n\n if ((clientX > viewport.width && clientY > viewport.height) || (clientX < viewport.left && clientY < viewport.top)) {\n elementKeepContainer = true;\n }\n\n if (clientX + (rectElement.width - distanceStartElementAndMouseLeft) > viewport.width) {\n clientX -= clientX + (rectElement.width - distanceStartElementAndMouseLeft) - viewport.width;\n }\n if (clientY + (rectElement.height - distanceStartElementAndMouseTop) > viewport.height) {\n clientY -= clientY + (rectElement.height - distanceStartElementAndMouseTop) - viewport.height;\n }\n if (clientX - distanceStartElementAndMouseLeft < (dragBoundary && containerItem ? viewport.left : 0)) {\n clientX = (dragBoundary && containerItem ? viewport.left : 0) + distanceStartElementAndMouseLeft;\n }\n if (clientY - distanceStartElementAndMouseTop < (dragBoundary && containerItem ? viewport.top : 0)) {\n clientY = (dragBoundary && containerItem ? viewport.top : 0) + distanceStartElementAndMouseTop;\n }\n\n return { clientX, clientY, elementKeepContainer, viewport };\n }\n\n protected updateMouseEventsWhenMoveOverIframe(pointerEvents: 'none' | 'auto') {\n const frames = document.getElementsByTagName('iframe');\n\n if (!frames?.length) {\n return;\n }\n\n for (let i = 0; i < frames.length; ++i) {\n frames[i].style.pointerEvents = pointerEvents;\n }\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, Directive, ElementRef, OnDestroy, effect, inject, input, output, signal } from '@angular/core';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { checkMouseOverInContainer, checkViewInScreen, get, getDragEventByElement, getViewport } from '@libs-ui/utils';\nimport { fromEvent, takeUntil, tap, throttleTime } from 'rxjs';\nimport { LibsUiDragItemInContainerVirtualScrollDirective } from './drag-item-in-container-virtual-scroll.directive';\nimport { IDragEnd, IDragLeave, IDragOver, IDragStart, IDrop } from './interfaces/event.interface';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiDragItemDirective]',\n standalone: true,\n})\nexport class LibsUiDragItemDirective extends LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private isDragOver = signal<boolean>(false);\n private isDragging = signal<boolean>(false);\n\n // #region INPUT\n //setup 3 field phía dưới nếu đang sử dụng item trong virtual-scroll\n readonly fieldId = input<string>('');\n readonly item = input<any>(undefined);\n readonly itemInContainerVirtualScroll = input<boolean>();\n //----------------------------------\n readonly throttleTimeHandlerDraggingEvent = input<number, number | undefined>(0, { transform: (value) => value || 0 });\n readonly ignoreStopEvent = input<boolean>();\n readonly onlyMouseDownStopEvent = input<boolean>();\n readonly dragRootElement = input<boolean>();\n readonly dragBoundary = input<boolean>();\n readonly dragBoundaryAcceptMouseLeaveContainer = input<boolean>();\n readonly elementContainer = input<HTMLElement>();\n readonly zIndex = input<number, number | undefined>(1300, { transform: (value) => value ?? 1300 });\n readonly disable = input<boolean>();\n readonly ignoreUserSelectNone = input<boolean>();\n\n // #region OUTPUT\n readonly outDragStart = output<IDragStart>();\n readonly outDragOver = output<IDragOver>();\n readonly outDragLeave = output<IDragLeave>();\n readonly outDragEnd = output<IDragEnd>();\n readonly outDropped = output<IDrop>();\n\n // #region INJECT\n private elementRef = inject(ElementRef);\n\n constructor() {\n super();\n effect(() => {\n if (!this.elementRef?.nativeElement) {\n return;\n }\n const element = this.elementRef.nativeElement as HTMLElement;\n\n element.classList.remove(`${this.dragDropService.ClassItemDefine}-disable`);\n if (this.disable() && !element.classList.contains(`${this.dragDropService.ClassItemDefine}-disable`)) {\n element.classList.add(`${this.dragDropService.ClassItemDefine}-disable`);\n }\n });\n }\n\n override ngAfterViewInit() {\n const element = this.elementRef.nativeElement as HTMLElement;\n if (this.fieldId()) {\n element.setAttribute('field_id', this.fieldId());\n if (this.item()) {\n element.setAttribute('item_id', get(this.item(), this.fieldId()));\n }\n }\n element.classList.add(this.dragDropService.ClassItemDefine);\n this.dragDropService.OnDragging.pipe(throttleTime(this.throttleTimeHandlerDraggingEvent()), takeUntil(this.onDestroy)).subscribe((eventDragging) => {\n if (this.disable() || element.getAttribute('disableDragContainer') || (this.fieldId() && this.item() && eventDragging.elementDrag.getAttribute('item_id') === get(this.item(), this.fieldId()))) {\n return;\n }\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n\n if (containerById) {\n if (\n eventDragging.elementKeepContainer ||\n !this.dragDropService.checkElementOverAcceptElementDrag(containerById.element.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('dropToGroupName'))\n ) {\n return;\n }\n }\n if (checkMouseOverInContainer(eventDragging.mousePosition, element) && element !== eventDragging.elementDrag && containerById && checkViewInScreen(containerById.element, element, containerById.elementScroll)) {\n if (this.isDragOver()) {\n return;\n }\n const eventDragOver = { ...eventDragging, elementDragOver: element };\n\n this.dragDropService.OnDragOver.next(eventDragOver);\n this.outDragOver.emit(eventDragOver);\n this.isDragOver.set(true);\n\n return;\n }\n\n if (this.isDragOver()) {\n const eventDragLeave = { ...eventDragging, elementDragLeave: element };\n this.isDragOver.set(false);\n this.dragDropService.OnDragLeave.next(eventDragLeave);\n this.outDragLeave.emit(eventDragLeave);\n }\n });\n\n this.dragDropService.OnDropContainer.pipe(takeUntil(this.onDestroy)).subscribe((eventDrop) => {\n if (eventDrop.elementDrop !== element) {\n return;\n }\n const dropEvent = { elementDrag: eventDrop.elementDrag, elementDrop: element, itemDragInfo: eventDrop.itemDragInfo };\n\n this.outDropped.emit(dropEvent);\n });\n const styleTag = document.createElement('style');\n\n styleTag.textContent = `.libs-ui-drag-drop-item-dragging{cursor:move}`;\n let nodeClone = element;\n let distanceStartElementAndMouseLeft = -1;\n let distanceStartElementAndMouseTop = -1;\n let contextMenu = false;\n const stopEventMouse = (mouseEvent: MouseEvent) => {\n if (!this.ignoreStopEvent()) {\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n }\n };\n const updatePositionElementRootAndRemoveNodeClone = () => {\n if (this.dragRootElement()) {\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n\n const containerItem = this.elementContainer() || containerById?.elementScroll || containerById?.element || document.body;\n const rectContainer = containerItem.getBoundingClientRect();\n const rectNodeClone = nodeClone.getBoundingClientRect();\n const numberSub = Number((getComputedStyle(containerItem).border.match(/\\d+px/gi) || ['0'])[0].replace(/\\D+/gi, '')).valueOf();\n\n element.style.left = rectNodeClone.left - rectContainer.left - numberSub + 'px';\n element.style.top = rectNodeClone.top - rectContainer.top - numberSub + 'px';\n element.classList.remove('opacity-0');\n }\n distanceStartElementAndMouseLeft = -1;\n distanceStartElementAndMouseTop = -1;\n nodeClone.remove();\n };\n\n fromEvent(document, 'contextmenu')\n .pipe(\n tap(() => {\n if (this.isDragging()) {\n updatePositionElementRootAndRemoveNodeClone();\n }\n contextMenu = true;\n }),\n takeUntil(this.onDestroy)\n )\n .subscribe();\n\n let ignoreMousedown = false;\n\n getDragEventByElement({\n elementMouseDown: element,\n functionMouseDown: (event: MouseEvent) => {\n this.dragDropService.ItemClick = element;\n contextMenu = false;\n this.updateMouseEventsWhenMoveOverIframe('none');\n if ((this.disable() || element.getAttribute('disableDragContainer') || !this.isDragging() || this.itemInContainerVirtualScroll()) && !this.onlyMouseDownStopEvent()) {\n return;\n }\n stopEventMouse(event);\n },\n functionMouseMove: (event: MouseEvent) => {\n stopEventMouse(event);\n },\n functionMouseUp: (event: MouseEvent) => {\n this.updateMouseEventsWhenMoveOverIframe('auto');\n this.dragDropService.resetItemClick();\n stopEventMouse(event);\n if (this.disable() || element.getAttribute('disableDragContainer') || contextMenu || !this.isDragging()) {\n contextMenu = false;\n\n return;\n }\n contextMenu = false;\n this.isDragging.set(false);\n element.removeAttribute(this.dragDropService.TargetItemDragFlag);\n if (this.itemInContainerVirtualScroll()) {\n return;\n }\n const mousePosition = { clientX: event.clientX, clientY: event.clientY };\n\n if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {\n const result = this.getClientPosition(element, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());\n\n mousePosition.clientX = result.clientX;\n mousePosition.clientY = result.clientY;\n }\n const dragEndEvent = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.ItemDragInfo = undefined;\n this.dragDropService.OnDragEnd.next(dragEndEvent);\n this.outDragEnd.emit(dragEndEvent);\n\n nodeClone.classList.remove('libs-ui-drag-drop-item-dragging');\n if (!this.ignoreUserSelectNone()) {\n nodeClone.classList.remove('select-none');\n }\n styleTag.remove();\n\n updatePositionElementRootAndRemoveNodeClone();\n },\n onDestroy: this.onDestroy,\n })\n .pipe(\n tap((dragMouseEvent: MouseEvent) => {\n const rectElement = element.getBoundingClientRect();\n const viewport = getViewport() as IBoundingClientRect;\n\n if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || (!ignoreMousedown && dragMouseEvent.type === 'mousedown' && rectElement.height + rectElement.top >= viewport.height)) {\n return;\n }\n const { clientX, clientY } = dragMouseEvent;\n\n if (distanceStartElementAndMouseLeft === -1) {\n distanceStartElementAndMouseLeft = clientX - rectElement.left;\n }\n\n if (distanceStartElementAndMouseTop === -1) {\n distanceStartElementAndMouseTop = clientY - rectElement.top;\n }\n })\n )\n .subscribe((dragMouseEvent) => {\n if (this.dragDropService.ItemClick.filter((item) => item !== element).some((item) => element.contains(item))) {\n return;\n }\n if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || dragMouseEvent.type === 'mousedown' || contextMenu || (this.itemInContainerVirtualScroll() && this.isDragging())) {\n return;\n }\n ignoreMousedown = true;\n const { clientX, clientY } = dragMouseEvent;\n const mousePosition = { clientX, clientY };\n const rectElement = element.getBoundingClientRect();\n\n if (!this.isDragging()) {\n this.isDragging.set(true);\n const eventDragStart = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n element.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');\n this.dragDropService.OnDragStart.next(eventDragStart);\n eventDragStart.itemDragInfo = this.dragDropService.ItemDragInfo;\n this.outDragStart.emit(eventDragStart);\n\n nodeClone = element.cloneNode(true) as HTMLElement;\n nodeClone.style.zIndex = `${this.zIndex()}`;\n nodeClone.classList.add('!fixed');\n nodeClone.classList.remove('libs-ui-drag-drop-item-origin-placeholder');\n nodeClone.classList.remove('libs-ui-drag-drop-item-placeholder');\n nodeClone.appendChild(styleTag);\n nodeClone.classList.add('libs-ui-drag-drop-item-dragging');\n nodeClone.style.width = `${rectElement.width}px`;\n nodeClone.style.height = `${rectElement.height}px`;\n nodeClone.style.left = `${-999}px`;\n nodeClone.style.top = `${-999}px`;\n if (!this.ignoreUserSelectNone()) {\n nodeClone.classList.add('select-none');\n }\n document.body.append(nodeClone);\n if (this.dragRootElement()) {\n element.classList.add('opacity-0');\n }\n\n if (this.itemInContainerVirtualScroll()) {\n this.dragDropService.OnDragItemInContainerVirtualScroll.next({\n itemDragInfo: this.dragDropService.ItemDragInfo,\n elementDrag: nodeClone,\n distanceStartElementAndMouseTop,\n distanceStartElementAndMouseLeft,\n elementContainer: this.elementContainer(),\n dragBoundary: this.dragBoundary(),\n dragBoundaryAcceptMouseLeaveContainer: this.dragBoundaryAcceptMouseLeaveContainer(),\n ignoreStopEvent: this.ignoreStopEvent(),\n ignoreUserSelectNone: this.ignoreUserSelectNone() || false,\n });\n\n return;\n }\n }\n const result = this.getClientPosition(nodeClone, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());\n\n const elementKeepContainer = result.elementKeepContainer;\n const left = result.clientX - distanceStartElementAndMouseLeft;\n const top = result.clientY - distanceStartElementAndMouseTop;\n\n if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {\n if (clientX < result.viewport.left) {\n mousePosition.clientX = result.viewport.left;\n }\n if (clientX > result.viewport.width) {\n mousePosition.clientX = result.viewport.width;\n }\n if (clientY < result.viewport.top) {\n mousePosition.clientY = result.viewport.top;\n }\n if (clientY > result.viewport.height) {\n mousePosition.clientY = result.viewport.height;\n }\n }\n nodeClone.style.left = `${left}px`;\n nodeClone.style.top = `${top}px`;\n\n const eventDragging = { mousePosition, elementDrag: nodeClone, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.OnDragging.next(eventDragging);\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsDragContainerDirective } from '../drag-drop.directive';\nimport { LibsUiDragItemDirective } from '../drag-item.directive';\n\ninterface Task {\n id: number;\n title: string;\n description: string;\n status: 'todo' | 'in-progress' | 'done';\n}\n\ninterface Column {\n id: string;\n title: string;\n items: Task[];\n}\n\n@Component({\n selector: 'lib-drag-drop-demo',\n standalone: true,\n imports: [CommonModule, LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective, LibsUiComponentsButtonsButtonComponent],\n template: `\n <div class=\"page-container\">\n <header>\n <h1>Demo Drag and Drop Component</h1>\n <p>Angular component library for drag and drop functionality</p>\n </header>\n\n <main>\n <section class=\"intro-section\">\n <h2>Introduction</h2>\n <p>\n <code>&#64;libs-ui/components-drag-drop</code>\n is a powerful Angular component that enables drag and drop functionality with features like virtual scrolling, multi-selection, and custom boundaries.\n </p>\n </section>\n\n <section class=\"installation-section\">\n <h2>Installation</h2>\n <p>To install the library, use npm or yarn:</p>\n\n <div class=\"install-command\">\n <pre>\n <code>npm install &#64;libs-ui/components-drag-drop</code>\n <libs_ui-components-buttons-button\n [label]=\"'Copy'\"\n (outClick)=\"copyToClipboard('npm install @libs-ui/components-drag-drop')\" />\n </pre>\n </div>\n\n <p>Or with yarn:</p>\n\n <div class=\"install-command\">\n <pre>\n <code>yarn add &#64;libs-ui/components-drag-drop</code>\n <libs_ui-components-buttons-button\n [label]=\"'Copy'\"\n (outClick)=\"copyToClipboard('yarn add @libs-ui/components-drag-drop')\" />\n </pre>\n </div>\n </section>\n\n <section class=\"demo-section\">\n <h2>Live Demo</h2>\n <div class=\"demo-container\">\n <!-- Basic List Demo -->\n <div class=\"demo-example\">\n <h3>Basic List</h3>\n <div class=\"list-container\">\n <div\n LibsUiComponentsDragContainerDirective\n [(items)]=\"basicItems\"\n [acceptDragSameGroup]=\"true\">\n @for (item of basicItems; track item) {\n <div\n class=\"list-item\"\n LibsUiDragItemDirective>\n <span class=\"item-icon\">📋</span>\n <span class=\"item-text\">{{ item }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Kanban Board Demo -->\n <div class=\"demo-example\">\n <h3>Kanban Board</h3>\n <div class=\"kanban-board\">\n @for (column of columns; track column) {\n <div\n class=\"kanban-column\"\n LibsUiComponentsDragContainerDirective\n [(items)]=\"column.items\"\n [groupName]=\"column.id\"\n [dropToGroupName]=\"columnsIds\"\n [acceptDragSameGroup]=\"true\">\n <h4>{{ column.title }}</h4>\n @for (item of column.items; track item) {\n <div\n class=\"kanban-item\"\n LibsUiDragItemDirective>\n <div class=\"kanban-item-header\">\n <span class=\"item-title\">{{ item.title }}</span>\n <span\n class=\"item-status\"\n [class]=\"'status-' + item.status\">\n {{ item.status }}\n </span>\n </div>\n <p class=\"item-description\">{{ item.description }}</p>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Nested Containers Demo -->\n <div class=\"demo-example\">\n <h3>Nested Containers copy</h3>\n <div class=\"nested-container\">\n <div\n LibsUiComponentsDragContainerDirective\n [(items)]=\"nestedItems\"\n [groupName]=\"'parent'\"\n [mode]=\"'copy'\"\n [acceptDragSameGroup]=\"true\">\n @for (item of nestedItems; track item) {\n <div\n class=\"nested-item\"\n LibsUiDragItemDirective>\n <div class=\"nested-item-header\">\n <span class=\"item-title\">{{ item.title }}</span>\n </div>\n <div class=\"nested-item-content\">\n <div\n LibsUiComponentsDragContainerDirective\n [(items)]=\"item.subItems\"\n [groupName]=\"'child'\"\n [acceptDragSameGroup]=\"true\">\n @for (subItem of item.subItems; track subItem) {\n <div\n class=\"sub-item\"\n LibsUiDragItemDirective>\n {{ subItem }}\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"api-doc-section\">\n <h2>API Documentation</h2>\n\n <h3>Inputs</h3>\n <div class=\"table-container\">\n <table class=\"api-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Default</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n @for (input of inputsDoc; track input.name) {\n <tr>\n <td>\n <code>{{ input.name }}</code>\n </td>\n <td>\n <code>{{ input.type }}</code>\n </td>\n <td>{{ input.default }}</td>\n <td>{{ input.description }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <h3>Outputs</h3>\n <div class=\"table-container\">\n <table class=\"api-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n @for (output of outputsDoc; track output.name) {\n <tr>\n <td>\n <code>{{ output.name }}</code>\n </td>\n <td>\n <code>{{ output.type }}</code>\n </td>\n <td>{{ output.description }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </section>\n\n <section class=\"interfaces-section\">\n <h2>Interfaces</h2>\n <div class=\"interface-docs\">\n @for (interfaceItem of interfacesDoc; track interfaceItem.name) {\n <div class=\"interface-item\">\n <h3>{{ interfaceItem.name }}</h3>\n <pre><code>{{interfaceItem.code}}</code></pre>\n <p>{{ interfaceItem.description }}</p>\n </div>\n }\n </div>\n </section>\n\n <section class=\"features-section\">\n <h2>Features</h2>\n <ul>\n @for (feature of features; track feature.id) {\n <li>\n <span class=\"feature-icon\">{{ feature.icon }}</span>\n <div class=\"feature-info\">\n <h3>{{ feature.title }}</h3>\n <p>{{ feature.description }}</p>\n </div>\n </li>\n }\n </ul>\n </section>\n\n <section class=\"usage-section\">\n <h2>Usage</h2>\n <div class=\"code-examples\">\n @for (example of codeExamples; track example.id) {\n <div class=\"code-example\">\n <h3>{{ example.title }}</h3>\n <pre><code [innerHTML]=\"example.code\"></code></pre>\n </div>\n }\n </div>\n </section>\n </main>\n </div>\n `,\n styles: [\n `\n .page-container {\n max-width: 1200px;\n margin: 0 auto;\n padding: 20px;\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n line-height: 1.6;\n color: #333;\n }\n\n header {\n text-align: center;\n padding: 40px 0;\n background-color: #ffffff;\n border-radius: 8px;\n margin-bottom: 30px;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n }\n\n header h1 {\n font-size: 2.5rem;\n color: #2c3e50;\n margin-bottom: 10px;\n }\n\n header p {\n font-size: 1.2rem;\n color: #7f8c8d;\n }\n\n section {\n background-color: #ffffff;\n border-radius: 8px;\n padding: 30px;\n margin-bottom: 30px;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n }\n\n h2 {\n font-size: 1.8rem;\n color: #2c3e50;\n margin-bottom: 20px;\n padding-bottom: 10px;\n border-bottom: 2px solid #ecf0f1;\n }\n\n h3 {\n font-size: 1.4rem;\n color: #34495e;\n margin-bottom: 15px;\n }\n\n h4 {\n font-size: 1.2rem;\n color: #34495e;\n margin-bottom: 10px;\n }\n\n p {\n margin-bottom: 15px;\n }\n\n code {\n font-family: 'Courier New', Courier, monospace;\n background-color: #f7f7f7;\n padding: 2px 5px;\n border-radius: 3px;\n font-size: 0.9em;\n }\n\n pre {\n background-color: #f7f7f7;\n padding: 15px;\n border-radius: 5px;\n overflow-x: auto;\n margin-bottom: 20px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n pre code {\n background-color: transparent;\n padding: 0;\n }\n\n /* Installation section styles */\n .installation-section .install-command {\n position: relative;\n margin-bottom: 20px;\n }\n\n .installation-section .copy-button {\n position: absolute;\n top: 10px;\n right: 10px;\n background: #3498db;\n color: white;\n border: none;\n border-radius: 4px;\n padding: 5px 10px;\n font-size: 0.9rem;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .installation-section .copy-button:hover {\n background: #2980b9;\n }\n\n /* Demo section styles */\n .demo-container {\n display: grid;\n grid-template-columns: 1fr;\n gap: 30px;\n }\n\n .demo-example {\n background: #f7f7f7;\n padding: 20px;\n border-radius: 8px;\n margin-bottom: 20px;\n }\n\n /* List styles */\n .list-container {\n max-width: 400px;\n margin: 20px auto;\n }\n\n .list-item {\n padding: 12px;\n margin: 8px 0;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n display: flex;\n align-items: center;\n transition:\n transform 0.2s,\n box-shadow 0.2s;\n }\n\n .list-item:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n }\n\n .item-icon {\n margin-right: 12px;\n font-size: 1.2em;\n }\n\n /* Kanban styles */\n .kanban-board {\n display: flex;\n gap: 20px;\n padding: 20px;\n overflow-x: auto;\n }\n\n .kanban-column {\n flex: 1;\n min-width: 300px;\n background: #f5f5f5;\n padding: 15px;\n border-radius: 8px;\n }\n\n .kanban-item {\n background: white;\n padding: 12px;\n margin: 8px 0;\n border-radius: 6px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n\n .kanban-item-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n }\n\n .item-title {\n font-weight: 500;\n }\n\n .item-status {\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 0.8em;\n }\n\n .status-todo {\n background: #ffebee;\n color: #c62828;\n }\n\n .status-in-progress {\n background: #fff3e0;\n color: #ef6c00;\n }\n\n .status-done {\n background: #e8f5e9;\n color: #2e7d32;\n }\n\n .item-description {\n font-size: 0.9em;\n color: #666;\n }\n\n /* Nested containers styles */\n .nested-container {\n max-width: 800px;\n margin: 0 auto;\n }\n\n .nested-item {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n margin: 12px 0;\n overflow: hidden;\n }\n\n .nested-item-header {\n padding: 12px;\n background: #f5f5f5;\n border-bottom: 1px solid #e0e0e0;\n }\n\n .nested-item-content {\n padding: 12px;\n }\n\n .sub-item {\n padding: 8px;\n margin: 4px 0;\n background: #f9f9f9;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n }\n\n /* API documentation styles */\n .api-doc-section {\n margin-bottom: 40px;\n }\n\n .table-container {\n overflow-x: auto;\n margin-bottom: 30px;\n }\n\n .api-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 20px;\n }\n\n .api-table th,\n .api-table td {\n padding: 12px 15px;\n text-align: left;\n border-bottom: 1px solid #e1e1e1;\n }\n\n .api-table th {\n background-color: #f5f5f5;\n font-weight: bold;\n }\n\n .api-table tbody tr:hover {\n background-color: #f9f9f9;\n }\n\n /* Features section */\n .features-section ul {\n list-style: none;\n }\n\n .features-section li {\n display: flex;\n margin-bottom: 25px;\n align-items: flex-start;\n }\n\n .feature-icon {\n font-size: 2rem;\n margin-right: 20px;\n min-width: 40px;\n text-align: center;\n }\n\n .feature-info {\n flex: 1;\n }\n\n /* Code examples */\n .code-examples {\n display: grid;\n grid-template-columns: 1fr;\n gap: 20px;\n }\n\n @media (min-width: 768px) {\n .code-examples {\n grid-template-columns: repeat(2, 1fr);\n }\n }\n\n @media (min-width: 992px) {\n .code-examples {\n grid-template-columns: repeat(3, 1fr);\n }\n }\n\n .code-example {\n border: 1px solid #ecf0f1;\n border-radius: 5px;\n padding: 15px;\n }\n\n /* Responsive adjustments */\n @media (max-width: 768px) {\n header {\n padding: 30px 0;\n }\n\n header h1 {\n font-size: 2rem;\n }\n\n section {\n padding: 20px;\n }\n\n .kanban-board {\n flex-direction: column;\n }\n\n .kanban-column {\n min-width: 100%;\n }\n\n .feature-icon {\n font-size: 1.5rem;\n margin-right: 15px;\n }\n }\n `,\n ],\n})\nexport class LibsUiDragDropDemoComponent {\n // Basic List Items\n basicItems = ['Task 1', 'Task 2', 'Task 3', 'Task 4', 'Task 5'];\n\n // Kanban Board Columns\n columnsIds = ['todo', 'in-progress', 'done'];\n columns: Column[] = [\n {\n id: 'todo',\n title: 'To Do',\n items: [\n {\n id: 1,\n title: 'Implement drag and drop',\n description: 'Add drag and drop functionality to the component',\n status: 'todo',\n },\n {\n id: 2,\n title: 'Add animations',\n description: 'Implement smooth animations for drag and drop',\n status: 'todo',\n },\n ],\n },\n {\n id: 'in-progress',\n title: 'In Progress',\n items: [\n {\n id: 3,\n title: 'Fix styling issues',\n description: 'Resolve CSS conflicts in the component',\n status: 'in-progress',\n },\n ],\n },\n {\n id: 'done',\n title: 'Done',\n items: [\n {\n id: 4,\n title: 'Setup project structure',\n description: 'Initialize the project with necessary configurations',\n status: 'done',\n },\n ],\n },\n ];\n\n // Nested Items\n nestedItems = [\n {\n id: 1,\n title: 'Project A',\n subItems: ['Task 1', 'Task 2', 'Task 3'],\n },\n {\n id: 2,\n title: 'Project B',\n subItems: ['Task 4', 'Task 5'],\n },\n {\n id: 3,\n title: 'Project C',\n subItems: ['Task 6', 'Task 7', 'Task 8'],\n },\n ];\n\n // API Documentation\n inputsDoc = [\n {\n name: 'items',\n type: 'Array<unknown>',\n default: '[]',\n description: 'Array of items to be displayed in the container',\n },\n {\n name: 'mode',\n type: \"'move' | 'copy' | 'deepCopy'\",\n default: \"'move'\",\n description: 'Mode for drag and drop operations',\n },\n {\n name: 'directionDrag',\n type: \"'horizontal' | 'vertical'\",\n default: 'undefined',\n description: 'Direction of drag movement',\n },\n {\n name: 'viewEncapsulation',\n type: \"'emulated' | 'none'\",\n default: \"'emulated'\",\n description: 'View encapsulation mode for styling',\n },\n {\n name: 'disableDragContainer',\n type: 'boolean',\n default: 'undefined',\n description: 'Whether to disable drag operations for the container',\n },\n {\n name: 'acceptDragSameGroup',\n type: 'boolean',\n default: 'false',\n description: 'Whether to accept drag operations within the same group',\n },\n {\n name: 'placeholder',\n type: 'boolean',\n default: 'true',\n description: 'Whether to show placeholder during drag',\n },\n {\n name: 'groupName',\n type: 'string',\n default: \"'groupDragAndDropDefault'\",\n description: 'Name of the group for drag and drop operations',\n },\n {\n name: 'dropToGroupName',\n type: 'Array<string> | null',\n default: 'null',\n description: 'List of group names that can accept drops from this container',\n },\n {\n name: 'stylesOverride',\n type: 'Array<{ className: string, styles: string }>',\n default: 'undefined',\n description: 'Custom styles to override default drag-drop styling',\n },\n ];\n\n outputsDoc = [\n {\n name: 'outDragStartContainer',\n type: 'IDragStart',\n description: 'Event emitted when dragging starts in the container',\n },\n {\n name: 'outDragOverContainer',\n type: 'IDragOver',\n description: 'Event emitted when dragging over the container',\n },\n {\n name: 'outDragLeaveContainer',\n type: 'IDragLeave',\n description: 'Event emitted when dragging leaves the container',\n },\n {\n name: 'outDragEndContainer',\n type: 'IDragEnd',\n description: 'Event emitted when dragging ends in the container',\n },\n {\n name: 'outDroppedContainer',\n type: 'IDrop',\n description: 'Event emitted when an item is dropped in the container',\n },\n {\n name: 'outDroppedContainerEmpty',\n type: 'IDrop',\n description: 'Event emitted when an item is dropped in an empty container',\n },\n {\n name: 'outFunctionControl',\n type: 'IDragDropFunctionControlEvent',\n description: 'Event emitted to control drag-drop functionality',\n },\n ];\n\n // Interface Documentation\n interfacesDoc = [\n {\n name: 'IDragging',\n code: `interface IDragging {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n elementKeepContainer?: boolean;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag operation events, containing information about the dragged element and mouse position',\n },\n {\n name: 'IDragStart',\n code: `interface IDragStart {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag start events, triggered when dragging begins',\n },\n {\n name: 'IDragOver',\n code: `interface IDragOver {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n elementDragOver: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag over events, triggered when an element is dragged over another element',\n },\n {\n name: 'IDragLeave',\n code: `interface IDragLeave {\n elementDrag: HTMLElement;\n elementDragLeave: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag leave events, triggered when a dragged element leaves another element',\n },\n {\n name: 'IDragEnd',\n code: `interface IDragEnd {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag end events, triggered when dragging ends',\n },\n {\n name: 'IDrop',\n code: `interface IDrop {\n elementDrag: HTMLElement;\n elementDrop: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drop events, triggered when an element is dropped',\n },\n {\n name: 'IItemDragInfo',\n code: `interface IItemDragInfo {\n item: object;\n itemsMove?: WritableSignal<Array<unknown>>;\n indexDrag?: number;\n indexDrop?: number;\n itemsDrag: WritableSignal<Array<unknown>>;\n itemsDrop?: WritableSignal<Array<unknown>>;\n containerDrag?: HTMLElement;\n containerDrop?: HTMLElement;\n}`,\n description: 'Interface containing information about the dragged item and its containers',\n },\n {\n name: 'IDragItemInContainerVirtualScroll',\n code: `interface IDragItemInContainerVirtualScroll {\n itemDragInfo?: IItemDragInfo;\n elementDrag: HTMLElement;\n distanceStartElementAndMouseTop: number;\n distanceStartElementAndMouseLeft: number;\n elementContainer?: HTMLElement;\n dragBoundary?: boolean;\n dragBoundaryAcceptMouseLeaveContainer?: boolean;\n ignoreStopEvent?: boolean;\n}`,\n description: 'Interface for virtual scrolling drag operations, containing information about drag boundaries and container elements',\n },\n {\n name: 'IMousePosition',\n code: `interface IMousePosition {\n clientX: number;\n clientY: number;\n}`,\n description: 'Interface representing mouse position coordinates',\n },\n {\n name: 'IDragDropFunctionControlEvent',\n code: `interface IDragDropFunctionControlEvent {\n setAttributeElementAndItemDrag: () => Promise<void>;\n}`,\n description: 'Interface for drag and drop control functions',\n },\n ];\n\n // Features\n features = [\n {\n id: 1,\n icon: '🔄',\n title: 'Flexible Drag and Drop',\n description: 'Support for container-to-container dragging with customizable group names and drop zones',\n },\n {\n id: 2,\n icon: '📜',\n title: 'Virtual Scrolling',\n description: 'Efficient handling of large lists with virtual scrolling support',\n },\n {\n id: 3,\n icon: '🎯',\n title: 'Custom Boundaries',\n description: 'Define custom drag boundaries and drop zones for precise control',\n },\n {\n id: 4,\n icon: '🎨',\n title: 'Styling Options',\n description: 'Customizable styles for drag items and containers',\n },\n ];\n\n // Code Examples\n codeExamples = [\n {\n id: 1,\n title: 'Basic Usage',\n code: `&lt;div LibsUiComponentsDragContainerDirective \n [(items)]=\"items\"\n [groupName]=\"'myGroup'\"\n [acceptDragSameGroup]=\"true\"&gt;\n @for (item of items; track item) {\n &lt;div LibsUiDragItemDirective&gt;\n {{ item }}\n &lt;/div&gt;\n }\n&lt;/div&gt;`,\n },\n {\n id: 2,\n title: 'Container-to-Container',\n code: `&lt;div LibsUiComponentsDragContainerDirective \n [(items)]=\"sourceItems\"\n [groupName]=\"'source'\"&gt;\n @for (item of sourceItems; track item) {\n &lt;div LibsUiDragItemDirective&gt;\n {{ item }}\n &lt;/div&gt;\n }\n&lt;/div&gt;\n\n&lt;div LibsUiComponentsDragContainerDirective \n [(items)]=\"targetItems\"\n [groupName]=\"'target'\"\n [dropToGroupName]=\"['source']\"&gt;\n @for (item of targetItems; track item) {\n &lt;div LibsUiDragItemDirective&gt;\n {{ item }}\n &lt;/div&gt;\n }\n&lt;/div&gt;`,\n },\n ];\n\n /**\n * Copy text to clipboard\n */\n copyToClipboard(text: string) {\n navigator.clipboard.writeText(text).then(\n () => {\n alert('Copied to clipboard');\n },\n (err) => {\n console.error('Could not copy text: ', err);\n }\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-components-drag-drop.mjs","sources":["../../../../../libs-ui/components/drag-drop/src/defines/css.define.ts","../../../../../libs-ui/components/drag-drop/src/drag-drop.service.ts","../../../../../libs-ui/components/drag-drop/src/drag-scroll.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-drop.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-item-in-container-virtual-scroll.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-item.directive.ts","../../../../../libs-ui/components/drag-drop/src/demo/demo.component.ts","../../../../../libs-ui/components/drag-drop/src/libs-ui-components-drag-drop.ts"],"sourcesContent":["export const styleContainer = (config: Array<{ className: string; styles: string }>, viewEncapsulation: 'emulated' | 'none', groupID: string): string => {\n const defaultConfig = [\n {\n className: 'libs-ui-drag-drop-container',\n styles: `display:block;`,\n },\n {\n className: 'libs-ui-drag-drop-item',\n styles: `\n cursor:move;`,\n },\n {\n className: 'libs-ui-drag-drop-item-placeholder',\n styles: `visibility: hidden;`,\n },\n {\n className: 'libs-ui-drag-drop-item-origin-placeholder',\n styles: `visibility: hidden;`,\n },\n {\n className: 'libs-ui-drag-drop-item-drop-placeholder',\n styles: `visibility: hidden;`,\n },\n {\n className: 'libs-ui-drag-drop-item-dragging',\n styles: `cursor:move; user-select: none; `,\n },\n {\n className: 'libs-ui-drag-drop-item-disable',\n styles: ` cursor:not-allowed;`,\n },\n {\n className: 'libs-ui-drag-drop-item-translate-bottom',\n styles: `position:relative;animation: translateBottom 0.35s 1 ease;`,\n },\n {\n className: 'libs-ui-drag-drop-item-translate-top',\n styles: `position:relative;animation: translateTop 0.35s 1 ease;`,\n },\n {\n className: 'libs-ui-drag-drop-item-translate-left',\n styles: `position:relative;animation: translateLeft 0.35s 1 ease;`,\n },\n {\n className: 'libs-ui-drag-drop-item-translate-right',\n styles: `position:relative;animation: translateRight 0.35s 1 ease;`,\n },\n ];\n\n config.forEach((item) => {\n const itemExits = defaultConfig.find((defaultItem) => defaultItem.className === item.className);\n\n if (itemExits) {\n itemExits.styles = item.styles;\n\n return;\n }\n defaultConfig.push(item);\n });\n const groupAttr = viewEncapsulation ? `[groupID~=\"${groupID}\"]` : '';\n let styles = '';\n\n defaultConfig.forEach((item) => {\n const style = `${groupAttr}.${item.className}{${item.styles}}`;\n\n styles = `${styles}${style}\\n`;\n });\n\n styles = ` @keyframes translateTop {\n 0% {\n transform: translateY(30px);\n }\n \n 100% {\n transform: translateX(0);\n }\n }\n \n @keyframes translateBottom {\n 0% {\n transform: translateY(-30px);\n }\n \n 100% {\n transform: translateX(0px);\n }\n }\n @keyframes translateLeft {\n 0% {\n transform: translateX(30px);\n }\n \n 100% {\n transform: translateX(0);\n }\n }\n \n @keyframes translateRight {\n 0% {\n transform: translateX(-30px);\n }\n \n 100% {\n transform: translateX(0px);\n }\n }\n ${styles}`.replace(/\\n+/g, '');\n\n return styles;\n};\n","import { Injectable, WritableSignal, signal } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IDragEnd, IDragItemInContainerVirtualScroll, IDragLeave, IDragOver, IDragStart, IDragging, IDrop, IItemDragInfo } from './interfaces/event.interface';\n@Injectable({\n providedIn: 'any',\n})\nexport class MoLibsSharedDragDropService {\n private itemsClick = new Array<HTMLElement>();\n private onDragItemInContainerVirtualScroll = new Subject<IDragItemInContainerVirtualScroll>();\n private itemDragInfo?: IItemDragInfo;\n private container = signal(new Map<string, { element: HTMLElement; elementScroll?: HTMLElement }>());\n private targetItemDragFlag = 'item-drag-target';\n private classContainerDefine = 'libs-ui-drag-drop-container';\n private classItemDefine = 'libs-ui-drag-drop-item';\n private onDragging = new Subject<IDragging>();\n private onDragStart = new Subject<IDragStart>();\n private onDragEnd = new Subject<IDragEnd>();\n private onDragOver = new Subject<IDragOver>();\n private onDragLeave = new Subject<IDragLeave>();\n private onDrop = new Subject<IDrop>();\n private onDropContainer = new Subject<IDrop>();\n private onItemInit = new Subject<string>();\n\n public get OnDragItemInContainerVirtualScroll(): Subject<IDragItemInContainerVirtualScroll> {\n return this.onDragItemInContainerVirtualScroll;\n }\n\n public set ItemDragInfo(data: IItemDragInfo | undefined) {\n this.itemDragInfo = data;\n }\n\n public get ItemDragInfo(): IItemDragInfo | undefined {\n return this.itemDragInfo;\n }\n\n public get Container(): WritableSignal<Map<string, { element: HTMLElement; elementScroll?: HTMLElement }>> {\n return this.container;\n }\n\n public get TargetItemDragFlag() {\n return this.targetItemDragFlag;\n }\n\n public get ClassContainerDefine() {\n return this.classContainerDefine;\n }\n\n public get ClassItemDefine() {\n return this.classItemDefine;\n }\n\n public get OnDragging() {\n return this.onDragging;\n }\n\n public get OnDragOver() {\n return this.onDragOver;\n }\n\n public get OnDragLeave() {\n return this.onDragLeave;\n }\n\n public get OnDragStart() {\n return this.onDragStart;\n }\n\n public get OnDragEnd() {\n return this.onDragEnd;\n }\n\n public get OnDropContainer() {\n return this.onDropContainer;\n }\n\n public get OnDrop() {\n return this.onDrop;\n }\n\n public get OnItemInit() {\n return this.onItemInit;\n }\n\n public get ItemClick(): Array<HTMLElement> {\n return [...this.itemsClick];\n }\n\n public set ItemClick(item: HTMLElement) {\n this.itemsClick.push(item);\n }\n\n public resetItemClick() {\n this.itemsClick.length = 0;\n }\n\n public checkElementOverAcceptElementDrag(groupNameOfContainer: string | null, groupNameOfElementDrag: string | null, groupNameOfDropTo: string | null): boolean {\n if (groupNameOfContainer !== groupNameOfElementDrag && !groupNameOfDropTo) {\n return false;\n }\n\n if (\n groupNameOfDropTo !== null &&\n !groupNameOfDropTo\n .toString()\n .split(';')\n .includes(groupNameOfContainer || 'undefinedName')\n ) {\n return false;\n }\n\n return true;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, DestroyRef, Directive, ElementRef, inject, input, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IPageInfo, VirtualScrollerComponent } from '@iharbeck/ngx-virtual-scroller';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { checkMouseOverInContainer, cloneIBoundingClientRect, get } from '@libs-ui/utils';\nimport { MoLibsSharedDragDropService } from './drag-drop.service';\nimport { IDragging } from './interfaces/event.interface';\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsDragScrollDirective]',\n standalone: true,\n})\nexport class LibsUiComponentsDragScrollDirective implements AfterViewInit {\n // #region PROPERTY\n private stopScroll = signal<boolean>(false);\n private virtualScrollPageInfo = signal<IPageInfo | undefined>(undefined);\n protected intervalScrollToElement = signal<number | undefined>(undefined);\n\n // #region INPUT\n readonly ignoreAutoScroll = input<boolean>();\n readonly widthZoneDetect = input<number, number | undefined>(16, { transform: (value) => value ?? 16 });\n readonly movementLength = input<number, number | undefined>(6, { transform: (value) => value ?? 6 });\n readonly rootElementScroll = input<HTMLElement>();\n readonly virtualScrollerComponent = input<VirtualScrollerComponent>();\n\n // #region INJECT\n protected elementRef = inject(ElementRef);\n protected dragDropService = inject(MoLibsSharedDragDropService);\n protected destroyRef = inject(DestroyRef);\n ngAfterViewInit(): void {\n this.dragDropService.OnDragging.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((eventDragging: IDragging) => this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll()));\n this.dragDropService.OnDragEnd.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n clearInterval(this.intervalScrollToElement());\n if (this.virtualScrollPageInfo()) {\n const firstElement = get<any>(this.virtualScrollerComponent(), 'element')?.nativeElement.firstElementChild;\n const isHorizontal = get<any>(this.virtualScrollerComponent(), '_horizontal');\n if (isHorizontal) {\n firstElement.style.transform = `scaleX(${this.virtualScrollPageInfo()?.scrollEndPosition})`;\n }\n if (!isHorizontal) {\n firstElement.style.transform = `scaleY(${this.virtualScrollPageInfo()?.scrollEndPosition})`;\n }\n this.virtualScrollPageInfo.set(undefined);\n }\n this.stopScroll.set(false);\n });\n this.dragDropService.OnDragStart.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.virtualScrollerComponent) {\n this.virtualScrollerComponent()?.scrollToIndex(0);\n }\n });\n if (!this.virtualScrollerComponent) {\n return;\n }\n this.virtualScrollerComponent()\n ?.vsChange.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((pageInfo) => {\n const items = get<any>(this.virtualScrollerComponent, '_items');\n\n if (items && items.length === pageInfo.endIndex) {\n this.virtualScrollPageInfo.set(pageInfo);\n const elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n const isHorizontal = get<any>(this.virtualScrollerComponent, '_horizontal');\n\n if (isHorizontal && pageInfo.scrollEndPosition < elementSetScroll.offsetWidth + elementSetScroll.scrollLeft + 3) {\n this.stopScroll.set(true);\n clearInterval(this.intervalScrollToElement());\n\n return;\n }\n\n if (!isHorizontal && pageInfo.scrollEndPosition < elementSetScroll.offsetHeight + elementSetScroll.scrollTop + 3) {\n this.stopScroll.set(true);\n clearInterval(this.intervalScrollToElement());\n\n return;\n }\n }\n this.stopScroll.set(false);\n });\n }\n\n /* FUNCTIONS */\n protected checkAndScrollElementToPosition(eventDragging: IDragging, ignoreAutoScroll?: boolean) {\n let elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n\n if (ignoreAutoScroll || !checkMouseOverInContainer(eventDragging.mousePosition, elementSetScroll)) {\n return;\n }\n const rectElement = cloneIBoundingClientRect(this.elementRef.nativeElement.getBoundingClientRect());\n\n if (this.rootElementScroll()) {\n const rectElementScroll = this.rootElementScroll()?.getBoundingClientRect() as IBoundingClientRect;\n\n rectElement.left = rectElementScroll.left;\n rectElement.top = rectElementScroll.top;\n }\n\n const { width, height, top, left } = rectElement;\n const { clientX, clientY } = eventDragging.mousePosition;\n const limitLeft = left + elementSetScroll.offsetWidth;\n const limitTop = top + elementSetScroll.offsetHeight;\n\n clearInterval(this.intervalScrollToElement());\n if ((clientX < left || clientX > left + width) && (clientY < top || clientY > top + height)) {\n return;\n }\n\n this.intervalScrollToElement.set(\n setInterval(() => {\n elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n let directionTop = 0;\n let directionLeft = 0;\n\n if (top <= clientY && clientY <= top + this.widthZoneDetect()) {\n elementSetScroll.scrollTop -= this.movementLength();\n directionTop = -1;\n }\n\n if (limitTop - this.widthZoneDetect() <= clientY && clientY <= limitTop) {\n if (this.stopScroll()) {\n return;\n }\n elementSetScroll.scrollTop += this.movementLength();\n directionTop = 1;\n }\n\n if (limitLeft - this.widthZoneDetect() <= clientX && clientX <= limitLeft) {\n if (this.stopScroll()) {\n return;\n }\n elementSetScroll.scrollLeft += this.movementLength();\n directionLeft = +1;\n }\n if (left <= clientX && clientX <= left + this.widthZoneDetect()) {\n elementSetScroll.scrollLeft -= this.movementLength();\n directionLeft = -1;\n }\n\n if (elementSetScroll.scrollLeft && elementSetScroll.scrollLeft + elementSetScroll.offsetWidth >= elementSetScroll.scrollWidth) {\n elementSetScroll.scrollLeft -= elementSetScroll.scrollLeft + elementSetScroll.offsetWidth - elementSetScroll.scrollWidth;\n }\n\n if (elementSetScroll.scrollTop && elementSetScroll.scrollTop + elementSetScroll.offsetHeight >= elementSetScroll.scrollHeight) {\n elementSetScroll.scrollTop -= elementSetScroll.scrollTop + elementSetScroll.offsetHeight - elementSetScroll.scrollHeight;\n }\n\n if (\n (directionTop < 0 && !elementSetScroll.scrollTop) ||\n (!elementSetScroll.scrollLeft && directionLeft < 0) ||\n (directionTop && elementSetScroll.scrollHeight <= elementSetScroll.scrollTop + elementSetScroll.offsetHeight + 3) ||\n (directionLeft && elementSetScroll.scrollWidth <= elementSetScroll.scrollLeft + elementSetScroll.offsetWidth + 3)\n ) {\n return clearInterval(this.intervalScrollToElement());\n }\n }, 10)\n );\n }\n}\n","import { AfterViewInit, ChangeDetectorRef, Directive, effect, inject, input, model, output, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { checkMouseOverInContainer, cloneDeep, get, set, uuid } from '@libs-ui/utils';\nimport { Observable, debounceTime, filter } from 'rxjs';\nimport { styleContainer } from './defines/css.define';\nimport { LibsUiComponentsDragScrollDirective } from './drag-scroll.directive';\nimport { IDragDropFunctionControlEvent, IDragEnd, IDragLeave, IDragOver, IDragStart, IDragging, IDrop } from './interfaces/event.interface';\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsDragContainerDirective]',\n standalone: true,\n})\nexport class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDragScrollDirective implements AfterViewInit {\n // #region PROPERTY\n private groupID = signal<string>(uuid());\n private isDragOver = signal<boolean>(false);\n private cdr = inject(ChangeDetectorRef);\n\n // #region INPUT\n readonly disableDragContainer = input<boolean>();\n readonly mode = input<string, 'move' | 'copy'>('move', { transform: (value) => value ?? 'move' });\n readonly directionDrag = input<'horizontal' | 'vertical'>();\n readonly viewEncapsulation = input<'emulated' | 'none', 'emulated' | 'none' | undefined>('emulated', { transform: (value) => value ?? 'emulated' });\n readonly acceptDragSameGroup = input<boolean, boolean | undefined>(false, { transform: (value) => value ?? false });\n readonly placeholder = input<boolean, boolean | undefined>(true, { transform: (value) => value ?? true });\n readonly groupName = input<string, string | undefined>('groupDragAndDropDefault', { transform: (value) => value ?? 'groupDragAndDropDefault' }); // nếu các group có tên trùng nhau sẽ được drop\n readonly dropToGroupName = input<Array<string> | null>(null); // nếu item trong các group A được drop vào group B nhưng group B không được drop vào group A\n readonly items = model.required<Array<unknown>>();\n readonly stylesOverride = input<Array<{ className: string; styles: string }>>();\n\n // #region OUTPUT\n readonly outDragStartContainer = output<IDragStart>();\n readonly outDragOverContainer = output<IDragOver>();\n readonly outDragLeaveContainer = output<IDragLeave>();\n readonly outDragEndContainer = output<IDragEnd>();\n readonly outDroppedContainer = output<IDrop>();\n readonly outDroppedContainerEmpty = output<IDrop>();\n readonly outFunctionControl = output<IDragDropFunctionControlEvent>();\n\n constructor() {\n super();\n const element = this.elementRef.nativeElement as HTMLElement;\n const container: { element: HTMLElement; elementScroll?: HTMLElement } = { element };\n\n this.dragDropService.Container().set(this.groupID(), container);\n\n effect(() => {\n const elementScroll = this.rootElementScroll();\n if (!elementScroll) {\n return;\n }\n untracked(() => {\n set(container, 'elementScroll', elementScroll);\n });\n });\n\n effect(() => {\n if (this.directionDrag() && this.elementRef.nativeElement) {\n this.setAttributeElementAndItemDrag(this.elementRef.nativeElement);\n }\n });\n effect(() => {\n if (this.disableDragContainer() && this.elementRef.nativeElement) {\n this.setAttributeElementAndItemDrag(this.elementRef.nativeElement);\n }\n });\n }\n\n override ngAfterViewInit(): void {\n this.outFunctionControl.emit(this.FunctionsControl);\n\n this.outDroppedContainer.subscribe((eventDropped) => {\n this.dragDropService.OnDropContainer.next(eventDropped);\n });\n\n this.destroyRef.onDestroy(() => {\n if (indexSpliceListTo > -1) {\n this.items.update((items) => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n }\n\n this.dragDropService.Container().delete(this.groupID());\n });\n const elementContainer = this.elementRef.nativeElement as HTMLElement;\n\n this.initStyleAndAttribute(elementContainer, true);\n this.dragDropService.OnItemInit.pipe(\n debounceTime(250),\n filter((groupName) => groupName === this.groupName()),\n takeUntilDestroyed(this.destroyRef)\n ).subscribe(() => this.initStyleAndAttribute(elementContainer));\n const styleTag = document.createElement('style');\n\n styleTag.textContent = styleContainer(this.stylesOverride() || [], this.viewEncapsulation(), this.groupID());\n elementContainer.appendChild(styleTag);\n elementContainer.classList.add(this.dragDropService.ClassContainerDefine);\n\n const handlerDragStart = (eventDragStart: IDragStart) => {\n this.setAttributeElementAndItemDrag(elementContainer, true);\n if (this.groupID() === eventDragStart.elementDrag.getAttribute('groupID')) {\n this.outDragStartContainer.emit({ ...eventDragStart, itemDragInfo: this.dragDropService.ItemDragInfo });\n }\n };\n\n const storeIndex = { indexDrag: -1, indexDragOver: -1 };\n let indexSpliceListTo = -1;\n const handlerDragOver = (eventDragOver: IDragOver) => {\n const { elementDrag, elementDragOver } = eventDragOver;\n\n if (this.disableDragContainer() || !this.dragDropService.checkElementOverAcceptElementDrag(this.groupName(), elementDrag.getAttribute('groupName'), elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n const indexDrag = Number(elementDrag.getAttribute('index')).valueOf();\n const indexDragOver = Number(elementDragOver.getAttribute('index')).valueOf();\n const idGroupElementDrag = elementDrag.getAttribute('groupID');\n const idGroupElementDragOver = elementDragOver.getAttribute('groupID');\n\n if (this.groupID() !== idGroupElementDrag || idGroupElementDrag !== idGroupElementDragOver) {\n // xử lý cho item drag over qua 1 item khác container\n if (idGroupElementDragOver === this.groupID() && this.placeholder()) {\n const item = this.mode() === 'copy' ? cloneDeep(this.dragDropService.ItemDragInfo?.item) : this.dragDropService.ItemDragInfo?.item;\n this.items.update((items) => {\n if (indexSpliceListTo >= 0) {\n items.splice(indexSpliceListTo, 1);\n }\n items.splice(indexDragOver, 0, item);\n return [...items];\n });\n indexSpliceListTo = indexDragOver;\n this.cdr.detectChanges();\n this.setAttributeElementAndItemDrag(elementContainer, false, indexSpliceListTo);\n }\n\n return;\n }\n\n if (\n !this.acceptDragSameGroup() ||\n indexDrag < 0 ||\n indexDragOver < 0 ||\n !this.items().length ||\n indexDrag > this.items().length ||\n indexDragOver > this.items().length ||\n (storeIndex.indexDrag === indexDrag && storeIndex.indexDragOver === indexDragOver)\n ) {\n return;\n }\n // xử lý cho item drag over qua 1 item cùng container\n const itemDrag = this.items()[indexDrag];\n\n this.setAnimationElementDragOver(indexDrag, indexDragOver, elementDragOver);\n storeIndex.indexDrag = indexDrag;\n storeIndex.indexDragOver = indexDragOver;\n this.items.update((items) => {\n items.splice(indexDrag, 1);\n items.splice(indexDragOver, 0, itemDrag);\n return [...items];\n });\n elementDrag.setAttribute('index', indexDragOver.toString());\n this.cdr.detectChanges();\n this.setAttributeElementAndItemDrag(elementContainer);\n };\n\n const removePlaceholderDrag = (eventDrag: IDragEnd, isDragging?: boolean) => {\n clearInterval(this.intervalScrollToElement());\n storeIndex.indexDrag = -1;\n storeIndex.indexDragOver = -1;\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n\n if (!checkMouseOverInContainer(eventDrag.mousePosition, this.rootElementScroll() || elementContainer)) {\n const childElementIndex = Array.from<HTMLElement>(childrenElement).findIndex((child) => child.classList.contains('libs-ui-drag-drop-item-drop-placeholder'));\n\n if (childElementIndex >= 0 && this.groupID() !== eventDrag.elementDrag.getAttribute('groupID')) {\n this.items.update((items) => {\n items.splice(childElementIndex, 1);\n return [...items];\n });\n }\n indexSpliceListTo = -1;\n\n this.removeAttributes(elementContainer, isDragging);\n this.setIndexElement(elementContainer);\n\n return;\n }\n if (indexSpliceListTo >= 0) {\n this.items.update((items) => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n }\n indexSpliceListTo = -1;\n };\n\n const handlerDragging = (eventDragging: IDragging) => {\n this.setAttributeElementAndItemDrag(elementContainer);\n const { elementDrag } = eventDragging;\n const fieldIdItem = elementDrag.getAttribute('field_id');\n const idItemDrag = elementDrag.getAttribute('item_id');\n\n if (fieldIdItem && idItemDrag && this.items().find((item) => get(item, fieldIdItem) === idItemDrag)) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n const childElement = Array.from<HTMLElement>(childrenElement).find((child) => child.getAttribute('item_id') === idItemDrag);\n\n if (this.items() === eventDragging.itemDragInfo?.itemsDrag() && childElement && !childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder') && !childElement.getAttribute(this.dragDropService.TargetItemDragFlag)) {\n childElement.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');\n this.groupID.set(elementDrag.getAttribute('groupID') || '');\n styleTag.remove();\n styleTag.textContent = styleContainer(this.stylesOverride() || [], this.viewEncapsulation(), this.groupID());\n elementContainer.appendChild(styleTag);\n this.setAttributeElementAndItemDrag(elementContainer, true);\n }\n }\n\n if (this.disableDragContainer()) {\n return;\n }\n\n if (this.groupID() === elementDrag.getAttribute('groupID') && !this.acceptDragSameGroup()) {\n this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll() || !this.acceptDragSameGroup());\n return;\n }\n\n if (!checkMouseOverInContainer(eventDragging.mousePosition, this.rootElementScroll() || elementContainer)) {\n if (this.isDragOver()) {\n this.isDragOver.set(false);\n this.outDragLeaveContainer.emit({ ...eventDragging, elementDragLeave: elementContainer });\n }\n\n return removePlaceholderDrag(eventDragging, true);\n }\n this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll());\n\n // Đoạn code xử lý cho việc kéo một element vào 1 container nhưng container không có item hoặc item drag không over qua item trong container\n if (!this.isDragOver()) {\n elementContainer.classList.add('libs-ui-drag-drop-container-dragover');\n this.isDragOver.set(true);\n this.outDragOverContainer.emit({ ...eventDragging, elementDragOver: elementContainer });\n }\n const eventDragOver = { ...eventDragging, elementDragOver: elementContainer };\n\n if (!this.items().length) {\n eventDragOver.elementDragOver = {\n getAttribute: (name: string) => {\n if (name === 'groupID') {\n return this.groupID();\n }\n if (name !== 'index') {\n return null;\n }\n\n return 0;\n },\n } as unknown as HTMLElement;\n this.dragDropService.OnDragOver.next(eventDragOver);\n\n return;\n }\n\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let childElement = Array.from<HTMLElement>(childrenElement).find((child) => checkMouseOverInContainer(eventDragging.mousePosition, child));\n\n if (childElement) {\n // nếu tìm thấy thì sẽ nhận qua sự kiện của drag-item.directive emit\n return;\n }\n childElement = Array.from<HTMLElement>(childrenElement).pop();\n\n if (childElement) {\n eventDragOver.elementDragOver = childElement;\n this.dragDropService.OnDragOver.next(eventDragOver);\n }\n };\n\n const handlerDragEnd = (eventDragEnd: IDragEnd) => {\n if (this.disableDragContainer()) {\n return;\n }\n let rect = undefined;\n\n if (this.rootElementScroll() || elementContainer) {\n rect = (this.rootElementScroll() || elementContainer)?.getBoundingClientRect();\n }\n removePlaceholderDrag(eventDragEnd);\n const { elementDrag, mousePosition, itemDragInfo } = eventDragEnd;\n\n if (this.groupID() === elementDrag.getAttribute('groupID')) {\n this.outDragEndContainer.emit({ ...eventDragEnd });\n }\n if (!checkMouseOverInContainer(mousePosition, this.rootElementScroll() || elementContainer, rect)) {\n return;\n }\n const eventDrop = { elementDrag: elementDrag, elementDrop: elementContainer, itemDragInfo: itemDragInfo };\n\n if (this.disableDragContainer() || !this.dragDropService.checkElementOverAcceptElementDrag(this.groupName(), elementDrag.getAttribute('groupName'), elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n const childElement = Array.from<HTMLElement>(childrenElement).find((child) => checkMouseOverInContainer(mousePosition, child));\n\n if (childElement) {\n eventDrop.elementDrop = childElement;\n this.dragDropService.OnDrop.next(eventDrop);\n\n return;\n }\n eventDrop.elementDrop = {\n getAttribute: (name: string) => {\n if (name === 'dropContainer') {\n return true;\n }\n if (name === 'groupID') {\n return this.groupID();\n }\n if (name !== 'index') {\n return null;\n }\n\n return childrenElement.length;\n },\n } as unknown as HTMLElement;\n this.dragDropService.OnDrop.next(eventDrop);\n };\n\n const handlerDrop = (eventDrop: IDrop) => {\n if (this.disableDragContainer()) {\n return;\n }\n const { elementDrag, elementDrop, itemDragInfo } = eventDrop;\n\n if (this.groupID() === elementDrag.getAttribute('groupID') && this.groupID() === elementDrop.getAttribute('groupID')) {\n if (itemDragInfo) {\n itemDragInfo.indexDrop = Number(elementDrop.getAttribute('index')).valueOf();\n itemDragInfo.itemsDrop = this.items;\n itemDragInfo.containerDrop = elementContainer;\n }\n if (this.acceptDragSameGroup()) {\n this.outDroppedContainer.emit(eventDrop);\n }\n this.removeAttributes(elementContainer);\n this.setIndexElement(elementContainer);\n return;\n }\n\n if (this.groupID() !== elementDrop.getAttribute('groupID') || elementDrag.getAttribute('groupID') === elementDrop.getAttribute('groupID')) {\n return;\n }\n const indexDragOver = this.groupID() !== elementDrag.getAttribute('groupID') ? Number(elementDrop.getAttribute('index')).valueOf() : Number(elementDrop.getAttribute('index')).valueOf() - (elementDrop.getAttribute('dropContainer') ? 0 : 1);\n const item = this.mode() === 'copy' ? cloneDeep(itemDragInfo?.item) : itemDragInfo?.item;\n\n if (itemDragInfo) {\n itemDragInfo.indexDrop = indexDragOver;\n itemDragInfo.itemsDrop = this.items;\n itemDragInfo.containerDrop = elementContainer;\n }\n\n if (!this.items().length) {\n this.outDroppedContainerEmpty.emit(eventDrop);\n }\n\n this.items.update((items) => {\n items.splice(indexDragOver, 0, item);\n return [...items];\n });\n if (itemDragInfo && itemDragInfo.itemsMove && itemDragInfo.itemsMove()) {\n itemDragInfo.itemsDrag.set([...itemDragInfo.itemsMove()]);\n this.setAttributeElementAndItemDrag(elementContainer);\n }\n this.outDroppedContainer.emit(eventDrop);\n this.removeAttributes(elementContainer);\n this.setIndexElement(elementContainer);\n };\n\n [\n {\n name: 'OnDragStart',\n event: this.dragDropService.OnDragStart,\n functionCall: handlerDragStart,\n },\n {\n name: 'OnDragOver',\n event: this.dragDropService.OnDragOver,\n functionCall: handlerDragOver,\n },\n {\n name: 'OnDragging',\n event: this.dragDropService.OnDragging,\n functionCall: handlerDragging,\n },\n {\n name: 'OnDragEnd',\n event: this.dragDropService.OnDragEnd,\n functionCall: handlerDragEnd,\n },\n {\n name: 'OnDrop',\n event: this.dragDropService.OnDrop,\n functionCall: handlerDrop,\n },\n ].forEach((item: { name: string; event: Observable<unknown>; functionCall: object }) => item.event.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(item.functionCall));\n }\n\n public get FunctionsControl(): IDragDropFunctionControlEvent {\n return {\n setAttributeElementAndItemDrag: () => this.setAttributeElementAndItemDrag(this.elementRef.nativeElement),\n };\n }\n\n /* */\n private async setAttributeElementAndItemDrag(elementContainer: HTMLElement, setItemDrag?: boolean, indexInsert?: number) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let index = -1;\n\n elementContainer.setAttribute('groupID', this.groupID());\n elementContainer.removeAttribute('disableDragContainer');\n\n if (this.disableDragContainer()) {\n elementContainer.setAttribute('disableDragContainer', `${this.disableDragContainer()}`);\n }\n if (this.groupName()) {\n elementContainer.setAttribute('groupName', this.groupName() || '');\n }\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (!childElement.hasAttribute('groupName') || childElement.getAttribute('groupName') === this.groupName()) {\n childElement.setAttribute('groupID', this.groupID());\n }\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n index += 1;\n childElement.setAttribute('index', `${index}`);\n childElement.removeAttribute('disableDragContainer');\n if (this.disableDragContainer()) {\n childElement.setAttribute('disableDragContainer', `${this.disableDragContainer()}`);\n }\n if (this.groupName() && !childElement.hasAttribute('groupName')) {\n childElement.setAttribute('groupName', this.groupName() || '');\n }\n if (this.placeholder()) {\n childElement.setAttribute('placeholder', `${this.placeholder()}`);\n }\n if (this.dropToGroupName()) {\n childElement.setAttribute('dropToGroupName', `${this.dropToGroupName()?.join(';')}`);\n }\n if (indexInsert === index && this.placeholder()) {\n if (!childElement.classList.contains('libs-ui-drag-drop-item-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-placeholder');\n }\n if (!childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-drop-placeholder');\n }\n }\n\n if (setItemDrag && childElement.getAttribute(this.dragDropService.TargetItemDragFlag) && this.items().length >= index) {\n if (this.placeholder()) {\n if (!childElement.classList.contains('libs-ui-drag-drop-item-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-placeholder');\n }\n if (!childElement.classList.contains('libs-ui-drag-drop-item-origin-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-origin-placeholder');\n }\n }\n\n this.dragDropService.ItemDragInfo = { item: this.items()[index] as object, indexDrag: index, itemsDrag: this.items, containerDrag: elementContainer, itemsMove: signal([...this.items()]) };\n if (this.mode() === 'move') {\n this.dragDropService.ItemDragInfo.itemsMove?.update((items) => {\n items.splice(index, 1);\n return [...items];\n });\n }\n }\n });\n }\n\n private initStyleAndAttribute(elementContainer: HTMLElement, hasRemoveAttribute = false) {\n this.setAttributeElementAndItemDrag(elementContainer);\n if (hasRemoveAttribute) {\n this.removeAttributes(elementContainer);\n }\n this.setIndexElement(elementContainer);\n }\n\n private setAnimationElementDragOver(indexDrag: number, indexDragOver: number, elementDragOver: HTMLElement) {\n if (!this.directionDrag() || !elementDragOver) {\n return;\n }\n if (this.directionDrag() === 'vertical') {\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-bottom');\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-top');\n if (indexDrag > indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-bottom');\n }\n if (indexDrag < indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-top');\n }\n\n return;\n }\n\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-left');\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-right');\n if (indexDrag > indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-right');\n }\n if (indexDrag < indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-left');\n }\n }\n\n private setIndexElement(elementContainer: HTMLElement) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let index = -1;\n\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n index += 1;\n childElement.setAttribute('index', `${index}`);\n });\n }\n\n private removeAttributes(elementContainer: HTMLElement, ignoreRemoveClassItemOriginPlaceholder?: boolean) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n\n elementContainer.classList.remove('libs-ui-drag-drop-container-dragover');\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n childElement.removeAttribute('index');\n if (!this.dropToGroupName() || !this.dropToGroupName()?.length) {\n childElement.removeAttribute('dropToGroupName');\n }\n if (!this.placeholder()) {\n childElement.removeAttribute('placeholder');\n }\n if (this.placeholder()) {\n childElement.classList.remove('libs-ui-drag-drop-item-placeholder');\n if (!ignoreRemoveClassItemOriginPlaceholder) {\n childElement.classList.remove('libs-ui-drag-drop-item-origin-placeholder');\n }\n childElement.classList.remove('libs-ui-drag-drop-item-drop-placeholder');\n }\n });\n }\n}\n","import { AfterViewInit, DestroyRef, Directive, inject, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { cloneIBoundingClientRect, getViewport } from '@libs-ui/utils';\nimport { fromEvent, takeUntil, tap } from 'rxjs';\nimport { MoLibsSharedDragDropService } from './drag-drop.service';\nimport { IDragEnd } from './interfaces/event.interface';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiDragItemInContainerVirtualScrollDirective]',\n standalone: true,\n})\nexport class LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit {\n // #region OUTPUT\n readonly outDragEndContainer = output<IDragEnd>();\n\n // #region INJECT\n protected dragDropService = inject(MoLibsSharedDragDropService);\n protected readonly destroyRef = inject(DestroyRef);\n\n ngAfterViewInit(): void {\n const addClass = (ignoreUserSelectNone: boolean) => {\n if (!ignoreUserSelectNone) {\n document.body.classList.add('!select-none');\n }\n document.body.classList.add('!cursor-move');\n };\n const removeClass = (ignoreUserSelectNone: boolean) => {\n if (!ignoreUserSelectNone) {\n document.body.classList.remove('!select-none');\n }\n document.body.classList.remove('!cursor-move');\n };\n this.dragDropService.OnDragEnd.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((e) => {\n this.outDragEndContainer.emit(e);\n });\n this.dragDropService.OnDragItemInContainerVirtualScroll.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((dragItemInContainerVirtualScrollEvent) => {\n addClass(dragItemInContainerVirtualScrollEvent.ignoreUserSelectNone);\n const stopEventMouse = (mouseEvent: MouseEvent) => {\n if (!dragItemInContainerVirtualScrollEvent.ignoreStopEvent) {\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n }\n };\n const documentMouseUp = fromEvent<MouseEvent>(document, 'mouseup').pipe(\n tap((eventMouseUp) => {\n this.updateMouseEventsWhenMoveOverIframe('auto');\n stopEventMouse(eventMouseUp);\n const mousePosition = { clientX: eventMouseUp.clientX, clientY: eventMouseUp.clientY };\n\n if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {\n const result = this.getClientPosition(\n dragItemInContainerVirtualScrollEvent.elementDrag,\n mousePosition,\n dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft,\n dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop,\n dragItemInContainerVirtualScrollEvent.dragBoundary,\n dragItemInContainerVirtualScrollEvent.elementContainer\n );\n\n mousePosition.clientX = result.clientX;\n mousePosition.clientY = result.clientY;\n }\n const dragEndEvent = { mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.ItemDragInfo = undefined;\n this.dragDropService.OnDragEnd.next(dragEndEvent);\n dragItemInContainerVirtualScrollEvent.elementDrag.remove();\n removeClass(dragItemInContainerVirtualScrollEvent.ignoreUserSelectNone);\n })\n );\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(\n tap((eventMousemove) => {\n stopEventMouse(eventMousemove);\n const { clientX, clientY } = eventMousemove;\n const mousePosition = { clientX, clientY };\n\n const result = this.getClientPosition(\n dragItemInContainerVirtualScrollEvent.elementDrag,\n mousePosition,\n dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft,\n dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop,\n dragItemInContainerVirtualScrollEvent.dragBoundary,\n dragItemInContainerVirtualScrollEvent.elementContainer\n );\n const elementKeepContainer = result.elementKeepContainer;\n const left = result.clientX - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft;\n const top = result.clientY - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop;\n\n if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {\n if (clientX < result.viewport.left) {\n mousePosition.clientX = result.viewport.left;\n }\n if (clientX > result.viewport.width) {\n mousePosition.clientX = result.viewport.width;\n }\n if (clientY < result.viewport.top) {\n mousePosition.clientY = result.viewport.top;\n }\n if (clientY > result.viewport.height) {\n mousePosition.clientY = result.viewport.height;\n }\n }\n dragItemInContainerVirtualScrollEvent.elementDrag.style.left = `${left}px`;\n dragItemInContainerVirtualScrollEvent.elementDrag.style.top = `${top}px`;\n\n this.dragDropService.OnDragging.next({ mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo });\n }),\n takeUntil(documentMouseUp),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe();\n });\n }\n\n /* FUNCTIONS */\n\n protected getClientPosition(\n element: HTMLElement,\n mousePosition: { clientX: number; clientY: number },\n distanceStartElementAndMouseLeft: number,\n distanceStartElementAndMouseTop: number,\n dragBoundary?: boolean,\n elementContainer?: HTMLElement\n ): { clientX: number; clientY: number; elementKeepContainer: boolean; viewport: IBoundingClientRect } {\n let viewport = getViewport() as IBoundingClientRect;\n const rectElement = element.getBoundingClientRect();\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n const containerItem = elementContainer || containerById?.elementScroll || containerById?.element || document.body;\n let { clientX, clientY } = mousePosition;\n\n viewport.left = 0;\n viewport.top = 0;\n if (dragBoundary) {\n viewport = cloneIBoundingClientRect(containerItem.getBoundingClientRect());\n viewport.height = viewport.top + viewport.height;\n viewport.width = viewport.left + viewport.width;\n }\n let elementKeepContainer = false;\n\n if ((clientX > viewport.width && clientY > viewport.height) || (clientX < viewport.left && clientY < viewport.top)) {\n elementKeepContainer = true;\n }\n\n if (clientX + (rectElement.width - distanceStartElementAndMouseLeft) > viewport.width) {\n clientX -= clientX + (rectElement.width - distanceStartElementAndMouseLeft) - viewport.width;\n }\n if (clientY + (rectElement.height - distanceStartElementAndMouseTop) > viewport.height) {\n clientY -= clientY + (rectElement.height - distanceStartElementAndMouseTop) - viewport.height;\n }\n if (clientX - distanceStartElementAndMouseLeft < (dragBoundary && containerItem ? viewport.left : 0)) {\n clientX = (dragBoundary && containerItem ? viewport.left : 0) + distanceStartElementAndMouseLeft;\n }\n if (clientY - distanceStartElementAndMouseTop < (dragBoundary && containerItem ? viewport.top : 0)) {\n clientY = (dragBoundary && containerItem ? viewport.top : 0) + distanceStartElementAndMouseTop;\n }\n\n return { clientX, clientY, elementKeepContainer, viewport };\n }\n\n protected updateMouseEventsWhenMoveOverIframe(pointerEvents: 'none' | 'auto') {\n const frames = document.getElementsByTagName('iframe');\n\n if (!frames?.length) {\n return;\n }\n\n for (let i = 0; i < frames.length; ++i) {\n frames[i].style.pointerEvents = pointerEvents;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, Directive, ElementRef, effect, inject, input, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { checkMouseOverInContainer, checkViewInScreen, get, getDragEventByElement, getViewport } from '@libs-ui/utils';\nimport { fromEvent, tap, throttleTime } from 'rxjs';\nimport { LibsUiDragItemInContainerVirtualScrollDirective } from './drag-item-in-container-virtual-scroll.directive';\nimport { IDragEnd, IDragLeave, IDragOver, IDragStart, IDrop } from './interfaces/event.interface';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiDragItemDirective]',\n standalone: true,\n})\nexport class LibsUiDragItemDirective extends LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit {\n // #region PROPERTY\n private isDragOver = signal<boolean>(false);\n private isDragging = signal<boolean>(false);\n\n // #region INPUT\n //setup 3 field phía dưới nếu đang sử dụng item trong virtual-scroll\n readonly fieldId = input<string>('');\n readonly item = input<any>(undefined);\n readonly itemInContainerVirtualScroll = input<boolean>();\n //----------------------------------\n readonly throttleTimeHandlerDraggingEvent = input<number, number | undefined>(0, { transform: (value) => value || 0 });\n readonly ignoreStopEvent = input<boolean>();\n readonly onlyMouseDownStopEvent = input<boolean>();\n readonly dragRootElement = input<boolean>();\n readonly dragBoundary = input<boolean>();\n readonly dragBoundaryAcceptMouseLeaveContainer = input<boolean>();\n readonly elementContainer = input<HTMLElement>();\n readonly zIndex = input<number, number | undefined>(1300, { transform: (value) => value ?? 1300 });\n readonly disable = input<boolean>();\n readonly ignoreUserSelectNone = input<boolean>();\n\n // #region OUTPUT\n readonly outDragStart = output<IDragStart>();\n readonly outDragOver = output<IDragOver>();\n readonly outDragLeave = output<IDragLeave>();\n readonly outDragEnd = output<IDragEnd>();\n readonly outDropped = output<IDrop>();\n\n // #region INJECT\n private elementRef = inject(ElementRef);\n\n constructor() {\n super();\n effect(() => {\n if (!this.elementRef?.nativeElement) {\n return;\n }\n const element = this.elementRef.nativeElement as HTMLElement;\n\n element.classList.remove(`${this.dragDropService.ClassItemDefine}-disable`);\n if (this.disable() && !element.classList.contains(`${this.dragDropService.ClassItemDefine}-disable`)) {\n element.classList.add(`${this.dragDropService.ClassItemDefine}-disable`);\n }\n });\n }\n\n override ngAfterViewInit() {\n const element = this.elementRef.nativeElement as HTMLElement;\n if (this.fieldId()) {\n element.setAttribute('field_id', this.fieldId());\n if (this.item()) {\n element.setAttribute('item_id', get(this.item(), this.fieldId()));\n }\n }\n element.classList.add(this.dragDropService.ClassItemDefine);\n this.dragDropService.OnDragging.pipe(throttleTime(this.throttleTimeHandlerDraggingEvent()), takeUntilDestroyed(this.destroyRef)).subscribe((eventDragging) => {\n if (this.disable() || element.getAttribute('disableDragContainer') || (this.fieldId() && this.item() && eventDragging.elementDrag.getAttribute('item_id') === get(this.item(), this.fieldId()))) {\n return;\n }\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n\n if (containerById) {\n if (\n eventDragging.elementKeepContainer ||\n !this.dragDropService.checkElementOverAcceptElementDrag(containerById.element.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('dropToGroupName'))\n ) {\n return;\n }\n }\n if (checkMouseOverInContainer(eventDragging.mousePosition, element) && element !== eventDragging.elementDrag && containerById && checkViewInScreen(containerById.element, element, containerById.elementScroll)) {\n if (this.isDragOver()) {\n return;\n }\n const eventDragOver = { ...eventDragging, elementDragOver: element };\n\n this.dragDropService.OnDragOver.next(eventDragOver);\n this.outDragOver.emit(eventDragOver);\n this.isDragOver.set(true);\n\n return;\n }\n\n if (this.isDragOver()) {\n const eventDragLeave = { ...eventDragging, elementDragLeave: element };\n this.isDragOver.set(false);\n this.dragDropService.OnDragLeave.next(eventDragLeave);\n this.outDragLeave.emit(eventDragLeave);\n }\n });\n\n this.dragDropService.OnDropContainer.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((eventDrop) => {\n if (eventDrop.elementDrop !== element) {\n return;\n }\n const dropEvent = { elementDrag: eventDrop.elementDrag, elementDrop: element, itemDragInfo: eventDrop.itemDragInfo };\n\n this.outDropped.emit(dropEvent);\n });\n const styleTag = document.createElement('style');\n\n styleTag.textContent = `.libs-ui-drag-drop-item-dragging{cursor:move}`;\n let nodeClone = element;\n let distanceStartElementAndMouseLeft = -1;\n let distanceStartElementAndMouseTop = -1;\n let contextMenu = false;\n const stopEventMouse = (mouseEvent: MouseEvent) => {\n if (!this.ignoreStopEvent()) {\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n }\n };\n const updatePositionElementRootAndRemoveNodeClone = () => {\n if (this.dragRootElement()) {\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n\n const containerItem = this.elementContainer() || containerById?.elementScroll || containerById?.element || document.body;\n const rectContainer = containerItem.getBoundingClientRect();\n const rectNodeClone = nodeClone.getBoundingClientRect();\n const numberSub = Number((getComputedStyle(containerItem).border.match(/\\d+px/gi) || ['0'])[0].replace(/\\D+/gi, '')).valueOf();\n\n element.style.left = rectNodeClone.left - rectContainer.left - numberSub + 'px';\n element.style.top = rectNodeClone.top - rectContainer.top - numberSub + 'px';\n element.classList.remove('opacity-0');\n }\n distanceStartElementAndMouseLeft = -1;\n distanceStartElementAndMouseTop = -1;\n nodeClone.remove();\n };\n\n fromEvent(document, 'contextmenu')\n .pipe(\n tap(() => {\n if (this.isDragging()) {\n updatePositionElementRootAndRemoveNodeClone();\n }\n contextMenu = true;\n }),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe();\n\n let ignoreMousedown = false;\n\n getDragEventByElement({\n elementMouseDown: element,\n functionMouseDown: (event: MouseEvent) => {\n this.dragDropService.ItemClick = element;\n contextMenu = false;\n this.updateMouseEventsWhenMoveOverIframe('none');\n if ((this.disable() || element.getAttribute('disableDragContainer') || !this.isDragging() || this.itemInContainerVirtualScroll()) && !this.onlyMouseDownStopEvent()) {\n return;\n }\n stopEventMouse(event);\n },\n functionMouseMove: (event: MouseEvent) => {\n stopEventMouse(event);\n },\n functionMouseUp: (event: MouseEvent) => {\n this.updateMouseEventsWhenMoveOverIframe('auto');\n this.dragDropService.resetItemClick();\n stopEventMouse(event);\n if (this.disable() || element.getAttribute('disableDragContainer') || contextMenu || !this.isDragging()) {\n contextMenu = false;\n\n return;\n }\n contextMenu = false;\n this.isDragging.set(false);\n element.removeAttribute(this.dragDropService.TargetItemDragFlag);\n if (this.itemInContainerVirtualScroll()) {\n return;\n }\n const mousePosition = { clientX: event.clientX, clientY: event.clientY };\n\n if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {\n const result = this.getClientPosition(element, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());\n\n mousePosition.clientX = result.clientX;\n mousePosition.clientY = result.clientY;\n }\n const dragEndEvent = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.ItemDragInfo = undefined;\n this.dragDropService.OnDragEnd.next(dragEndEvent);\n this.outDragEnd.emit(dragEndEvent);\n\n nodeClone.classList.remove('libs-ui-drag-drop-item-dragging');\n if (!this.ignoreUserSelectNone()) {\n nodeClone.classList.remove('select-none');\n }\n styleTag.remove();\n\n updatePositionElementRootAndRemoveNodeClone();\n },\n destroyRef: this.destroyRef,\n })\n .pipe(\n tap((dragMouseEvent: MouseEvent) => {\n const rectElement = element.getBoundingClientRect();\n const viewport = getViewport() as IBoundingClientRect;\n\n if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || (!ignoreMousedown && dragMouseEvent.type === 'mousedown' && rectElement.height + rectElement.top >= viewport.height)) {\n return;\n }\n const { clientX, clientY } = dragMouseEvent;\n\n if (distanceStartElementAndMouseLeft === -1) {\n distanceStartElementAndMouseLeft = clientX - rectElement.left;\n }\n\n if (distanceStartElementAndMouseTop === -1) {\n distanceStartElementAndMouseTop = clientY - rectElement.top;\n }\n })\n )\n .subscribe((dragMouseEvent) => {\n if (this.dragDropService.ItemClick.filter((item) => item !== element).some((item) => element.contains(item))) {\n return;\n }\n if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || dragMouseEvent.type === 'mousedown' || contextMenu || (this.itemInContainerVirtualScroll() && this.isDragging())) {\n return;\n }\n ignoreMousedown = true;\n const { clientX, clientY } = dragMouseEvent;\n const mousePosition = { clientX, clientY };\n const rectElement = element.getBoundingClientRect();\n\n if (!this.isDragging()) {\n this.isDragging.set(true);\n const eventDragStart = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n element.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');\n this.dragDropService.OnDragStart.next(eventDragStart);\n eventDragStart.itemDragInfo = this.dragDropService.ItemDragInfo;\n this.outDragStart.emit(eventDragStart);\n\n nodeClone = element.cloneNode(true) as HTMLElement;\n nodeClone.style.zIndex = `${this.zIndex()}`;\n nodeClone.classList.add('!fixed');\n nodeClone.classList.remove('libs-ui-drag-drop-item-origin-placeholder');\n nodeClone.classList.remove('libs-ui-drag-drop-item-placeholder');\n nodeClone.appendChild(styleTag);\n nodeClone.classList.add('libs-ui-drag-drop-item-dragging');\n nodeClone.style.width = `${rectElement.width}px`;\n nodeClone.style.height = `${rectElement.height}px`;\n nodeClone.style.left = `${-999}px`;\n nodeClone.style.top = `${-999}px`;\n if (!this.ignoreUserSelectNone()) {\n nodeClone.classList.add('select-none');\n }\n document.body.append(nodeClone);\n if (this.dragRootElement()) {\n element.classList.add('opacity-0');\n }\n\n if (this.itemInContainerVirtualScroll()) {\n this.dragDropService.OnDragItemInContainerVirtualScroll.next({\n itemDragInfo: this.dragDropService.ItemDragInfo,\n elementDrag: nodeClone,\n distanceStartElementAndMouseTop,\n distanceStartElementAndMouseLeft,\n elementContainer: this.elementContainer(),\n dragBoundary: this.dragBoundary(),\n dragBoundaryAcceptMouseLeaveContainer: this.dragBoundaryAcceptMouseLeaveContainer(),\n ignoreStopEvent: this.ignoreStopEvent(),\n ignoreUserSelectNone: this.ignoreUserSelectNone() || false,\n });\n\n return;\n }\n }\n const result = this.getClientPosition(nodeClone, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());\n\n const elementKeepContainer = result.elementKeepContainer;\n const left = result.clientX - distanceStartElementAndMouseLeft;\n const top = result.clientY - distanceStartElementAndMouseTop;\n\n if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {\n if (clientX < result.viewport.left) {\n mousePosition.clientX = result.viewport.left;\n }\n if (clientX > result.viewport.width) {\n mousePosition.clientX = result.viewport.width;\n }\n if (clientY < result.viewport.top) {\n mousePosition.clientY = result.viewport.top;\n }\n if (clientY > result.viewport.height) {\n mousePosition.clientY = result.viewport.height;\n }\n }\n nodeClone.style.left = `${left}px`;\n nodeClone.style.top = `${top}px`;\n\n const eventDragging = { mousePosition, elementDrag: nodeClone, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.OnDragging.next(eventDragging);\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsDragContainerDirective } from '../drag-drop.directive';\nimport { LibsUiDragItemDirective } from '../drag-item.directive';\n\ninterface Task {\n id: number;\n title: string;\n description: string;\n status: 'todo' | 'in-progress' | 'done';\n}\n\ninterface Column {\n id: string;\n title: string;\n items: Task[];\n}\n\n@Component({\n selector: 'lib-drag-drop-demo',\n standalone: true,\n imports: [CommonModule, LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective, LibsUiComponentsButtonsButtonComponent],\n template: `\n <div class=\"page-container\">\n <header>\n <h1>Demo Drag and Drop Component</h1>\n <p>Angular component library for drag and drop functionality</p>\n </header>\n\n <main>\n <section class=\"intro-section\">\n <h2>Introduction</h2>\n <p>\n <code>&#64;libs-ui/components-drag-drop</code>\n is a powerful Angular component that enables drag and drop functionality with features like virtual scrolling, multi-selection, and custom boundaries.\n </p>\n </section>\n\n <section class=\"installation-section\">\n <h2>Installation</h2>\n <p>To install the library, use npm or yarn:</p>\n\n <div class=\"install-command\">\n <pre>\n <code>npm install &#64;libs-ui/components-drag-drop</code>\n <libs_ui-components-buttons-button\n [label]=\"'Copy'\"\n (outClick)=\"copyToClipboard('npm install @libs-ui/components-drag-drop')\" />\n </pre>\n </div>\n\n <p>Or with yarn:</p>\n\n <div class=\"install-command\">\n <pre>\n <code>yarn add &#64;libs-ui/components-drag-drop</code>\n <libs_ui-components-buttons-button\n [label]=\"'Copy'\"\n (outClick)=\"copyToClipboard('yarn add @libs-ui/components-drag-drop')\" />\n </pre>\n </div>\n </section>\n\n <section class=\"demo-section\">\n <h2>Live Demo</h2>\n <div class=\"demo-container\">\n <!-- Basic List Demo -->\n <div class=\"demo-example\">\n <h3>Basic List</h3>\n <div class=\"list-container\">\n <div\n LibsUiComponentsDragContainerDirective\n [(items)]=\"basicItems\"\n [acceptDragSameGroup]=\"true\">\n @for (item of basicItems; track item) {\n <div\n class=\"list-item\"\n LibsUiDragItemDirective>\n <span class=\"item-icon\">📋</span>\n <span class=\"item-text\">{{ item }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Kanban Board Demo -->\n <div class=\"demo-example\">\n <h3>Kanban Board</h3>\n <div class=\"kanban-board\">\n @for (column of columns; track column) {\n <div\n class=\"kanban-column\"\n LibsUiComponentsDragContainerDirective\n [(items)]=\"column.items\"\n [groupName]=\"column.id\"\n [dropToGroupName]=\"columnsIds\"\n [acceptDragSameGroup]=\"true\">\n <h4>{{ column.title }}</h4>\n @for (item of column.items; track item) {\n <div\n class=\"kanban-item\"\n LibsUiDragItemDirective>\n <div class=\"kanban-item-header\">\n <span class=\"item-title\">{{ item.title }}</span>\n <span\n class=\"item-status\"\n [class]=\"'status-' + item.status\">\n {{ item.status }}\n </span>\n </div>\n <p class=\"item-description\">{{ item.description }}</p>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Nested Containers Demo -->\n <div class=\"demo-example\">\n <h3>Nested Containers copy</h3>\n <div class=\"nested-container\">\n <div\n LibsUiComponentsDragContainerDirective\n [(items)]=\"nestedItems\"\n [groupName]=\"'parent'\"\n [mode]=\"'copy'\"\n [acceptDragSameGroup]=\"true\">\n @for (item of nestedItems; track item) {\n <div\n class=\"nested-item\"\n LibsUiDragItemDirective>\n <div class=\"nested-item-header\">\n <span class=\"item-title\">{{ item.title }}</span>\n </div>\n <div class=\"nested-item-content\">\n <div\n LibsUiComponentsDragContainerDirective\n [(items)]=\"item.subItems\"\n [groupName]=\"'child'\"\n [acceptDragSameGroup]=\"true\">\n @for (subItem of item.subItems; track subItem) {\n <div\n class=\"sub-item\"\n LibsUiDragItemDirective>\n {{ subItem }}\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"api-doc-section\">\n <h2>API Documentation</h2>\n\n <h3>Inputs</h3>\n <div class=\"table-container\">\n <table class=\"api-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Default</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n @for (input of inputsDoc; track input.name) {\n <tr>\n <td>\n <code>{{ input.name }}</code>\n </td>\n <td>\n <code>{{ input.type }}</code>\n </td>\n <td>{{ input.default }}</td>\n <td>{{ input.description }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <h3>Outputs</h3>\n <div class=\"table-container\">\n <table class=\"api-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n @for (output of outputsDoc; track output.name) {\n <tr>\n <td>\n <code>{{ output.name }}</code>\n </td>\n <td>\n <code>{{ output.type }}</code>\n </td>\n <td>{{ output.description }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </section>\n\n <section class=\"interfaces-section\">\n <h2>Interfaces</h2>\n <div class=\"interface-docs\">\n @for (interfaceItem of interfacesDoc; track interfaceItem.name) {\n <div class=\"interface-item\">\n <h3>{{ interfaceItem.name }}</h3>\n <pre><code>{{interfaceItem.code}}</code></pre>\n <p>{{ interfaceItem.description }}</p>\n </div>\n }\n </div>\n </section>\n\n <section class=\"features-section\">\n <h2>Features</h2>\n <ul>\n @for (feature of features; track feature.id) {\n <li>\n <span class=\"feature-icon\">{{ feature.icon }}</span>\n <div class=\"feature-info\">\n <h3>{{ feature.title }}</h3>\n <p>{{ feature.description }}</p>\n </div>\n </li>\n }\n </ul>\n </section>\n\n <section class=\"usage-section\">\n <h2>Usage</h2>\n <div class=\"code-examples\">\n @for (example of codeExamples; track example.id) {\n <div class=\"code-example\">\n <h3>{{ example.title }}</h3>\n <pre><code [innerHTML]=\"example.code\"></code></pre>\n </div>\n }\n </div>\n </section>\n </main>\n </div>\n `,\n styles: [\n `\n .page-container {\n max-width: 1200px;\n margin: 0 auto;\n padding: 20px;\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n line-height: 1.6;\n color: #333;\n }\n\n header {\n text-align: center;\n padding: 40px 0;\n background-color: #ffffff;\n border-radius: 8px;\n margin-bottom: 30px;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n }\n\n header h1 {\n font-size: 2.5rem;\n color: #2c3e50;\n margin-bottom: 10px;\n }\n\n header p {\n font-size: 1.2rem;\n color: #7f8c8d;\n }\n\n section {\n background-color: #ffffff;\n border-radius: 8px;\n padding: 30px;\n margin-bottom: 30px;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n }\n\n h2 {\n font-size: 1.8rem;\n color: #2c3e50;\n margin-bottom: 20px;\n padding-bottom: 10px;\n border-bottom: 2px solid #ecf0f1;\n }\n\n h3 {\n font-size: 1.4rem;\n color: #34495e;\n margin-bottom: 15px;\n }\n\n h4 {\n font-size: 1.2rem;\n color: #34495e;\n margin-bottom: 10px;\n }\n\n p {\n margin-bottom: 15px;\n }\n\n code {\n font-family: 'Courier New', Courier, monospace;\n background-color: #f7f7f7;\n padding: 2px 5px;\n border-radius: 3px;\n font-size: 0.9em;\n }\n\n pre {\n background-color: #f7f7f7;\n padding: 15px;\n border-radius: 5px;\n overflow-x: auto;\n margin-bottom: 20px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n pre code {\n background-color: transparent;\n padding: 0;\n }\n\n /* Installation section styles */\n .installation-section .install-command {\n position: relative;\n margin-bottom: 20px;\n }\n\n .installation-section .copy-button {\n position: absolute;\n top: 10px;\n right: 10px;\n background: #3498db;\n color: white;\n border: none;\n border-radius: 4px;\n padding: 5px 10px;\n font-size: 0.9rem;\n cursor: pointer;\n transition: background 0.2s;\n }\n\n .installation-section .copy-button:hover {\n background: #2980b9;\n }\n\n /* Demo section styles */\n .demo-container {\n display: grid;\n grid-template-columns: 1fr;\n gap: 30px;\n }\n\n .demo-example {\n background: #f7f7f7;\n padding: 20px;\n border-radius: 8px;\n margin-bottom: 20px;\n }\n\n /* List styles */\n .list-container {\n max-width: 400px;\n margin: 20px auto;\n }\n\n .list-item {\n padding: 12px;\n margin: 8px 0;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n display: flex;\n align-items: center;\n transition:\n transform 0.2s,\n box-shadow 0.2s;\n }\n\n .list-item:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n }\n\n .item-icon {\n margin-right: 12px;\n font-size: 1.2em;\n }\n\n /* Kanban styles */\n .kanban-board {\n display: flex;\n gap: 20px;\n padding: 20px;\n overflow-x: auto;\n }\n\n .kanban-column {\n flex: 1;\n min-width: 300px;\n background: #f5f5f5;\n padding: 15px;\n border-radius: 8px;\n }\n\n .kanban-item {\n background: white;\n padding: 12px;\n margin: 8px 0;\n border-radius: 6px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n\n .kanban-item-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n }\n\n .item-title {\n font-weight: 500;\n }\n\n .item-status {\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 0.8em;\n }\n\n .status-todo {\n background: #ffebee;\n color: #c62828;\n }\n\n .status-in-progress {\n background: #fff3e0;\n color: #ef6c00;\n }\n\n .status-done {\n background: #e8f5e9;\n color: #2e7d32;\n }\n\n .item-description {\n font-size: 0.9em;\n color: #666;\n }\n\n /* Nested containers styles */\n .nested-container {\n max-width: 800px;\n margin: 0 auto;\n }\n\n .nested-item {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n margin: 12px 0;\n overflow: hidden;\n }\n\n .nested-item-header {\n padding: 12px;\n background: #f5f5f5;\n border-bottom: 1px solid #e0e0e0;\n }\n\n .nested-item-content {\n padding: 12px;\n }\n\n .sub-item {\n padding: 8px;\n margin: 4px 0;\n background: #f9f9f9;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n }\n\n /* API documentation styles */\n .api-doc-section {\n margin-bottom: 40px;\n }\n\n .table-container {\n overflow-x: auto;\n margin-bottom: 30px;\n }\n\n .api-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 20px;\n }\n\n .api-table th,\n .api-table td {\n padding: 12px 15px;\n text-align: left;\n border-bottom: 1px solid #e1e1e1;\n }\n\n .api-table th {\n background-color: #f5f5f5;\n font-weight: bold;\n }\n\n .api-table tbody tr:hover {\n background-color: #f9f9f9;\n }\n\n /* Features section */\n .features-section ul {\n list-style: none;\n }\n\n .features-section li {\n display: flex;\n margin-bottom: 25px;\n align-items: flex-start;\n }\n\n .feature-icon {\n font-size: 2rem;\n margin-right: 20px;\n min-width: 40px;\n text-align: center;\n }\n\n .feature-info {\n flex: 1;\n }\n\n /* Code examples */\n .code-examples {\n display: grid;\n grid-template-columns: 1fr;\n gap: 20px;\n }\n\n @media (min-width: 768px) {\n .code-examples {\n grid-template-columns: repeat(2, 1fr);\n }\n }\n\n @media (min-width: 992px) {\n .code-examples {\n grid-template-columns: repeat(3, 1fr);\n }\n }\n\n .code-example {\n border: 1px solid #ecf0f1;\n border-radius: 5px;\n padding: 15px;\n }\n\n /* Responsive adjustments */\n @media (max-width: 768px) {\n header {\n padding: 30px 0;\n }\n\n header h1 {\n font-size: 2rem;\n }\n\n section {\n padding: 20px;\n }\n\n .kanban-board {\n flex-direction: column;\n }\n\n .kanban-column {\n min-width: 100%;\n }\n\n .feature-icon {\n font-size: 1.5rem;\n margin-right: 15px;\n }\n }\n `,\n ],\n})\nexport class LibsUiDragDropDemoComponent {\n // Basic List Items\n basicItems = ['Task 1', 'Task 2', 'Task 3', 'Task 4', 'Task 5'];\n\n // Kanban Board Columns\n columnsIds = ['todo', 'in-progress', 'done'];\n columns: Column[] = [\n {\n id: 'todo',\n title: 'To Do',\n items: [\n {\n id: 1,\n title: 'Implement drag and drop',\n description: 'Add drag and drop functionality to the component',\n status: 'todo',\n },\n {\n id: 2,\n title: 'Add animations',\n description: 'Implement smooth animations for drag and drop',\n status: 'todo',\n },\n ],\n },\n {\n id: 'in-progress',\n title: 'In Progress',\n items: [\n {\n id: 3,\n title: 'Fix styling issues',\n description: 'Resolve CSS conflicts in the component',\n status: 'in-progress',\n },\n ],\n },\n {\n id: 'done',\n title: 'Done',\n items: [\n {\n id: 4,\n title: 'Setup project structure',\n description: 'Initialize the project with necessary configurations',\n status: 'done',\n },\n ],\n },\n ];\n\n // Nested Items\n nestedItems = [\n {\n id: 1,\n title: 'Project A',\n subItems: ['Task 1', 'Task 2', 'Task 3'],\n },\n {\n id: 2,\n title: 'Project B',\n subItems: ['Task 4', 'Task 5'],\n },\n {\n id: 3,\n title: 'Project C',\n subItems: ['Task 6', 'Task 7', 'Task 8'],\n },\n ];\n\n // API Documentation\n inputsDoc = [\n {\n name: 'items',\n type: 'Array<unknown>',\n default: '[]',\n description: 'Array of items to be displayed in the container',\n },\n {\n name: 'mode',\n type: \"'move' | 'copy' | 'deepCopy'\",\n default: \"'move'\",\n description: 'Mode for drag and drop operations',\n },\n {\n name: 'directionDrag',\n type: \"'horizontal' | 'vertical'\",\n default: 'undefined',\n description: 'Direction of drag movement',\n },\n {\n name: 'viewEncapsulation',\n type: \"'emulated' | 'none'\",\n default: \"'emulated'\",\n description: 'View encapsulation mode for styling',\n },\n {\n name: 'disableDragContainer',\n type: 'boolean',\n default: 'undefined',\n description: 'Whether to disable drag operations for the container',\n },\n {\n name: 'acceptDragSameGroup',\n type: 'boolean',\n default: 'false',\n description: 'Whether to accept drag operations within the same group',\n },\n {\n name: 'placeholder',\n type: 'boolean',\n default: 'true',\n description: 'Whether to show placeholder during drag',\n },\n {\n name: 'groupName',\n type: 'string',\n default: \"'groupDragAndDropDefault'\",\n description: 'Name of the group for drag and drop operations',\n },\n {\n name: 'dropToGroupName',\n type: 'Array<string> | null',\n default: 'null',\n description: 'List of group names that can accept drops from this container',\n },\n {\n name: 'stylesOverride',\n type: 'Array<{ className: string, styles: string }>',\n default: 'undefined',\n description: 'Custom styles to override default drag-drop styling',\n },\n ];\n\n outputsDoc = [\n {\n name: 'outDragStartContainer',\n type: 'IDragStart',\n description: 'Event emitted when dragging starts in the container',\n },\n {\n name: 'outDragOverContainer',\n type: 'IDragOver',\n description: 'Event emitted when dragging over the container',\n },\n {\n name: 'outDragLeaveContainer',\n type: 'IDragLeave',\n description: 'Event emitted when dragging leaves the container',\n },\n {\n name: 'outDragEndContainer',\n type: 'IDragEnd',\n description: 'Event emitted when dragging ends in the container',\n },\n {\n name: 'outDroppedContainer',\n type: 'IDrop',\n description: 'Event emitted when an item is dropped in the container',\n },\n {\n name: 'outDroppedContainerEmpty',\n type: 'IDrop',\n description: 'Event emitted when an item is dropped in an empty container',\n },\n {\n name: 'outFunctionControl',\n type: 'IDragDropFunctionControlEvent',\n description: 'Event emitted to control drag-drop functionality',\n },\n ];\n\n // Interface Documentation\n interfacesDoc = [\n {\n name: 'IDragging',\n code: `interface IDragging {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n elementKeepContainer?: boolean;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag operation events, containing information about the dragged element and mouse position',\n },\n {\n name: 'IDragStart',\n code: `interface IDragStart {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag start events, triggered when dragging begins',\n },\n {\n name: 'IDragOver',\n code: `interface IDragOver {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n elementDragOver: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag over events, triggered when an element is dragged over another element',\n },\n {\n name: 'IDragLeave',\n code: `interface IDragLeave {\n elementDrag: HTMLElement;\n elementDragLeave: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag leave events, triggered when a dragged element leaves another element',\n },\n {\n name: 'IDragEnd',\n code: `interface IDragEnd {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag end events, triggered when dragging ends',\n },\n {\n name: 'IDrop',\n code: `interface IDrop {\n elementDrag: HTMLElement;\n elementDrop: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drop events, triggered when an element is dropped',\n },\n {\n name: 'IItemDragInfo',\n code: `interface IItemDragInfo {\n item: object;\n itemsMove?: WritableSignal<Array<unknown>>;\n indexDrag?: number;\n indexDrop?: number;\n itemsDrag: WritableSignal<Array<unknown>>;\n itemsDrop?: WritableSignal<Array<unknown>>;\n containerDrag?: HTMLElement;\n containerDrop?: HTMLElement;\n}`,\n description: 'Interface containing information about the dragged item and its containers',\n },\n {\n name: 'IDragItemInContainerVirtualScroll',\n code: `interface IDragItemInContainerVirtualScroll {\n itemDragInfo?: IItemDragInfo;\n elementDrag: HTMLElement;\n distanceStartElementAndMouseTop: number;\n distanceStartElementAndMouseLeft: number;\n elementContainer?: HTMLElement;\n dragBoundary?: boolean;\n dragBoundaryAcceptMouseLeaveContainer?: boolean;\n ignoreStopEvent?: boolean;\n}`,\n description: 'Interface for virtual scrolling drag operations, containing information about drag boundaries and container elements',\n },\n {\n name: 'IMousePosition',\n code: `interface IMousePosition {\n clientX: number;\n clientY: number;\n}`,\n description: 'Interface representing mouse position coordinates',\n },\n {\n name: 'IDragDropFunctionControlEvent',\n code: `interface IDragDropFunctionControlEvent {\n setAttributeElementAndItemDrag: () => Promise<void>;\n}`,\n description: 'Interface for drag and drop control functions',\n },\n ];\n\n // Features\n features = [\n {\n id: 1,\n icon: '🔄',\n title: 'Flexible Drag and Drop',\n description: 'Support for container-to-container dragging with customizable group names and drop zones',\n },\n {\n id: 2,\n icon: '📜',\n title: 'Virtual Scrolling',\n description: 'Efficient handling of large lists with virtual scrolling support',\n },\n {\n id: 3,\n icon: '🎯',\n title: 'Custom Boundaries',\n description: 'Define custom drag boundaries and drop zones for precise control',\n },\n {\n id: 4,\n icon: '🎨',\n title: 'Styling Options',\n description: 'Customizable styles for drag items and containers',\n },\n ];\n\n // Code Examples\n codeExamples = [\n {\n id: 1,\n title: 'Basic Usage',\n code: `&lt;div LibsUiComponentsDragContainerDirective \n [(items)]=\"items\"\n [groupName]=\"'myGroup'\"\n [acceptDragSameGroup]=\"true\"&gt;\n @for (item of items; track item) {\n &lt;div LibsUiDragItemDirective&gt;\n {{ item }}\n &lt;/div&gt;\n }\n&lt;/div&gt;`,\n },\n {\n id: 2,\n title: 'Container-to-Container',\n code: `&lt;div LibsUiComponentsDragContainerDirective \n [(items)]=\"sourceItems\"\n [groupName]=\"'source'\"&gt;\n @for (item of sourceItems; track item) {\n &lt;div LibsUiDragItemDirective&gt;\n {{ item }}\n &lt;/div&gt;\n }\n&lt;/div&gt;\n\n&lt;div LibsUiComponentsDragContainerDirective \n [(items)]=\"targetItems\"\n [groupName]=\"'target'\"\n [dropToGroupName]=\"['source']\"&gt;\n @for (item of targetItems; track item) {\n &lt;div LibsUiDragItemDirective&gt;\n {{ item }}\n &lt;/div&gt;\n }\n&lt;/div&gt;`,\n },\n ];\n\n /**\n * Copy text to clipboard\n */\n copyToClipboard(text: string) {\n navigator.clipboard.writeText(text).then(\n () => {\n alert('Copied to clipboard');\n },\n (err) => {\n console.error('Could not copy text: ', err);\n }\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}