ngx-kit 9.0.0 → 9.1.0
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.
- package/README.md +1 -1
- package/drag-resize/README.md +6 -5
- package/fesm2022/ngx-kit-drag-resize.mjs +413 -161
- package/fesm2022/ngx-kit-drag-resize.mjs.map +1 -1
- package/fesm2022/ngx-kit-lazy-i18n.mjs +141 -53
- package/fesm2022/ngx-kit-lazy-i18n.mjs.map +1 -1
- package/lazy-i18n/README.md +86 -20
- package/package.json +1 -1
- package/types/ngx-kit-drag-resize.d.ts +13 -4
- package/types/ngx-kit-lazy-i18n.d.ts +83 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-kit-drag-resize.mjs","sources":["../../../projects/libs/drag-resize/utils/check-boundary.ts","../../../projects/libs/drag-resize/drag-preview-ref.ts","../../../projects/libs/drag-resize/drag-ref.ts","../../../projects/libs/drag-resize/utils/element.helper.ts","../../../projects/libs/drag-resize/placeholder-ref.ts","../../../projects/libs/drag-resize/sorting/layout-geometry.ts","../../../projects/libs/drag-resize/utils/scroll-frame.ts","../../../projects/libs/drag-resize/sorting/sort-session.ts","../../../projects/libs/drag-resize/utils/rtl.ts","../../../projects/libs/drag-resize/drop-list-ref.ts","../../../projects/libs/drag-resize/drop-list-group-ref.ts","../../../projects/libs/drag-resize/services/drag-drop.service.ts","../../../projects/libs/drag-resize/utils/auto-scroll.ts","../../../projects/libs/drag-resize/directives/ngx-drag-preview.directive.ts","../../../projects/libs/drag-resize/directives/ngx-draggable.directive.ts","../../../projects/libs/drag-resize/directives/ngx-resizable.directive.ts","../../../projects/libs/drag-resize/directives/ngx-place-holder.directive.ts","../../../projects/libs/drag-resize/directives/ngx-drop-list.directive.ts","../../../projects/libs/drag-resize/directives/ngx-drop-list-group.directive.ts","../../../projects/libs/drag-resize/utils/drag-utils.ts","../../../projects/libs/drag-resize/ngx-kit-drag-resize.ts"],"sourcesContent":["/**\n * Boundary clamping utilities.\n * All functions work purely in viewport (\"client\") coordinates so they can be\n * reused identically for translate-based dragging and left/top-based resizing.\n */\nconst TOLERANCE = 0.5;\n\n/** Clamps a proposed vertical delta so the element's rect stays inside the boundary rect. */\nexport function checkBoundY(\n selfRect: DOMRect,\n boundaryRect: DOMRect | undefined,\n offsetY: number,\n): number {\n if (!boundaryRect) return offsetY;\n const newTop = selfRect.top + offsetY;\n const newBottom = selfRect.bottom + offsetY;\n if (newTop < boundaryRect.top + TOLERANCE) return offsetY + (boundaryRect.top - newTop);\n if (newBottom > boundaryRect.bottom - TOLERANCE)\n return offsetY - (newBottom - boundaryRect.bottom);\n return offsetY;\n}\n\n/** Clamps a proposed horizontal delta so the element's rect stays inside the boundary rect. */\nexport function checkBoundX(\n selfRect: DOMRect,\n boundaryRect: DOMRect | undefined,\n offsetX: number,\n): number {\n if (!boundaryRect) return offsetX;\n const newLeft = selfRect.left + offsetX;\n const newRight = selfRect.right + offsetX;\n if (newLeft < boundaryRect.left + TOLERANCE) return offsetX + (boundaryRect.left - newLeft);\n if (newRight > boundaryRect.right - TOLERANCE) return offsetX - (newRight - boundaryRect.right);\n return offsetX;\n}\n\n/**\n * Clamps a resize result (width/height/left/top, all relative CSS px deltas from the\n * element's start position) so the element never grows/moves outside `boundaryRect`.\n * `startRect` is the element's `getBoundingClientRect()` captured at resize-start.\n */\nexport function clampResizeWithinBoundary(\n boundaryRect: DOMRect | undefined,\n startRect: DOMRect,\n width: number,\n height: number,\n left: number,\n top: number,\n): { width: number; height: number; left: number; top: number } {\n if (!boundaryRect) return { width, height, left, top };\n\n // Viewport position implied by the proposed left/top deltas.\n const viewportLeft = startRect.left + left;\n const viewportTop = startRect.top + top;\n\n let clampedWidth = width;\n let clampedHeight = height;\n let clampedLeft = left;\n let clampedTop = top;\n\n if (viewportLeft < boundaryRect.left) {\n const overflow = boundaryRect.left - viewportLeft;\n clampedLeft = left + overflow;\n clampedWidth = Math.max(0, clampedWidth - overflow);\n }\n if (viewportTop < boundaryRect.top) {\n const overflow = boundaryRect.top - viewportTop;\n clampedTop = top + overflow;\n clampedHeight = Math.max(0, clampedHeight - overflow);\n }\n\n const clampedViewportLeft = startRect.left + clampedLeft;\n const rightEdge = clampedViewportLeft + clampedWidth;\n if (rightEdge > boundaryRect.right) {\n clampedWidth = Math.max(0, boundaryRect.right - clampedViewportLeft);\n }\n\n const clampedViewportTop = startRect.top + clampedTop;\n const bottomEdge = clampedViewportTop + clampedHeight;\n if (bottomEdge > boundaryRect.bottom) {\n clampedHeight = Math.max(0, boundaryRect.bottom - clampedViewportTop);\n }\n\n return { width: clampedWidth, height: clampedHeight, left: clampedLeft, top: clampedTop };\n}\n\n/** Current page zoom level (1 = 100%). Falls back to devicePixelRatio pre visualViewport. */\nexport function getPageZoom(): number {\n return window.visualViewport?.scale ?? window.devicePixelRatio ?? 1;\n}\n\n/** Adjusts a raw pointer-derived value for the current page zoom level. */\nexport function adjustForZoom(value: number): number {\n const zoom = getPageZoom();\n return zoom ? value / zoom : value;\n}\n","import { ApplicationRef, TemplateRef, type EmbeddedViewRef } from '@angular/core';\nimport { isRtl } from './public-api';\n\n/** Above any app chrome (modals, sticky headers) but below the browser's own UI. */\nconst PREVIEW_Z_INDEX = '2147483000';\n\nexport class DragPreviewRef {\n tpl?: TemplateRef<unknown>;\n /** Set by `ngxDragPreview` so the embedded view can join Angular's change-detection tree. */\n appRef?: ApplicationRef;\n\n element?: HTMLElement;\n isCustom = false;\n private _view?: EmbeddedViewRef<unknown>;\n attach(dragEl: HTMLElement, rect: DOMRect) {\n const doc = dragEl.ownerDocument;\n if (this.tpl) {\n this._view = this.tpl.createEmbeddedView({});\n\n this.appRef?.attachView(this._view);\n // Render bindings inside the embedded view before we move its DOM nodes.\n this._view.detectChanges();\n\n const element = this._view.rootNodes.find(\n (node): node is HTMLElement => node.nodeType === Node.ELEMENT_NODE,\n );\n\n if (!element) {\n this.appRef?.detachView(this._view);\n this._view.destroy();\n this._view = undefined;\n throw new Error('ngxDragPreview template must contain exactly one HTMLElement root node ');\n }\n this.element = element;\n this.isCustom = true;\n } else {\n this.isCustom = false;\n\n const preview = dragEl.cloneNode(true) as HTMLElement;\n this.element = preview;\n // Avoid duplicated ids in the document.\n this.element.removeAttribute('id');\n this.element.querySelectorAll('[id]').forEach((n) => n.removeAttribute('id'));\n this.element.classList.add('ngx-drag-preview');\n this.element.setAttribute('aria-hidden', 'true');\n this.element.setAttribute('inert', '');\n Object.assign(this.element.style, {\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n margin: '0',\n boxSizing: 'border-box',\n });\n }\n Object.assign(this.element.style, {\n position: 'fixed',\n top: `${rect.top}px`,\n bottom: 'auto',\n pointerEvents: 'none',\n transition: 'none',\n animation: 'none',\n transform: 'none',\n visibility: 'visible',\n display: this.element.style.display === 'none' ? '' : this.element.style.display,\n willChange: 'transform',\n zIndex: PREVIEW_Z_INDEX,\n });\n if (isRtl(doc.body)) {\n Object.assign(this.element.style, {\n right: `${window.innerWidth - rect.right}px`,\n left: 'auto',\n });\n } else {\n Object.assign(this.element.style, {\n left: `${rect.left}px`,\n right: 'auto',\n });\n }\n\n doc.body.appendChild(this.element);\n return this.element\n }\n\n detach() {\n this.element?.remove();\n\n if (this._view) {\n this.appRef?.detachView(this._view);\n this._view.destroy();\n this._view = undefined;\n }\n\n this.element = undefined;\n }\n}\n","import { signal } from '@angular/core';\nimport { IPosition } from './contracts/IPosition';\nimport { DropListRef } from './drop-list-ref';\nimport { PlaceHolderRef } from './placeholder-ref';\nimport { DropListGroupRef } from './drop-list-group-ref';\nimport { DragDropService } from './services/drag-drop.service';\nimport { checkBoundX, checkBoundY } from './utils/check-boundary';\nimport { DragPreviewRef } from './drag-preview-ref';\n\nexport type DragAxis = 'x' | 'y' | undefined;\n\nlet zIndexCounter = 1000;\n\nexport class DragRef<T = unknown> {\n data?: T;\n el!: HTMLElement;\n boundary?: HTMLElement;\n lockAxis?: DragAxis;\n\n /**\n * The list this draggable BELONGS to (set by the template). Dragging never changes it.\n * The list the pointer is currently over is `activeDropList`.\n */\n dropList: DropListRef<T> | null = null;\n dropListGroup?: DropListGroupRef | null;\n /** Used to find the drop list under the pointer. Set by the directive; optional. */\n service?: DragDropService;\n /** Drop list currently under the pointer during a drop-list drag (null = outside every list). */\n activeDropList: DropListRef<T> | null = null;\n\n placeholder?: PlaceHolderRef;\n originDropList: DropListRef<T> | null = null;\n originIndex = -1;\n\n preview?: DragPreviewRef;\n\n readonly isDragging = signal(false);\n readonly position = signal<IPosition>({ x: 0, y: 0 });\n\n private startPointer = { x: 0, y: 0 };\n private startRect!: DOMRect;\n private lastPointer = { x: 0, y: 0 };\n\n private previousTransform = '';\n private previousZIndex = '';\n\n private moveDx = 0;\n private moveDy = 0;\n private scrollCompensation = { x: 0, y: 0 };\n private sourceVisibility = '';\n private sourceDisplay = '';\n private sourcePointerEvents = '';\n private sourceTransition = '';\n\n /** True while a drop-list drag (body preview + placeholder) is in progress. Free drag: always false. */\n private listDrag = false;\n private cachedLists: DropListRef<T>[] = [];\n /**\n * Candidate lists for hit-testing, filtered (connected to the origin; not inside the dragged\n * element) and sorted deepest-first — both computed ONCE, not on every pointer move, since\n * neither ever changes mid-drag. Kept in sync with the live registry (see `dropListsSnapshot`)\n * so a list that appears or disappears mid-drag (e.g. behind an `@if`) is still picked up.\n */\n private dropCandidates: { list: DropListRef<T>; depth: number }[] = [];\n private dropListsSnapshot: readonly DropListRef<any>[] | null = null;\n private lastEffective: IPosition = { x: 0, y: 0 };\n private scrollListener?: () => void;\n private resizeListener?: () => void;\n\n init(): void {\n this.previousTransform = getComputedStyle?.(this.el)?.getPropertyValue?.('transform');\n }\n\n withDropList(list: DropListRef<T> | null): this {\n if (this.dropList === list) return this;\n\n this.dropList?.removeItem(this);\n this.dropList = list;\n list?.addItem(this);\n return this;\n }\n\n clearDropList(): void {\n this.dropList?.removeItem(this);\n this.dropList = null;\n }\n\n pointerDown(pointer: IPosition): void {\n this.startPointer = { ...pointer };\n this.lastPointer = { ...pointer };\n }\n\n startDrag(pointer: IPosition): void {\n this.startRect = this.el.getBoundingClientRect();\n\n this.startPointer = { ...pointer };\n this.lastPointer = { ...pointer };\n this.moveDx = 0;\n this.moveDy = 0;\n this.scrollCompensation = { x: 0, y: 0 };\n\n // Only draggables that are direct children of their drop list take part in sorting.\n // Everything else is a plain free drag.\n const list = this.dropList && this.dropList.el === this.el.parentElement ? this.dropList : null;\n this.originDropList = list;\n this.originIndex = list?.getItemIndex(this) ?? -1;\n this.previousTransform = getComputedStyle(this.el).getPropertyValue('transform');\n\n this.isDragging.set(true);\n\n this.previousZIndex = this.el.style.zIndex;\n this.sourceVisibility = this.el.style.visibility;\n this.sourceDisplay = this.el.style.display;\n this.sourcePointerEvents = this.el.style.pointerEvents;\n this.sourceTransition = this.el.style.transition;\n\n this.el.classList.add('ngx-draggable--dragging');\n this.el.style.willChange = 'transform';\n this.el.style.transition = 'none';\n this.el.style.zIndex = String(++zIndexCounter);\n\n /*\n * IMPORTANT:\n *\n * Normal Drag:\n * absolutely nothing changes in the element's rendering mechanism.\n *\n * DropList Drag:\n * create a body-level preview because the original element can be\n * inside an overflow:auto/hidden container such as a Kanban column.\n */\n if (list) {\n this.listDrag = true;\n this.preview ??= new DragPreviewRef();\n this.preview.attach(this.el, this.startRect);\n\n this.el.style.visibility = 'hidden';\n this.el.style.display = 'none';\n this.el.style.pointerEvents = 'none';\n\n this.beginListDrag(list, pointer);\n this.updatePreview();\n } else {\n // KEEP THE ORIGINAL DRAG BEHAVIOR.\n this.applyTransform();\n }\n }\n\n dragMove(pointer: IPosition): void {\n if (!this.isDragging()) return;\n\n this.lastPointer = { ...pointer };\n\n let dx = pointer.x - this.startPointer.x;\n let dy = pointer.y - this.startPointer.y;\n\n if (this.boundary) {\n dx = checkBoundX(this.startRect, this.boundary.getBoundingClientRect(), dx);\n\n dy = checkBoundY(this.startRect, this.boundary.getBoundingClientRect(), dy);\n }\n\n if (this.lockAxis === 'x') dy = 0;\n if (this.lockAxis === 'y') dx = 0;\n\n this.moveDx = dx;\n this.moveDy = dy;\n\n this.position.set({\n x: dx,\n y: dy,\n });\n\n if (this.listDrag) {\n this.updatePreview();\n // Sorting follows the (axis/boundary constrained) pointer, not the raw one.\n this.lastEffective = { x: this.startPointer.x + dx, y: this.startPointer.y + dy };\n this.updateDropTarget(this.lastEffective);\n } else {\n this.applyTransform();\n }\n }\n\n nudge(dx: number, dy: number): void {\n if (!this.isDragging()) this.startDrag(this.lastPointer);\n\n this.dragMove({\n x: this.startPointer.x + this.moveDx + dx,\n y: this.startPointer.y + this.moveDy + dy,\n });\n }\n\n endDrag(): void {\n if (!this.isDragging()) return;\n\n if (this.listDrag) {\n this.isDragging.set(false);\n this.finishListDrag(true);\n return;\n }\n\n // ---- free drag: unchanged ----\n this.isDragging.set(false);\n\n this.placeholder?.detach();\n this.placeholder = undefined;\n\n this.preview?.detach();\n this.preview = undefined;\n\n this.el.classList.remove('ngx-draggable--dragging');\n\n this.el.style.visibility = this.sourceVisibility;\n this.el.style.display = this.sourceDisplay;\n this.el.style.pointerEvents = this.sourcePointerEvents;\n this.el.style.willChange = '';\n this.el.style.zIndex = this.previousZIndex;\n }\n\n cancelDrag(): void {\n if (!this.isDragging()) return;\n\n this.moveDx = 0;\n this.moveDy = 0;\n\n this.position.set({ x: 0, y: 0 });\n\n if (this.listDrag) {\n // Rollback: nothing was ever committed to the DOM or the model, so restoring is just cleanup.\n this.isDragging.set(false);\n this.finishListDrag(false);\n return;\n }\n\n // ---- free drag: unchanged ----\n this.el.style.transform = this.previousTransform;\n this.el.style.visibility = this.sourceVisibility;\n this.el.style.pointerEvents = this.sourcePointerEvents;\n this.scrollCompensation = { x: 0, y: 0 };\n\n this.endDrag();\n }\n\n /** Abort without emitting anything (the directive was destroyed mid-drag). Idempotent. */\n dispose(): void {\n if (!this.listDrag) return;\n this.isDragging.set(false);\n this.finishListDrag(false);\n }\n\n /** True while a drop-list drag is running. */\n get isListDrag(): boolean {\n return this.listDrag;\n }\n\n /** Inline `display` the source element had before it was hidden for the drag. */\n get originalDisplay(): string {\n return this.sourceDisplay;\n }\n\n get x(): number {\n return this.moveDx;\n }\n\n get y(): number {\n return this.moveDy;\n }\n\n get pointer(): IPosition {\n return this.lastPointer;\n }\n\n get start(): DOMRect {\n return this.startRect;\n }\n\n getPlaceholderElement(): HTMLElement | undefined {\n return this.placeholder?.element;\n }\n\n /**\n * صدا زده میشود هر بار که container یا window در حین درگ اسکرول شود\n * (چه توسط auto-scroll خودمان، چه با wheel/اسکرولبار دستی کاربر).\n * transform را فوراً تصحیح میکند تا عنصر زیر پوینتر بماند.\n */\n notifyScroll(dx: number, dy: number): void {\n if (!this.isDragging()) return;\n // Drop-list drags are position:fixed in <body> and follow the pointer in viewport space, so\n // scrolling needs no compensation; sorting listens to scroll on its own (see beginListDrag).\n if (this.listDrag) return;\n this.scrollCompensation = {\n x: this.scrollCompensation.x + dx,\n y: this.scrollCompensation.y + dy,\n };\n this.applyTransform();\n }\n\n private applyTransform(): void {\n const base =\n this.previousTransform && this.previousTransform !== 'none'\n ? this.previousTransform + ' '\n : '';\n\n const tx = this.moveDx + this.scrollCompensation.x;\n const ty = this.moveDy + this.scrollCompensation.y;\n\n this.el.style.transform = `${base}translate3d(${tx}px, ${ty}px, 0)`;\n }\n // -------------------------------------------------------------------------------------\n // drop-list drag\n // -------------------------------------------------------------------------------------\n\n private beginListDrag(origin: DropListRef<T>, pointer: IPosition): void {\n const doc = this.el.ownerDocument;\n const win = doc.defaultView ?? window;\n\n this.dropListsSnapshot = null; // force refreshDropCandidates() to do a full pass below\n this.refreshDropCandidates(origin);\n\n this.lastEffective = { ...pointer };\n this.activeDropList = origin;\n origin.enter(this, pointer.x, pointer.y);\n // The origin is (re-)measured AFTER its placeholder took over the source's slot, so its box\n // still covers the whole list (the hidden source no longer occupies space).\n origin._cacheGeometry();\n\n this.scrollListener = () => {\n for (const l of this.cachedLists) l._onScroll();\n this.updateDropTarget(this.lastEffective);\n };\n this.resizeListener = () => {\n for (const l of this.cachedLists) l._refresh();\n this.updateDropTarget(this.lastEffective);\n };\n // Capture: `scroll` does not bubble, and any ancestor (or the page) may be the one scrolling.\n doc.addEventListener('scroll', this.scrollListener, { capture: true, passive: true });\n win.addEventListener('resize', this.resizeListener, { passive: true });\n }\n\n /**\n * Recomputes which registered lists are valid targets for this drag — connected to the\n * origin, and not nested inside the element being dragged — plus each one's nesting depth.\n *\n * `DragDropService.dropLists()` is an Angular signal: its array is a NEW reference only when a\n * list actually registers or unregisters, so the check below is a single reference comparison\n * on every pointer move and the (heavier) connectivity/containment/depth work below it only\n * runs on the rare event a list appears or disappears mid-drag — never on every pointer move.\n */\n private refreshDropCandidates(origin: DropListRef<T>): void {\n const all = this.service?.dropLists() ?? [];\n if (all === this.dropListsSnapshot) return;\n this.dropListsSnapshot = all;\n\n const already = new Set(this.dropCandidates.map((c) => c.list));\n const next: { list: DropListRef<T>; depth: number }[] = [{ list: origin, depth: origin.depth }];\n for (const l of all as DropListRef<T>[]) {\n if (l === origin || !l.el || !origin.isConnectedTo(l)) continue;\n if (this.el !== l.el && this.el.contains(l.el)) continue;\n if (!already.has(l)) l._cacheGeometry(); // newly eligible mid-drag: measure it now\n next.push({ list: l, depth: l.depth });\n }\n this.dropCandidates = next;\n this.cachedLists = next.map((c) => c.list);\n }\n\n /**\n * Decide which list is under the pointer, switch if needed, then re-sort in the active one.\n *\n * The origin list is the one exception to \"exiting a list resets/releases it\": while the\n * pointer dives into one of the origin's OWN nested lists (at any depth), the origin's\n * placeholder and sibling displacement are left exactly as they are — frozen, not reset —\n * so returning to the origin's own level doesn't snap items back and then forward again.\n * Every OTHER (foreign) list still fully releases the moment the pointer leaves it, exactly\n * as before; nesting multiple foreign sessions alive at once would let their own internal\n * sibling displacement compound in ways a single flat `ancestorOffset` cannot represent.\n */\n private updateDropTarget(pointer: IPosition): void {\n const origin = this.originDropList;\n if (!origin) return;\n\n this.refreshDropCandidates(origin);\n const next = this.resolveDropList(pointer);\n if (next === this.activeDropList) {\n next?.sortItem(this, pointer);\n return;\n }\n\n const prev = this.activeDropList;\n if (prev && prev !== origin) prev.exit(this);\n\n const nextWithinOrigin = !!next && (next === origin || isDescendantOfList(next, origin));\n if (nextWithinOrigin) {\n if (prev === origin) origin._freeze(); // no longer the innermost, but stays engaged\n } else {\n origin.exit(this); // truly outside the origin's territory now: reset it (idempotent)\n }\n\n this.activeDropList = next;\n next?.enter(this, pointer.x, pointer.y); // fresh entry, or resumes a still-alive (frozen) session\n }\n\n /**\n * Innermost connected list under the pointer, from the precomputed candidates: deeper always\n * beats shallower; among lists at the same depth (unrelated, visually overlapping lists) the\n * currently active one is kept to avoid flicker, otherwise the smaller one wins. No DOM\n * reads and no `.contains()` calls happen here — everything needed was precomputed above.\n */\n private resolveDropList(pointer: IPosition): DropListRef<T> | null {\n let best: DropListRef<T> | null = null;\n let bestDepth = -1;\n for (const { list, depth } of this.dropCandidates) {\n if (!list._containsPoint(pointer.x, pointer.y)) continue;\n if (!best || depth > bestDepth) {\n best = list;\n bestDepth = depth;\n } else if (depth === bestDepth && best !== this.activeDropList) {\n if (list === this.activeDropList || list._area() < best._area()) best = list;\n }\n }\n return best;\n }\n\n /**\n * Single teardown path for every way a drop-list drag can end (drop on a list, drop outside,\n * Escape, pointercancel, destroy). Everything transient is removed here, so nothing can leak\n * regardless of how the drag ended. Only then is the drop event emitted.\n */\n private finishListDrag(commit: boolean): void {\n const doc = this.el.ownerDocument;\n if (this.scrollListener)\n doc.removeEventListener('scroll', this.scrollListener, { capture: true });\n if (this.resizeListener)\n (doc.defaultView ?? window).removeEventListener('resize', this.resizeListener);\n this.scrollListener = this.resizeListener = undefined;\n\n const target = commit ? this.activeDropList : null;\n const event = target?._finish(this, true) ?? null;\n for (const l of this.cachedLists) l._release(this);\n\n this.preview?.detach();\n this.preview = undefined;\n this.placeholder = undefined;\n this.activeDropList = null;\n this.cachedLists = [];\n this.dropCandidates = [];\n this.dropListsSnapshot = null;\n this.listDrag = false;\n\n // The source element is put back exactly as it was (its transform was never touched).\n this.el.classList.remove('ngx-draggable--dragging');\n this.el.style.visibility = this.sourceVisibility;\n this.el.style.display = this.sourceDisplay;\n this.el.style.pointerEvents = this.sourcePointerEvents;\n this.el.style.transition = this.sourceTransition;\n this.el.style.willChange = '';\n this.el.style.zIndex = this.previousZIndex;\n\n if (event && target) target.onDrop.emit(event);\n }\n\n private updatePreview(): void {\n if (!this.preview || !this.preview.element) return;\n\n this.preview.element.style.transform = `translate3d(${this.moveDx}px, ${this.moveDy}px, 0)`;\n }\n}\n\n/** Is `list` nested (at any depth) inside `ancestor`, per the parent/child list tree? */\nfunction isDescendantOfList(list: DropListRef<any>, ancestor: DropListRef<any>): boolean {\n for (let p: DropListRef<any> | null = list.parentList; p; p = p.parentList) {\n if (p === ancestor) return true;\n }\n return false;\n}\n","export abstract class ElementHelper {\n private static collectionHas(a: NodeListOf<Element>, b: ParentNode) {\n //helper function (see below)\n for (var i = 0, len = a.length; i < len; i++) {\n if (a[i] == b) return true;\n }\n return false;\n }\n public static findParentBySelector(elm: HTMLElement, selector: string): HTMLElement | null {\n var all = document.querySelectorAll(selector);\n var cur = elm.parentNode as HTMLElement;\n while (cur && !ElementHelper.collectionHas(all, cur)) {\n //keep going up until you find a match\n cur = cur.parentNode as HTMLElement; //go up\n }\n return cur; //will return null if not found\n }\n}\n\nexport function getFirstLevelDraggables(container: HTMLElement): HTMLElement[] {\n const all = Array.from(container.querySelectorAll<HTMLElement>('.ngx-draggable:not(.dragging)'));\n const firstLevel: HTMLElement[] = [];\n\n for (const el of all) {\n let parent = el.parentElement;\n let isNested = false;\n\n while (parent && parent !== container) {\n if (parent.classList.contains('ngx-draggable')) {\n isNested = true;\n break;\n }\n parent = parent.parentElement;\n }\n\n if (!isNested) {\n firstLevel.push(el);\n }\n }\n\n return firstLevel;\n}\n\nexport function isElementNode(node: Node): node is Element {\n return node?.nodeType === Node.ELEMENT_NODE;\n}\n\nexport function isDocumentNode(node: Node | null): node is Document {\n return node?.nodeType === Node.DOCUMENT_NODE;\n}\n\nexport function isShadowRootNode(node: Node | null): node is ShadowRoot {\n return node?.nodeType === Node.DOCUMENT_FRAGMENT_NODE && 'host' in node;\n}\n\nexport function getOwnerWindow(node: Node): Window | null {\n return node?.ownerDocument?.defaultView ?? null;\n}\nexport function isWindow(value: unknown): value is Window {\n return (\n value != null &&\n typeof value === 'object' &&\n 'window' in value &&\n (value as Window).window === value\n );\n}\n","import { ApplicationRef, TemplateRef, type EmbeddedViewRef } from '@angular/core';\nimport { DropListRef } from './drop-list-ref';\nimport { isElementNode } from './utils/element.helper';\n\nexport class PlaceHolderRef {\n tpl?: TemplateRef<unknown>;\n /** Set by `NgxPlaceholder` so the embedded view can join Angular's change-detection tree. */\n appRef?: ApplicationRef;\n dropList?: DropListRef;\n element?: HTMLElement;\n\n private _visible = false;\n private _view?: EmbeddedViewRef<unknown>;\n /** True once `this.element` was built from `tpl` (as opposed to the fallback clone). */\n private isCustom = false;\n\n attach(container: HTMLElement, source: HTMLElement, reference?: Node | null): HTMLElement {\n if (!this.element) {\n if (this.tpl) {\n this._view = this.tpl.createEmbeddedView({});\n this.appRef?.attachView(this._view);\n // Render bindings inside the embedded view before we move its DOM nodes.\n this._view.detectChanges();\n\n const element = this._view.rootNodes.find((node): node is HTMLElement =>\n isElementNode(node),\n );\n\n if (!element) {\n this.appRef?.detachView(this._view);\n this._view.destroy();\n this._view = undefined;\n\n throw new Error(\n 'ngxPlaceholder template must contain exactly one HTMLElement root node ' +\n '(other root nodes, if any, are ignored).',\n );\n }\n\n this.element = element;\n this.isCustom = true;\n } else {\n // Fallback: keep the same tag/attributes as the dragged item so selectors such as\n // \".list > article\" and grid/flex item rules continue to apply.\n this.element = source.cloneNode(false) as HTMLElement;\n this.element.removeAttribute('id');\n this.element.classList.add('ngx-drag-placeholder');\n this.element.setAttribute('aria-hidden', 'true');\n this.element.setAttribute('inert', '');\n this.element.removeAttribute('tabindex');\n this.isCustom = false;\n }\n }\n\n // Safety overrides that apply regardless of who authored the element: it must never\n // inherit a live drag transform/animation (transform/transition are left free for the\n // sort session to drive, translate3d-ing the placeholder to the current insertion slot),\n // never intercept pointer events, and never be display:none.\n this.element.style.removeProperty('transform');\n this.element.style.removeProperty('transition');\n this.element.style.removeProperty('will-change');\n this.element.style.setProperty('animation', 'none', 'important');\n this.element.style.setProperty('pointer-events', 'none', 'important');\n this.element.style.setProperty('visibility', 'visible', 'important');\n\n if (!this.isCustom) {\n // Only the auto-generated clone gets the default \"phantom box\" look. A custom\n // *ngxPlaceholder template is styled entirely by the caller.\n this.element.style.setProperty('opacity', '0.16', 'important');\n this.element.style.setProperty('outline', '2px dashed currentColor', 'important');\n this.element.style.setProperty('outline-offset', '-2px', 'important');\n }\n\n this._visible = true;\n\n if (reference && reference.parentNode === container) {\n if (this.element !== reference) container.insertBefore(this.element, reference);\n } else if (this.element.parentNode !== container) {\n container.appendChild(this.element);\n }\n\n return this.element;\n }\n\n /** True while the currently attached element came from a custom `*ngxPlaceholder` template. */\n get custom(): boolean {\n return this.isCustom;\n }\n\n detach(): void {\n this.element?.remove();\n\n if (this._view) {\n this.appRef?.detachView(this._view);\n this._view.destroy();\n this._view = undefined;\n }\n\n this.element = undefined;\n this._visible = false;\n }\n\n get visible(): boolean {\n return this._visible && !!this.element?.isConnected;\n }\n}\n","/**\n * Pure geometry used by the drop-list sorting engine.\n *\n * Nothing in this file touches the DOM. Everything is a deterministic function of\n * `(rectangles, pointer)`, which is what makes sorting reversible: the same pointer over the\n * same snapshot always yields the same insertion index, regardless of what the previous\n * pointer positions were.\n *\n * Layout direction is *derived from the rectangles* (row clustering + the order in which DOM\n * siblings actually appear on screen) rather than from `flex-direction` / `direction`. That is\n * what lets one algorithm handle block flow, inline flow, flex (row/column/wrap/reverse),\n * grid, RTL and `order:`-reshuffled layouts. Computed style is only a fallback for lists that\n * are too small (0 or 1 item) to reveal their own orientation.\n */\n\nexport interface Box {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\n/** `x` = one row, `y` = one column, `grid` = several rows containing several items. */\nexport type Axis = 'x' | 'y' | 'grid';\nexport type Sign = 1 | -1;\n\nexport interface LayoutModel {\n axis: Axis;\n /** +1: DOM order advances left→right inside a row. -1: right→left (RTL, row-reverse...). */\n dirX: Sign;\n /** +1: rows/items advance top→bottom in DOM order. -1: bottom→top (column-reverse, wrap-reverse). */\n dirY: Sign;\n /** Row index (in DOM order) of every box. */\n rowOf: number[];\n /** Horizontal direction of every row (a single row can differ from the global one). */\n rowDirX: Sign[];\n /** Mid-lines separating consecutive rows, in DOM row order. Length = rowCount - 1. */\n rowBounds: number[];\n /** Outer edges of the first / last row along the row direction (see `dirY`). */\n yStart: number;\n yEnd: number;\n rowCount: number;\n}\n\n/**\n * Hysteresis is the only \"magic\" number in the algorithm and it is deliberate: without it a\n * pointer resting exactly on a sibling's mid-line flips the placeholder on every sub-pixel\n * jitter (and on every rounding difference between two layouts). It is proportional to the\n * sibling's size and capped, so it can never make a small item feel sticky.\n */\nexport const HYSTERESIS_RATIO = 0.1;\nexport const HYSTERESIS_MAX_PX = 6;\n\nexport function hysteresis(size: number): number {\n return Math.min(HYSTERESIS_MAX_PX, Math.max(0, size) * HYSTERESIS_RATIO);\n}\n\nconst cx = (b: Box) => (b.left + b.right) / 2;\nconst cy = (b: Box) => (b.top + b.bottom) / 2;\nconst width = (b: Box) => b.right - b.left;\nconst height = (b: Box) => b.bottom - b.top;\nconst sign = (n: number): Sign => (n < 0 ? -1 : 1);\n\ninterface RowAcc {\n top: number;\n bottom: number;\n first: number;\n last: number;\n count: number;\n}\n\n/**\n * Builds a layout model from DOM-ordered boxes.\n *\n * @param fallbackAxis orientation to assume when there are fewer than two boxes.\n * @param fallbackRtl inline direction to assume when no row contains two items.\n */\nexport function analyzeLayout(\n boxes: readonly Box[],\n fallbackAxis: 'x' | 'y' = 'y',\n fallbackRtl = false,\n): LayoutModel {\n const rows: RowAcc[] = [];\n const rowOf: number[] = [];\n\n boxes.forEach((b, i) => {\n const row = rows[rows.length - 1];\n if (row) {\n const overlap = Math.min(b.bottom, row.bottom) - Math.max(b.top, row.top);\n const smaller = Math.min(height(b), row.bottom - row.top);\n // Same row when the boxes share at least half of the smaller one's height. Touching or\n // sub-pixel-overlapping boxes (fractional heights) therefore start a new row.\n if (overlap > 0 && overlap >= smaller * 0.5) {\n row.top = Math.min(row.top, b.top);\n row.bottom = Math.max(row.bottom, b.bottom);\n row.last = i;\n row.count++;\n rowOf.push(rows.length - 1);\n return;\n }\n }\n rows.push({ top: b.top, bottom: b.bottom, first: i, last: i, count: 1 });\n rowOf.push(rows.length - 1);\n });\n\n const rowCount = rows.length;\n\n // Vertical direction: which way do successive rows travel?\n const dirY: Sign =\n rowCount > 1\n ? sign((rows[rowCount - 1].top + rows[rowCount - 1].bottom) / 2 - (rows[0].top + rows[0].bottom) / 2)\n : 1;\n\n // Horizontal direction per row (from the first/last item of that row) + a global vote.\n const rowDirX: Sign[] = [];\n let votes = 0;\n for (const r of rows) {\n if (r.count > 1) {\n const d = sign(cx(boxes[r.last]) - cx(boxes[r.first]));\n rowDirX.push(d);\n votes += d;\n } else {\n rowDirX.push(0 as unknown as Sign); // resolved below once the global vote is known\n }\n }\n const dirX: Sign = votes !== 0 ? sign(votes) : fallbackRtl ? -1 : 1;\n for (let i = 0; i < rowDirX.length; i++) if (!rowDirX[i]) rowDirX[i] = dirX;\n\n const rowBounds: number[] = [];\n for (let r = 0; r < rowCount - 1; r++) {\n rowBounds.push(dirY === 1 ? (rows[r].bottom + rows[r + 1].top) / 2 : (rows[r].top + rows[r + 1].bottom) / 2);\n }\n\n const first = rows[0];\n const lastRow = rows[rowCount - 1];\n const yStart = first ? (dirY === 1 ? first.top : first.bottom) : 0;\n const yEnd = lastRow ? (dirY === 1 ? lastRow.bottom : lastRow.top) : 0;\n\n let axis: Axis;\n if (boxes.length < 2) axis = fallbackAxis;\n else if (rowCount === 1) axis = 'x';\n else if (rows.every((r) => r.count === 1)) axis = 'y';\n else axis = 'grid';\n\n return { axis, dirX, dirY, rowOf, rowDirX, rowBounds, yStart, yEnd, rowCount };\n}\n\nfunction rowAt(model: LayoutModel, y: number): number {\n let r = 0;\n for (const bound of model.rowBounds) {\n if (model.dirY === 1 ? y > bound : y < bound) r++;\n else break;\n }\n return r;\n}\n\n/**\n * Where should the dragged item be inserted, given the pointer?\n *\n * The result is the number of *other* items that end up before the dragged one, i.e. the\n * dragged item's final index. `slot` is the index (in `boxes`) of the dragged item's own slot\n * (its placeholder), or -1 when the list does not contain one yet.\n *\n * `current` is the index the slot currently has in \"others space\"; it only decides on which\n * side of a sibling's mid-line the small hysteresis band applies. Pass `null` for a first\n * placement (no history, no hysteresis).\n *\n * Pure: depends only on its arguments.\n */\nexport function resolveInsertionIndex(\n model: LayoutModel,\n boxes: readonly Box[],\n slot: number,\n pointer: Point,\n current: number | null,\n): number {\n let before = 0;\n let others = 0;\n\n for (let i = 0; i < boxes.length; i++) {\n if (i === slot) continue;\n const o = others++;\n const b = boxes[i];\n // Sign of the hysteresis band: +1 favours \"stays before the pointer\", -1 favours \"stays after\".\n const bias = current === null ? 0 : o < current ? 1 : -1;\n\n let isBefore: boolean;\n if (model.axis === 'x') {\n isBefore = model.dirX * (pointer.x - cx(b)) + bias * hysteresis(width(b)) > 0;\n } else if (model.axis === 'y') {\n isBefore = model.dirY * (pointer.y - cy(b)) + bias * hysteresis(height(b)) > 0;\n } else {\n const row = model.rowOf[i];\n const py = pointer.y + model.dirY * bias * hysteresis(height(b));\n const pointerRow = rowAt(model, py);\n if (model.dirY * (py - model.yStart) < 0) {\n isBefore = false; // above the first row: nothing precedes the pointer\n } else if (model.dirY * (py - model.yEnd) > 0) {\n isBefore = true; // below the last row: everything does (append)\n } else if (pointerRow !== row) {\n isBefore = pointerRow > row;\n } else {\n isBefore = model.rowDirX[row] * (pointer.x - cx(b)) + bias * hysteresis(width(b)) > 0;\n }\n }\n if (isBefore) before++;\n }\n return before;\n}\n\n/**\n * Along-axis displacement of every box when the slot moves to `target` (others-space index).\n *\n * The result is where each box has to be translated so that the boxes, re-ordered, occupy the\n * same run of space they occupied before, using each box's own size and the *measured* gaps\n * between the original slots (so `gap`, margins and inline whitespace are handled by\n * construction, not by assumption). Only meaningful for `x` / `y` axes; `grid` returns zeros.\n */\nexport function computeAxisOffsets(model: LayoutModel, boxes: readonly Box[], slot: number, target: number): number[] {\n const n = boxes.length;\n const offsets = new Array<number>(n).fill(0);\n if (model.axis === 'grid' || n < 2 || slot < 0) return offsets;\n\n const horizontal = model.axis === 'x';\n const dir = horizontal ? model.dirX : model.dirY;\n\n // Mirror into a frame where DOM order is ascending, so one code path serves LTR and RTL.\n const lo = boxes.map((b) => (horizontal ? (dir === 1 ? b.left : -b.right) : dir === 1 ? b.top : -b.bottom));\n const hi = boxes.map((b) => (horizontal ? (dir === 1 ? b.right : -b.left) : dir === 1 ? b.bottom : -b.top));\n\n const order: number[] = [];\n for (let i = 0; i < n; i++) if (i !== slot) order.push(i);\n order.splice(Math.max(0, Math.min(target, n - 1)), 0, slot);\n\n let cursor = lo[0];\n for (let p = 0; p < n; p++) {\n const item = order[p];\n const delta = cursor - lo[item];\n offsets[item] = Math.abs(delta) < 1e-6 ? 0 : dir * delta;\n cursor += hi[item] - lo[item] + (p < n - 1 ? lo[p + 1] - hi[p] : 0);\n }\n return offsets;\n}\n\n/** Intersection of two boxes, or `null` when they do not overlap. */\nexport function intersectBoxes(a: Box, b: Box): Box | null {\n const left = Math.max(a.left, b.left);\n const top = Math.max(a.top, b.top);\n const right = Math.min(a.right, b.right);\n const bottom = Math.min(a.bottom, b.bottom);\n return right > left && bottom > top ? { left, top, right, bottom } : null;\n}\n\nexport function boxContains(b: Box, x: number, y: number): boolean {\n return x >= b.left && x <= b.right && y >= b.top && y <= b.bottom;\n}\n\nexport function toBox(r: { left: number; top: number; right: number; bottom: number }): Box {\n return { left: r.left, top: r.top, right: r.right, bottom: r.bottom };\n}\n","/**\n * Tracks how far the scrollable ancestors of an element (and the window) have scrolled since\n * the frame was created.\n *\n * Geometry is measured once, when a drag enters a list. Scrolling afterwards moves the\n * content under a stationary pointer, which is equivalent to moving the pointer by the scroll\n * delta in the frame the geometry was measured in. Shifting the *pointer* (one point) instead\n * of re-measuring every item keeps cached rectangles valid across page scroll, parent scroll\n * and nested scroll without any layout reads on the hot path.\n *\n * `delta()` only reads `scrollLeft/Top` after `invalidate()` (called from a scroll event), so\n * ordinary pointer moves perform zero scroll reads.\n */\nexport class ScrollFrame {\n private readonly targets: Array<HTMLElement | Window> = [];\n private origin: Point = { x: 0, y: 0 };\n private cached: Point = { x: 0, y: 0 };\n private dirty = false;\n\n /**\n * @param start first element to inspect (walks up through its ancestors)\n * @param includeStart whether `start` itself counts (true for a list whose own scroll moves its items)\n */\n constructor(\n start: HTMLElement | null,\n includeStart = true,\n private readonly win: Window = window,\n ) {\n let node: HTMLElement | null = includeStart ? start : (start?.parentElement ?? null);\n const root = start?.ownerDocument.documentElement;\n while (node) {\n // <html> scrolling is reported through `window`; counting both would double the delta.\n if (node !== root && scrolls(node)) this.targets.push(node);\n node = node.parentElement;\n }\n this.targets.push(win);\n this.origin = this.read();\n }\n\n /** Call when any scroll event fires. */\n invalidate(): void {\n this.dirty = true;\n }\n\n /** Total scroll distance (px) of all tracked containers since construction. */\n delta(): Point {\n if (this.dirty) {\n const now = this.read();\n this.cached = { x: now.x - this.origin.x, y: now.y - this.origin.y };\n this.dirty = false;\n }\n return this.cached;\n }\n\n private read(): Point {\n let x = 0;\n let y = 0;\n for (const t of this.targets) {\n if (t === this.win) {\n x += this.win.scrollX;\n y += this.win.scrollY;\n } else {\n x += (t as HTMLElement).scrollLeft;\n y += (t as HTMLElement).scrollTop;\n }\n }\n return { x, y };\n }\n}\n\ninterface Point {\n x: number;\n y: number;\n}\n\nfunction scrolls(el: HTMLElement): boolean {\n const s = getComputedStyle?.(el);\n // `hidden` containers still scroll programmatically; `clip` never does.\n const scrollish = (v: string) => v === 'auto' || v === 'scroll' || v === 'overlay' || v === 'hidden';\n return scrollish(s.overflowX) || scrollish(s.overflowY);\n}\n","import { isElementNode } from '../utils/element.helper';\nimport { ScrollFrame } from '../utils/scroll-frame';\nimport {\n Axis,\n Box,\n LayoutModel,\n Point,\n analyzeLayout,\n computeAxisOffsets,\n resolveInsertionIndex,\n toBox,\n} from './layout-geometry';\n\nexport interface SortSessionInit {\n /** The drop list element. */\n container: HTMLElement;\n /** The placeholder for the dragged item. Must already be attached inside `container`. */\n placeholder: HTMLElement;\n /** Slot elements (direct children of `container`) of every draggable EXCEPT the dragged one. */\n itemElements: ReadonlySet<HTMLElement>;\n /** Used only while the list is too small to reveal its own orientation. */\n fallbackAxis: 'x' | 'y';\n fallbackRtl: boolean;\n /** Sibling animation in ms (0 disables). */\n animationMs: number;\n /** Whitespace separator already inserted next to the placeholder (inline layouts only). */\n spacer?: Text | null;\n /**\n * Notified whenever an entry's `translate3d` offset changes (including back to `{0,0}`).\n * A displaced item can contain OTHER registered drop lists (a tree of nested lists); their\n * cached hit-test geometry was measured before any displacement, so without this hook their\n * on-screen position and their hit-test box silently disagree once a sibling moves.\n */\n onOffsetChange?: (el: HTMLElement, offset: Point) => void;\n}\n\n/**\n * Inline / inline-block layouts get their inter-item gap from whitespace TEXT nodes. A\n * placeholder that is moved (or freshly inserted) without one would collapse that gap and shift\n * everything after it by a space width, so it carries a separator of its own. Returns `null`\n * for layouts that have no whitespace nodes (flex, grid, Angular-trimmed templates).\n */\nexport function makeSpacer(container: HTMLElement): Text | null {\n for (const n of Array.from(container.childNodes)) {\n if (n.nodeType === Node.TEXT_NODE && n.nodeValue && /^\\s+$/.test(n.nodeValue)) {\n return container.ownerDocument.createTextNode(n.nodeValue);\n }\n }\n return null;\n}\n\ninterface Entry {\n el: HTMLElement;\n isSlot: boolean;\n /** Computed transform the element had before we touched it (so e.g. rotations survive). */\n base: string;\n savedTransform: string;\n savedTransition: string;\n savedWillChange: string;\n}\n\nconst EASING = 'cubic-bezier(0, 0, 0.2, 1)';\n\n/**\n * One drag's view of one drop list.\n *\n * Lifecycle\n * ---------\n * snapshot ──► resolve(pointer) ──► apply(index) ──► ... ──► dispose()\n *\n * The snapshot (`boxes`) is taken once, with the dragged item's slot already in place, and is\n * never re-read while the drag is over the list. `resolve` is a pure function of the pointer\n * and that snapshot, so moving the pointer back always restores the previous state.\n *\n * Two ways to *show* the result, chosen from the measured layout:\n *\n * - `transform` (one row or one column; the common case): the DOM is never touched. Siblings\n * and the placeholder are displaced with `translate3d`, computed from measured sizes and\n * gaps, exactly like Angular CDK's single-axis strategy.\n * - `flow` (grid / wrapping layouts): an exact translate cannot be derived without\n * re-implementing the browser's layout engine, so the single placeholder node is moved and\n * the browser lays the list out. Siblings are then animated from their old to new position\n * with FLIP `translate3d` so the motion is still transform-driven and smooth. Decisions\n * keep using the immutable snapshot, so the reflow can never feed back into them.\n */\nexport class SortSession {\n readonly mode: 'transform' | 'flow';\n\n private readonly container: HTMLElement;\n private readonly placeholder: HTMLElement;\n private readonly itemElements: ReadonlySet<HTMLElement>;\n private readonly animationMs: number;\n private readonly fallbackAxis: 'x' | 'y';\n private readonly fallbackRtl: boolean;\n\n private entries: Entry[] = [];\n private boxes: Box[] = [];\n private model!: LayoutModel;\n /** Index of the slot (placeholder) inside `entries`/`boxes` at snapshot time. */\n private slotIdx = -1;\n /** For each visible \"other\" item: its index among ALL other items (hidden ones included). */\n private otherModelIndex: number[] = [];\n private frame: ScrollFrame;\n private applied = new Map<HTMLElement, Point>();\n private targetIdx = 0;\n private disposed = false;\n /** undefined = not created yet, null = this layout has no whitespace separators. */\n private spacer: Text | null | undefined;\n private readonly onOffsetChange?: (el: HTMLElement, offset: Point) => void;\n\n constructor(init: SortSessionInit) {\n this.spacer = init.spacer;\n this.onOffsetChange = init.onOffsetChange;\n this.container = init.container;\n this.placeholder = init.placeholder;\n this.itemElements = init.itemElements;\n this.animationMs = init.animationMs;\n this.fallbackAxis = init.fallbackAxis;\n this.fallbackRtl = init.fallbackRtl;\n\n this.snapshot();\n this.frame = new ScrollFrame(this.container, true);\n this.mode = this.model.axis === 'grid' ? 'flow' : 'transform';\n this.targetIdx = this.slotIdx;\n\n const transition = this.animationMs > 0 ? `transform ${this.animationMs}ms ${EASING}` : '';\n for (const e of this.entries) {\n e.el.style.willChange = 'transform';\n if (transition) e.el.style.transition = transition;\n }\n }\n\n /** Detected orientation (useful for tests/diagnostics). */\n get axis(): Axis {\n return this.model.axis;\n }\n\n /** Current insertion index among the *visible other* items. */\n get target(): number {\n return this.targetIdx;\n }\n\n /** Index at which the session started (the slot's original position). */\n get origin(): number {\n return this.slotIdx;\n }\n\n /** Insertion index among ALL other items of the list (what consumers see as `currentIndex`). */\n get modelIndex(): number {\n const idx = this.otherModelIndex;\n if (this.targetIdx < idx.length) return idx[this.targetIdx];\n return idx.length ? idx[idx.length - 1] + 1 : 0;\n }\n\n /** Where would the dragged item be inserted if released at `pointer`? Pure; no side effects. */\n resolve(pointer: Point): number {\n const d = this.frame.delta();\n return resolveInsertionIndex(\n this.model,\n this.boxes,\n this.slotIdx,\n { x: pointer.x + d.x, y: pointer.y + d.y },\n this.targetIdx,\n );\n }\n\n /** Visually place the slot at `index`. Idempotent. */\n apply(index: number): void {\n if (this.disposed || index === this.targetIdx) return;\n this.targetIdx = index;\n if (this.mode === 'transform') this.applyTransforms(index);\n else this.applyFlow(index);\n }\n\n /** Put everything back where it started (slot at its original index). */\n reset(): void {\n this.apply(this.slotIdx);\n }\n\n /** A scroll event happened somewhere: cached scroll deltas must be re-read once. */\n onScroll(): void {\n this.frame.invalidate();\n }\n\n /**\n * Re-baseline from the live layout (e.g. the window was resized mid-drag). Not called during\n * normal sorting, because re-measuring while items are displaced is exactly what would\n * re-introduce feedback into the decision.\n */\n refresh(): void {\n if (this.disposed) return;\n const target = this.targetIdx;\n this.clearDisplacement();\n this.snapshot();\n this.frame = new ScrollFrame(this.container, true);\n if (this.mode === 'transform') {\n this.targetIdx = this.slotIdx;\n this.apply(Math.min(target, this.boxes.length - 1));\n } else {\n this.targetIdx = this.slotIdx;\n }\n }\n\n /** Restore every inline style this session touched. Safe to call more than once. */\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n for (const e of this.entries) {\n e.el.style.transform = e.savedTransform;\n e.el.style.transition = e.savedTransition;\n e.el.style.willChange = e.savedWillChange;\n if (this.applied.has(e.el)) this.onOffsetChange?.(e.el, { x: 0, y: 0 });\n }\n this.applied.clear();\n this.spacer?.remove();\n }\n\n // ---------------------------------------------------------------------------------------\n // snapshot\n // ---------------------------------------------------------------------------------------\n\n private snapshot(): void {\n const previous = new Map(this.entries.map((e) => [e.el, e] as const));\n\n const entries: Entry[] = [];\n const boxes: Box[] = [];\n const otherModelIndex: number[] = [];\n let slot = -1;\n let allOthers = 0;\n\n for (const node of Array.from(this.container.children)) {\n if (!isElementNode(node)) continue;\n const el = node as HTMLElement;\n const isSlot = el === this.placeholder;\n if (!isSlot && !this.itemElements.has(el)) continue;\n\n const modelIdx = isSlot ? -1 : allOthers++;\n const rect = el.getBoundingClientRect();\n const off = this.applied.get(el);\n const box = toBox(rect);\n if (off) {\n // Strip our own displacement so the snapshot always describes the *undisplaced* layout.\n box.left -= off.x;\n box.right -= off.x;\n box.top -= off.y;\n box.bottom -= off.y;\n }\n const hidden = !isSlot && rect.width === 0 && rect.height === 0;\n if (hidden) continue;\n\n if (isSlot) slot = entries.length;\n else otherModelIndex.push(modelIdx);\n\n const known = previous.get(el);\n entries.push(\n known ?? {\n el: el,\n isSlot,\n base: initialTransform(el),\n savedTransform: el.style.transform,\n savedTransition: el.style.transition,\n savedWillChange: el.style.willChange,\n },\n );\n boxes.push(box);\n }\n\n this.entries = entries;\n this.boxes = boxes;\n this.slotIdx = slot;\n this.otherModelIndex = otherModelIndex;\n this.model = analyzeLayout(boxes, this.fallbackAxis, this.fallbackRtl);\n }\n\n // ---------------------------------------------------------------------------------------\n // transform strategy (DOM stays untouched)\n // ---------------------------------------------------------------------------------------\n\n private applyTransforms(target: number): void {\n const offsets = computeAxisOffsets(this.model, this.boxes, this.slotIdx, target);\n const horizontal = this.model.axis === 'x';\n this.entries.forEach((e, i) => {\n const o = offsets[i];\n this.setOffset(e, horizontal ? { x: o, y: 0 } : { x: 0, y: o });\n });\n }\n\n private setOffset(e: Entry, off: Point): void {\n const prev = this.applied.get(e.el);\n if ((prev?.x ?? 0) === off.x && (prev?.y ?? 0) === off.y) return;\n if (off.x === 0 && off.y === 0) {\n this.applied.delete(e.el);\n e.el.style.transform = e.savedTransform;\n } else {\n this.applied.set(e.el, off);\n e.el.style.transform = `translate3d(${off.x}px, ${off.y}px, 0)${e.base}`;\n }\n this.onOffsetChange?.(e.el, off);\n }\n\n // ---------------------------------------------------------------------------------------\n // flow strategy (single placeholder move + FLIP transforms)\n // ---------------------------------------------------------------------------------------\n\n private applyFlow(target: number): void {\n const entries = this.entries;\n\n // 1. READ: where everything visually is right now (including in-flight animations).\n const first = entries.map((e) => e.el.getBoundingClientRect());\n\n // 2. WRITE: move the one placeholder node; drop any FLIP transforms.\n this.placeAt(target);\n for (const e of entries) {\n e.el.style.transition = 'none';\n e.el.style.transform = e.savedTransform;\n }\n\n // 3. READ: where everything is after the browser re-flowed the list.\n const last = entries.map((e) => e.el.getBoundingClientRect());\n\n // 4. WRITE: invert (put each item back where it was), then play (animate to its new home).\n const moved: Entry[] = [];\n entries.forEach((e, i) => {\n const dx = first[i].left - last[i].left;\n const dy = first[i].top - last[i].top;\n if (this.animationMs > 0 && (Math.abs(dx) > 0.5 || Math.abs(dy) > 0.5)) {\n e.el.style.transform = `translate3d(${dx}px, ${dy}px, 0)${e.base}`;\n moved.push(e);\n }\n });\n\n const transition = this.animationMs > 0 ? `transform ${this.animationMs}ms ${EASING}` : '';\n if (moved.length) void this.container.offsetWidth; // commit the inverted frame\n for (const e of entries) e.el.style.transition = transition || e.savedTransition;\n for (const e of moved) e.el.style.transform = e.savedTransform;\n }\n\n private placeAt(target: number): void {\n const container = this.container;\n if (this.spacer === undefined) this.spacer = makeSpacer(container);\n const spacer = this.spacer;\n spacer?.remove();\n\n const others = this.entries.filter((e) => !e.isSlot);\n const ref = others[target]?.el;\n if (ref) {\n // ... [placeholder][separator][ref]: the separator that used to sit before `ref` still\n // separates it from its previous sibling, the new one separates it from the placeholder.\n container.insertBefore(this.placeholder, ref);\n if (spacer) container.insertBefore(spacer, ref);\n return;\n }\n const last = others[others.length - 1]?.el;\n const after = last ? last.nextSibling : null;\n if (spacer) container.insertBefore(spacer, after);\n container.insertBefore(this.placeholder, after);\n }\n\n private clearDisplacement(): void {\n for (const e of this.entries) {\n e.el.style.transition = 'none';\n e.el.style.transform = e.savedTransform;\n if (this.applied.has(e.el)) this.onOffsetChange?.(e.el, { x: 0, y: 0 });\n }\n this.applied.clear();\n }\n}\n\nfunction initialTransform(el: HTMLElement): string {\n const t = getComputedStyle?.(el)?.transform;\n return t && t !== 'none' ? ` ${t}` : '';\n}\n","import { ResizeDirection } from '../contracts/IResizableOutput';\n\n/**\n * Logical directions that resolve differently depending on text direction.\n * 'n' and 's' never change - only the horizontal component is direction-aware.\n */\ntype LogicalDirectionKey = 'start' | 'end' | 'n-start' | 'n-end' | 's-start' | 's-end';\n\n/** Base (LTR) physical direction for every logical direction. */\nconst LTR_BASE: Record<LogicalDirectionKey, ResizeDirection> = {\n start: 'w',\n end: 'e',\n 'n-start': 'nw',\n 'n-end': 'ne',\n 's-start': 'sw',\n 's-end': 'se',\n};\n\n/** Mirrors the horizontal component of a physical direction. 'n' / 's' pass through unchanged. */\nconst MIRROR: Record<ResizeDirection, ResizeDirection> = {\n n: 'n',\n s: 's',\n e: 'w',\n w: 'e',\n ne: 'nw',\n nw: 'ne',\n se: 'sw',\n sw: 'se',\n};\n\nfunction isLogicalDirection(dir: string): dir is LogicalDirectionKey {\n return Object.prototype.hasOwnProperty.call(LTR_BASE, dir);\n}\n\n/**\n * True when `element` sits inside a right-to-left context.\n *\n * Reads the *computed* `direction` style instead of `element.dir`, because\n * `direction` is inherited and is almost never set on the resizable element\n * itself - it's usually set on `<html>`, `<body>`, or some ancestor wrapper.\n */\nexport function isRtl(element: HTMLElement): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n\n return window.getComputedStyle(element).direction === 'rtl';\n}\n\n/**\n * Resolves a logical direction ('start' | 'end' | 'n-start' | 'n-end' | 's-start' | 's-end')\n * to a physical, viewport-space direction ('n' | 'e' | 's' | 'w' | 'ne' | 'nw' | 'se' | 'sw')\n * based on `rtl`.\n *\n * Physical directions pass through untouched, so it's always safe to call this\n * even when `dir` might already be physical (e.g. resolving a direction that was\n * already resolved once before).\n */\nexport function resolveLogicalDirection(dir: string, rtl: boolean): ResizeDirection {\n if (!isLogicalDirection(dir)) {\n return dir as ResizeDirection;\n }\n\n const base = LTR_BASE[dir];\n\n return rtl ? MIRROR[base] : base;\n}\n","import { EventEmitter } from '@angular/core';\nimport { IDropEvent } from './contracts/IDropEvent';\nimport { IPosition } from './contracts/IPosition';\nimport { DragRef } from './drag-ref';\nimport { DropListGroupRef } from './drop-list-group-ref';\nimport { PlaceHolderRef } from './placeholder-ref';\nimport {\n Box,\n Point,\n analyzeLayout,\n boxContains,\n resolveInsertionIndex,\n toBox,\n} from './sorting/layout-geometry';\nimport { SortSession, makeSpacer } from './sorting/sort-session';\nimport { isRtl } from './utils/rtl';\nimport { ScrollFrame } from './utils/scroll-frame';\nimport { isElementNode } from './utils/element.helper';\n\n/**\n * A drop list.\n *\n * Membership (`_draggables`) only ever reflects which draggables *belong* to this list in the\n * template. It is never changed by dragging. Everything that is transient during a drag lives\n * in a single `SortSession` (see sorting/sort-session.ts) that is created when a drag enters\n * the list and disposed when it leaves or the drag ends:\n *\n * - the list the drag started in keeps its session for the whole drag (its placeholder holds\n * the item's original slot, so leaving and re-entering is stable);\n * - any other list gets a fresh session on every entry and drops it on every exit.\n */\nexport class DropListRef<T = any> {\n data?: T;\n el!: HTMLElement;\n disableSort = false;\n connectedTo: HTMLElement[] = [];\n dropListGroup?: DropListGroupRef | null;\n /** Duration (ms) of the sibling slide animation. `0` disables animation. */\n sortAnimationDuration = 200;\n\n readonly _draggables = new Set<DragRef<T>>();\n readonly onDrop = new EventEmitter<IDropEvent<T>>();\n\n /**\n * Nesting: the nearest ENCLOSING drop list (null for a top-level list), and this list's own\n * direct nested lists — i.e. lists whose nearest enclosing list is this one, not a list at any\n * depth. Set by `NgxDropList` at init from a `skipSelf` DI lookup. Used for two things: (1)\n * `depth` for \"innermost wins\" in `DragRef`'s target resolution, without any DOM `.contains()`\n * calls on the hot path, and (2) cascading `_setAncestorOffset` (below) to every list nested\n * inside an item that gets displaced by sorting, at any depth.\n */\n parentList: DropListRef<any> | null = null;\n readonly childLists = new Set<DropListRef<any>>();\n\n private session: SortSession | null = null;\n private placeholder?: PlaceHolderRef;\n customPlaceholder?: PlaceHolderRef;\n private activeDrag: DragRef<T> | null = null;\n private isOrigin = false;\n private hovered = false;\n\n private hit: HitGeometry | null = null;\n /** Pre-insertion geometry of a foreign list, restored when the drag leaves it. */\n private naturalHit: HitGeometry | null = null;\n private hitCached = false;\n /**\n * Screen-space offset contributed by displaced ANCESTOR item(s) (see `parentList` above).\n * `{0,0}` outside of that (the overwhelmingly common case). Kept as a SUM of independent\n * per-source contributions, not a single overwritten value: while the pointer hovers a\n * FOREIGN (non-origin) list nested inside the origin's own displaced item, up to two ancestor\n * sessions can be displacing this list at once — the origin's (frozen, still active further\n * up) and that foreign list's own — and one clearing its contribution on release must not\n * wipe out the other's, still-active, contribution.\n */\n private readonly ancestorContributions = new Map<DropListRef<any>, Point>();\n private ancestorOffset: Point = { x: 0, y: 0 };\n /** Entries this list itself pushed via a one-time placeholder-insertion reflow (see below). */\n private readonly reflowContributions = new Map<HTMLElement, Point>();\n\n /** How many enclosing drop lists this one is nested inside. Root lists are depth 0. */\n get depth(): number {\n let d = 0;\n for (let p: DropListRef<any> | null = this.parentList; p; p = p.parentList) d++;\n return d;\n }\n\n _registerChild(child: DropListRef<any>): void {\n child.parentList = this;\n this.childLists.add(child);\n }\n\n _unregisterChild(child: DropListRef<any>): void {\n if (child.parentList === this) child.parentList = null;\n this.childLists.delete(child);\n }\n\n /**\n * One ancestor SESSION's contribution to this list's total displacement just changed (or\n * cleared, `{0,0}`). `source` identifies WHICH session — the list whose own item is doing the\n * displacing — so that this list's own recomputed total is a SUM across every currently-active\n * source, and cascades the SAME (source, offset) pair on to every nested list at any depth\n * unchanged, so a list several levels down stays hit-testable at its true on-screen position\n * regardless of which ancestor(s) are currently sorting.\n */\n _setAncestorOffset(source: DropListRef<any>, offset: Point): void {\n const prev = this.ancestorContributions.get(source);\n if (prev && prev.x === offset.x && prev.y === offset.y) return;\n if (offset.x === 0 && offset.y === 0) this.ancestorContributions.delete(source);\n else this.ancestorContributions.set(source, offset);\n\n let x = 0;\n let y = 0;\n for (const o of this.ancestorContributions.values()) {\n x += o.x;\n y += o.y;\n }\n if (x === this.ancestorOffset.x && y === this.ancestorOffset.y) return; // no net change\n this.ancestorOffset = { x, y };\n for (const child of this.childLists) child._setAncestorOffset(source, offset);\n }\n\n /** Which of this list's DIRECT nested lists live inside `el`, notified of its new offset. */\n private propagateOffset(el: HTMLElement, offset: Point): void {\n for (const child of this.childLists) {\n if (el.contains(child.el)) child._setAncestorOffset(this, offset);\n }\n }\n\n /** Rects, right now, of every `other` entry that contains one of this list's nested lists. */\n private trackedEntryRects(others: ReadonlySet<HTMLElement>): Map<HTMLElement, DOMRect> {\n const map = new Map<HTMLElement, DOMRect>();\n for (const child of this.childLists) {\n for (const el of others) {\n if (el.contains(child.el)) {\n if (!map.has(el)) map.set(el, el.getBoundingClientRect());\n break;\n }\n }\n }\n return map;\n }\n\n /** Turns the real reflow a fresh placeholder insertion just caused into ordinary offsets. */\n private propagateReflow(before: Map<HTMLElement, DOMRect>): void {\n for (const [el, prev] of before) {\n const now = el.getBoundingClientRect();\n const dx = now.left - prev.left;\n const dy = now.top - prev.top;\n if (dx || dy) {\n this.propagateOffset(el, { x: dx, y: dy });\n this.reflowContributions.set(el, { x: dx, y: dy });\n }\n }\n }\n\n addItem(item: DragRef<T>): void {\n this._draggables.add(item);\n }\n\n removeItem(item: DragRef<T>): void {\n this._draggables.delete(item);\n }\n\n isConnectedTo(other: DropListRef<any>): boolean {\n if (other === this) return true;\n if (this.connectedTo.includes(other.el) || other.connectedTo.includes(this.el)) return true;\n return !!this.dropListGroup && this.dropListGroup.has(other);\n }\n\n // ---------------------------------------------------------------------------------------\n // hit testing (cached for the duration of a drag)\n // ---------------------------------------------------------------------------------------\n\n /**\n * Measure the list and its clipping ancestors once, at drag start (or the moment a nested\n * list becomes a candidate mid-drag). `measureHit` reads live `getBoundingClientRect()`s,\n * which already include any `translate3d` an ancestor item's displacement has applied — so if\n * this list is currently offset (nested inside a sibling that sorting is displacing right\n * now), the measurement is normalized back to the zero-offset frame `_containsPoint` expects,\n * by subtracting that offset straight back out. Without this, entering a nested list while\n * its ancestor is mid-displacement would double-count the offset on every check afterwards.\n */\n _cacheGeometry(): void {\n const hit = measureHit(this.el);\n if (hit && (this.ancestorOffset.x || this.ancestorOffset.y)) {\n hit.box.left -= this.ancestorOffset.x;\n hit.box.right -= this.ancestorOffset.x;\n hit.box.top -= this.ancestorOffset.y;\n hit.box.bottom -= this.ancestorOffset.y;\n }\n this.hit = hit;\n this.hitCached = true;\n }\n\n /**\n * Is the point over the *visible* part of this list? Scroll-aware without re-measuring.\n *\n * The list box and every clipping ancestor are tracked separately because they react to scroll\n * differently: scrolling a container moves the list but not the container's own clip window.\n */\n _containsPoint(x: number, y: number): boolean {\n const hit = this.hitCached ? this.hit : measureHit(this.el);\n if (!hit) return false;\n // The list's own box shifts with any ancestor displacement; a clip window (a scroll/overflow\n // ancestor) normally does not, since it is not itself an item being sorted, so it is tested\n // against the raw pointer.\n const d0 = hit.frame.delta();\n if (!boxContains(hit.box, x - this.ancestorOffset.x + d0.x, y - this.ancestorOffset.y + d0.y))\n return false;\n for (const clip of hit.clips) {\n const d = clip.frame.delta();\n if (!boxContains(clip.box, x + d.x, y + d.y)) return false;\n }\n return true;\n }\n\n /** Approximate area, used to break ties between overlapping, unrelated lists. */\n _area(): number {\n const b = (this.hit ?? measureHit(this.el))?.box;\n return b ? (b.right - b.left) * (b.bottom - b.top) : 0;\n }\n\n _onScroll(): void {\n this.hit?.frame.invalidate();\n this.hit?.clips.forEach((c) => c.frame.invalidate());\n this.session?.onScroll();\n }\n\n /** Re-measure after a viewport resize. */\n _refresh(): void {\n if (this.hitCached) this._cacheGeometry();\n this.session?.refresh();\n }\n\n // ---------------------------------------------------------------------------------------\n // drag lifecycle\n // ---------------------------------------------------------------------------------------\n\n /** Backwards-compatible entry point: makes this list the drag's target. */\n createPlaceholder(drag: DragRef<T>): PlaceHolderRef {\n this.enter(drag, drag.pointer.x, drag.pointer.y);\n return drag.placeholder!;\n }\n\n /** The drag pointer entered this list (or the drag started inside it). */\n enter(drag: DragRef<T>, x = 0, y = 0): void {\n if (this.session && this.activeDrag === drag) {\n // Resuming a session that's still alive: either this is the origin list (its slot is\n // always kept), or the pointer dove into one of its own nested lists and came back up\n // (frozen rather than released in `exit()`, see there).\n this.hovered = true;\n this.el.classList.add('ngx-drop-list--active');\n drag.placeholder = this.placeholder;\n this.sortItem(drag, { x, y });\n return;\n }\n\n this.releaseSession(); // never keep stale state from a previous drag (geometry cache stays)\n this.begin(drag, { x, y });\n this.hovered = true;\n this.el.classList.add('ngx-drop-list--active');\n }\n\n /** Re-evaluate the insertion index for the pointer. Returns the new index, or null if unchanged. */\n sortItem(drag: DragRef<T>, position: IPosition): number | null {\n const s = this.session;\n if (!s || this.activeDrag !== drag || !this.hovered || this.disableSort) return null;\n const next = s.resolve(position);\n if (next === s.target) return null;\n s.apply(next);\n return s.modelIndex;\n }\n\n /** The pointer left this list. */\n /**\n * The pointer truly left this list (as opposed to moving deeper into one of its own nested\n * lists — see `DragRef`'s chain tracking, which never calls `exit()` for a list that remains\n * an ancestor of the new target, so this always means \"left this list's territory\").\n */\n exit(drag: DragRef<T>): void {\n if (!this.session || this.activeDrag !== drag) return;\n this.hovered = false;\n this.el.classList.remove('ngx-drop-list--active');\n\n if (this.isOrigin) {\n // Keep the original slot (the item logically still lives here) but stop displacing siblings.\n this.session.reset();\n } else {\n // A foreign list forgets the drag on exit; its geometry stays cached until the drag ends.\n this.releaseSession(drag);\n }\n }\n\n /**\n * The pointer dove into one of this list's own nested lists: this list is no longer the\n * innermost target, but it isn't being left either — its placeholder and sibling displacement\n * stay exactly as they are (avoids a snap-back-then-forward flicker), only the \"currently\n * hovered\" bookkeeping (and its visual highlight) is cleared. `DragRef`'s chain tracking calls\n * this instead of `exit()` for every list that remains an ancestor of the new target.\n */\n _freeze(): void {\n this.hovered = false;\n this.el.classList.remove('ngx-drop-list--active');\n }\n\n /**\n * Ends the drag for this list. Returns the drop event when the pointer was released over this\n * list, `null` otherwise (nothing to emit). All transient state is disposed either way.\n */\n _finish(drag: DragRef<T>, commit: boolean): IDropEvent<T> | null {\n const s = this.session;\n if (!s || this.activeDrag !== drag) return null;\n\n const event: IDropEvent<T> | null =\n commit && this.hovered\n ? {\n previousIndex: Math.max(0, drag.originIndex),\n currentIndex: s.modelIndex,\n item: drag,\n container: this,\n previousContainer: drag.originDropList ?? this,\n isPointerOverContainer: true,\n }\n : null;\n\n this.releaseSession(drag);\n return event;\n }\n\n /** Compatibility wrapper: finish + emit. */\n finishDrag(drag: DragRef<T>): void {\n const event = this._finish(drag, true);\n if (event) this.onDrop.emit(event);\n }\n\n resetSortTransforms(): void {\n this.session?.reset();\n }\n\n getFinalIndex(): number {\n return this.session ? this.session.modelIndex : 0;\n }\n\n getItemIndex(item: DragRef<T>): number {\n return this.indexOf(item);\n }\n\n /** End of the drag: dispose EVERYTHING this list holds, including cached geometry. Idempotent. */\n _release(drag?: DragRef<T>): void {\n if (drag && this.activeDrag && this.activeDrag !== drag) return;\n this.releaseSession(drag);\n this.hit = null;\n this.hitCached = false;\n // `ancestorOffset` is deliberately NOT reset here: `enter()` calls this unconditionally as a\n // safety-clear on every (re-)entry, including while a currently-active ancestor transform\n // still legitimately applies to this list. It self-corrects when that transform actually\n // reverts to zero, via the `onOffsetChange` cascade (see `_setAncestorOffset`), which also\n // covers the true end of a drag (the displaced list's own session disposes and reports\n // every entry back to `{0,0}`).\n }\n\n /** Dispose the sort session, placeholder and drag ownership. */\n private releaseSession(drag?: DragRef<T>): void {\n if (drag && this.activeDrag && this.activeDrag !== drag) return;\n\n this.session?.dispose();\n this.session = null;\n if (this.reflowContributions.size) {\n // The one-time reflow from this list's own placeholder insertion (see `propagateReflow`)\n // never went through the session's own `applied` map, so its `dispose()` above cannot\n // have cleared it — do that here instead, or it would linger as a stale contribution.\n for (const [el] of this.reflowContributions) this.propagateOffset(el, { x: 0, y: 0 });\n this.reflowContributions.clear();\n }\n\n this.placeholder?.detach();\n if (this.activeDrag && this.activeDrag.placeholder === this.placeholder) {\n this.activeDrag.placeholder = undefined;\n }\n this.placeholder = undefined;\n\n if (this.naturalHit) {\n this.hit = this.naturalHit;\n this.naturalHit = null;\n }\n\n this.activeDrag = null;\n this.isOrigin = false;\n this.hovered = false;\n this.el?.classList.remove('ngx-drop-list--active');\n }\n\n // ---------------------------------------------------------------------------------------\n // internals\n // ---------------------------------------------------------------------------------------\n\n private begin(drag: DragRef<T>, pointer: IPosition): void {\n const origin = drag.originDropList === this;\n const others = this.otherSlots(drag);\n const rtl = isRtl(this.el);\n const axis = fallbackAxis(this.el);\n\n const ph = this.customPlaceholder ?? new PlaceHolderRef();\n\n ph.dropList = this;\n let spacer: Text | null | undefined;\n\n if (origin) {\n // The placeholder takes over the exact slot of the (now hidden) source element.\n ph.attach(this.el, drag.el, drag.el);\n this.lockPlaceholderGeometry(drag, ph, drag.start);\n } else {\n ph.detach();\n // Only the \"other\" entries that contain a nested list are worth measuring (usually none,\n // or very few, even in a large tree): inserting the placeholder is a REAL DOM node, so it\n // shifts later siblings via ordinary CSS reflow, not `translate3d` — a one-time event this\n // list's own SortSession never reports through `onOffsetChange`, since (being sized and\n // positioned by `foreignInsertionReference` to already match where it belongs) it never\n // needs to actually transform anything afterwards. Measuring the small tracked set just\n // before and after the insertion turns that one-time reflow into an ordinary ancestor\n // contribution, exactly like any other displaced entry.\n const tracked = this.childLists.size ? this.trackedEntryRects(others) : null;\n const reference = this.foreignInsertionReference(others, pointer, axis, rtl);\n ph.attach(this.el, drag.el, reference);\n // Sized to its final footprint BEFORE measuring the reflow it causes: an unsized clone\n // (still near-zero height) wouldn't have pushed `others` at all yet.\n this.lockPlaceholderGeometry(drag, ph, drag.start);\n if (tracked) this.propagateReflow(tracked);\n spacer = makeSpacer(this.el);\n if (spacer) this.el.insertBefore(spacer, reference ?? ph.element!);\n }\n\n this.placeholder = ph;\n this.activeDrag = drag;\n this.isOrigin = origin;\n drag.placeholder = ph;\n\n this.session = new SortSession({\n container: this.el,\n placeholder: ph.element!,\n itemElements: others,\n fallbackAxis: axis,\n fallbackRtl: rtl,\n animationMs: this.sortAnimationDuration,\n spacer,\n onOffsetChange: this.childLists.size\n ? (el, offset) => this.propagateOffset(el, offset)\n : undefined,\n });\n\n if (!origin && this.hitCached) {\n // Inserting the placeholder made this list bigger; the grown box is what the user sees\n // (and must be able to reach, e.g. to append below the last item). The natural box comes\n // back on exit, so entering/leaving at the old edge cannot flicker.\n this.naturalHit = this.hit;\n this._cacheGeometry();\n }\n }\n\n /**\n * First placement into a list that does not contain the item yet: the node the placeholder\n * must be inserted before (null = append). Same pure resolver as sorting, no hysteresis.\n */\n private foreignInsertionReference(\n others: ReadonlySet<HTMLElement>,\n pointer: IPosition,\n axis: 'x' | 'y',\n rtl: boolean,\n ): Node | null {\n const els: HTMLElement[] = [];\n const boxes: Box[] = [];\n for (const node of Array.from(this.el.children)) {\n if (!isElementNode(node)) continue;\n const el = node as HTMLElement;\n if (!others.has(el)) continue;\n\n const r = el.getBoundingClientRect();\n if (r.width === 0 && r.height === 0) continue;\n els.push(el);\n boxes.push(toBox(r));\n }\n if (!els.length) return null;\n\n const index = this.disableSort\n ? els.length\n : resolveInsertionIndex(analyzeLayout(boxes, axis, rtl), boxes, -1, pointer, null);\n\n return index < els.length ? els[index] : els[els.length - 1].nextSibling;\n }\n\n private otherSlots(drag: DragRef<T>): Set<HTMLElement> {\n const set = new Set<HTMLElement>();\n for (const d of this._draggables) {\n if (d !== drag && d.el?.parentElement === this.el) set.add(d.el);\n }\n return set;\n }\n\n private indexOf(item: DragRef<T>): number {\n const byElement = new Map<HTMLElement, DragRef<T>>();\n for (const d of this._draggables) if (d.el) byElement.set(d.el, d);\n\n let index = 0;\n for (const node of Array.from(this.el.children)) {\n if (!isElementNode(node)) continue;\n const el = node as HTMLElement;\n if (el === this.placeholder?.element) continue;\n if (el.classList.contains('ngx-drag-placeholder')) continue;\n if (el.classList.contains('ngx-drag-preview')) continue;\n const ref = byElement.get(el);\n if (!ref) continue;\n if (ref === item) return index;\n index++;\n }\n return -1;\n }\n\n private lockPlaceholderGeometry(drag: DragRef<T>, ph: PlaceHolderRef, rect: DOMRect): void {\n const placeholder = ph.element!;\n const set = (k: string, v: string) => placeholder.style.setProperty(k, v, 'important');\n\n placeholder.style.zIndex = '';\n placeholder.style.removeProperty('will-change');\n\n if (ph.custom) return;\n\n placeholder.style.display = drag.originalDisplay;\n\n // Occupies exactly the dragged item's footprint, so the gap reserved in the list — and the\n // sibling-displacement math derived from it — matches the item's real size.\n set('width', `${rect.width}px`);\n set('height', `${rect.height}px`);\n // set('min-width', `${rect.width}px`);\n // set('min-height', `${rect.height}px`);\n // set('max-width', `${rect.width}px`);\n // set('max-height', `${rect.height}px`);\n set('visibility', 'visible');\n set('opacity', '0.16');\n set('pointer-events', 'none');\n set('animation', 'none');\n set('box-sizing', 'border-box');\n }\n}\n\n/** Orientation to assume while a list has fewer than two items to measure. */\nfunction fallbackAxis(container: HTMLElement): 'x' | 'y' {\n const s = getComputedStyle(container);\n if (s.display.includes('flex')) return s.flexDirection.startsWith('column') ? 'y' : 'x';\n if (s.display.includes('grid')) return 'y';\n const child = container.firstElementChild;\n if (child && getComputedStyle(child).display.startsWith('inline')) return 'x';\n return 'y';\n}\n\ninterface HitGeometry {\n box: Box;\n frame: ScrollFrame;\n clips: { box: Box; frame: ScrollFrame }[];\n}\n\n/** Rect of the list plus one clip window per clipping (overflow != visible) ancestor. */\nfunction measureHit(el: HTMLElement): HitGeometry | null {\n const r = el.getBoundingClientRect();\n if (r.right <= r.left || r.bottom <= r.top) return null;\n\n const clips: HitGeometry['clips'] = [];\n const root = el.ownerDocument.documentElement;\n for (let node = el.parentElement; node && node !== root; node = node.parentElement) {\n const s = getComputedStyle(node);\n const cx = s.overflowX !== 'visible';\n const cy = s.overflowY !== 'visible';\n if (!cx && !cy) continue;\n const c = node.getBoundingClientRect();\n clips.push({\n box: {\n left: cx ? c.left : -Infinity,\n right: cx ? c.right : Infinity,\n top: cy ? c.top : -Infinity,\n bottom: cy ? c.bottom : Infinity,\n },\n // A clip window only moves when something ABOVE the clipping element scrolls.\n frame: new ScrollFrame(node, false),\n });\n }\n return { box: toBox(r), frame: new ScrollFrame(el, false), clips };\n}\n","import { DropListRef } from './drop-list-ref';\n\n/**\n * Groups multiple drop lists so items can be dragged between them without\n * needing an explicit `connectedTo` list on every single one.\n * Lists register themselves automatically when `NgxDropListGroup` wraps them.\n */\nexport class DropListGroupRef {\n readonly lists = new Set<DropListRef<any>>();\n\n add(list: DropListRef<any>): void {\n this.lists.add(list);\n }\n remove(list: DropListRef<any>): void {\n this.lists.delete(list);\n }\n has(list: DropListRef<any> | null | undefined): boolean {\n return !!list && this.lists.has(list);\n }\n}\n","import { Injectable, signal } from '@angular/core';\nimport { DragRef } from '../drag-ref';\nimport { DropListRef } from '../drop-list-ref';\nimport { DropListGroupRef } from '../drop-list-group-ref';\nimport { isDocumentNode, isElementNode, isShadowRootNode } from '../utils/element.helper';\n\n@Injectable({ providedIn: 'root' })\nexport class DragDropService {\n readonly drags = signal<readonly DragRef[]>([]);\n readonly dropLists = signal<readonly DropListRef[]>([]);\n readonly activeDrag = signal<DragRef | null>(null);\n\n private readonly listsByEl = new Map<HTMLElement, DropListRef>();\n private readonly groupsByEl = new Map<HTMLElement, DropListGroupRef>();\n\n registerDragItem(ref: DragRef<any>): void {\n this.drags.update((items) => (items.includes(ref) ? items : [...items, ref]));\n }\n\n removeDragItem(ref: DragRef<any>): void {\n this.drags.update((items) => items.filter((x) => x !== ref));\n if (this.activeDrag() === ref) this.activeDrag.set(null);\n }\n\n registerDropList(ref: DropListRef): void {\n this.dropLists.update((items) => (items.includes(ref) ? items : [...items, ref]));\n if (ref.el) this.listsByEl.set(ref.el, ref);\n }\n\n removeDropList(ref: DropListRef<any>): void {\n this.dropLists.update((items) => items.filter((x) => x !== ref));\n if (ref.el && this.listsByEl.get(ref.el) === ref) this.listsByEl.delete(ref.el);\n }\n\n registerGroup(el: HTMLElement, ref: DropListGroupRef): void {\n this.groupsByEl.set(el, ref);\n }\n\n removeGroup(el: HTMLElement): void {\n this.groupsByEl.delete(el);\n }\n\n /** Nearest registered drop list starting at (and including) `start`, walking up the DOM. */\n findAncestorDropList(start: HTMLElement | ParentNode | null): DropListRef | null {\n let node: Node | null = start;\n while (node) {\n if (isElementNode(node)) {\n const found = this.listsByEl.get(node as HTMLElement);\n if (found) {\n return found;\n }\n }\n if (isShadowRootNode(node) && 'host' in node) {\n node = (node as ShadowRoot).host;\n continue;\n }\n if (isDocumentNode(node)) {\n const frame = (node as Document).defaultView?.frameElement;\n if (frame) {\n node = frame;\n continue;\n }\n break;\n }\n node = node.parentNode;\n }\n return null;\n }\n\n /** Nearest registered drop-list group starting at (and including) `start`, walking up the DOM. */\n findAncestorGroup(start: Node | null): DropListGroupRef | null {\n let node: Node | null = start;\n while (node) {\n // HTMLElement / SVGElement / ...\n if (isElementNode(node)) {\n const found = this.groupsByEl.get(node as HTMLElement);\n\n if (found) {\n return found;\n }\n }\n // ShadowRoot\n // ShadowRoot یک DocumentFragment است و در iframe ممکن است\n if (isShadowRootNode(node) && 'host' in node && node.host) {\n node = node.host as Node;\n continue;\n }\n\n // iframe Document\n // 9 === DOCUMENT_NODE\n if (node.nodeType === 9) {\n const frame = (node as Document).defaultView?.frameElement;\n if (frame) {\n node = frame;\n continue;\n }\n // root document\n break;\n }\n node = node.parentNode;\n }\n return null;\n }\n\n begin(ref: DragRef<any>): void {\n this.activeDrag.set(ref);\n }\n\n end(ref: DragRef<any>): void {\n if (this.activeDrag() === ref) this.activeDrag.set(null);\n }\n\n cancelActive(): void {\n const ref = this.activeDrag();\n if (!ref) return;\n ref.cancelDrag();\n this.activeDrag.set(null);\n }\n\n /**\n * Which drop list is under `point`?\n *\n * - Only lists connected to the drag's ORIGIN list qualify (connectivity is not transitive, so\n * A→B→C never lets an item hop A→C). Without an origin (a free-drag element) nothing\n * qualifies: free dragging is never captured by a list.\n * - Only the visible (clip-aware) part of a list counts.\n * - A list inside the dragged element itself is never a target.\n * - Nested lists: the innermost qualifying list wins. Among unrelated overlapping lists the\n * current one is kept (no flicker), otherwise the smallest.\n */\n findDropList(\n point: { x: number; y: number },\n current?: DropListRef | null,\n origin?: DropListRef | null,\n dragEl?: HTMLElement | null,\n ): DropListRef | null {\n const source = origin ?? null;\n if (!source) return null;\n\n let best: DropListRef | null = null;\n for (const list of this.dropLists()) {\n if (!list.el || !source.isConnectedTo(list)) continue;\n if (dragEl && dragEl !== list.el && dragEl.contains(list.el)) continue;\n if (!list._containsPoint(point.x, point.y)) continue;\n\n if (!best) best = list;\n else if (best.el.contains(list.el))\n best = list; // deeper wins\n else if (list.el.contains(best.el)) continue;\n else if (list === current) best = list;\n else if (best !== current && list._area() < best._area()) best = list;\n }\n return best;\n }\n}\n","import { isWindow } from './element.helper';\n\n/**\n * Auto-scrolls the nearest scrollable ancestor (or window) while the pointer\n * is dragged near the edge of the scrollable viewport. Direction-agnostic —\n * works the same in RTL and LTR since it operates on physical scroll deltas.\n */\nexport class AutoScroller {\n private raf = 0;\n private container: HTMLElement | Window = window;\n private speed = { x: 0, y: 0 };\n private onTick?: () => void;\n private readonly edge: number;\n private readonly maxSpeed: number;\n\n constructor(edge = 56, maxSpeed = 18) {\n this.edge = edge;\n this.maxSpeed = maxSpeed;\n }\n\n /** onTick اجرا میشود بعد از هر گام اسکرول، تا با آخرین موقعیت pointer، sort/placeholder بهروز شود. */\n start(fromEl: HTMLElement, onTick?: () => void): void {\n this.container = findScrollableAncestor(fromEl);\n this.onTick = onTick;\n }\n\n /** فقط container را عوض میکند بدون قطع حلقهی در حال اجرا یا صفر کردن speed. */\n retarget(fromEl: HTMLElement): void {\n this.container = findScrollableAncestor(fromEl);\n }\n\n update(clientX: number, clientY: number): void {\n const rect = getScrollRect(this.container);\n this.speed = {\n x: edgeSpeed(clientX, rect.left, rect.right, this.edge, this.maxSpeed),\n y: edgeSpeed(clientY, rect.top, rect.bottom, this.edge, this.maxSpeed),\n };\n if ((this.speed.x || this.speed.y) && !this.raf) {\n this.raf = requestAnimationFrame(this.tick);\n }\n }\n\n stop(): void {\n if (this.raf) cancelAnimationFrame(this.raf);\n this.raf = 0;\n this.speed = { x: 0, y: 0 };\n this.onTick = undefined;\n }\n\n private tick = (): void => {\n if (!this.speed.x && !this.speed.y) {\n this.raf = 0;\n return;\n }\n\n const container = this.container;\n\n if (isWindow(container)) {\n container.scrollBy(this.speed.x, this.speed.y);\n } else {\n container.scrollLeft += this.speed.x;\n container.scrollTop += this.speed.y;\n }\n\n // Pointer ثابت مانده ولی محتوا اسکرول شده؛\n // بنابراین موقعیت placeholder/sort را دوباره محاسبه کن.\n this.onTick?.();\n\n this.raf = requestAnimationFrame(this.tick);\n };\n}\n\nfunction edgeSpeed(pos: number, min: number, max: number, edge: number, maxSpeed: number): number {\n if (pos < min + edge) return -maxSpeed * (1 - Math.max(0, pos - min) / edge);\n if (pos > max - edge) return maxSpeed * (1 - Math.max(0, max - pos) / edge);\n return 0;\n}\n\nfunction getScrollRect(container: HTMLElement | Window): {\n left: number;\n right: number;\n top: number;\n bottom: number;\n} {\n if (isWindow(container)) {\n return { left: 0, top: 0, right: window.innerWidth, bottom: window.innerHeight };\n }\n return container.getBoundingClientRect();\n}\n\nexport function findScrollableAncestor(el: HTMLElement): HTMLElement | Window {\n let node: HTMLElement | null = el;\n\n while (node) {\n const style = getComputedStyle(node);\n const scrollable = /(auto|scroll|overlay)/.test(style.overflowY + style.overflowX);\n\n if (scrollable && node.scrollHeight > node.clientHeight) {\n return node;\n }\n\n node = node.parentElement;\n }\n\n return el.ownerDocument.defaultView ?? window;\n}\n\nexport function getScrollPosition(container: HTMLElement | Window): { left: number; top: number } {\n if (isWindow(container)) {\n return { left: window.scrollX, top: window.scrollY };\n }\n return { left: container.scrollLeft, top: container.scrollTop };\n}\n","import { ApplicationRef, Directive, inject, InjectionToken, TemplateRef } from '@angular/core';\nimport { DragPreviewRef } from '../drag-preview-ref';\n\nexport const NGX_DRAG_PREVIEW = new InjectionToken<DragPreviewRef>('ngx_drag_preview');\n\n/**\n * Custom preview content, from `*ngxDragPreview` inside the `ngxDraggable`.\n *\n * @example\n * ```html\n * <div ngxDropList>\n * <div ngxDraggable>\n * <span class=\"my-preview\" *ngxDragPreview></span>\n * ...\n * </div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[ngxDragPreview]',\n providers: [{ provide: NGX_DRAG_PREVIEW, useExisting: NgxDragPreview }],\n})\nexport class NgxDragPreview {\n readonly _ref = new DragPreviewRef();\n\n constructor(public readonly tpl: TemplateRef<unknown>) {\n this._ref.tpl = tpl;\n this._ref.appRef = inject(ApplicationRef);\n }\n}\n","import {\n ContentChild,\n Directive,\n ElementRef,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n type AfterContentInit,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { DragDropService } from '../services/drag-drop.service';\nimport { DragRef, DragAxis } from '../drag-ref';\nimport { IPosition } from '../contracts/IPosition';\nimport { AutoScroller, findScrollableAncestor, getScrollPosition } from '../utils/auto-scroll';\nimport { NgxDragPreview } from './ngx-drag-preview.directive';\n\n/** Pointer events already claimed by an (inner) draggable. */\nconst claimedPointerEvents = new WeakSet<Event>();\n\nexport const NGX_DRAGGABLE = new InjectionToken<NgxDraggable>('ngx-draggable');\n\nconst DEFAULT_KEYBOARD_STEP = 8;\n\n@Directive({\n selector: '[NgxDraggable],[ngxDraggable]',\n providers: [{ provide: NGX_DRAGGABLE, useExisting: NgxDraggable }],\n host: {\n '[style.touch-action]': '\"none\"',\n '[attr.tabindex]': 'disabled() ? null : 0',\n '[attr.aria-grabbed]': 'dragging()',\n class: 'ngx-draggable',\n '[class.disable-drag]': 'disabled()',\n },\n})\nexport class NgxDraggable<T = unknown> implements OnInit, OnDestroy, AfterContentInit {\n readonly disabled = model<boolean>(false);\n /** Element whose rect constrains the drag. Now actually enforced. */\n readonly boundary = input<HTMLElement>();\n readonly dragRootElement = model<string>('');\n /** CSS selector for a drag handle. When set, only pointerdowns inside it start a drag. */\n readonly dragHandle = model<string>('');\n /** Restrict movement to a single axis. */\n readonly lockAxis = input<DragAxis>();\n /** Minimum pointer travel (px) before a drag starts, so clicks still register normally. */\n readonly dragThreshold = input<number>(3);\n /** Pixel step used when dragging via the keyboard (arrow keys, focus required). */\n readonly keyboardStep = input<number>(DEFAULT_KEYBOARD_STEP);\n /** Auto-scroll the nearest scrollable ancestor while dragging near its edge. */\n readonly autoScroll = input<boolean>(true);\n @Input('data') set data(v: T) {\n this._ref.data = v;\n }\n\n @ContentChild(NgxDragPreview) private readonly customPreview?: NgxDragPreview;\n\n readonly dragStart = output<IPosition>();\n readonly dragMove = output<IPosition>();\n readonly dragEnd = output<IPosition>();\n\n readonly _ref = new DragRef<T>();\n readonly dragging = signal(false);\n\n private readonly doc = inject(DOCUMENT);\n private readonly service = inject(DragDropService);\n private readonly scroller = new AutoScroller();\n\n private down = false;\n private start = { x: 0, y: 0 };\n private pointerId = -1;\n private lastPointer: IPosition = { x: 0, y: 0 };\n private removeDown?: () => void;\n private removeMove?: () => void;\n private removeUp?: () => void;\n private removeKeydown?: () => void;\n private removeEscape?: () => void;\n private removeCancel?: () => void;\n private removeLostCapture?: () => void;\n private scrollTarget: HTMLElement | Window = window;\n private lastScroll = { left: 0, top: 0 };\n private lastWindowScroll = { left: 0, top: 0 };\n private removeContainerScroll?: () => void;\n private removeWindowScroll?: () => void;\n\n protected readonly renderer = inject(Renderer2);\n constructor(private readonly host: ElementRef<HTMLElement>) {\n effect(() => {\n this._ref.el = this.dragRootElement()\n ? (this.host.nativeElement.closest(this.dragRootElement()) ?? this.host.nativeElement)\n : this.host.nativeElement;\n });\n }\n\n ngOnInit(): void {\n this._ref.el = this.dragRootElement()\n ? (this.host.nativeElement.closest(this.dragRootElement()) ?? this.host.nativeElement)\n : this.host.nativeElement;\n this._ref.boundary = this.boundary();\n this._ref.lockAxis = this.lockAxis();\n // Found by walking the real DOM, not Angular's element-injector tree — see the matching\n // comment in `ngx-drop-list.directive.ts` for why: a draggable rendered by a recursively\n // invoked `ngTemplateOutlet` needs this just as much as a nested list does.\n const parentEl = this.host.nativeElement.parentElement;\n const list = this.service.findAncestorDropList(parentEl);\n this._ref.dropListGroup = list?.dropListGroup ?? this.service.findAncestorGroup(parentEl);\n this._ref.service = this.service;\n this._ref.init();\n this._ref.withDropList(list ?? null);\n this.service.registerDragItem(this._ref);\n this.removeDown = this.renderer.listen(\n this.host.nativeElement,\n 'pointerdown',\n (e: PointerEvent) => this.pointerDown(e),\n );\n this.removeKeydown = this.renderer.listen(\n this.host.nativeElement,\n 'keydown',\n (e: KeyboardEvent) => this.keyDown(e),\n );\n }\n ngAfterContentInit(): void {\n if (this.customPreview) {\n this._ref.preview = this.customPreview._ref;\n }\n }\n\n ngOnDestroy(): void {\n this.removeDown?.();\n this.removeMove?.();\n this.removeUp?.();\n this.removeKeydown?.();\n this.removeEscape?.();\n this.removeCancel?.();\n this.removeLostCapture?.();\n this.scroller.stop();\n this.stopScrollTracking();\n // Destroyed mid-drag (e.g. the model changed underneath us): never leave a body clone behind.\n this._ref.dispose();\n this.service.removeDragItem(this._ref);\n this._ref.dropList?.removeItem(this._ref);\n }\n\n private pointerDown(e: PointerEvent): void {\n if (\n this.disabled() ||\n e.button !== 0 ||\n // this.isInteractive(e.target) ||\n !this.isOnHandle(e.target)\n )\n return;\n // Nested draggables: pointerdown bubbles, so without this an ancestor draggable would start\n // its own drag from the very same gesture. The innermost enabled draggable claims it.\n if (claimedPointerEvents.has(e)) return;\n claimedPointerEvents.add(e);\n e.preventDefault();\n this.down = true;\n this.pointerId = e.pointerId;\n this._ref.el.setPointerCapture(this.pointerId);\n this.start = { x: e.clientX, y: e.clientY };\n this._ref.boundary = this.boundary();\n this._ref.lockAxis = this.lockAxis();\n this._ref.pointerDown(this.start);\n this.removeMove = this.renderer.listen(this._ref.el, 'pointermove', (ev: PointerEvent) =>\n this.pointerMove(ev),\n );\n this.removeUp = this.renderer.listen(this._ref.el, 'pointerup', (ev: PointerEvent) =>\n this.pointerUp(ev),\n );\n this.removeEscape = this.renderer.listen(this.doc, 'keydown', (ev: KeyboardEvent) => {\n if (ev.key === 'Escape' && this.dragging()) this.cancel();\n });\n this.removeCancel = this.renderer.listen(this.doc, 'pointercancel', (ev: PointerEvent) =>\n this.pointerCancel(ev),\n );\n this.removeLostCapture = this.renderer.listen(\n this.doc,\n 'lostpointercapture',\n (ev: PointerEvent) => this.pointerCancel(ev),\n );\n }\n private applyDragUpdate(p: IPosition): void {\n const before = this._ref.activeDropList;\n // DragRef decides everything (preview, target list, placeholder). A free drag never\n // interacts with drop lists.\n this._ref.dragMove(p);\n\n if (this._ref.isListDrag && this.autoScroll()) {\n const after = this._ref.activeDropList;\n // Follow the hovered list; outside every list, scroll the page.\n if (after !== before) this.scroller.retarget(after?.el ?? this.doc.body);\n }\n this.dragMove.emit(p);\n }\n /** فراخوانی میشود دقیقاً وقتی drag واقعاً شروع میشود (چه با موس، چه با کیبورد). */\n private startScrollTracking(): void {\n this.scrollTarget = findScrollableAncestor(this._ref.el);\n this.lastScroll = getScrollPosition(this.scrollTarget);\n this.lastWindowScroll = { left: window.scrollX, top: window.scrollY };\n\n if (this.scrollTarget !== window) {\n this.removeContainerScroll = this.renderer.listen(this.scrollTarget, 'scroll', () =>\n this.handleContainerScroll(),\n );\n }\n // همیشه window رو هم جدا گوش میدیم؛ چون ممکنه container محلی نداشته باشیم\n // ولی خودِ صفحه اسکرول بشه.\n this.removeWindowScroll = this.renderer.listen('window', 'scroll', () =>\n this.handleWindowScroll(),\n );\n }\n\n private handleContainerScroll(): void {\n const pos = getScrollPosition(this.scrollTarget);\n const dx = pos.left - this.lastScroll.left;\n const dy = pos.top - this.lastScroll.top;\n this.lastScroll = pos;\n this._ref.notifyScroll(dx, dy);\n }\n\n private handleWindowScroll(): void {\n const left = window.scrollX;\n const top = window.scrollY;\n const dx = left - this.lastWindowScroll.left;\n const dy = top - this.lastWindowScroll.top;\n this.lastWindowScroll = { left, top };\n this._ref.notifyScroll(dx, dy);\n }\n\n private stopScrollTracking(): void {\n this.removeContainerScroll?.();\n this.removeWindowScroll?.();\n this.removeContainerScroll = this.removeWindowScroll = undefined;\n }\n\n private pointerMove(e: PointerEvent): void {\n if (!this.down || e.pointerId !== this.pointerId) return;\n const p = { x: e.clientX, y: e.clientY };\n this.lastPointer = p;\n if (\n !this.dragging() &&\n Math.hypot(p.x - this.start.x, p.y - this.start.y) < this.dragThreshold()\n )\n return;\n if (!this.dragging()) {\n this._ref.startDrag(p);\n this.dragging.set(true);\n this.service.begin(this._ref);\n this.startScrollTracking();\n if (this.autoScroll()) {\n this.scroller.start(this._ref.el, () => this.applyDragUpdate(this.lastPointer));\n }\n this.dragStart.emit(p);\n }\n\n this.applyDragUpdate(p);\n\n if (this.autoScroll()) this.scroller.update(p.x, p.y);\n }\n private pointerUp(e: PointerEvent): void {\n if (!this.down || e.pointerId !== this.pointerId) return;\n\n if (this._ref.el.hasPointerCapture(this.pointerId)) {\n this._ref.el.releasePointerCapture(this.pointerId);\n }\n\n if (this.dragging()) {\n // Also when released OUTSIDE every list: endDrag() rolls the drag back and cleans up.\n if (this._ref.isListDrag) {\n // The release position is authoritative for the drop target (a fast flick may end with\n // a pointerup that has no preceding pointermove at that position).\n const p = { x: e.clientX, y: e.clientY };\n if (p.x !== this.lastPointer.x || p.y !== this.lastPointer.y) this._ref.dragMove(p);\n this._ref.endDrag();\n }\n this.service.end(this._ref);\n }\n this.finish();\n this.dragEnd.emit(this._ref.pointer);\n }\n\n /** Browser cancelled the pointer (touch takeover, lost capture...). */\n private pointerCancel(e: PointerEvent): void {\n if (!this.down || e.pointerId !== this.pointerId) return;\n if (this.dragging() && this._ref.isListDrag) {\n this.cancel();\n return;\n }\n this.pointerUp(e);\n }\n\n private cancel(): void {\n this._ref.cancelDrag();\n this.service.end(this._ref);\n this.finish();\n }\n\n private finish(): void {\n this.dragging.set(false);\n this.down = false;\n this.scroller.stop();\n this.stopScrollTracking();\n this.removeMove?.();\n this.removeUp?.();\n this.removeEscape?.();\n this.removeCancel?.();\n this.removeLostCapture?.();\n this.removeMove = this.removeUp = this.removeEscape = undefined;\n this.removeCancel = this.removeLostCapture = undefined;\n }\n\n /** Arrow-key movement for keyboard/assistive-tech users. Shift multiplies the step by 4. */\n private keyDown(e: KeyboardEvent): void {\n if (this.disabled()) return;\n const step = this.keyboardStep() * (e.shiftKey ? 4 : 1);\n const deltas: Record<string, IPosition> = {\n ArrowLeft: { x: -step, y: 0 },\n ArrowRight: { x: step, y: 0 },\n ArrowUp: { x: 0, y: -step },\n ArrowDown: { x: 0, y: step },\n };\n const delta = deltas[e.key];\n if (delta) {\n e.preventDefault();\n if (!this.dragging()) {\n // Free drag keeps its (0,0) pseudo pointer. A list item starts from its own centre so\n // that keyboard sorting resolves against real geometry.\n const inList = !!this._ref.dropList && this._ref.dropList.el === this._ref.el.parentElement;\n const r = this._ref.el.getBoundingClientRect();\n const origin = inList\n ? { x: r.left + r.width / 2, y: r.top + r.height / 2 }\n : { x: 0, y: 0 };\n this._ref.pointerDown(origin);\n this._ref.boundary = this.boundary();\n this._ref.lockAxis = this.lockAxis();\n this._ref.startDrag(origin);\n this.dragging.set(true);\n this.service.begin(this._ref);\n this.startScrollTracking();\n this.dragStart.emit(origin);\n }\n this._ref.nudge(delta.x, delta.y);\n this.dragMove.emit(this._ref.pointer);\n return;\n }\n if ((e.key === 'Enter' || e.key === ' ') && this.dragging()) {\n e.preventDefault();\n this._ref.endDrag();\n this.service.end(this._ref);\n this.dragEnd.emit(this._ref.pointer);\n this.dragging.set(false);\n this.stopScrollTracking();\n } else if (e.key === 'Escape' && this.dragging()) {\n e.preventDefault();\n this._ref.cancelDrag();\n this.service.end(this._ref);\n this.dragging.set(false);\n }\n }\n\n private isOnHandle(target: EventTarget | null): boolean {\n if (!this.dragHandle()) return true;\n // TODO notsafe instanseof: node.nodeType === Node.ELEMENT_NODE\n return target instanceof HTMLElement && !!target.closest(this.dragHandle());\n }\n\n private isInteractive(target: EventTarget | null): boolean {\n // TODO notsafe instanseof: node.nodeType === Node.ELEMENT_NODE\n return (\n target instanceof HTMLElement &&\n !!target.closest('button,a,input,textarea,select,[data-no-drag]')\n );\n }\n}\n","import { Directive, ElementRef, HostListener, input, model, output, signal } from '@angular/core';\nimport {\n IResizableOutput,\n LogicalResizeDirection,\n ResizeDirection,\n} from '../contracts/IResizableOutput';\nimport { clampResizeWithinBoundary } from '../utils/check-boundary';\nimport { isRtl, resolveLogicalDirection } from '../utils/rtl';\n\nconst ALL_DIRECTIONS: ResizeDirection[] = ['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'];\nconst KEYBOARD_STEP = 8;\n\n@Directive({\n selector: '[NgxResizable],[ngxResizable]',\n host: {\n '[style.touch-action]': '\"none\"',\n class: 'ngx-resizable',\n },\n})\nexport class NgxResizable {\n disabled = model<boolean>(false);\n readonly minWidth = model<number>(20);\n readonly minHeight = model<number>(20);\n readonly maxWidth = model<number>(Infinity);\n readonly maxHeight = model<number>(Infinity);\n readonly directions = input<LogicalResizeDirection[]>([...ALL_DIRECTIONS]);\n readonly grid = input<number | { x: number; y: number }>();\n\n /** Element whose rect constrains the resize. Previously accepted nowhere on this directive. */\n readonly boundary = input<HTMLElement>();\n /** Pixel step used when resizing via the keyboard (arrow keys, focus required). */\n readonly keyboardStep = input<number>(KEYBOARD_STEP);\n\n readonly resizeStart = output<IResizableOutput>();\n readonly resizeMove = output<IResizableOutput>();\n readonly resizeEnd = output<IResizableOutput>();\n\n readonly resizing = signal(false);\n private direction: ResizeDirection = 'se';\n\n private start!: DOMRect;\n private pointer = {\n x: 0,\n y: 0,\n };\n private beforeTransition = '';\n private beforeWidth = '';\n private beforeHeight = '';\n private beforeTransform = '';\n private pointerId = -1;\n constructor(private readonly el: ElementRef<HTMLElement>) {}\n\n @HostListener('pointerdown', ['$event'])\n onPointerDown(e: PointerEvent): void {\n if (this.disabled() || e.button !== 0) {\n return;\n }\n\n const dir = this.hitDirection(e);\n\n if (!dir) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n const element = this.el.nativeElement;\n this.direction = dir;\n this.pointerId = e.pointerId;\n /**\n * This is the actual visual rectangle.\n * It already contains any transform created by DragRef.\n */\n this.start = element.getBoundingClientRect();\n\n this.pointer = {\n x: e.clientX,\n y: e.clientY,\n };\n\n this.beforeTransition = element.style.transition;\n\n /**\n * Keep DragRef's transform as the immutable base.\n *\n * Resize will temporarily add its own translation\n * on top of this transform.\n */\n this.beforeTransform = element.style.transform;\n\n this.resizing.set(true);\n element.style.transition = 'none';\n element.setPointerCapture?.(e.pointerId);\n const out = this.calculate(e);\n this.apply(out);\n this.resizeStart.emit(out);\n }\n\n @HostListener('document:pointermove', ['$event'])\n onPointerMove(e: PointerEvent): void {\n if (!this.resizing() || e.pointerId !== this.pointerId) {\n return;\n }\n const out = this.calculate(e);\n this.apply(out);\n this.resizeMove.emit(out);\n }\n\n @HostListener('document:pointerup', ['$event'])\n onPointerUp(e: PointerEvent): void {\n if (!this.resizing() || e.pointerId !== this.pointerId) {\n return;\n }\n const out = this.calculate(e);\n this.apply(out);\n this.resizeEnd.emit(out);\n this.finish();\n }\n\n @HostListener('document:keydown', ['$event'])\n onDocumentKeyDown(e: KeyboardEvent): void {\n if (!this.resizing()) {\n return;\n }\n if (e.key !== 'Escape') {\n return;\n }\n e.preventDefault();\n const element = this.el.nativeElement;\n element.style.width = this.beforeWidth;\n element.style.height = this.beforeHeight;\n element.style.transform = this.beforeTransform;\n this.finish();\n }\n\n @HostListener('keydown', ['$event'])\n onHandleKeyDown(e: KeyboardEvent): void {\n if (this.disabled()) {\n return;\n }\n\n const rtl = isRtl(this.el.nativeElement);\n const step = this.keyboardStep() * (e.shiftKey ? 4 : 1);\n let dw = 0;\n let dh = 0;\n if (e.key === 'ArrowRight') {\n dw = rtl ? -step : step;\n } else if (e.key === 'ArrowLeft') {\n dw = rtl ? step : -step;\n } else if (e.key === 'ArrowDown') {\n dh = step;\n } else if (e.key === 'ArrowUp') {\n dh = -step;\n } else {\n return;\n }\n\n e.preventDefault();\n const rect = this.el.nativeElement.getBoundingClientRect();\n const width = this.clampGrid(\n Math.max(this.minWidth(), Math.min(this.maxWidth(), rect.width + dw)),\n 'x',\n );\n const height = this.clampGrid(\n Math.max(this.minHeight(), Math.min(this.maxHeight(), rect.height + dh)),\n 'y',\n );\n this.el.nativeElement.style.width = `${width}px`;\n this.el.nativeElement.style.height = `${height}px`;\n const out: IResizableOutput = {\n width,\n height,\n moveLeft: 0,\n moveTop: 0,\n left: rect.left,\n top: rect.top,\n direction: 'se',\n };\n this.resizeMove.emit(out);\n this.resizeEnd.emit(out);\n }\n\n private calculate(e: PointerEvent): IResizableOutput {\n const dx = e.clientX - this.pointer.x;\n const dy = e.clientY - this.pointer.y;\n\n let width = this.start.width;\n let height = this.start.height;\n /**\n * East\n */\n if (this.direction.includes('e')) {\n width += dx;\n }\n\n /**\n * West\n */\n if (this.direction.includes('w')) {\n width -= dx;\n }\n\n /**\n * South\n */\n if (this.direction.includes('s')) {\n height += dy;\n }\n\n /**\n * North\n */\n if (this.direction.includes('n')) {\n height -= dy;\n }\n\n width = this.clampGrid(Math.max(this.minWidth(), Math.min(this.maxWidth(), width)), 'x');\n\n height = this.clampGrid(Math.max(this.minHeight(), Math.min(this.maxHeight(), height)), 'y');\n\n /**\n * Calculate the intended visual position.\n *\n * This is useful for boundary calculations and\n * emitted resize events.\n */\n let left = this.start.left;\n let top = this.start.top;\n\n if (this.direction.includes('w')) {\n left = this.start.right - width;\n }\n\n if (this.direction.includes('n')) {\n top = this.start.bottom - height;\n }\n\n let moveLeft = left - this.start.left;\n let moveTop = top - this.start.top;\n /**\n * Boundary constraint.\n */\n if (this.boundary) {\n const clamped = clampResizeWithinBoundary(\n this.boundary()?.getBoundingClientRect(),\n this.start,\n width,\n height,\n moveLeft,\n moveTop,\n );\n width = clamped.width;\n height = clamped.height;\n moveLeft = clamped.left;\n moveTop = clamped.top;\n left = this.start.left + moveLeft;\n top = this.start.top + moveTop;\n }\n\n return {\n width,\n height,\n moveLeft,\n moveTop,\n left,\n top,\n direction: this.direction,\n };\n }\n\n private apply(out: IResizableOutput): void {\n const element = this.el.nativeElement;\n /**\n * Always reset to the transform that existed before\n * this resize operation started.\n *\n * This prevents resize corrections from accumulating.\n */\n element.style.transform = this.beforeTransform;\n\n /**\n * Apply the actual size first.\n *\n * Changing width/height may cause the browser to re-layout\n * the element, especially for relative/flex/grid/static layouts.\n */\n element.style.width = `${out.width}px`;\n element.style.height = `${out.height}px`;\n\n /**\n * Force/read layout after changing the size.\n */\n const current = element.getBoundingClientRect();\n\n /**\n * These are the positions where the element MUST visually be.\n *\n * `out.moveLeft` / `out.moveTop` are calculated in `calculate()`\n * from the original visual rectangle.\n */\n const targetLeft = this.start.left + out.moveLeft;\n const targetTop = this.start.top + out.moveTop;\n\n /**\n * Browser's actual position after width/height changed.\n *\n * The difference between target and current position is the\n * correction that must be applied using transform.\n */\n const correctionX = targetLeft - current.left;\n const correctionY = targetTop - current.top;\n const hasCorrection = correctionX !== 0 || correctionY !== 0;\n if (!hasCorrection) {\n element.style.transform = this.beforeTransform;\n return;\n }\n /**\n * Preserve DragRef's existing transform and add only the\n * correction required by Resize.\n */\n const baseTransform =\n this.beforeTransform && this.beforeTransform !== 'none' ? `${this.beforeTransform} ` : '';\n element.style.transform =\n `${baseTransform}translate3d(` + `${correctionX}px, ` + `${correctionY}px, 0)`;\n }\n\n private clampGrid(value: number, axis: 'x' | 'y'): number {\n const grid = typeof this.grid() === 'number' ? this.grid : (this.grid() as any)?.[axis];\n if (!grid || grid <= 0) {\n return value;\n }\n return Math.round(value / grid) * grid;\n }\n\n private finish(): void {\n this.resizing.set(false);\n this.el.nativeElement.style.transition = this.beforeTransition;\n this.pointerId = -1;\n this.beforeTransform = '';\n }\n\n private resolvedDirections(): ResizeDirection[] {\n const rtl = isRtl(this.el.nativeElement);\n const set = new Set<ResizeDirection>();\n for (const direction of this.directions()) {\n set.add(resolveLogicalDirection(direction, rtl) as ResizeDirection);\n }\n return [...set];\n }\n\n private hitDirection(e: PointerEvent): ResizeDirection | null {\n const element = this.el.nativeElement;\n const rect = element.getBoundingClientRect();\n const edge = Math.min(12, Math.max(6, Math.min(rect.width, rect.height) * 0.18));\n const isLeft = e.clientX - rect.left <= edge;\n const isRight = rect.right - e.clientX <= edge;\n const isTop = e.clientY - rect.top <= edge;\n const isBottom = rect.bottom - e.clientY <= edge;\n /**\n * Explicit resize handle has priority.\n */\n // TODO notsafe instanceof:node.nodeType === Node.ELEMENT_NODE\n const handle =\n e.target instanceof HTMLElement\n ? e.target.closest<HTMLElement>('[data-ngx-resize-handle]')\n : null;\n\n if (handle && element.contains(handle)) {\n const raw = handle.dataset['ngxResizeHandle'] as LogicalResizeDirection | undefined;\n\n if (!raw) {\n return null;\n }\n const resolved = resolveLogicalDirection(raw, isRtl(element)) as ResizeDirection;\n return this.resolvedDirections().includes(resolved) ? resolved : null;\n }\n\n /**\n * These are PHYSICAL screen directions.\n *\n * left -> w\n * right -> e\n *\n * RTL is handled only when a logical direction\n * such as \"start\" / \"end\" is requested.\n */\n const direction =\n isTop && isLeft\n ? 'nw'\n : isTop && isRight\n ? 'ne'\n : isBottom && isLeft\n ? 'sw'\n : isBottom && isRight\n ? 'se'\n : isTop\n ? 'n'\n : isRight\n ? 'e'\n : isBottom\n ? 's'\n : isLeft\n ? 'w'\n : null;\n\n if (!direction) {\n return null;\n }\n return this.resolvedDirections().includes(direction) ? direction : null;\n }\n}\n","import { ApplicationRef, Directive, InjectionToken, TemplateRef, inject } from '@angular/core';\nimport { PlaceHolderRef } from '../placeholder-ref';\nimport { NGX_DROPLIST } from './ngx-drop-list.directive';\n\nexport const NGX_PLACEHOLDER = new InjectionToken<PlaceHolderRef>('ngx-place-holder');\n/**\n * Custom placeholder content, from `*ngxPlaceholder` inside the `ngxDropList`.\n *\n * @example\n * ```html\n * <div ngxDropList>\n * <span class=\"my-placeholder\" *ngxPlaceholder></span>\n * ...\n * </div>\n * ```\n */\n@Directive({\n selector: '[NgxPlaceholder],[ngxPlaceholder]',\n providers: [{ provide: NGX_PLACEHOLDER, useExisting: NgxPlaceholder }],\n})\nexport class NgxPlaceholder {\n readonly _ref = new PlaceHolderRef();\n private readonly list = inject(NGX_DROPLIST, { optional: true, skipSelf: true });\n constructor(public readonly tpl: TemplateRef<unknown>) {\n this._ref.tpl = tpl;\n this._ref.dropList = this.list?._ref;\n // Lets the embedded view join Angular's change-detection tree (matters in zoneless apps,\n // and for app-stability tracking) instead of being rendered once and left dangling.\n this._ref.appRef = inject(ApplicationRef);\n }\n}\n","import {\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n Output,\n inject,\n type AfterContentInit,\n} from '@angular/core';\nimport { DropListRef } from '../drop-list-ref';\nimport { DragDropService } from '../services/drag-drop.service';\nimport { IDropEvent } from '../contracts/IDropEvent';\nimport { NgxPlaceholder } from './ngx-place-holder.directive';\n\nexport const NGX_DROPLIST = new InjectionToken<NgxDropList>('ngx-drop-list');\n\n@Directive({\n selector: '[NgxDropList],[ngxDropList]',\n providers: [{ provide: NGX_DROPLIST, useExisting: NgxDropList }],\n host: { class: 'ngx-drop-list' },\n})\nexport class NgxDropList<T = any> implements OnInit, OnDestroy, AfterContentInit {\n readonly _ref = new DropListRef<T>();\n @Input('data') set data(value: T) {\n this._ref.data = value;\n }\n @Input() set connectedTo(value: HTMLElement[] | null | undefined) {\n this._ref.connectedTo = value ?? [];\n }\n @Input() set disableSort(value: boolean) {\n this._ref.disableSort = value === true;\n }\n @Output() readonly drop = new EventEmitter<IDropEvent<T>>();\n @ContentChild(NgxPlaceholder, {\n descendants: true,\n })\n private readonly customPlaceholder?: NgxPlaceholder;\n private sub?: { unsubscribe(): void };\n private readonly service = inject(DragDropService);\n\n constructor(private readonly el: ElementRef<HTMLElement>) {}\n\n ngOnInit(): void {\n this._ref.el = this.el.nativeElement;\n const parentEl = this.el.nativeElement.parentElement;\n const group = this.service.findAncestorGroup(parentEl);\n const parent = this.service.findAncestorDropList(parentEl);\n this._ref.dropListGroup = group ?? null;\n group?.add(this._ref);\n parent?._registerChild(this._ref);\n this.sub = this._ref.onDrop.subscribe((e) => this.drop.emit(e));\n this.service.registerDropList(this._ref);\n }\n ngAfterContentInit(): void {\n if (this.customPlaceholder) {\n this._ref.customPlaceholder = this.customPlaceholder._ref;\n }\n }\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n this._ref._release();\n this._ref.parentList?._unregisterChild(this._ref);\n this._ref.dropListGroup?.remove(this._ref);\n this.service.removeDropList(this._ref);\n }\n}\n","import { Directive, ElementRef, InjectionToken, OnDestroy, OnInit, inject } from '@angular/core';\nimport { DropListGroupRef } from '../drop-list-group-ref';\nimport { DragDropService } from '../services/drag-drop.service';\n\nexport const NGX_DROPLIST_GROUP = new InjectionToken<NgxDropListGroup>('ngx-drop-list-group');\n\n/** Wrap several `ngxDropList`s to let items move freely between them. */\n@Directive({\n selector: '[NgxDropListGroup],[ngxDropListGroup]',\n providers: [{ provide: NGX_DROPLIST_GROUP, useExisting: NgxDropListGroup }],\n})\nexport class NgxDropListGroup implements OnInit, OnDestroy {\n readonly _ref = new DropListGroupRef();\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly service = inject(DragDropService);\n\n ngOnInit(): void {\n // Registered by DOM element (not just provided via DI) so a list nested inside a recursive\n // `ngTemplateOutlet` tree can still find this group by walking its real ancestors — see the\n // comment on `DragDropService`'s registries for why DI alone can't do this.\n this.service.registerGroup(this.el.nativeElement, this._ref);\n }\n\n ngOnDestroy(): void {\n this._ref.lists.clear();\n this.service.removeGroup(this.el.nativeElement);\n }\n}\n","export function moveItemInArray<T>(array: T[], from: number, to: number): void {\n const f = clamp(from, array.length - 1);\n const t = clamp(to, array.length - 1);\n if (f === t) return;\n const target = array[f];\n const delta = t < f ? -1 : 1;\n for (let i = f; i !== t; i += delta) array[i] = array[i + delta];\n array[t] = target;\n}\n\nexport function transferArrayItem<T>(src: T[], dst: T[], from: number, to: number): void {\n const f = clamp(from, src.length - 1);\n const t = clamp(to, dst.length);\n if (src.length) dst.splice(t, 0, src.splice(f, 1)[0]);\n}\n/**\n * Copies an item from one array to another, leaving it in its\n * original position in current array.\n * @param currentArray Array from which to copy the item.\n * @param targetArray Array into which is copy the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n *\n */\nexport function copyArrayItem<T = any>(\n currentArray: T[],\n targetArray: T[],\n currentIndex: number,\n targetIndex: number,\n): void {\n const to = clamp(targetIndex, targetArray.length);\n\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray[currentIndex]);\n }\n}\n\nfunction clamp(v: number, max: number) {\n return Math.max(0, Math.min(max, v));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-kit-drag-resize.mjs","sources":["../../../projects/libs/drag-resize/utils/check-boundary.ts","../../../projects/libs/drag-resize/utils/rtl.ts","../../../projects/libs/drag-resize/drag-preview-ref.ts","../../../projects/libs/drag-resize/utils/coordinate-transform.ts","../../../projects/libs/drag-resize/drag-ref.ts","../../../projects/libs/drag-resize/utils/element.helper.ts","../../../projects/libs/drag-resize/placeholder-ref.ts","../../../projects/libs/drag-resize/sorting/layout-geometry.ts","../../../projects/libs/drag-resize/utils/scroll-frame.ts","../../../projects/libs/drag-resize/sorting/sort-session.ts","../../../projects/libs/drag-resize/drop-list-ref.ts","../../../projects/libs/drag-resize/drop-list-group-ref.ts","../../../projects/libs/drag-resize/services/drag-drop.service.ts","../../../projects/libs/drag-resize/utils/auto-scroll.ts","../../../projects/libs/drag-resize/directives/ngx-drag-preview.directive.ts","../../../projects/libs/drag-resize/directives/ngx-draggable.directive.ts","../../../projects/libs/drag-resize/directives/ngx-resizable.directive.ts","../../../projects/libs/drag-resize/directives/ngx-place-holder.directive.ts","../../../projects/libs/drag-resize/directives/ngx-drop-list.directive.ts","../../../projects/libs/drag-resize/directives/ngx-drop-list-group.directive.ts","../../../projects/libs/drag-resize/utils/drag-utils.ts","../../../projects/libs/drag-resize/ngx-kit-drag-resize.ts"],"sourcesContent":["/**\n * Boundary clamping utilities.\n * All functions work purely in viewport (\"client\") coordinates so they can be\n * reused identically for translate-based dragging and left/top-based resizing.\n */\nconst TOLERANCE = 0.5;\n\n/** Clamps a proposed vertical delta so the element's rect stays inside the boundary rect. */\nexport function checkBoundY(\n selfRect: DOMRect,\n boundaryRect: DOMRect | undefined,\n offsetY: number,\n): number {\n if (!boundaryRect) return offsetY;\n const newTop = selfRect.top + offsetY;\n const newBottom = selfRect.bottom + offsetY;\n if (newTop < boundaryRect.top + TOLERANCE) return offsetY + (boundaryRect.top - newTop);\n if (newBottom > boundaryRect.bottom - TOLERANCE)\n return offsetY - (newBottom - boundaryRect.bottom);\n return offsetY;\n}\n\n/** Clamps a proposed horizontal delta so the element's rect stays inside the boundary rect. */\nexport function checkBoundX(\n selfRect: DOMRect,\n boundaryRect: DOMRect | undefined,\n offsetX: number,\n): number {\n if (!boundaryRect) return offsetX;\n const newLeft = selfRect.left + offsetX;\n const newRight = selfRect.right + offsetX;\n if (newLeft < boundaryRect.left + TOLERANCE) return offsetX + (boundaryRect.left - newLeft);\n if (newRight > boundaryRect.right - TOLERANCE) return offsetX - (newRight - boundaryRect.right);\n return offsetX;\n}\n\n/**\n * Clamps a resize result (width/height/left/top, all relative CSS px deltas from the\n * element's start position) so the element never grows/moves outside `boundaryRect`.\n * `startRect` is the element's `getBoundingClientRect()` captured at resize-start.\n */\nexport function clampResizeWithinBoundary(\n boundaryRect: DOMRect | undefined,\n startRect: DOMRect,\n width: number,\n height: number,\n left: number,\n top: number,\n): { width: number; height: number; left: number; top: number } {\n if (!boundaryRect) return { width, height, left, top };\n\n // Viewport position implied by the proposed left/top deltas.\n const viewportLeft = startRect.left + left;\n const viewportTop = startRect.top + top;\n\n let clampedWidth = width;\n let clampedHeight = height;\n let clampedLeft = left;\n let clampedTop = top;\n\n if (viewportLeft < boundaryRect.left) {\n const overflow = boundaryRect.left - viewportLeft;\n clampedLeft = left + overflow;\n clampedWidth = Math.max(0, clampedWidth - overflow);\n }\n if (viewportTop < boundaryRect.top) {\n const overflow = boundaryRect.top - viewportTop;\n clampedTop = top + overflow;\n clampedHeight = Math.max(0, clampedHeight - overflow);\n }\n\n const clampedViewportLeft = startRect.left + clampedLeft;\n const rightEdge = clampedViewportLeft + clampedWidth;\n if (rightEdge > boundaryRect.right) {\n clampedWidth = Math.max(0, boundaryRect.right - clampedViewportLeft);\n }\n\n const clampedViewportTop = startRect.top + clampedTop;\n const bottomEdge = clampedViewportTop + clampedHeight;\n if (bottomEdge > boundaryRect.bottom) {\n clampedHeight = Math.max(0, boundaryRect.bottom - clampedViewportTop);\n }\n\n return { width: clampedWidth, height: clampedHeight, left: clampedLeft, top: clampedTop };\n}\n\n/** Current page zoom level (1 = 100%). Falls back to devicePixelRatio pre visualViewport. */\nexport function getPageZoom(element?: HTMLElement): number {\n const win = element?.ownerDocument.defaultView ?? (typeof window !== 'undefined' ? window : null);\n return win?.visualViewport?.scale ?? win?.devicePixelRatio ?? 1;\n}\n\n/** Adjusts a raw pointer-derived value for the current page zoom level. */\nexport function adjustForZoom(value: number, element?: HTMLElement): number {\n const zoom = getPageZoom(element);\n return zoom ? value / zoom : value;\n}\n","import { ResizeDirection } from '../contracts/IResizableOutput';\n\n/**\n * Logical directions that resolve differently depending on text direction.\n * 'n' and 's' never change - only the horizontal component is direction-aware.\n */\ntype LogicalDirectionKey = 'start' | 'end' | 'n-start' | 'n-end' | 's-start' | 's-end';\n\n/** Base (LTR) physical direction for every logical direction. */\nconst LTR_BASE: Record<LogicalDirectionKey, ResizeDirection> = {\n start: 'w',\n end: 'e',\n 'n-start': 'nw',\n 'n-end': 'ne',\n 's-start': 'sw',\n 's-end': 'se',\n};\n\n/** Mirrors the horizontal component of a physical direction. 'n' / 's' pass through unchanged. */\nconst MIRROR: Record<ResizeDirection, ResizeDirection> = {\n n: 'n',\n s: 's',\n e: 'w',\n w: 'e',\n ne: 'nw',\n nw: 'ne',\n se: 'sw',\n sw: 'se',\n};\n\nfunction isLogicalDirection(dir: string): dir is LogicalDirectionKey {\n return Object.prototype.hasOwnProperty.call(LTR_BASE, dir);\n}\n\n/**\n * True when `element` sits inside a right-to-left context.\n *\n * Reads the *computed* `direction` style instead of `element.dir`, because\n * `direction` is inherited and is almost never set on the resizable element\n * itself - it's usually set on `<html>`, `<body>`, or some ancestor wrapper.\n */\nexport function isRtl(element: HTMLElement): boolean {\n const win = element.ownerDocument.defaultView;\n return win ? win.getComputedStyle(element).direction === 'rtl' : false;\n}\n\n/**\n * Resolves a logical direction ('start' | 'end' | 'n-start' | 'n-end' | 's-start' | 's-end')\n * to a physical, viewport-space direction ('n' | 'e' | 's' | 'w' | 'ne' | 'nw' | 'se' | 'sw')\n * based on `rtl`.\n *\n * Physical directions pass through untouched, so it's always safe to call this\n * even when `dir` might already be physical (e.g. resolving a direction that was\n * already resolved once before).\n */\nexport function resolveLogicalDirection(dir: string, rtl: boolean): ResizeDirection {\n if (!isLogicalDirection(dir)) {\n return dir as ResizeDirection;\n }\n\n const base = LTR_BASE[dir];\n\n return rtl ? MIRROR[base] : base;\n}\n","import { ApplicationRef, TemplateRef, type EmbeddedViewRef } from '@angular/core';\nimport { isRtl } from './utils/rtl';\n\n/** Above any app chrome (modals, sticky headers) but below the browser's own UI. */\nconst PREVIEW_Z_INDEX = '2147483000';\n\nexport class DragPreviewRef {\n tpl?: TemplateRef<unknown>;\n /** Set by `ngxDragPreview` so the embedded view can join Angular's change-detection tree. */\n appRef?: ApplicationRef;\n\n element?: HTMLElement;\n isCustom = false;\n private _view?: EmbeddedViewRef<unknown>;\n attach(dragEl: HTMLElement, rect: DOMRect) {\n const doc = dragEl.ownerDocument;\n if (this.tpl) {\n this._view = this.tpl.createEmbeddedView({});\n\n this.appRef?.attachView(this._view);\n // Render bindings inside the embedded view before we move its DOM nodes.\n this._view.detectChanges();\n\n const element = this._view.rootNodes.find(\n (node): node is HTMLElement => node.nodeType === Node.ELEMENT_NODE,\n );\n\n if (!element) {\n this.appRef?.detachView(this._view);\n this._view.destroy();\n this._view = undefined;\n throw new Error('ngxDragPreview template must contain exactly one HTMLElement root node ');\n }\n this.element = element;\n this.isCustom = true;\n } else {\n this.isCustom = false;\n\n const preview = dragEl.cloneNode(true) as HTMLElement;\n this.element = preview;\n // Avoid duplicated ids in the document.\n this.element.removeAttribute('id');\n this.element.querySelectorAll('[id]').forEach((n) => n.removeAttribute('id'));\n this.element.classList.add('ngx-drag-preview');\n this.element.setAttribute('aria-hidden', 'true');\n this.element.setAttribute('inert', '');\n Object.assign(this.element.style, {\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n margin: '0',\n boxSizing: 'border-box',\n });\n }\n Object.assign(this.element.style, {\n position: 'fixed',\n top: `${rect.top}px`,\n bottom: 'auto',\n pointerEvents: 'none',\n transition: 'none',\n animation: 'none',\n transform: 'none',\n visibility: 'visible',\n display: this.element.style.display === 'none' ? '' : this.element.style.display,\n willChange: 'transform',\n zIndex: PREVIEW_Z_INDEX,\n });\n const win = doc.defaultView;\n if (isRtl(doc.body)) {\n Object.assign(this.element.style, {\n right: `${(win?.innerWidth ?? rect.right) - rect.right}px`,\n left: 'auto',\n });\n } else {\n Object.assign(this.element.style, {\n left: `${rect.left}px`,\n right: 'auto',\n });\n }\n\n (doc.body ?? doc.documentElement).appendChild(this.element);\n return this.element;\n }\n\n detach() {\n this.element?.remove();\n\n if (this._view) {\n this.appRef?.detachView(this._view);\n this._view.destroy();\n this._view = undefined;\n }\n\n this.element = undefined;\n }\n}\n","/**\n * Coordinate conversion helpers for transformed drag surfaces.\n *\n * PointerEvent.clientX/clientY and getBoundingClientRect() are always expressed in\n * viewport CSS pixels. CSS translate values, on the other hand, are expressed in the\n * element's local coordinate system. These helpers bridge the two spaces.\n *\n * The composed matrix includes CSS transforms (including nested scale/translate/rotate)\n * from the element itself through its ancestors. Translation components are deliberately\n * ignored because this API converts vectors, not points. CSS `zoom` is included as well.\n */\nexport interface ICoordinatePoint {\n x: number;\n y: number;\n}\n\nexport function viewportDeltaToLocal(\n element: HTMLElement,\n delta: ICoordinatePoint,\n includeElementTransform = true,\n): ICoordinatePoint {\n const matrix = getLocalToViewportMatrix(element, includeElementTransform);\n const determinant = matrix.a * matrix.d - matrix.b * matrix.c;\n\n if (!Number.isFinite(determinant) || Math.abs(determinant) < 1e-8) {\n // A zero-scale ancestor has no invertible coordinate space. Avoid NaN/Infinity.\n return { x: 0, y: 0 };\n }\n\n const inverseA = matrix.d / determinant;\n const inverseB = -matrix.b / determinant;\n const inverseC = -matrix.c / determinant;\n const inverseD = matrix.a / determinant;\n\n return {\n x: inverseA * delta.x + inverseC * delta.y,\n y: inverseB * delta.x + inverseD * delta.y,\n };\n}\n\nexport function localDeltaToViewport(\n element: HTMLElement,\n delta: ICoordinatePoint,\n): ICoordinatePoint {\n const matrix = getLocalToViewportMatrix(element);\n return {\n x: matrix.a * delta.x + matrix.c * delta.y,\n y: matrix.b * delta.x + matrix.d * delta.y,\n };\n}\n\n/** Returns the composed 2D linear transform from element-local to viewport space. */\nexport interface ILinearTransform {\n a: number;\n b: number;\n c: number;\n d: number;\n}\n\n/** Returns the composed 2D linear transform from element-local to viewport space. */\nexport function getLocalToViewportMatrix(\n element: HTMLElement,\n includeElementTransform = true,\n): ILinearTransform {\n const win = element.ownerDocument.defaultView;\n if (!win || typeof win.DOMMatrix !== 'function') {\n return { a: 1, b: 0, c: 0, d: 1 };\n }\n\n let result: ILinearTransform = { a: 1, b: 0, c: 0, d: 1 };\n let current: HTMLElement | null = includeElementTransform ? element : element.parentElement;\n\n while (current) {\n const style = win.getComputedStyle(current);\n const transform = style.transform;\n\n if (transform && transform !== 'none') {\n try {\n const matrix = new win.DOMMatrix(transform);\n result = multiplyLinear({ a: matrix.a, b: matrix.b, c: matrix.c, d: matrix.d }, result);\n } catch {\n // Ignore unsupported/malformed transforms and continue with remaining ancestors.\n }\n }\n\n // CSS `zoom` is not represented consistently in computed `transform` across browsers.\n const zoom = Number.parseFloat(style.getPropertyValue('zoom'));\n if (Number.isFinite(zoom) && zoom > 0 && zoom !== 1) {\n result = multiplyLinear({ a: zoom, b: 0, c: 0, d: zoom }, result);\n }\n\n current = current.parentElement;\n }\n\n return result;\n}\n\nfunction multiplyLinear(left: ILinearTransform, right: ILinearTransform): ILinearTransform {\n return {\n a: left.a * right.a + left.c * right.b,\n b: left.b * right.a + left.d * right.b,\n c: left.a * right.c + left.c * right.d,\n d: left.b * right.c + left.d * right.d,\n };\n}\n\n/**\n * Converts a client-space point from one same-origin Document viewport to another.\n * The conversion walks both frameElement chains through their common top-level document.\n * Cross-origin frame boundaries cannot be inspected and return null.\n */\nexport function convertPointBetweenDocuments(\n point: ICoordinatePoint,\n fromDocument: Document,\n toDocument: Document,\n): ICoordinatePoint | null {\n if (fromDocument === toDocument) return { ...point };\n\n const toTop = (doc: Document, value: ICoordinatePoint) => {\n let current = doc;\n let result = { ...value };\n const visited = new Set<Document>();\n\n while (current.defaultView?.frameElement) {\n if (visited.has(current)) return null;\n visited.add(current);\n\n let frame: Element;\n try {\n frame = current.defaultView.frameElement;\n } catch {\n return null;\n }\n\n const iframe = frame as HTMLElement;\n const rect = iframe.getBoundingClientRect();\n const scaleX = iframe.offsetWidth ? rect.width / iframe.offsetWidth : 1;\n const scaleY = iframe.offsetHeight ? rect.height / iframe.offsetHeight : 1;\n\n result = {\n x: rect.left + iframe.clientLeft * scaleX + result.x * scaleX,\n y: rect.top + iframe.clientTop * scaleY + result.y * scaleY,\n };\n current = iframe.ownerDocument;\n }\n\n return { document: current, point: result };\n };\n\n const from = toTop(fromDocument, point);\n if (!from) return null;\n\n const targetFrames: HTMLIFrameElement[] = [];\n let current: Document | null = toDocument;\n const visited = new Set<Document>();\n\n while (current && current !== from.document) {\n if (visited.has(current)) return null;\n visited.add(current);\n\n let frame: Element | null;\n try {\n frame = current.defaultView?.frameElement ?? null;\n } catch {\n return null;\n }\n if (!frame) return null;\n\n targetFrames.push(frame as HTMLIFrameElement);\n current = frame.ownerDocument;\n }\n\n if (current !== from.document) return null;\n\n let result = from.point;\n for (let i = targetFrames.length - 1; i >= 0; i--) {\n const iframe = targetFrames[i];\n const rect = iframe.getBoundingClientRect();\n const scaleX = iframe.offsetWidth ? rect.width / iframe.offsetWidth : 1;\n const scaleY = iframe.offsetHeight ? rect.height / iframe.offsetHeight : 1;\n\n result = {\n x: (result.x - rect.left) / scaleX - iframe.clientLeft,\n y: (result.y - rect.top) / scaleY - iframe.clientTop,\n };\n }\n\n return result;\n}\n","import { signal } from '@angular/core';\nimport { IPosition } from './contracts/IPosition';\nimport { DropListRef } from './drop-list-ref';\nimport { PlaceHolderRef } from './placeholder-ref';\nimport { DropListGroupRef } from './drop-list-group-ref';\nimport { DragDropService } from './services/drag-drop.service';\nimport { checkBoundX, checkBoundY } from './utils/check-boundary';\nimport { DragPreviewRef } from './drag-preview-ref';\nimport { viewportDeltaToLocal, convertPointBetweenDocuments } from './utils/coordinate-transform';\n\nexport type DragAxis = 'x' | 'y' | undefined;\n\nlet zIndexCounter = 1000;\n\nexport class DragRef<T = unknown> {\n data?: T;\n el!: HTMLElement;\n boundary?: HTMLElement;\n lockAxis?: DragAxis;\n\n /**\n * The list this draggable BELONGS to (set by the template). Dragging never changes it.\n * The list the pointer is currently over is `activeDropList`.\n */\n dropList: DropListRef<T> | null = null;\n dropListGroup?: DropListGroupRef | null;\n /** Used to find the drop list under the pointer. Set by the directive; optional. */\n service?: DragDropService;\n /** Drop list currently under the pointer during a drop-list drag (null = outside every list). */\n activeDropList: DropListRef<T> | null = null;\n\n placeholder?: PlaceHolderRef;\n originDropList: DropListRef<T> | null = null;\n originIndex = -1;\n\n preview?: DragPreviewRef;\n\n readonly isDragging = signal(false);\n readonly position = signal<IPosition>({ x: 0, y: 0 });\n\n private startPointer = { x: 0, y: 0 };\n private startRect!: DOMRect;\n private lastPointer = { x: 0, y: 0 };\n\n private previousTransform = '';\n private previousZIndex = '';\n\n private moveDx = 0;\n private moveDy = 0;\n private scrollCompensation = { x: 0, y: 0 };\n private sourceVisibility = '';\n private sourceDisplay = '';\n private sourcePointerEvents = '';\n private sourceTransition = '';\n private sourceWillChange = '';\n private sourceTransform = '';\n\n /** True while a drop-list drag (body preview + placeholder) is in progress. Free drag: always false. */\n private listDrag = false;\n private cachedLists: DropListRef<T>[] = [];\n /**\n * Candidate lists for hit-testing, filtered (connected to the origin; not inside the dragged\n * element) and sorted deepest-first — both computed ONCE, not on every pointer move, since\n * neither ever changes mid-drag. Kept in sync with the live registry (see `dropListsSnapshot`)\n * so a list that appears or disappears mid-drag (e.g. behind an `@if`) is still picked up.\n */\n private dropCandidates: { list: DropListRef<T>; depth: number }[] = [];\n private dropListsSnapshot: readonly DropListRef<any>[] | null = null;\n private lastEffective: IPosition = { x: 0, y: 0 };\n private scrollListener?: () => void;\n private resizeListener?: () => void;\n\n init(): void {\n this.previousTransform =\n this.el.ownerDocument.defaultView?.getComputedStyle(this.el).transform ?? '';\n this.sourceTransform = this.el.style.transform;\n }\n\n withDropList(list: DropListRef<T> | null): this {\n if (this.dropList === list) return this;\n\n this.dropList?.removeItem(this);\n this.dropList = list;\n list?.addItem(this);\n return this;\n }\n\n clearDropList(): void {\n this.dropList?.removeItem(this);\n this.dropList = null;\n }\n\n pointerDown(pointer: IPosition): void {\n this.startPointer = { ...pointer };\n this.lastPointer = { ...pointer };\n }\n\n startDrag(pointer: IPosition): void {\n this.startRect = this.el.getBoundingClientRect();\n\n this.startPointer = { ...pointer };\n this.lastPointer = { ...pointer };\n this.moveDx = 0;\n this.moveDy = 0;\n this.scrollCompensation = { x: 0, y: 0 };\n\n // Only draggables that are direct children of their drop list take part in sorting.\n // Everything else is a plain free drag.\n const list = this.dropList && this.dropList.el === this.el.parentElement ? this.dropList : null;\n this.originDropList = list;\n this.originIndex = list?.getItemIndex(this) ?? -1;\n const win = this.el.ownerDocument.defaultView;\n this.previousTransform = win?.getComputedStyle(this.el).transform ?? '';\n this.sourceTransform = this.el.style.transform;\n\n this.isDragging.set(true);\n\n this.previousZIndex = this.el.style.zIndex;\n this.sourceVisibility = this.el.style.visibility;\n this.sourceDisplay = this.el.style.display;\n this.sourcePointerEvents = this.el.style.pointerEvents;\n this.sourceTransition = this.el.style.transition;\n this.sourceWillChange = this.el.style.willChange;\n\n this.el.classList.add('ngx-draggable--dragging');\n this.el.style.willChange = 'transform';\n this.el.style.transition = 'none';\n this.el.style.zIndex = String(++zIndexCounter);\n\n /*\n * IMPORTANT:\n *\n * Normal Drag:\n * absolutely nothing changes in the element's rendering mechanism.\n *\n * DropList Drag:\n * create a body-level preview because the original element can be\n * inside an overflow:auto/hidden container such as a Kanban column.\n */\n if (list) {\n this.listDrag = true;\n this.preview ??= new DragPreviewRef();\n this.preview.attach(this.el, this.startRect);\n\n this.el.style.visibility = 'hidden';\n this.el.style.display = 'none';\n this.el.style.pointerEvents = 'none';\n\n this.beginListDrag(list, pointer);\n this.updatePreview();\n } else {\n // KEEP THE ORIGINAL DRAG BEHAVIOR.\n this.applyTransform();\n }\n }\n\n dragMove(pointer: IPosition): void {\n if (!this.isDragging()) return;\n\n this.lastPointer = { ...pointer };\n\n let dx = pointer.x - this.startPointer.x;\n let dy = pointer.y - this.startPointer.y;\n\n if (this.boundary) {\n dx = checkBoundX(this.startRect, this.boundary.getBoundingClientRect(), dx);\n\n dy = checkBoundY(this.startRect, this.boundary.getBoundingClientRect(), dy);\n }\n\n if (this.lockAxis === 'x') dy = 0;\n if (this.lockAxis === 'y') dx = 0;\n\n this.moveDx = dx;\n this.moveDy = dy;\n\n this.position.set({\n x: dx,\n y: dy,\n });\n\n if (this.listDrag) {\n this.updatePreview();\n // Sorting follows the (axis/boundary constrained) pointer, not the raw one.\n this.lastEffective = { x: this.startPointer.x + dx, y: this.startPointer.y + dy };\n this.updateDropTarget(this.lastEffective);\n } else {\n this.applyTransform();\n }\n }\n\n nudge(dx: number, dy: number): void {\n if (!this.isDragging()) this.startDrag(this.lastPointer);\n\n this.dragMove({\n x: this.startPointer.x + this.moveDx + dx,\n y: this.startPointer.y + this.moveDy + dy,\n });\n }\n\n endDrag(): void {\n if (!this.isDragging()) return;\n\n if (this.listDrag) {\n this.isDragging.set(false);\n this.finishListDrag(true);\n return;\n }\n\n // ---- free drag: unchanged ----\n this.isDragging.set(false);\n\n this.placeholder?.detach();\n this.placeholder = undefined;\n\n this.preview?.detach();\n this.preview = undefined;\n\n this.el.classList.remove('ngx-draggable--dragging');\n\n this.el.style.visibility = this.sourceVisibility;\n this.el.style.display = this.sourceDisplay;\n this.el.style.pointerEvents = this.sourcePointerEvents;\n this.el.style.willChange = this.sourceWillChange;\n this.el.style.transition = this.sourceTransition;\n this.el.style.zIndex = this.previousZIndex;\n }\n\n cancelDrag(): void {\n if (!this.isDragging()) return;\n\n this.moveDx = 0;\n this.moveDy = 0;\n\n this.position.set({ x: 0, y: 0 });\n\n if (this.listDrag) {\n // Rollback: nothing was ever committed to the DOM or the model, so restoring is just cleanup.\n this.isDragging.set(false);\n this.finishListDrag(false);\n return;\n }\n\n // ---- free drag: unchanged ----\n this.el.style.transform = this.sourceTransform;\n this.el.style.visibility = this.sourceVisibility;\n this.el.style.pointerEvents = this.sourcePointerEvents;\n this.scrollCompensation = { x: 0, y: 0 };\n\n this.endDrag();\n }\n\n /** Abort without emitting anything (the directive was destroyed mid-drag). Idempotent. */\n dispose(): void {\n if (!this.isDragging()) return;\n this.isDragging.set(false);\n this.position.set({ x: 0, y: 0 });\n if (this.listDrag) {\n this.finishListDrag(false);\n return;\n }\n this.el.style.transform = this.sourceTransform;\n this.el.style.visibility = this.sourceVisibility;\n this.el.style.display = this.sourceDisplay;\n this.el.style.pointerEvents = this.sourcePointerEvents;\n this.el.style.transition = this.sourceTransition;\n this.el.style.willChange = this.sourceWillChange;\n this.el.style.zIndex = this.previousZIndex;\n this.el.classList.remove('ngx-draggable--dragging');\n this.scrollCompensation = { x: 0, y: 0 };\n this.position.set({ x: 0, y: 0 });\n }\n\n /** True while a drop-list drag is running. */\n get isListDrag(): boolean {\n return this.listDrag;\n }\n\n /** Inline `display` the source element had before it was hidden for the drag. */\n get originalDisplay(): string {\n return this.sourceDisplay;\n }\n\n get x(): number {\n return this.moveDx;\n }\n\n get y(): number {\n return this.moveDy;\n }\n\n get pointer(): IPosition {\n return this.lastPointer;\n }\n\n get start(): DOMRect {\n return this.startRect;\n }\n\n getPlaceholderElement(): HTMLElement | undefined {\n return this.placeholder?.element;\n }\n\n /**\n * صدا زده میشود هر بار که container یا window در حین درگ اسکرول شود\n * (چه توسط auto-scroll خودمان، چه با wheel/اسکرولبار دستی کاربر).\n * transform را فوراً تصحیح میکند تا عنصر زیر پوینتر بماند.\n */\n notifyScroll(dx: number, dy: number): void {\n if (!this.isDragging()) return;\n // Drop-list drags are position:fixed in <body> and follow the pointer in viewport space, so\n // scrolling needs no compensation; sorting listens to scroll on its own (see beginListDrag).\n if (this.listDrag) return;\n this.scrollCompensation = {\n x: this.scrollCompensation.x + dx,\n y: this.scrollCompensation.y + dy,\n };\n this.applyTransform();\n }\n\n private applyTransform(): void {\n const base =\n this.previousTransform && this.previousTransform !== 'none'\n ? this.previousTransform + ' '\n : '';\n\n const tx = this.moveDx + this.scrollCompensation.x;\n const ty = this.moveDy + this.scrollCompensation.y;\n const local = viewportDeltaToLocal(this.el, { x: tx, y: ty });\n\n this.el.style.transform = `${base}translate3d(${local.x}px, ${local.y}px, 0)`;\n }\n // -------------------------------------------------------------------------------------\n // drop-list drag\n // -------------------------------------------------------------------------------------\n\n private beginListDrag(origin: DropListRef<T>, pointer: IPosition): void {\n const doc = this.el.ownerDocument;\n const win = doc.defaultView;\n if (!win) return;\n\n this.dropListsSnapshot = null; // force refreshDropCandidates() to do a full pass below\n this.refreshDropCandidates(origin);\n\n this.lastEffective = { ...pointer };\n this.activeDropList = origin;\n origin.enter(this, pointer.x, pointer.y);\n // The origin is (re-)measured AFTER its placeholder took over the source's slot, so its box\n // still covers the whole list (the hidden source no longer occupies space).\n origin._cacheGeometry();\n\n this.scrollListener = () => {\n for (const l of this.cachedLists) l._onScroll();\n this.updateDropTarget(this.lastEffective);\n };\n this.resizeListener = () => {\n for (const l of this.cachedLists) l._refresh();\n this.updateDropTarget(this.lastEffective);\n };\n // Capture: `scroll` does not bubble, and any ancestor (or the page) may be the one scrolling.\n doc.addEventListener('scroll', this.scrollListener, { capture: true, passive: true });\n win.addEventListener('resize', this.resizeListener, { passive: true });\n }\n\n /**\n * Recomputes which registered lists are valid targets for this drag — connected to the\n * origin, and not nested inside the element being dragged — plus each one's nesting depth.\n *\n * `DragDropService.dropLists()` is an Angular signal: its array is a NEW reference only when a\n * list actually registers or unregisters, so the check below is a single reference comparison\n * on every pointer move and the (heavier) connectivity/containment/depth work below it only\n * runs on the rare event a list appears or disappears mid-drag — never on every pointer move.\n */\n private refreshDropCandidates(origin: DropListRef<T>): void {\n const all = this.service?.dropLists() ?? [];\n if (all === this.dropListsSnapshot) return;\n this.dropListsSnapshot = all;\n\n const already = new Set(this.dropCandidates.map((c) => c.list));\n const next: { list: DropListRef<T>; depth: number }[] = [{ list: origin, depth: origin.depth }];\n for (const l of all as DropListRef<T>[]) {\n if (l === origin || !l.el || !origin.isConnectedTo(l)) continue;\n if (this.el !== l.el && this.el.contains(l.el)) continue;\n if (!already.has(l)) l._cacheGeometry(); // newly eligible mid-drag: measure it now\n next.push({ list: l, depth: l.depth });\n }\n this.dropCandidates = next;\n this.cachedLists = next.map((c) => c.list);\n }\n\n /**\n * Decide which list is under the pointer, switch if needed, then re-sort in the active one.\n *\n * The origin list is the one exception to \"exiting a list resets/releases it\": while the\n * pointer dives into one of the origin's OWN nested lists (at any depth), the origin's\n * placeholder and sibling displacement are left exactly as they are — frozen, not reset —\n * so returning to the origin's own level doesn't snap items back and then forward again.\n * Every OTHER (foreign) list still fully releases the moment the pointer leaves it, exactly\n * as before; nesting multiple foreign sessions alive at once would let their own internal\n * sibling displacement compound in ways a single flat `ancestorOffset` cannot represent.\n */\n private updateDropTarget(pointer: IPosition): void {\n const origin = this.originDropList;\n if (!origin) return;\n\n this.refreshDropCandidates(origin);\n const resolved = this.resolveDropList(pointer);\n const next = resolved?.list ?? null;\n const targetPointer = resolved?.pointer ?? pointer;\n if (next === this.activeDropList) {\n next?.sortItem(this, targetPointer);\n return;\n }\n\n const prev = this.activeDropList;\n if (prev && prev !== origin) prev.exit(this);\n\n const nextWithinOrigin = !!next && (next === origin || isDescendantOfList(next, origin));\n if (nextWithinOrigin) {\n if (prev === origin) origin._freeze(); // no longer the innermost, but stays engaged\n } else {\n origin.exit(this); // truly outside the origin's territory now: reset it (idempotent)\n }\n\n this.activeDropList = next;\n next?.enter(this, targetPointer.x, targetPointer.y); // coordinates belong to the target document\n }\n\n /**\n * Innermost connected list under the pointer, from the precomputed candidates: deeper always\n * beats shallower; among lists at the same depth (unrelated, visually overlapping lists) the\n * currently active one is kept to avoid flicker, otherwise the smaller one wins. No DOM\n * reads and no `.contains()` calls happen here — everything needed was precomputed above.\n */\n private resolveDropList(pointer: IPosition): { list: DropListRef<T>; pointer: IPosition } | null {\n let best: { list: DropListRef<T>; pointer: IPosition } | null = null;\n let bestDepth = -1;\n\n for (const { list, depth } of this.dropCandidates) {\n const targetDocument = list.el?.ownerDocument;\n if (!targetDocument) continue;\n\n // Pointer coordinates originate in the draggable's document. A same-origin iframe has\n // its own viewport coordinate space, so convert before testing its DropList geometry.\n const targetPoint = convertPointBetweenDocuments(\n pointer,\n this.el.ownerDocument,\n targetDocument,\n );\n if (!targetPoint || !list._containsPoint(targetPoint.x, targetPoint.y)) continue;\n\n if (!best || depth > bestDepth) {\n best = { list, pointer: targetPoint };\n bestDepth = depth;\n } else if (depth === bestDepth && best.list !== this.activeDropList) {\n if (list === this.activeDropList || list._area() < best.list._area()) {\n best = { list, pointer: targetPoint };\n }\n }\n }\n return best;\n }\n\n /**\n * Single teardown path for every way a drop-list drag can end (drop on a list, drop outside,\n * Escape, pointercancel, destroy). Everything transient is removed here, so nothing can leak\n * regardless of how the drag ended. Only then is the drop event emitted.\n */\n private finishListDrag(commit: boolean): void {\n const doc = this.el.ownerDocument;\n if (this.scrollListener)\n doc.removeEventListener('scroll', this.scrollListener, { capture: true });\n if (this.resizeListener) doc.defaultView?.removeEventListener('resize', this.resizeListener);\n this.scrollListener = this.resizeListener = undefined;\n\n const target = commit ? this.activeDropList : null;\n const event = target?._finish(this, true) ?? null;\n for (const l of this.cachedLists) l._release(this);\n\n this.preview?.detach();\n this.preview = undefined;\n this.placeholder = undefined;\n this.activeDropList = null;\n this.cachedLists = [];\n this.dropCandidates = [];\n this.dropListsSnapshot = null;\n this.listDrag = false;\n\n // The source element is put back exactly as it was (its transform was never touched).\n this.el.classList.remove('ngx-draggable--dragging');\n this.el.style.visibility = this.sourceVisibility;\n this.el.style.display = this.sourceDisplay;\n this.el.style.pointerEvents = this.sourcePointerEvents;\n this.el.style.transition = this.sourceTransition;\n this.el.style.willChange = this.sourceWillChange;\n this.el.style.zIndex = this.previousZIndex;\n\n if (event && target) target.onDrop.emit(event);\n }\n\n private updatePreview(): void {\n if (!this.preview || !this.preview.element) return;\n\n // Preview is fixed in the source document's viewport coordinate space.\n this.preview.element.style.transform = `translate3d(${this.moveDx}px, ${this.moveDy}px, 0)`;\n }\n}\n\n/** Is `list` nested (at any depth) inside `ancestor`, per the parent/child list tree? */\nfunction isDescendantOfList(list: DropListRef<any>, ancestor: DropListRef<any>): boolean {\n for (let p: DropListRef<any> | null = list.parentList; p; p = p.parentList) {\n if (p === ancestor) return true;\n }\n return false;\n}\n","export abstract class ElementHelper {\n private static collectionHas(a: NodeListOf<Element>, b: ParentNode) {\n //helper function (see below)\n for (var i = 0, len = a.length; i < len; i++) {\n if (a[i] == b) return true;\n }\n return false;\n }\n public static findParentBySelector(elm: HTMLElement, selector: string): HTMLElement | null {\n var all = elm.ownerDocument.querySelectorAll(selector);\n var cur = elm.parentNode as HTMLElement;\n while (cur && !ElementHelper.collectionHas(all, cur)) {\n //keep going up until you find a match\n cur = cur.parentNode as HTMLElement; //go up\n }\n return cur; //will return null if not found\n }\n}\n\nexport function getFirstLevelDraggables(container: HTMLElement): HTMLElement[] {\n const all = Array.from(container.querySelectorAll<HTMLElement>('.ngx-draggable:not(.dragging)'));\n const firstLevel: HTMLElement[] = [];\n\n for (const el of all) {\n let parent = el.parentElement;\n let isNested = false;\n\n while (parent && parent !== container) {\n if (parent.classList.contains('ngx-draggable')) {\n isNested = true;\n break;\n }\n parent = parent.parentElement;\n }\n\n if (!isNested) {\n firstLevel.push(el);\n }\n }\n\n return firstLevel;\n}\n\nexport function isElementNode(node: Node): node is Element {\n return node?.nodeType === Node.ELEMENT_NODE; // 1\n}\n\nexport function isDocumentNode(node: Node | null): node is Document {\n return node?.nodeType === Node.DOCUMENT_NODE; // 9\n}\n\nexport function isShadowRootNode(node: Node | null): node is ShadowRoot {\n return node?.nodeType === Node.DOCUMENT_FRAGMENT_NODE && 'host' in node;\n}\n\nexport function getOwnerWindow(node: Node): Window | null {\n if (isDocumentNode(node)) return node.defaultView;\n return node?.ownerDocument?.defaultView ?? null;\n}\nexport function isWindow(value: unknown): value is Window {\n return (\n value != null &&\n typeof value === 'object' &&\n 'window' in value &&\n (value as Window).window === value\n );\n}\n","import { ApplicationRef, TemplateRef, type EmbeddedViewRef } from '@angular/core';\nimport { DropListRef } from './drop-list-ref';\nimport { isElementNode } from './utils/element.helper';\n\nexport class PlaceHolderRef {\n tpl?: TemplateRef<unknown>;\n /** Set by `NgxPlaceholder` so the embedded view can join Angular's change-detection tree. */\n appRef?: ApplicationRef;\n dropList?: DropListRef;\n element?: HTMLElement;\n\n private _visible = false;\n private _view?: EmbeddedViewRef<unknown>;\n /** True once `this.element` was built from `tpl` (as opposed to the fallback clone). */\n private isCustom = false;\n\n attach(container: HTMLElement, source: HTMLElement, reference?: Node | null): HTMLElement {\n if (!this.element) {\n if (this.tpl) {\n this._view = this.tpl.createEmbeddedView({});\n this.appRef?.attachView(this._view);\n // Render bindings inside the embedded view before we move its DOM nodes.\n this._view.detectChanges();\n\n const element = this._view.rootNodes.find((node): node is HTMLElement =>\n isElementNode(node),\n );\n\n if (!element) {\n this.appRef?.detachView(this._view);\n this._view.destroy();\n this._view = undefined;\n\n throw new Error(\n 'ngxPlaceholder template must contain exactly one HTMLElement root node ' +\n '(other root nodes, if any, are ignored).',\n );\n }\n\n this.element = element;\n this.isCustom = true;\n } else {\n // Fallback: keep the same tag/attributes as the dragged item so selectors such as\n // \".list > article\" and grid/flex item rules continue to apply.\n this.element = source.cloneNode(false) as HTMLElement;\n this.element.removeAttribute('id');\n this.element.classList.add('ngx-drag-placeholder');\n this.element.setAttribute('aria-hidden', 'true');\n this.element.setAttribute('inert', '');\n this.element.removeAttribute('tabindex');\n this.isCustom = false;\n }\n }\n\n // Safety overrides that apply regardless of who authored the element: it must never\n // inherit a live drag transform/animation (transform/transition are left free for the\n // sort session to drive, translate3d-ing the placeholder to the current insertion slot),\n // never intercept pointer events, and never be display:none.\n this.element.style.removeProperty('transform');\n this.element.style.removeProperty('transition');\n this.element.style.removeProperty('will-change');\n this.element.style.setProperty('animation', 'none', 'important');\n this.element.style.setProperty('pointer-events', 'none', 'important');\n this.element.style.setProperty('visibility', 'visible', 'important');\n\n if (!this.isCustom) {\n // Only the auto-generated clone gets the default \"phantom box\" look. A custom\n // *ngxPlaceholder template is styled entirely by the caller.\n this.element.style.setProperty('opacity', '0.16', 'important');\n this.element.style.setProperty('outline', '2px dashed currentColor', 'important');\n this.element.style.setProperty('outline-offset', '-2px', 'important');\n }\n\n this._visible = true;\n\n if (reference && reference.parentNode === container) {\n if (this.element !== reference) container.insertBefore(this.element, reference);\n } else if (this.element.parentNode !== container) {\n container.appendChild(this.element);\n }\n\n return this.element;\n }\n\n /** True while the currently attached element came from a custom `*ngxPlaceholder` template. */\n get custom(): boolean {\n return this.isCustom;\n }\n\n detach(): void {\n this.element?.remove();\n\n if (this._view) {\n this.appRef?.detachView(this._view);\n this._view.destroy();\n this._view = undefined;\n }\n\n this.element = undefined;\n this._visible = false;\n }\n\n get visible(): boolean {\n return this._visible && !!this.element?.isConnected;\n }\n}\n","/**\n * Pure geometry used by the drop-list sorting engine.\n *\n * Nothing in this file touches the DOM. Everything is a deterministic function of\n * `(rectangles, pointer)`, which is what makes sorting reversible: the same pointer over the\n * same snapshot always yields the same insertion index, regardless of what the previous\n * pointer positions were.\n *\n * Layout direction is *derived from the rectangles* (row clustering + the order in which DOM\n * siblings actually appear on screen) rather than from `flex-direction` / `direction`. That is\n * what lets one algorithm handle block flow, inline flow, flex (row/column/wrap/reverse),\n * grid, RTL and `order:`-reshuffled layouts. Computed style is only a fallback for lists that\n * are too small (0 or 1 item) to reveal their own orientation.\n */\n\nexport interface Box {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\n/** `x` = one row, `y` = one column, `grid` = several rows containing several items. */\nexport type Axis = 'x' | 'y' | 'grid';\nexport type Sign = 1 | -1;\n\nexport interface LayoutModel {\n axis: Axis;\n /** +1: DOM order advances left→right inside a row. -1: right→left (RTL, row-reverse...). */\n dirX: Sign;\n /** +1: rows/items advance top→bottom in DOM order. -1: bottom→top (column-reverse, wrap-reverse). */\n dirY: Sign;\n /** Row index (in DOM order) of every box. */\n rowOf: number[];\n /** Horizontal direction of every row (a single row can differ from the global one). */\n rowDirX: Sign[];\n /** Mid-lines separating consecutive rows, in DOM row order. Length = rowCount - 1. */\n rowBounds: number[];\n /** Outer edges of the first / last row along the row direction (see `dirY`). */\n yStart: number;\n yEnd: number;\n rowCount: number;\n}\n\n/**\n * Hysteresis is the only \"magic\" number in the algorithm and it is deliberate: without it a\n * pointer resting exactly on a sibling's mid-line flips the placeholder on every sub-pixel\n * jitter (and on every rounding difference between two layouts). It is proportional to the\n * sibling's size and capped, so it can never make a small item feel sticky.\n */\nexport const HYSTERESIS_RATIO = 0.1;\nexport const HYSTERESIS_MAX_PX = 6;\n\nexport function hysteresis(size: number): number {\n return Math.min(HYSTERESIS_MAX_PX, Math.max(0, size) * HYSTERESIS_RATIO);\n}\n\nconst cx = (b: Box) => (b.left + b.right) / 2;\nconst cy = (b: Box) => (b.top + b.bottom) / 2;\nconst width = (b: Box) => b.right - b.left;\nconst height = (b: Box) => b.bottom - b.top;\nconst sign = (n: number): Sign => (n < 0 ? -1 : 1);\n\ninterface RowAcc {\n top: number;\n bottom: number;\n first: number;\n last: number;\n count: number;\n}\n\n/**\n * Builds a layout model from DOM-ordered boxes.\n *\n * @param fallbackAxis orientation to assume when there are fewer than two boxes.\n * @param fallbackRtl inline direction to assume when no row contains two items.\n */\nexport function analyzeLayout(\n boxes: readonly Box[],\n fallbackAxis: 'x' | 'y' = 'y',\n fallbackRtl = false,\n): LayoutModel {\n const rows: RowAcc[] = [];\n const rowOf: number[] = [];\n\n boxes.forEach((b, i) => {\n const row = rows[rows.length - 1];\n if (row) {\n const overlap = Math.min(b.bottom, row.bottom) - Math.max(b.top, row.top);\n const smaller = Math.min(height(b), row.bottom - row.top);\n // Same row when the boxes share at least half of the smaller one's height. Touching or\n // sub-pixel-overlapping boxes (fractional heights) therefore start a new row.\n if (overlap > 0 && overlap >= smaller * 0.5) {\n row.top = Math.min(row.top, b.top);\n row.bottom = Math.max(row.bottom, b.bottom);\n row.last = i;\n row.count++;\n rowOf.push(rows.length - 1);\n return;\n }\n }\n rows.push({ top: b.top, bottom: b.bottom, first: i, last: i, count: 1 });\n rowOf.push(rows.length - 1);\n });\n\n const rowCount = rows.length;\n\n // Vertical direction: which way do successive rows travel?\n const dirY: Sign =\n rowCount > 1\n ? sign((rows[rowCount - 1].top + rows[rowCount - 1].bottom) / 2 - (rows[0].top + rows[0].bottom) / 2)\n : 1;\n\n // Horizontal direction per row (from the first/last item of that row) + a global vote.\n const rowDirX: Sign[] = [];\n let votes = 0;\n for (const r of rows) {\n if (r.count > 1) {\n const d = sign(cx(boxes[r.last]) - cx(boxes[r.first]));\n rowDirX.push(d);\n votes += d;\n } else {\n rowDirX.push(0 as unknown as Sign); // resolved below once the global vote is known\n }\n }\n const dirX: Sign = votes !== 0 ? sign(votes) : fallbackRtl ? -1 : 1;\n for (let i = 0; i < rowDirX.length; i++) if (!rowDirX[i]) rowDirX[i] = dirX;\n\n const rowBounds: number[] = [];\n for (let r = 0; r < rowCount - 1; r++) {\n rowBounds.push(dirY === 1 ? (rows[r].bottom + rows[r + 1].top) / 2 : (rows[r].top + rows[r + 1].bottom) / 2);\n }\n\n const first = rows[0];\n const lastRow = rows[rowCount - 1];\n const yStart = first ? (dirY === 1 ? first.top : first.bottom) : 0;\n const yEnd = lastRow ? (dirY === 1 ? lastRow.bottom : lastRow.top) : 0;\n\n let axis: Axis;\n if (boxes.length < 2) axis = fallbackAxis;\n else if (rowCount === 1) axis = 'x';\n else if (rows.every((r) => r.count === 1)) axis = 'y';\n else axis = 'grid';\n\n return { axis, dirX, dirY, rowOf, rowDirX, rowBounds, yStart, yEnd, rowCount };\n}\n\nfunction rowAt(model: LayoutModel, y: number): number {\n let r = 0;\n for (const bound of model.rowBounds) {\n if (model.dirY === 1 ? y > bound : y < bound) r++;\n else break;\n }\n return r;\n}\n\n/**\n * Where should the dragged item be inserted, given the pointer?\n *\n * The result is the number of *other* items that end up before the dragged one, i.e. the\n * dragged item's final index. `slot` is the index (in `boxes`) of the dragged item's own slot\n * (its placeholder), or -1 when the list does not contain one yet.\n *\n * `current` is the index the slot currently has in \"others space\"; it only decides on which\n * side of a sibling's mid-line the small hysteresis band applies. Pass `null` for a first\n * placement (no history, no hysteresis).\n *\n * Pure: depends only on its arguments.\n */\nexport function resolveInsertionIndex(\n model: LayoutModel,\n boxes: readonly Box[],\n slot: number,\n pointer: Point,\n current: number | null,\n): number {\n let before = 0;\n let others = 0;\n\n for (let i = 0; i < boxes.length; i++) {\n if (i === slot) continue;\n const o = others++;\n const b = boxes[i];\n // Sign of the hysteresis band: +1 favours \"stays before the pointer\", -1 favours \"stays after\".\n const bias = current === null ? 0 : o < current ? 1 : -1;\n\n let isBefore: boolean;\n if (model.axis === 'x') {\n isBefore = model.dirX * (pointer.x - cx(b)) + bias * hysteresis(width(b)) > 0;\n } else if (model.axis === 'y') {\n isBefore = model.dirY * (pointer.y - cy(b)) + bias * hysteresis(height(b)) > 0;\n } else {\n const row = model.rowOf[i];\n const py = pointer.y + model.dirY * bias * hysteresis(height(b));\n const pointerRow = rowAt(model, py);\n if (model.dirY * (py - model.yStart) < 0) {\n isBefore = false; // above the first row: nothing precedes the pointer\n } else if (model.dirY * (py - model.yEnd) > 0) {\n isBefore = true; // below the last row: everything does (append)\n } else if (pointerRow !== row) {\n isBefore = pointerRow > row;\n } else {\n isBefore = model.rowDirX[row] * (pointer.x - cx(b)) + bias * hysteresis(width(b)) > 0;\n }\n }\n if (isBefore) before++;\n }\n return before;\n}\n\n/**\n * Along-axis displacement of every box when the slot moves to `target` (others-space index).\n *\n * The result is where each box has to be translated so that the boxes, re-ordered, occupy the\n * same run of space they occupied before, using each box's own size and the *measured* gaps\n * between the original slots (so `gap`, margins and inline whitespace are handled by\n * construction, not by assumption). Only meaningful for `x` / `y` axes; `grid` returns zeros.\n */\nexport function computeAxisOffsets(model: LayoutModel, boxes: readonly Box[], slot: number, target: number): number[] {\n const n = boxes.length;\n const offsets = new Array<number>(n).fill(0);\n if (model.axis === 'grid' || n < 2 || slot < 0) return offsets;\n\n const horizontal = model.axis === 'x';\n const dir = horizontal ? model.dirX : model.dirY;\n\n // Mirror into a frame where DOM order is ascending, so one code path serves LTR and RTL.\n const lo = boxes.map((b) => (horizontal ? (dir === 1 ? b.left : -b.right) : dir === 1 ? b.top : -b.bottom));\n const hi = boxes.map((b) => (horizontal ? (dir === 1 ? b.right : -b.left) : dir === 1 ? b.bottom : -b.top));\n\n const order: number[] = [];\n for (let i = 0; i < n; i++) if (i !== slot) order.push(i);\n order.splice(Math.max(0, Math.min(target, n - 1)), 0, slot);\n\n let cursor = lo[0];\n for (let p = 0; p < n; p++) {\n const item = order[p];\n const delta = cursor - lo[item];\n offsets[item] = Math.abs(delta) < 1e-6 ? 0 : dir * delta;\n cursor += hi[item] - lo[item] + (p < n - 1 ? lo[p + 1] - hi[p] : 0);\n }\n return offsets;\n}\n\n/** Intersection of two boxes, or `null` when they do not overlap. */\nexport function intersectBoxes(a: Box, b: Box): Box | null {\n const left = Math.max(a.left, b.left);\n const top = Math.max(a.top, b.top);\n const right = Math.min(a.right, b.right);\n const bottom = Math.min(a.bottom, b.bottom);\n return right > left && bottom > top ? { left, top, right, bottom } : null;\n}\n\nexport function boxContains(b: Box, x: number, y: number): boolean {\n return x >= b.left && x <= b.right && y >= b.top && y <= b.bottom;\n}\n\nexport function toBox(r: { left: number; top: number; right: number; bottom: number }): Box {\n return { left: r.left, top: r.top, right: r.right, bottom: r.bottom };\n}\n","import { localDeltaToViewport } from './coordinate-transform';\n\n/**\n * Tracks how far the scrollable ancestors of an element (and the window) have scrolled since\n * the frame was created.\n *\n * Geometry is measured once, when a drag enters a list. Scrolling afterwards moves the\n * content under a stationary pointer, which is equivalent to moving the pointer by the scroll\n * delta in the frame the geometry was measured in. Shifting the *pointer* (one point) instead\n * of re-measuring every item keeps cached rectangles valid across page scroll, parent scroll\n * and nested scroll without any layout reads on the hot path.\n *\n * `delta()` only reads `scrollLeft/Top` after `invalidate()` (called from a scroll event), so\n * ordinary pointer moves perform zero scroll reads.\n */\nexport class ScrollFrame {\n private readonly targets: Array<HTMLElement | Window> = [];\n private origin: Point = { x: 0, y: 0 };\n private cached: Point = { x: 0, y: 0 };\n private dirty = false;\n\n /**\n * @param start first element to inspect (walks up through its ancestors)\n * @param includeStart whether `start` itself counts (true for a list whose own scroll moves its items)\n */\n constructor(\n start: HTMLElement | null,\n includeStart = true,\n private readonly win: Window | null = start?.ownerDocument.defaultView ?? null,\n ) {\n let node: HTMLElement | null = includeStart ? start : (start?.parentElement ?? null);\n const root = start?.ownerDocument.documentElement;\n while (node) {\n // <html> scrolling is reported through `window`; counting both would double the delta.\n if (node !== root && scrolls(node)) this.targets.push(node);\n node = node.parentElement;\n }\n if (win) this.targets.push(win);\n this.origin = this.read();\n }\n\n /** Call when any scroll event fires. */\n invalidate(): void {\n this.dirty = true;\n }\n\n /** Total scroll distance (px) of all tracked containers since construction. */\n delta(): Point {\n if (this.dirty) {\n const now = this.read();\n this.cached = { x: now.x - this.origin.x, y: now.y - this.origin.y };\n this.dirty = false;\n }\n return this.cached;\n }\n\n private read(): Point {\n let x = 0;\n let y = 0;\n for (const t of this.targets) {\n if (this.win && t === this.win) {\n x += this.win.scrollX;\n y += this.win.scrollY;\n } else {\n const el = t as HTMLElement;\n // Element scroll offsets are local CSS pixels; geometry snapshots are viewport pixels.\n const delta = localDeltaToViewport(el, { x: el.scrollLeft, y: el.scrollTop });\n x += delta.x;\n y += delta.y;\n }\n }\n return { x, y };\n }\n}\n\ninterface Point {\n x: number;\n y: number;\n}\n\nfunction scrolls(el: HTMLElement): boolean {\n const s = el.ownerDocument.defaultView?.getComputedStyle(el);\n // `hidden` containers still scroll programmatically; `clip` never does.\n const scrollish = (v: string) =>\n v === 'auto' || v === 'scroll' || v === 'overlay' || v === 'hidden';\n return !!s && (scrollish(s.overflowX) || scrollish(s.overflowY));\n}\n","import { isElementNode } from '../utils/element.helper';\nimport { viewportDeltaToLocal } from '../utils/coordinate-transform';\nimport { ScrollFrame } from '../utils/scroll-frame';\nimport {\n Axis,\n Box,\n LayoutModel,\n Point,\n analyzeLayout,\n computeAxisOffsets,\n resolveInsertionIndex,\n toBox,\n} from './layout-geometry';\n\nexport interface SortSessionInit {\n /** The drop list element. */\n container: HTMLElement;\n /** The placeholder for the dragged item. Must already be attached inside `container`. */\n placeholder: HTMLElement;\n /** Slot elements (direct children of `container`) of every draggable EXCEPT the dragged one. */\n itemElements: ReadonlySet<HTMLElement>;\n /** Used only while the list is too small to reveal its own orientation. */\n fallbackAxis: 'x' | 'y';\n fallbackRtl: boolean;\n /** Sibling animation in ms (0 disables). */\n animationMs: number;\n /** Whitespace separator already inserted next to the placeholder (inline layouts only). */\n spacer?: Text | null;\n /**\n * Notified whenever an entry's `translate3d` offset changes (including back to `{0,0}`).\n * A displaced item can contain OTHER registered drop lists (a tree of nested lists); their\n * cached hit-test geometry was measured before any displacement, so without this hook their\n * on-screen position and their hit-test box silently disagree once a sibling moves.\n */\n onOffsetChange?: (el: HTMLElement, offset: Point) => void;\n}\n\n/**\n * Inline / inline-block layouts get their inter-item gap from whitespace TEXT nodes. A\n * placeholder that is moved (or freshly inserted) without one would collapse that gap and shift\n * everything after it by a space width, so it carries a separator of its own. Returns `null`\n * for layouts that have no whitespace nodes (flex, grid, Angular-trimmed templates).\n */\nexport function makeSpacer(container: HTMLElement): Text | null {\n for (const n of Array.from(container.childNodes)) {\n if (n.nodeType === 3 && n.nodeValue && /^\\s+$/.test(n.nodeValue)) {\n return container.ownerDocument.createTextNode(n.nodeValue);\n }\n }\n return null;\n}\n\ninterface Entry {\n el: HTMLElement;\n isSlot: boolean;\n /** Computed transform the element had before we touched it (so e.g. rotations survive). */\n base: string;\n savedTransform: string;\n savedTransition: string;\n savedWillChange: string;\n}\n\nconst EASING = 'cubic-bezier(0, 0, 0.2, 1)';\n\n/**\n * One drag's view of one drop list.\n *\n * Lifecycle\n * ---------\n * snapshot ──► resolve(pointer) ──► apply(index) ──► ... ──► dispose()\n *\n * The snapshot (`boxes`) is taken once, with the dragged item's slot already in place, and is\n * never re-read while the drag is over the list. `resolve` is a pure function of the pointer\n * and that snapshot, so moving the pointer back always restores the previous state.\n *\n * Two ways to *show* the result, chosen from the measured layout:\n *\n * - `transform` (one row or one column; the common case): the DOM is never touched. Siblings\n * and the placeholder are displaced with `translate3d`, computed from measured sizes and\n * gaps, exactly like Angular CDK's single-axis strategy.\n * - `flow` (grid / wrapping layouts): an exact translate cannot be derived without\n * re-implementing the browser's layout engine, so the single placeholder node is moved and\n * the browser lays the list out. Siblings are then animated from their old to new position\n * with FLIP `translate3d` so the motion is still transform-driven and smooth. Decisions\n * keep using the immutable snapshot, so the reflow can never feed back into them.\n */\nexport class SortSession {\n readonly mode: 'transform' | 'flow';\n\n private readonly container: HTMLElement;\n private readonly placeholder: HTMLElement;\n private readonly itemElements: ReadonlySet<HTMLElement>;\n private readonly animationMs: number;\n private readonly fallbackAxis: 'x' | 'y';\n private readonly fallbackRtl: boolean;\n\n private entries: Entry[] = [];\n private boxes: Box[] = [];\n private model!: LayoutModel;\n /** Index of the slot (placeholder) inside `entries`/`boxes` at snapshot time. */\n private slotIdx = -1;\n /** For each visible \"other\" item: its index among ALL other items (hidden ones included). */\n private otherModelIndex: number[] = [];\n private frame: ScrollFrame;\n private applied = new Map<HTMLElement, Point>();\n private targetIdx = 0;\n private disposed = false;\n /** undefined = not created yet, null = this layout has no whitespace separators. */\n private spacer: Text | null | undefined;\n private readonly onOffsetChange?: (el: HTMLElement, offset: Point) => void;\n\n constructor(init: SortSessionInit) {\n this.spacer = init.spacer;\n this.onOffsetChange = init.onOffsetChange;\n this.container = init.container;\n this.placeholder = init.placeholder;\n this.itemElements = init.itemElements;\n this.animationMs = init.animationMs;\n this.fallbackAxis = init.fallbackAxis;\n this.fallbackRtl = init.fallbackRtl;\n\n this.snapshot();\n this.frame = new ScrollFrame(this.container, true);\n this.mode = this.model.axis === 'grid' ? 'flow' : 'transform';\n this.targetIdx = this.slotIdx;\n\n const transition = this.animationMs > 0 ? `transform ${this.animationMs}ms ${EASING}` : '';\n for (const e of this.entries) {\n e.el.style.willChange = 'transform';\n if (transition) e.el.style.transition = transition;\n }\n }\n\n /** Detected orientation (useful for tests/diagnostics). */\n get axis(): Axis {\n return this.model.axis;\n }\n\n /** Current insertion index among the *visible other* items. */\n get target(): number {\n return this.targetIdx;\n }\n\n /** Index at which the session started (the slot's original position). */\n get origin(): number {\n return this.slotIdx;\n }\n\n /** Insertion index among ALL other items of the list (what consumers see as `currentIndex`). */\n get modelIndex(): number {\n const idx = this.otherModelIndex;\n if (this.targetIdx < idx.length) return idx[this.targetIdx];\n return idx.length ? idx[idx.length - 1] + 1 : 0;\n }\n\n /** Where would the dragged item be inserted if released at `pointer`? Pure; no side effects. */\n resolve(pointer: Point): number {\n const d = this.frame.delta();\n return resolveInsertionIndex(\n this.model,\n this.boxes,\n this.slotIdx,\n { x: pointer.x + d.x, y: pointer.y + d.y },\n this.targetIdx,\n );\n }\n\n /** Visually place the slot at `index`. Idempotent. */\n apply(index: number): void {\n if (this.disposed || index === this.targetIdx) return;\n this.targetIdx = index;\n if (this.mode === 'transform') this.applyTransforms(index);\n else this.applyFlow(index);\n }\n\n /** Put everything back where it started (slot at its original index). */\n reset(): void {\n this.apply(this.slotIdx);\n }\n\n /** A scroll event happened somewhere: cached scroll deltas must be re-read once. */\n onScroll(): void {\n this.frame.invalidate();\n }\n\n /**\n * Re-baseline from the live layout (e.g. the window was resized mid-drag). Not called during\n * normal sorting, because re-measuring while items are displaced is exactly what would\n * re-introduce feedback into the decision.\n */\n refresh(): void {\n if (this.disposed) return;\n const target = this.targetIdx;\n this.clearDisplacement();\n this.snapshot();\n this.frame = new ScrollFrame(this.container, true);\n if (this.mode === 'transform') {\n this.targetIdx = this.slotIdx;\n this.apply(Math.min(target, this.boxes.length - 1));\n } else {\n this.targetIdx = this.slotIdx;\n }\n }\n\n /** Restore every inline style this session touched. Safe to call more than once. */\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n for (const e of this.entries) {\n e.el.style.transform = e.savedTransform;\n e.el.style.transition = e.savedTransition;\n e.el.style.willChange = e.savedWillChange;\n if (this.applied.has(e.el)) this.onOffsetChange?.(e.el, { x: 0, y: 0 });\n }\n this.applied.clear();\n this.spacer?.remove();\n }\n\n // ---------------------------------------------------------------------------------------\n // snapshot\n // ---------------------------------------------------------------------------------------\n\n private snapshot(): void {\n const previous = new Map(this.entries.map((e) => [e.el, e] as const));\n\n const entries: Entry[] = [];\n const boxes: Box[] = [];\n const otherModelIndex: number[] = [];\n let slot = -1;\n let allOthers = 0;\n\n for (const node of Array.from(this.container.children)) {\n if (!isElementNode(node)) continue;\n const el = node as HTMLElement;\n const isSlot = el === this.placeholder;\n if (!isSlot && !this.itemElements.has(el)) continue;\n\n const modelIdx = isSlot ? -1 : allOthers++;\n const rect = el.getBoundingClientRect();\n const off = this.applied.get(el);\n const box = toBox(rect);\n if (off) {\n // Strip our own displacement so the snapshot always describes the *undisplaced* layout.\n box.left -= off.x;\n box.right -= off.x;\n box.top -= off.y;\n box.bottom -= off.y;\n }\n const hidden = !isSlot && rect.width === 0 && rect.height === 0;\n if (hidden) continue;\n\n if (isSlot) slot = entries.length;\n else otherModelIndex.push(modelIdx);\n\n const known = previous.get(el);\n entries.push(\n known ?? {\n el: el,\n isSlot,\n base: initialTransform(el),\n savedTransform: el.style.transform,\n savedTransition: el.style.transition,\n savedWillChange: el.style.willChange,\n },\n );\n boxes.push(box);\n }\n\n this.entries = entries;\n this.boxes = boxes;\n this.slotIdx = slot;\n this.otherModelIndex = otherModelIndex;\n this.model = analyzeLayout(boxes, this.fallbackAxis, this.fallbackRtl);\n }\n\n // ---------------------------------------------------------------------------------------\n // transform strategy (DOM stays untouched)\n // ---------------------------------------------------------------------------------------\n\n private applyTransforms(target: number): void {\n const offsets = computeAxisOffsets(this.model, this.boxes, this.slotIdx, target);\n const horizontal = this.model.axis === 'x';\n this.entries.forEach((e, i) => {\n const o = offsets[i];\n // `o` is derived from DOMRect measurements (viewport CSS pixels).\n this.setOffset(e, horizontal ? { x: o, y: 0 } : { x: 0, y: o });\n });\n }\n\n private setOffset(e: Entry, off: Point): void {\n const prev = this.applied.get(e.el);\n if ((prev?.x ?? 0) === off.x && (prev?.y ?? 0) === off.y) return;\n if (off.x === 0 && off.y === 0) {\n this.applied.delete(e.el);\n e.el.style.transform = e.savedTransform;\n } else {\n this.applied.set(e.el, off);\n const local = viewportDeltaToLocal(e.el, off, false);\n e.el.style.transform = `translate3d(${local.x}px, ${local.y}px, 0)${e.base}`;\n }\n this.onOffsetChange?.(e.el, off);\n }\n\n // ---------------------------------------------------------------------------------------\n // flow strategy (single placeholder move + FLIP transforms)\n // ---------------------------------------------------------------------------------------\n\n private applyFlow(target: number): void {\n const entries = this.entries;\n\n // 1. READ: where everything visually is right now (including in-flight animations).\n const first = entries.map((e) => e.el.getBoundingClientRect());\n\n // 2. WRITE: move the one placeholder node; drop any FLIP transforms.\n this.placeAt(target);\n for (const e of entries) {\n e.el.style.transition = 'none';\n e.el.style.transform = e.savedTransform;\n }\n\n // 3. READ: where everything is after the browser re-flowed the list.\n const last = entries.map((e) => e.el.getBoundingClientRect());\n\n // 4. WRITE: invert (put each item back where it was), then play (animate to its new home).\n const moved: Entry[] = [];\n entries.forEach((e, i) => {\n const dx = first[i].left - last[i].left;\n const dy = first[i].top - last[i].top;\n if (this.animationMs > 0 && (Math.abs(dx) > 0.5 || Math.abs(dy) > 0.5)) {\n const local = viewportDeltaToLocal(e.el, { x: dx, y: dy }, false);\n e.el.style.transform = `translate3d(${local.x}px, ${local.y}px, 0)${e.base}`;\n moved.push(e);\n }\n });\n\n const transition = this.animationMs > 0 ? `transform ${this.animationMs}ms ${EASING}` : '';\n if (moved.length) void this.container.offsetWidth; // commit the inverted frame\n for (const e of entries) e.el.style.transition = transition || e.savedTransition;\n for (const e of moved) e.el.style.transform = e.savedTransform;\n }\n\n private placeAt(target: number): void {\n const container = this.container;\n if (this.spacer === undefined) this.spacer = makeSpacer(container);\n const spacer = this.spacer;\n spacer?.remove();\n\n const others = this.entries.filter((e) => !e.isSlot);\n const ref = others[target]?.el;\n if (ref) {\n // ... [placeholder][separator][ref]: the separator that used to sit before `ref` still\n // separates it from its previous sibling, the new one separates it from the placeholder.\n container.insertBefore(this.placeholder, ref);\n if (spacer) container.insertBefore(spacer, ref);\n return;\n }\n const last = others[others.length - 1]?.el;\n const after = last ? last.nextSibling : null;\n if (spacer) container.insertBefore(spacer, after);\n container.insertBefore(this.placeholder, after);\n }\n\n private clearDisplacement(): void {\n for (const e of this.entries) {\n e.el.style.transition = 'none';\n e.el.style.transform = e.savedTransform;\n if (this.applied.has(e.el)) this.onOffsetChange?.(e.el, { x: 0, y: 0 });\n }\n this.applied.clear();\n }\n}\n\nfunction initialTransform(el: HTMLElement): string {\n const t = el.ownerDocument.defaultView?.getComputedStyle(el).transform;\n return t && t !== 'none' ? ` ${t}` : '';\n}\n","import { EventEmitter } from '@angular/core';\nimport { IDropEvent } from './contracts/IDropEvent';\nimport { IPosition } from './contracts/IPosition';\nimport { DragRef } from './drag-ref';\nimport { DropListGroupRef } from './drop-list-group-ref';\nimport { PlaceHolderRef } from './placeholder-ref';\nimport {\n Box,\n Point,\n analyzeLayout,\n boxContains,\n resolveInsertionIndex,\n toBox,\n} from './sorting/layout-geometry';\nimport { SortSession, makeSpacer } from './sorting/sort-session';\nimport { isRtl } from './utils/rtl';\nimport { ScrollFrame } from './utils/scroll-frame';\nimport { isElementNode } from './utils/element.helper';\n\n/**\n * A drop list.\n *\n * Membership (`_draggables`) only ever reflects which draggables *belong* to this list in the\n * template. It is never changed by dragging. Everything that is transient during a drag lives\n * in a single `SortSession` (see sorting/sort-session.ts) that is created when a drag enters\n * the list and disposed when it leaves or the drag ends:\n *\n * - the list the drag started in keeps its session for the whole drag (its placeholder holds\n * the item's original slot, so leaving and re-entering is stable);\n * - any other list gets a fresh session on every entry and drops it on every exit.\n */\nexport class DropListRef<T = any> {\n data?: T;\n el!: HTMLElement;\n disableSort = false;\n connectedTo: HTMLElement[] = [];\n dropListGroup?: DropListGroupRef | null;\n /** Duration (ms) of the sibling slide animation. `0` disables animation. */\n sortAnimationDuration = 200;\n\n readonly _draggables = new Set<DragRef<T>>();\n readonly onDrop = new EventEmitter<IDropEvent<T>>();\n\n /**\n * Nesting: the nearest ENCLOSING drop list (null for a top-level list), and this list's own\n * direct nested lists — i.e. lists whose nearest enclosing list is this one, not a list at any\n * depth. Set by `NgxDropList` at init from a `skipSelf` DI lookup. Used for two things: (1)\n * `depth` for \"innermost wins\" in `DragRef`'s target resolution, without any DOM `.contains()`\n * calls on the hot path, and (2) cascading `_setAncestorOffset` (below) to every list nested\n * inside an item that gets displaced by sorting, at any depth.\n */\n parentList: DropListRef<any> | null = null;\n readonly childLists = new Set<DropListRef<any>>();\n\n private session: SortSession | null = null;\n private placeholder?: PlaceHolderRef;\n customPlaceholder?: PlaceHolderRef;\n private activeDrag: DragRef<T> | null = null;\n private isOrigin = false;\n private hovered = false;\n\n private hit: HitGeometry | null = null;\n /** Pre-insertion geometry of a foreign list, restored when the drag leaves it. */\n private naturalHit: HitGeometry | null = null;\n private hitCached = false;\n /**\n * Screen-space offset contributed by displaced ANCESTOR item(s) (see `parentList` above).\n * `{0,0}` outside of that (the overwhelmingly common case). Kept as a SUM of independent\n * per-source contributions, not a single overwritten value: while the pointer hovers a\n * FOREIGN (non-origin) list nested inside the origin's own displaced item, up to two ancestor\n * sessions can be displacing this list at once — the origin's (frozen, still active further\n * up) and that foreign list's own — and one clearing its contribution on release must not\n * wipe out the other's, still-active, contribution.\n */\n private readonly ancestorContributions = new Map<DropListRef<any>, Point>();\n private ancestorOffset: Point = { x: 0, y: 0 };\n /** Entries this list itself pushed via a one-time placeholder-insertion reflow (see below). */\n private readonly reflowContributions = new Map<HTMLElement, Point>();\n\n /** How many enclosing drop lists this one is nested inside. Root lists are depth 0. */\n get depth(): number {\n let d = 0;\n for (let p: DropListRef<any> | null = this.parentList; p; p = p.parentList) d++;\n return d;\n }\n\n _registerChild(child: DropListRef<any>): void {\n child.parentList = this;\n this.childLists.add(child);\n }\n\n _unregisterChild(child: DropListRef<any>): void {\n if (child.parentList === this) child.parentList = null;\n this.childLists.delete(child);\n }\n\n /**\n * One ancestor SESSION's contribution to this list's total displacement just changed (or\n * cleared, `{0,0}`). `source` identifies WHICH session — the list whose own item is doing the\n * displacing — so that this list's own recomputed total is a SUM across every currently-active\n * source, and cascades the SAME (source, offset) pair on to every nested list at any depth\n * unchanged, so a list several levels down stays hit-testable at its true on-screen position\n * regardless of which ancestor(s) are currently sorting.\n */\n _setAncestorOffset(source: DropListRef<any>, offset: Point): void {\n const prev = this.ancestorContributions.get(source);\n if (prev && prev.x === offset.x && prev.y === offset.y) return;\n if (offset.x === 0 && offset.y === 0) this.ancestorContributions.delete(source);\n else this.ancestorContributions.set(source, offset);\n\n let x = 0;\n let y = 0;\n for (const o of this.ancestorContributions.values()) {\n x += o.x;\n y += o.y;\n }\n if (x === this.ancestorOffset.x && y === this.ancestorOffset.y) return; // no net change\n this.ancestorOffset = { x, y };\n for (const child of this.childLists) child._setAncestorOffset(source, offset);\n }\n\n /** Which of this list's DIRECT nested lists live inside `el`, notified of its new offset. */\n private propagateOffset(el: HTMLElement, offset: Point): void {\n for (const child of this.childLists) {\n if (el.contains(child.el)) child._setAncestorOffset(this, offset);\n }\n }\n\n /** Rects, right now, of every `other` entry that contains one of this list's nested lists. */\n private trackedEntryRects(others: ReadonlySet<HTMLElement>): Map<HTMLElement, DOMRect> {\n const map = new Map<HTMLElement, DOMRect>();\n for (const child of this.childLists) {\n for (const el of others) {\n if (el.contains(child.el)) {\n if (!map.has(el)) map.set(el, el.getBoundingClientRect());\n break;\n }\n }\n }\n return map;\n }\n\n /** Turns the real reflow a fresh placeholder insertion just caused into ordinary offsets. */\n private propagateReflow(before: Map<HTMLElement, DOMRect>): void {\n for (const [el, prev] of before) {\n const now = el.getBoundingClientRect();\n const dx = now.left - prev.left;\n const dy = now.top - prev.top;\n if (dx || dy) {\n this.propagateOffset(el, { x: dx, y: dy });\n this.reflowContributions.set(el, { x: dx, y: dy });\n }\n }\n }\n\n addItem(item: DragRef<T>): void {\n this._draggables.add(item);\n }\n\n removeItem(item: DragRef<T>): void {\n this._draggables.delete(item);\n }\n\n isConnectedTo(other: DropListRef<any>): boolean {\n if (other === this) return true;\n if (this.connectedTo.includes(other.el) || other.connectedTo.includes(this.el)) return true;\n return !!this.dropListGroup && this.dropListGroup.has(other);\n }\n\n // ---------------------------------------------------------------------------------------\n // hit testing (cached for the duration of a drag)\n // ---------------------------------------------------------------------------------------\n\n /**\n * Measure the list and its clipping ancestors once, at drag start (or the moment a nested\n * list becomes a candidate mid-drag). `measureHit` reads live `getBoundingClientRect()`s,\n * which already include any `translate3d` an ancestor item's displacement has applied — so if\n * this list is currently offset (nested inside a sibling that sorting is displacing right\n * now), the measurement is normalized back to the zero-offset frame `_containsPoint` expects,\n * by subtracting that offset straight back out. Without this, entering a nested list while\n * its ancestor is mid-displacement would double-count the offset on every check afterwards.\n */\n _cacheGeometry(): void {\n const hit = measureHit(this.el);\n if (hit && (this.ancestorOffset.x || this.ancestorOffset.y)) {\n hit.box.left -= this.ancestorOffset.x;\n hit.box.right -= this.ancestorOffset.x;\n hit.box.top -= this.ancestorOffset.y;\n hit.box.bottom -= this.ancestorOffset.y;\n }\n this.hit = hit;\n this.hitCached = true;\n }\n\n /**\n * Is the point over the *visible* part of this list? Scroll-aware without re-measuring.\n *\n * The list box and every clipping ancestor are tracked separately because they react to scroll\n * differently: scrolling a container moves the list but not the container's own clip window.\n */\n _containsPoint(x: number, y: number): boolean {\n const hit = this.hitCached ? this.hit : measureHit(this.el);\n if (!hit) return false;\n // The list's own box shifts with any ancestor displacement; a clip window (a scroll/overflow\n // ancestor) normally does not, since it is not itself an item being sorted, so it is tested\n // against the raw pointer.\n const d0 = hit.frame.delta();\n if (!boxContains(hit.box, x - this.ancestorOffset.x + d0.x, y - this.ancestorOffset.y + d0.y))\n return false;\n for (const clip of hit.clips) {\n const d = clip.frame.delta();\n if (!boxContains(clip.box, x + d.x, y + d.y)) return false;\n }\n return true;\n }\n\n /** Approximate area, used to break ties between overlapping, unrelated lists. */\n _area(): number {\n const b = (this.hit ?? measureHit(this.el))?.box;\n return b ? (b.right - b.left) * (b.bottom - b.top) : 0;\n }\n\n _onScroll(): void {\n this.hit?.frame.invalidate();\n this.hit?.clips.forEach((c) => c.frame.invalidate());\n this.session?.onScroll();\n }\n\n /** Re-measure after a viewport resize. */\n _refresh(): void {\n if (this.hitCached) this._cacheGeometry();\n this.session?.refresh();\n }\n\n // ---------------------------------------------------------------------------------------\n // drag lifecycle\n // ---------------------------------------------------------------------------------------\n\n /** Backwards-compatible entry point: makes this list the drag's target. */\n createPlaceholder(drag: DragRef<T>): PlaceHolderRef {\n this.enter(drag, drag.pointer.x, drag.pointer.y);\n return drag.placeholder!;\n }\n\n /** The drag pointer entered this list (or the drag started inside it). */\n enter(drag: DragRef<T>, x = 0, y = 0): void {\n if (this.session && this.activeDrag === drag) {\n // Resuming a session that's still alive: either this is the origin list (its slot is\n // always kept), or the pointer dove into one of its own nested lists and came back up\n // (frozen rather than released in `exit()`, see there).\n this.hovered = true;\n this.el.classList.add('ngx-drop-list--active');\n drag.placeholder = this.placeholder;\n this.sortItem(drag, { x, y });\n return;\n }\n\n this.releaseSession(); // never keep stale state from a previous drag (geometry cache stays)\n this.begin(drag, { x, y });\n this.hovered = true;\n this.el.classList.add('ngx-drop-list--active');\n }\n\n /** Re-evaluate the insertion index for the pointer. Returns the new index, or null if unchanged. */\n sortItem(drag: DragRef<T>, position: IPosition): number | null {\n const s = this.session;\n if (!s || this.activeDrag !== drag || !this.hovered || this.disableSort) return null;\n const next = s.resolve(position);\n if (next === s.target) return null;\n s.apply(next);\n return s.modelIndex;\n }\n\n /** The pointer left this list. */\n /**\n * The pointer truly left this list (as opposed to moving deeper into one of its own nested\n * lists — see `DragRef`'s chain tracking, which never calls `exit()` for a list that remains\n * an ancestor of the new target, so this always means \"left this list's territory\").\n */\n exit(drag: DragRef<T>): void {\n if (!this.session || this.activeDrag !== drag) return;\n this.hovered = false;\n this.el.classList.remove('ngx-drop-list--active');\n\n if (this.isOrigin) {\n // Keep the original slot (the item logically still lives here) but stop displacing siblings.\n this.session.reset();\n } else {\n // A foreign list forgets the drag on exit; its geometry stays cached until the drag ends.\n this.releaseSession(drag);\n }\n }\n\n /**\n * The pointer dove into one of this list's own nested lists: this list is no longer the\n * innermost target, but it isn't being left either — its placeholder and sibling displacement\n * stay exactly as they are (avoids a snap-back-then-forward flicker), only the \"currently\n * hovered\" bookkeeping (and its visual highlight) is cleared. `DragRef`'s chain tracking calls\n * this instead of `exit()` for every list that remains an ancestor of the new target.\n */\n _freeze(): void {\n this.hovered = false;\n this.el.classList.remove('ngx-drop-list--active');\n }\n\n /**\n * Ends the drag for this list. Returns the drop event when the pointer was released over this\n * list, `null` otherwise (nothing to emit). All transient state is disposed either way.\n */\n _finish(drag: DragRef<T>, commit: boolean): IDropEvent<T> | null {\n const s = this.session;\n if (!s || this.activeDrag !== drag) return null;\n\n const event: IDropEvent<T> | null =\n commit && this.hovered\n ? {\n previousIndex: Math.max(0, drag.originIndex),\n currentIndex: s.modelIndex,\n item: drag,\n container: this,\n previousContainer: drag.originDropList ?? this,\n isPointerOverContainer: true,\n }\n : null;\n\n this.releaseSession(drag);\n return event;\n }\n\n /** Compatibility wrapper: finish + emit. */\n finishDrag(drag: DragRef<T>): void {\n const event = this._finish(drag, true);\n if (event) this.onDrop.emit(event);\n }\n\n resetSortTransforms(): void {\n this.session?.reset();\n }\n\n getFinalIndex(): number {\n return this.session ? this.session.modelIndex : 0;\n }\n\n getItemIndex(item: DragRef<T>): number {\n return this.indexOf(item);\n }\n\n /** End of the drag: dispose EVERYTHING this list holds, including cached geometry. Idempotent. */\n _release(drag?: DragRef<T>): void {\n if (drag && this.activeDrag && this.activeDrag !== drag) return;\n this.releaseSession(drag);\n this.hit = null;\n this.hitCached = false;\n // `ancestorOffset` is deliberately NOT reset here: `enter()` calls this unconditionally as a\n // safety-clear on every (re-)entry, including while a currently-active ancestor transform\n // still legitimately applies to this list. It self-corrects when that transform actually\n // reverts to zero, via the `onOffsetChange` cascade (see `_setAncestorOffset`), which also\n // covers the true end of a drag (the displaced list's own session disposes and reports\n // every entry back to `{0,0}`).\n }\n\n /** Dispose the sort session, placeholder and drag ownership. */\n private releaseSession(drag?: DragRef<T>): void {\n if (drag && this.activeDrag && this.activeDrag !== drag) return;\n\n this.session?.dispose();\n this.session = null;\n if (this.reflowContributions.size) {\n // The one-time reflow from this list's own placeholder insertion (see `propagateReflow`)\n // never went through the session's own `applied` map, so its `dispose()` above cannot\n // have cleared it — do that here instead, or it would linger as a stale contribution.\n for (const [el] of this.reflowContributions) this.propagateOffset(el, { x: 0, y: 0 });\n this.reflowContributions.clear();\n }\n\n this.placeholder?.detach();\n if (this.activeDrag && this.activeDrag.placeholder === this.placeholder) {\n this.activeDrag.placeholder = undefined;\n }\n this.placeholder = undefined;\n\n if (this.naturalHit) {\n this.hit = this.naturalHit;\n this.naturalHit = null;\n }\n\n this.activeDrag = null;\n this.isOrigin = false;\n this.hovered = false;\n this.el?.classList.remove('ngx-drop-list--active');\n }\n\n // ---------------------------------------------------------------------------------------\n // internals\n // ---------------------------------------------------------------------------------------\n\n private begin(drag: DragRef<T>, pointer: IPosition): void {\n const origin = drag.originDropList === this;\n const others = this.otherSlots(drag);\n const rtl = isRtl(this.el);\n const axis = fallbackAxis(this.el);\n\n const ph = this.customPlaceholder ?? new PlaceHolderRef();\n\n ph.dropList = this;\n let spacer: Text | null | undefined;\n\n if (origin) {\n // The placeholder takes over the exact slot of the (now hidden) source element.\n ph.attach(this.el, drag.el, drag.el);\n this.lockPlaceholderGeometry(drag, ph, drag.start);\n } else {\n ph.detach();\n // Only the \"other\" entries that contain a nested list are worth measuring (usually none,\n // or very few, even in a large tree): inserting the placeholder is a REAL DOM node, so it\n // shifts later siblings via ordinary CSS reflow, not `translate3d` — a one-time event this\n // list's own SortSession never reports through `onOffsetChange`, since (being sized and\n // positioned by `foreignInsertionReference` to already match where it belongs) it never\n // needs to actually transform anything afterwards. Measuring the small tracked set just\n // before and after the insertion turns that one-time reflow into an ordinary ancestor\n // contribution, exactly like any other displaced entry.\n const tracked = this.childLists.size ? this.trackedEntryRects(others) : null;\n const reference = this.foreignInsertionReference(others, pointer, axis, rtl);\n ph.attach(this.el, drag.el, reference);\n // Sized to its final footprint BEFORE measuring the reflow it causes: an unsized clone\n // (still near-zero height) wouldn't have pushed `others` at all yet.\n this.lockPlaceholderGeometry(drag, ph, drag.start);\n if (tracked) this.propagateReflow(tracked);\n spacer = makeSpacer(this.el);\n if (spacer) this.el.insertBefore(spacer, reference ?? ph.element!);\n }\n\n this.placeholder = ph;\n this.activeDrag = drag;\n this.isOrigin = origin;\n drag.placeholder = ph;\n\n this.session = new SortSession({\n container: this.el,\n placeholder: ph.element!,\n itemElements: others,\n fallbackAxis: axis,\n fallbackRtl: rtl,\n animationMs: this.sortAnimationDuration,\n spacer,\n onOffsetChange: this.childLists.size\n ? (el, offset) => this.propagateOffset(el, offset)\n : undefined,\n });\n\n if (!origin && this.hitCached) {\n // Inserting the placeholder made this list bigger; the grown box is what the user sees\n // (and must be able to reach, e.g. to append below the last item). The natural box comes\n // back on exit, so entering/leaving at the old edge cannot flicker.\n this.naturalHit = this.hit;\n this._cacheGeometry();\n }\n }\n\n /**\n * First placement into a list that does not contain the item yet: the node the placeholder\n * must be inserted before (null = append). Same pure resolver as sorting, no hysteresis.\n */\n private foreignInsertionReference(\n others: ReadonlySet<HTMLElement>,\n pointer: IPosition,\n axis: 'x' | 'y',\n rtl: boolean,\n ): Node | null {\n const els: HTMLElement[] = [];\n const boxes: Box[] = [];\n for (const node of Array.from(this.el.children)) {\n if (!isElementNode(node)) continue;\n const el = node as HTMLElement;\n if (!others.has(el)) continue;\n\n const r = el.getBoundingClientRect();\n if (r.width === 0 && r.height === 0) continue;\n els.push(el);\n boxes.push(toBox(r));\n }\n if (!els.length) return null;\n\n const index = this.disableSort\n ? els.length\n : resolveInsertionIndex(analyzeLayout(boxes, axis, rtl), boxes, -1, pointer, null);\n\n return index < els.length ? els[index] : els[els.length - 1].nextSibling;\n }\n\n private otherSlots(drag: DragRef<T>): Set<HTMLElement> {\n const set = new Set<HTMLElement>();\n for (const d of this._draggables) {\n if (d !== drag && d.el?.parentElement === this.el) set.add(d.el);\n }\n return set;\n }\n\n private indexOf(item: DragRef<T>): number {\n const byElement = new Map<HTMLElement, DragRef<T>>();\n for (const d of this._draggables) if (d.el) byElement.set(d.el, d);\n\n let index = 0;\n for (const node of Array.from(this.el.children)) {\n if (!isElementNode(node)) continue;\n const el = node as HTMLElement;\n if (el === this.placeholder?.element) continue;\n if (el.classList.contains('ngx-drag-placeholder')) continue;\n if (el.classList.contains('ngx-drag-preview')) continue;\n const ref = byElement.get(el);\n if (!ref) continue;\n if (ref === item) return index;\n index++;\n }\n return -1;\n }\n\n private lockPlaceholderGeometry(drag: DragRef<T>, ph: PlaceHolderRef, rect: DOMRect): void {\n const placeholder = ph.element!;\n const set = (k: string, v: string) => placeholder.style.setProperty(k, v, 'important');\n\n placeholder.style.zIndex = '';\n placeholder.style.removeProperty('will-change');\n\n if (ph.custom) return;\n\n placeholder.style.display = drag.originalDisplay;\n\n // Occupies exactly the dragged item's footprint, so the gap reserved in the list — and the\n // sibling-displacement math derived from it — matches the item's real size.\n set('width', `${rect.width}px`);\n set('height', `${rect.height}px`);\n // set('min-width', `${rect.width}px`);\n // set('min-height', `${rect.height}px`);\n // set('max-width', `${rect.width}px`);\n // set('max-height', `${rect.height}px`);\n set('visibility', 'visible');\n set('opacity', '0.16');\n set('pointer-events', 'none');\n set('animation', 'none');\n set('box-sizing', 'border-box');\n }\n}\n\n/** Orientation to assume while a list has fewer than two items to measure. */\nfunction fallbackAxis(container: HTMLElement): 'x' | 'y' {\n const win = container.ownerDocument.defaultView;\n const s = win?.getComputedStyle(container);\n if (s?.display.includes('flex')) return s.flexDirection.startsWith('column') ? 'y' : 'x';\n if (s?.display.includes('grid')) return 'y';\n const child = container.firstElementChild;\n if (child && win?.getComputedStyle(child).display.startsWith('inline')) return 'x';\n return 'y';\n}\n\ninterface HitGeometry {\n box: Box;\n frame: ScrollFrame;\n clips: { box: Box; frame: ScrollFrame }[];\n}\n\n/** Rect of the list plus one clip window per clipping (overflow != visible) ancestor. */\nfunction measureHit(el: HTMLElement): HitGeometry | null {\n const r = el.getBoundingClientRect();\n if (r.right <= r.left || r.bottom <= r.top) return null;\n\n const clips: HitGeometry['clips'] = [];\n const root = el.ownerDocument.documentElement;\n for (let node = el.parentElement; node && node !== root; node = node.parentElement) {\n const s = node.ownerDocument.defaultView?.getComputedStyle(node);\n if (!s) continue;\n const cx = s.overflowX !== 'visible';\n const cy = s.overflowY !== 'visible';\n if (!cx && !cy) continue;\n const c = node.getBoundingClientRect();\n clips.push({\n box: {\n left: cx ? c.left : -Infinity,\n right: cx ? c.right : Infinity,\n top: cy ? c.top : -Infinity,\n bottom: cy ? c.bottom : Infinity,\n },\n // A clip window only moves when something ABOVE the clipping element scrolls.\n frame: new ScrollFrame(node, false),\n });\n }\n return { box: toBox(r), frame: new ScrollFrame(el, false), clips };\n}\n","import { DropListRef } from './drop-list-ref';\n\n/**\n * Groups multiple drop lists so items can be dragged between them without\n * needing an explicit `connectedTo` list on every single one.\n * Lists register themselves automatically when `NgxDropListGroup` wraps them.\n */\nexport class DropListGroupRef {\n readonly lists = new Set<DropListRef<any>>();\n\n add(list: DropListRef<any>): void {\n this.lists.add(list);\n }\n remove(list: DropListRef<any>): void {\n this.lists.delete(list);\n }\n has(list: DropListRef<any> | null | undefined): boolean {\n return !!list && this.lists.has(list);\n }\n}\n","import { Injectable, signal } from '@angular/core';\nimport { DragRef } from '../drag-ref';\nimport { DropListRef } from '../drop-list-ref';\nimport { DropListGroupRef } from '../drop-list-group-ref';\nimport { isDocumentNode, isElementNode, isShadowRootNode } from '../utils/element.helper';\nimport { convertPointBetweenDocuments } from '../utils/coordinate-transform';\n\n@Injectable({ providedIn: 'root' })\nexport class DragDropService {\n readonly drags = signal<readonly DragRef[]>([]);\n readonly dropLists = signal<readonly DropListRef[]>([]);\n readonly activeDrag = signal<DragRef | null>(null);\n\n private readonly listsByEl = new Map<HTMLElement, DropListRef>();\n private readonly groupsByEl = new Map<HTMLElement, DropListGroupRef>();\n\n registerDragItem(ref: DragRef<any>): void {\n this.drags.update((items) => (items.includes(ref) ? items : [...items, ref]));\n }\n\n removeDragItem(ref: DragRef<any>): void {\n this.drags.update((items) => items.filter((x) => x !== ref));\n if (this.activeDrag() === ref) this.activeDrag.set(null);\n }\n\n registerDropList(ref: DropListRef): void {\n this.dropLists.update((items) => (items.includes(ref) ? items : [...items, ref]));\n if (ref.el) this.listsByEl.set(ref.el, ref);\n }\n\n removeDropList(ref: DropListRef<any>): void {\n this.dropLists.update((items) => items.filter((x) => x !== ref));\n if (ref.el && this.listsByEl.get(ref.el) === ref) this.listsByEl.delete(ref.el);\n }\n\n registerGroup(el: HTMLElement, ref: DropListGroupRef): void {\n this.groupsByEl.set(el, ref);\n }\n\n removeGroup(el: HTMLElement): void {\n this.groupsByEl.delete(el);\n }\n\n /** Nearest registered drop list starting at (and including) `start`, walking up the DOM. */\n findAncestorDropList(start: HTMLElement | ParentNode | null): DropListRef | null {\n let node: Node | null = start;\n while (node) {\n if (isElementNode(node)) {\n const found = this.listsByEl.get(node as HTMLElement);\n if (found) {\n return found;\n }\n }\n if (isShadowRootNode(node) && 'host' in node) {\n node = (node as ShadowRoot).host;\n continue;\n }\n if (isDocumentNode(node)) {\n // Same-origin iframe: continue the logical DOM ancestry through its frame element.\n // This lets a DropList inside an iframe inherit an outer NgxDropListGroup.\n const frame = node.defaultView?.frameElement;\n if (frame) {\n node = frame;\n continue;\n }\n break;\n }\n node = node.parentNode;\n }\n return null;\n }\n\n /** Nearest registered drop-list group starting at (and including) `start`, walking up the DOM. */\n findAncestorGroup(start: Node | null): DropListGroupRef | null {\n let node: Node | null = start;\n while (node) {\n // HTMLElement / SVGElement / ...\n if (isElementNode(node)) {\n const found = this.groupsByEl.get(node as HTMLElement);\n\n if (found) {\n return found;\n }\n }\n // ShadowRoot\n // ShadowRoot یک DocumentFragment است و در iframe ممکن است\n if (isShadowRootNode(node) && 'host' in node && node.host) {\n node = node.host as Node;\n continue;\n }\n\n // Cross a same-origin iframe boundary so groups can connect lists in both documents.\n if (node.nodeType === 9) {\n const frame = (node as Document).defaultView?.frameElement;\n if (frame) {\n node = frame;\n continue;\n }\n break;\n }\n node = node.parentNode;\n }\n return null;\n }\n\n begin(ref: DragRef<any>): void {\n this.activeDrag.set(ref);\n }\n\n end(ref: DragRef<any>): void {\n if (this.activeDrag() === ref) this.activeDrag.set(null);\n }\n\n cancelActive(): void {\n const ref = this.activeDrag();\n if (!ref) return;\n ref.cancelDrag();\n this.activeDrag.set(null);\n }\n\n /**\n * Which drop list is under `point`?\n *\n * - Only lists connected to the drag's ORIGIN list qualify (connectivity is not transitive, so\n * A→B→C never lets an item hop A→C). Without an origin (a free-drag element) nothing\n * qualifies: free dragging is never captured by a list.\n * - Only the visible (clip-aware) part of a list counts.\n * - A list inside the dragged element itself is never a target.\n * - Nested lists: the innermost qualifying list wins. Among unrelated overlapping lists the\n * current one is kept (no flicker), otherwise the smallest.\n */\n findDropList(\n point: { x: number; y: number },\n current?: DropListRef | null,\n origin?: DropListRef | null,\n dragEl?: HTMLElement | null,\n ): DropListRef | null {\n const source = origin ?? null;\n if (!source) return null;\n let best: DropListRef | null = null;\n const sourceDocument = dragEl?.ownerDocument ?? source.el?.ownerDocument;\n if (!sourceDocument) return null;\n\n for (const list of this.dropLists()) {\n if (!list.el || !source.isConnectedTo(list)) continue;\n if (dragEl && dragEl !== list.el && dragEl.contains(list.el)) continue;\n const targetPoint = convertPointBetweenDocuments(\n point,\n sourceDocument,\n list.el.ownerDocument,\n );\n if (!targetPoint || !list._containsPoint(targetPoint.x, targetPoint.y)) continue;\n\n if (!best) best = list;\n else if (best.el.contains(list.el))\n best = list; // deeper wins\n else if (list.el.contains(best.el)) continue;\n else if (list === current) best = list;\n else if (best !== current && list._area() < best._area()) best = list;\n }\n return best;\n }\n}\n","import { isWindow } from './element.helper';\nimport { viewportDeltaToLocal } from './coordinate-transform';\n\n/**\n * Auto-scrolls the nearest scrollable ancestor (or window) while the pointer\n * is dragged near the edge of the scrollable viewport. Direction-agnostic —\n * works the same in RTL and LTR since it operates on physical scroll deltas.\n */\nexport class AutoScroller {\n private raf = 0;\n private container!: HTMLElement | Window;\n private win?: Window;\n private speed = { x: 0, y: 0 };\n private onTick?: () => void;\n private readonly edge: number;\n private readonly maxSpeed: number;\n\n constructor(edge = 56, maxSpeed = 18) {\n this.edge = edge;\n this.maxSpeed = maxSpeed;\n }\n\n /** onTick اجرا میشود بعد از هر گام اسکرول، تا با آخرین موقعیت pointer، sort/placeholder بهروز شود. */\n start(fromEl: HTMLElement, onTick?: () => void): void {\n this.win = fromEl.ownerDocument.defaultView ?? undefined;\n this.container = findScrollableAncestor(fromEl);\n this.onTick = onTick;\n }\n\n /** فقط container را عوض میکند بدون قطع حلقهی در حال اجرا یا صفر کردن speed. */\n retarget(fromEl: HTMLElement): void {\n this.container = findScrollableAncestor(fromEl);\n }\n\n update(clientX: number, clientY: number): void {\n const rect = getScrollRect(this.container);\n this.speed = {\n x: edgeSpeed(clientX, rect.left, rect.right, this.edge, this.maxSpeed),\n y: edgeSpeed(clientY, rect.top, rect.bottom, this.edge, this.maxSpeed),\n };\n if ((this.speed.x || this.speed.y) && !this.raf) {\n this.raf = this.win?.requestAnimationFrame(this.tick) ?? 0;\n }\n }\n\n stop(): void {\n if (this.raf) this.win?.cancelAnimationFrame(this.raf);\n this.raf = 0;\n this.speed = { x: 0, y: 0 };\n this.onTick = undefined;\n this.win = undefined;\n }\n\n private tick = (): void => {\n if (!this.speed.x && !this.speed.y) {\n this.raf = 0;\n return;\n }\n\n const container = this.container;\n\n if (isWindow(container)) {\n container.scrollBy(this.speed.x, this.speed.y);\n } else {\n // Edge speed is measured in viewport pixels; scrollLeft/Top are local to the scroller.\n const local = viewportDeltaToLocal(container, this.speed);\n container.scrollLeft += local.x;\n container.scrollTop += local.y;\n }\n\n // Pointer ثابت مانده ولی محتوا اسکرول شده؛\n // بنابراین موقعیت placeholder/sort را دوباره محاسبه کن.\n this.onTick?.();\n\n this.raf = this.win?.requestAnimationFrame(this.tick) ?? 0;\n };\n}\n\nfunction edgeSpeed(pos: number, min: number, max: number, edge: number, maxSpeed: number): number {\n if (pos < min + edge) return -maxSpeed * (1 - Math.max(0, pos - min) / edge);\n if (pos > max - edge) return maxSpeed * (1 - Math.max(0, max - pos) / edge);\n return 0;\n}\n\nfunction getScrollRect(container: HTMLElement | Window): {\n left: number;\n right: number;\n top: number;\n bottom: number;\n} {\n if (isWindow(container)) {\n return { left: 0, top: 0, right: container.innerWidth, bottom: container.innerHeight };\n }\n return container.getBoundingClientRect();\n}\n\nexport function findScrollableAncestor(el: HTMLElement): HTMLElement | Window {\n let node: HTMLElement | null = el;\n\n while (node) {\n const win = node.ownerDocument.defaultView;\n if (!win) break;\n const style = win.getComputedStyle(node);\n const scrollable = /(auto|scroll|overlay)/.test(style.overflowY + style.overflowX);\n\n if (scrollable && node.scrollHeight > node.clientHeight) {\n return node;\n }\n\n node = node.parentElement;\n }\n\n return el.ownerDocument.defaultView ?? el;\n}\n\nexport function getScrollPosition(container: HTMLElement | Window): { left: number; top: number } {\n if (isWindow(container)) {\n return { left: container.scrollX, top: container.scrollY };\n }\n return { left: container.scrollLeft, top: container.scrollTop };\n}\n","import { ApplicationRef, Directive, inject, InjectionToken, TemplateRef } from '@angular/core';\nimport { DragPreviewRef } from '../drag-preview-ref';\n\nexport const NGX_DRAG_PREVIEW = new InjectionToken<DragPreviewRef>('ngx_drag_preview');\n\n/**\n * Custom preview content, from `*ngxDragPreview` inside the `ngxDraggable`.\n *\n * @example\n * ```html\n * <div ngxDropList>\n * <div ngxDraggable>\n * <span class=\"my-preview\" *ngxDragPreview></span>\n * ...\n * </div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[ngxDragPreview]',\n providers: [{ provide: NGX_DRAG_PREVIEW, useExisting: NgxDragPreview }],\n})\nexport class NgxDragPreview {\n readonly _ref = new DragPreviewRef();\n\n constructor(public readonly tpl: TemplateRef<unknown>) {\n this._ref.tpl = tpl;\n this._ref.appRef = inject(ApplicationRef);\n }\n}\n","import {\n ContentChild,\n Directive,\n ElementRef,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n type AfterContentInit,\n} from '@angular/core';\nimport { DragDropService } from '../services/drag-drop.service';\nimport { DragRef, DragAxis } from '../drag-ref';\nimport { IPosition } from '../contracts/IPosition';\nimport { AutoScroller, findScrollableAncestor, getScrollPosition } from '../utils/auto-scroll';\nimport { NgxDragPreview } from './ngx-drag-preview.directive';\nimport { localDeltaToViewport } from '../utils/coordinate-transform';\n\n/** Pointer events already claimed by an (inner) draggable. */\nconst claimedPointerEvents = new WeakSet<Event>();\n\nexport const NGX_DRAGGABLE = new InjectionToken<NgxDraggable>('ngx-draggable');\n\nconst DEFAULT_KEYBOARD_STEP = 8;\n\n@Directive({\n selector: '[NgxDraggable],[ngxDraggable]',\n providers: [{ provide: NGX_DRAGGABLE, useExisting: NgxDraggable }],\n host: {\n '[style.touch-action]': '\"none\"',\n '[attr.tabindex]': 'disabled() ? null : 0',\n '[attr.aria-grabbed]': 'dragging()',\n class: 'ngx-draggable',\n '[class.disable-drag]': 'disabled()',\n },\n})\nexport class NgxDraggable<T = unknown> implements OnInit, OnDestroy, AfterContentInit {\n readonly disabled = model<boolean>(false);\n /** Element whose rect constrains the drag. Now actually enforced. */\n readonly boundary = input<HTMLElement>();\n readonly dragRootElement = model<string>('');\n /** CSS selector for a drag handle. When set, only pointerdowns inside it start a drag. */\n readonly dragHandle = model<string>('');\n /** Restrict movement to a single axis. */\n readonly lockAxis = input<DragAxis>();\n /** Minimum pointer travel (px) before a drag starts, so clicks still register normally. */\n readonly dragThreshold = input<number>(3);\n /** Pixel step used when dragging via the keyboard (arrow keys, focus required). */\n readonly keyboardStep = input<number>(DEFAULT_KEYBOARD_STEP);\n /** Auto-scroll the nearest scrollable ancestor while dragging near its edge. */\n readonly autoScroll = input<boolean>(true);\n @Input('data') set data(v: T) {\n this._ref.data = v;\n }\n\n @ContentChild(NgxDragPreview) private readonly customPreview?: NgxDragPreview;\n\n readonly dragStart = output<IPosition>();\n readonly dragMove = output<IPosition>();\n readonly dragEnd = output<IPosition>();\n\n readonly _ref = new DragRef<T>();\n readonly dragging = signal(false);\n\n private readonly service = inject(DragDropService);\n private readonly scroller = new AutoScroller();\n\n private down = false;\n private start = { x: 0, y: 0 };\n private pointerId = -1;\n private lastPointer: IPosition = { x: 0, y: 0 };\n private removeDown?: () => void;\n private removeMove?: () => void;\n private removeUp?: () => void;\n private removeKeydown?: () => void;\n private removeEscape?: () => void;\n private removeCancel?: () => void;\n private removeLostCapture?: () => void;\n private scrollTarget!: HTMLElement | Window;\n private lastScroll = { left: 0, top: 0 };\n private lastWindowScroll = { left: 0, top: 0 };\n private removeContainerScroll?: () => void;\n private removeWindowScroll?: () => void;\n\n protected readonly renderer = inject(Renderer2);\n constructor(private readonly host: ElementRef<HTMLElement>) {\n effect(() => {\n this._ref.el = this.dragRootElement()\n ? (this.host.nativeElement.closest(this.dragRootElement()) ?? this.host.nativeElement)\n : this.host.nativeElement;\n });\n }\n\n ngOnInit(): void {\n this.scrollTarget =\n this.host.nativeElement.ownerDocument.defaultView ?? this.host.nativeElement;\n this._ref.el = this.dragRootElement()\n ? (this.host.nativeElement.closest(this.dragRootElement()) ?? this.host.nativeElement)\n : this.host.nativeElement;\n this._ref.boundary = this.boundary();\n this._ref.lockAxis = this.lockAxis();\n // Found by walking the real DOM, not Angular's element-injector tree — see the matching\n // comment in `ngx-drop-list.directive.ts` for why: a draggable rendered by a recursively\n // invoked `ngTemplateOutlet` needs this just as much as a nested list does.\n const parentEl = this.host.nativeElement.parentElement;\n const list = this.service.findAncestorDropList(parentEl);\n this._ref.dropListGroup = list?.dropListGroup ?? this.service.findAncestorGroup(parentEl);\n this._ref.service = this.service;\n this._ref.init();\n this._ref.withDropList(list ?? null);\n this.service.registerDragItem(this._ref);\n this.removeDown = this.renderer.listen(\n this.host.nativeElement,\n 'pointerdown',\n (e: PointerEvent) => this.pointerDown(e),\n );\n this.removeKeydown = this.renderer.listen(\n this.host.nativeElement,\n 'keydown',\n (e: KeyboardEvent) => this.keyDown(e),\n );\n }\n ngAfterContentInit(): void {\n if (this.customPreview) {\n this._ref.preview = this.customPreview._ref;\n }\n }\n\n ngOnDestroy(): void {\n this.removeDown?.();\n this.removeMove?.();\n this.removeUp?.();\n this.removeKeydown?.();\n this.removeEscape?.();\n this.removeCancel?.();\n this.removeLostCapture?.();\n this.scroller.stop();\n this.stopScrollTracking();\n // Destroyed mid-drag (e.g. the model changed underneath us): never leave a body clone behind.\n this._ref.dispose();\n this.service.removeDragItem(this._ref);\n this._ref.dropList?.removeItem(this._ref);\n }\n\n private pointerDown(e: PointerEvent): void {\n if (\n this.disabled() ||\n e.button !== 0 ||\n // this.isInteractive(e.target) ||\n !this.isOnHandle(e.target)\n )\n return;\n // Nested draggables: pointerdown bubbles, so without this an ancestor draggable would start\n // its own drag from the very same gesture. The innermost enabled draggable claims it.\n if (claimedPointerEvents.has(e)) return;\n claimedPointerEvents.add(e);\n e.preventDefault();\n this.down = true;\n this.pointerId = e.pointerId;\n this._ref.el.setPointerCapture(this.pointerId);\n this.start = { x: e.clientX, y: e.clientY };\n this._ref.boundary = this.boundary();\n this._ref.lockAxis = this.lockAxis();\n this._ref.pointerDown(this.start);\n this.removeMove = this.renderer.listen(this._ref.el, 'pointermove', (ev: PointerEvent) =>\n this.pointerMove(ev),\n );\n this.removeUp = this.renderer.listen(this._ref.el, 'pointerup', (ev: PointerEvent) =>\n this.pointerUp(ev),\n );\n const doc = this._ref.el.ownerDocument;\n this.removeEscape = this.renderer.listen(doc, 'keydown', (ev: KeyboardEvent) => {\n if (ev.key === 'Escape' && this.dragging()) this.cancel();\n });\n this.removeCancel = this.renderer.listen(doc, 'pointercancel', (ev: PointerEvent) =>\n this.pointerCancel(ev),\n );\n this.removeLostCapture = this.renderer.listen(doc, 'lostpointercapture', (ev: PointerEvent) =>\n this.pointerCancel(ev),\n );\n }\n private applyDragUpdate(p: IPosition): void {\n const before = this._ref.activeDropList;\n // DragRef decides everything (preview, target list, placeholder). A free drag never\n // interacts with drop lists.\n this._ref.dragMove(p);\n\n if (this._ref.isListDrag && this.autoScroll()) {\n const after = this._ref.activeDropList;\n // Follow the hovered list; outside every list, scroll the page.\n if (after !== before) this.scroller.retarget(after?.el ?? this._ref.el.ownerDocument.body);\n }\n this.dragMove.emit(p);\n }\n /** فراخوانی میشود دقیقاً وقتی drag واقعاً شروع میشود (چه با موس، چه با کیبورد). */\n private startScrollTracking(): void {\n const win = this._ref.el.ownerDocument.defaultView;\n this.scrollTarget = findScrollableAncestor(this._ref.el);\n this.lastScroll = getScrollPosition(this.scrollTarget);\n this.lastWindowScroll = { left: win?.scrollX ?? 0, top: win?.scrollY ?? 0 };\n\n if (win && this.scrollTarget !== win) {\n this.removeContainerScroll = this.renderer.listen(this.scrollTarget, 'scroll', () =>\n this.handleContainerScroll(),\n );\n }\n // همیشه window رو هم جدا گوش میدیم؛ چون ممکنه container محلی نداشته باشیم\n // ولی خودِ صفحه اسکرول بشه.\n if (win) {\n this.removeWindowScroll = this.renderer.listen(win, 'scroll', () =>\n this.handleWindowScroll(),\n );\n }\n }\n\n private handleContainerScroll(): void {\n const pos = getScrollPosition(this.scrollTarget);\n const dx = pos.left - this.lastScroll.left;\n const dy = pos.top - this.lastScroll.top;\n this.lastScroll = pos;\n const viewportDelta = localDeltaToViewport(this.scrollTarget as HTMLElement, { x: dx, y: dy });\n this._ref.notifyScroll(viewportDelta.x, viewportDelta.y);\n }\n\n private handleWindowScroll(): void {\n const win = this._ref.el.ownerDocument.defaultView;\n if (!win) return;\n const left = win.scrollX;\n const top = win.scrollY;\n const dx = left - this.lastWindowScroll.left;\n const dy = top - this.lastWindowScroll.top;\n this.lastWindowScroll = { left, top };\n this._ref.notifyScroll(dx, dy);\n }\n\n private stopScrollTracking(): void {\n this.removeContainerScroll?.();\n this.removeWindowScroll?.();\n this.removeContainerScroll = this.removeWindowScroll = undefined;\n }\n\n private pointerMove(e: PointerEvent): void {\n if (!this.down || e.pointerId !== this.pointerId) return;\n const p = { x: e.clientX, y: e.clientY };\n this.lastPointer = p;\n if (\n !this.dragging() &&\n Math.hypot(p.x - this.start.x, p.y - this.start.y) < this.dragThreshold()\n )\n return;\n if (!this.dragging()) {\n this._ref.startDrag(p);\n this.dragging.set(true);\n this.service.begin(this._ref);\n this.startScrollTracking();\n if (this.autoScroll()) {\n this.scroller.start(this._ref.el, () => this.applyDragUpdate(this.lastPointer));\n }\n this.dragStart.emit(p);\n }\n\n this.applyDragUpdate(p);\n\n if (this.autoScroll()) this.scroller.update(p.x, p.y);\n }\n private pointerUp(e: PointerEvent): void {\n if (!this.down || e.pointerId !== this.pointerId) return;\n\n if (this._ref.el.hasPointerCapture(this.pointerId)) {\n this._ref.el.releasePointerCapture(this.pointerId);\n }\n\n if (this.dragging()) {\n // Also when released OUTSIDE every list: endDrag() rolls the drag back and cleans up.\n // The release position is authoritative for list sorting (a fast flick may end with\n // a pointerup that has no preceding pointermove at that position).\n const p = { x: e.clientX, y: e.clientY };\n if (this._ref.isListDrag && (p.x !== this.lastPointer.x || p.y !== this.lastPointer.y)) {\n this._ref.dragMove(p);\n }\n // endDrag must run for free drags too, otherwise their lifecycle never completes.\n this._ref.endDrag();\n this.service.end(this._ref);\n }\n this.finish();\n this.dragEnd.emit(this._ref.pointer);\n }\n\n /** Browser cancelled the pointer (touch takeover, lost capture...). */\n private pointerCancel(e: PointerEvent): void {\n if (!this.down || e.pointerId !== this.pointerId) return;\n if (this.dragging()) {\n this.cancel();\n return;\n }\n this.pointerUp(e);\n }\n\n private cancel(): void {\n this._ref.cancelDrag();\n this.service.end(this._ref);\n this.finish();\n }\n\n private finish(): void {\n if (this.pointerId >= 0 && this._ref.el.hasPointerCapture?.(this.pointerId)) {\n this._ref.el.releasePointerCapture(this.pointerId);\n }\n this.dragging.set(false);\n this.down = false;\n this.scroller.stop();\n this.stopScrollTracking();\n this.removeMove?.();\n this.removeUp?.();\n this.removeEscape?.();\n this.removeCancel?.();\n this.removeLostCapture?.();\n this.removeMove = this.removeUp = this.removeEscape = undefined;\n this.removeCancel = this.removeLostCapture = undefined;\n }\n\n /** Arrow-key movement for keyboard/assistive-tech users. Shift multiplies the step by 4. */\n private keyDown(e: KeyboardEvent): void {\n if (this.disabled()) return;\n const step = this.keyboardStep() * (e.shiftKey ? 4 : 1);\n const deltas: Record<string, IPosition> = {\n ArrowLeft: { x: -step, y: 0 },\n ArrowRight: { x: step, y: 0 },\n ArrowUp: { x: 0, y: -step },\n ArrowDown: { x: 0, y: step },\n };\n const delta = deltas[e.key];\n if (delta) {\n e.preventDefault();\n if (!this.dragging()) {\n // Free drag keeps its (0,0) pseudo pointer. A list item starts from its own centre so\n // that keyboard sorting resolves against real geometry.\n const inList = !!this._ref.dropList && this._ref.dropList.el === this._ref.el.parentElement;\n const r = this._ref.el.getBoundingClientRect();\n const origin = inList\n ? { x: r.left + r.width / 2, y: r.top + r.height / 2 }\n : { x: 0, y: 0 };\n this._ref.pointerDown(origin);\n this._ref.boundary = this.boundary();\n this._ref.lockAxis = this.lockAxis();\n this._ref.startDrag(origin);\n this.dragging.set(true);\n this.service.begin(this._ref);\n this.startScrollTracking();\n this.dragStart.emit(origin);\n }\n this._ref.nudge(delta.x, delta.y);\n this.dragMove.emit(this._ref.pointer);\n return;\n }\n if ((e.key === 'Enter' || e.key === ' ') && this.dragging()) {\n e.preventDefault();\n this._ref.endDrag();\n this.service.end(this._ref);\n this.dragEnd.emit(this._ref.pointer);\n this.finish();\n } else if (e.key === 'Escape' && this.dragging()) {\n e.preventDefault();\n this._ref.cancelDrag();\n this.service.end(this._ref);\n this.finish();\n }\n }\n\n private isOnHandle(target: EventTarget | null): boolean {\n if (!this.dragHandle()) return true;\n // TODO notsafe instanseof: node.nodeType === Node.ELEMENT_NODE\n return isElementTarget(target) && !!target.closest(this.dragHandle());\n }\n\n private isInteractive(target: EventTarget | null): boolean {\n // TODO notsafe instanseof: node.nodeType === Node.ELEMENT_NODE\n return (\n isElementTarget(target) && !!target.closest('button,a,input,textarea,select,[data-no-drag]')\n );\n }\n}\n\nfunction isElementTarget(target: EventTarget | null): target is HTMLElement {\n return (\n !!target &&\n typeof target === 'object' &&\n 'nodeType' in target &&\n (target as Node).nodeType === 1 &&\n 'closest' in target\n );\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n OnDestroy,\n Renderer2,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport {\n IResizableOutput,\n LogicalResizeDirection,\n ResizeDirection,\n} from '../contracts/IResizableOutput';\nimport { clampResizeWithinBoundary } from '../utils/check-boundary';\nimport { isRtl, resolveLogicalDirection } from '../utils/rtl';\nimport { getLocalToViewportMatrix, viewportDeltaToLocal } from '../utils/coordinate-transform';\n\nconst ALL_DIRECTIONS: ResizeDirection[] = ['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'];\nconst KEYBOARD_STEP = 8;\n\n@Directive({\n selector: '[NgxResizable],[ngxResizable]',\n host: {\n '[style.touch-action]': '\"none\"',\n class: 'ngx-resizable',\n },\n})\nexport class NgxResizable implements OnDestroy {\n disabled = model<boolean>(false);\n readonly minWidth = model<number>(20);\n readonly minHeight = model<number>(20);\n readonly maxWidth = model<number>(Infinity);\n readonly maxHeight = model<number>(Infinity);\n readonly directions = input<LogicalResizeDirection[]>([...ALL_DIRECTIONS]);\n readonly grid = input<number | { x: number; y: number }>();\n\n /** Element whose rect constrains the resize. Previously accepted nowhere on this directive. */\n readonly boundary = input<HTMLElement>();\n /** Pixel step used when resizing via the keyboard (arrow keys, focus required). */\n readonly keyboardStep = input<number>(KEYBOARD_STEP);\n\n readonly resizeStart = output<IResizableOutput>();\n readonly resizeMove = output<IResizableOutput>();\n readonly resizeEnd = output<IResizableOutput>();\n\n readonly resizing = signal(false);\n private direction: ResizeDirection = 'se';\n\n private start!: DOMRect;\n private pointer = {\n x: 0,\n y: 0,\n };\n private beforeTransition = '';\n private beforeWidth = '';\n private beforeHeight = '';\n private beforeTransform = '';\n private pointerId = -1;\n private startWidth = 0;\n private startHeight = 0;\n private removeDocumentListeners: Array<() => void> = [];\n private readonly renderer = inject(Renderer2);\n constructor(private readonly el: ElementRef<HTMLElement>) {}\n\n ngOnDestroy(): void {\n if (this.resizing()) {\n this.restoreBeforeResize();\n this.finish();\n }\n }\n\n @HostListener('pointerdown', ['$event'])\n onPointerDown(e: PointerEvent): void {\n if (this.disabled() || e.button !== 0) {\n return;\n }\n\n const dir = this.hitDirection(e);\n\n if (!dir) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n const element = this.el.nativeElement;\n this.direction = dir;\n this.pointerId = e.pointerId;\n /**\n * This is the actual visual rectangle.\n * It already contains any transform created by DragRef.\n */\n this.start = element.getBoundingClientRect();\n\n this.pointer = {\n x: e.clientX,\n y: e.clientY,\n };\n\n this.beforeTransition = element.style.transition;\n this.beforeWidth = element.style.width;\n this.beforeHeight = element.style.height;\n this.startWidth = element.offsetWidth;\n this.startHeight = element.offsetHeight;\n\n /**\n * Keep DragRef's transform as the immutable base.\n *\n * Resize will temporarily add its own translation\n * on top of this transform.\n */\n this.beforeTransform = element.style.transform;\n\n this.resizing.set(true);\n element.style.transition = 'none';\n element.setPointerCapture?.(e.pointerId);\n const doc = element.ownerDocument;\n this.removeDocumentListeners = [\n this.renderer.listen(doc, 'pointermove', (event: PointerEvent) => this.onPointerMove(event)),\n this.renderer.listen(doc, 'pointerup', (event: PointerEvent) => this.onPointerUp(event)),\n this.renderer.listen(doc, 'pointercancel', (event: PointerEvent) =>\n this.onPointerCancel(event),\n ),\n this.renderer.listen(doc, 'lostpointercapture', (event: PointerEvent) =>\n this.onPointerCancel(event),\n ),\n this.renderer.listen(doc, 'keydown', (event: KeyboardEvent) => this.onDocumentKeyDown(event)),\n ];\n const out = this.calculate(e);\n this.apply(out);\n this.resizeStart.emit(out);\n }\n\n onPointerMove(e: PointerEvent): void {\n if (!this.resizing() || e.pointerId !== this.pointerId) {\n return;\n }\n const out = this.calculate(e);\n this.apply(out);\n this.resizeMove.emit(out);\n }\n\n onPointerUp(e: PointerEvent): void {\n if (!this.resizing() || e.pointerId !== this.pointerId) {\n return;\n }\n const out = this.calculate(e);\n this.apply(out);\n this.resizeEnd.emit(out);\n this.finish();\n }\n\n onDocumentKeyDown(e: KeyboardEvent): void {\n if (!this.resizing()) {\n return;\n }\n if (e.key !== 'Escape') {\n return;\n }\n e.preventDefault();\n this.restoreBeforeResize();\n this.finish();\n }\n\n private onPointerCancel(e: PointerEvent): void {\n if (!this.resizing() || e.pointerId !== this.pointerId) return;\n this.restoreBeforeResize();\n this.finish();\n }\n\n private restoreBeforeResize(): void {\n const element = this.el.nativeElement;\n element.style.width = this.beforeWidth;\n element.style.height = this.beforeHeight;\n element.style.transform = this.beforeTransform;\n }\n\n @HostListener('keydown', ['$event'])\n onHandleKeyDown(e: KeyboardEvent): void {\n if (this.disabled()) {\n return;\n }\n\n const rtl = isRtl(this.el.nativeElement);\n const step = this.keyboardStep() * (e.shiftKey ? 4 : 1);\n let dw = 0;\n let dh = 0;\n if (e.key === 'ArrowRight') {\n dw = rtl ? -step : step;\n } else if (e.key === 'ArrowLeft') {\n dw = rtl ? step : -step;\n } else if (e.key === 'ArrowDown') {\n dh = step;\n } else if (e.key === 'ArrowUp') {\n dh = -step;\n } else {\n return;\n }\n\n e.preventDefault();\n const rect = this.el.nativeElement.getBoundingClientRect();\n const width = this.clampGrid(\n Math.max(this.minWidth(), Math.min(this.maxWidth(), this.el.nativeElement.offsetWidth + dw)),\n 'x',\n );\n const height = this.clampGrid(\n Math.max(\n this.minHeight(),\n Math.min(this.maxHeight(), this.el.nativeElement.offsetHeight + dh),\n ),\n 'y',\n );\n this.el.nativeElement.style.width = `${width}px`;\n this.el.nativeElement.style.height = `${height}px`;\n const out: IResizableOutput = {\n width,\n height,\n moveLeft: 0,\n moveTop: 0,\n left: rect.left,\n top: rect.top,\n direction: 'se',\n };\n this.resizeMove.emit(out);\n this.resizeEnd.emit(out);\n }\n\n private calculate(e: PointerEvent): IResizableOutput {\n const localDelta = viewportDeltaToLocal(this.el.nativeElement, {\n x: e.clientX - this.pointer.x,\n y: e.clientY - this.pointer.y,\n });\n const dx = localDelta.x;\n const dy = localDelta.y;\n\n let width = this.startWidth;\n let height = this.startHeight;\n /**\n * East\n */\n if (this.direction.includes('e')) {\n width += dx;\n }\n\n /**\n * West\n */\n if (this.direction.includes('w')) {\n width -= dx;\n }\n\n /**\n * South\n */\n if (this.direction.includes('s')) {\n height += dy;\n }\n\n /**\n * North\n */\n if (this.direction.includes('n')) {\n height -= dy;\n }\n\n width = this.clampGrid(Math.max(this.minWidth(), Math.min(this.maxWidth(), width)), 'x');\n\n height = this.clampGrid(Math.max(this.minHeight(), Math.min(this.maxHeight(), height)), 'y');\n\n /**\n * Calculate the intended visual position.\n *\n * This is useful for boundary calculations and\n * emitted resize events.\n */\n const matrix = getLocalToViewportMatrix(this.el.nativeElement);\n const scaleX = Math.hypot(matrix.a, matrix.b) || 1;\n const scaleY = Math.hypot(matrix.c, matrix.d) || 1;\n let left = this.start.left;\n let top = this.start.top;\n\n if (this.direction.includes('w')) {\n left = this.start.right - width * scaleX;\n }\n\n if (this.direction.includes('n')) {\n top = this.start.bottom - height * scaleY;\n }\n\n let moveLeft = left - this.start.left;\n let moveTop = top - this.start.top;\n /**\n * Boundary constraint.\n */\n if (this.boundary) {\n const clamped = clampResizeWithinBoundary(\n this.boundary()?.getBoundingClientRect(),\n this.start,\n width * scaleX,\n height * scaleY,\n moveLeft,\n moveTop,\n );\n width = clamped.width / scaleX;\n height = clamped.height / scaleY;\n moveLeft = clamped.left;\n moveTop = clamped.top;\n left = this.start.left + moveLeft;\n top = this.start.top + moveTop;\n }\n\n return {\n width,\n height,\n moveLeft,\n moveTop,\n left,\n top,\n direction: this.direction,\n };\n }\n\n private apply(out: IResizableOutput): void {\n const element = this.el.nativeElement;\n /**\n * Always reset to the transform that existed before\n * this resize operation started.\n *\n * This prevents resize corrections from accumulating.\n */\n element.style.transform = this.beforeTransform;\n\n /**\n * Apply the actual size first.\n *\n * Changing width/height may cause the browser to re-layout\n * the element, especially for relative/flex/grid/static layouts.\n */\n element.style.width = `${out.width}px`;\n element.style.height = `${out.height}px`;\n\n /**\n * Force/read layout after changing the size.\n */\n const current = element.getBoundingClientRect();\n\n /**\n * These are the positions where the element MUST visually be.\n *\n * `out.moveLeft` / `out.moveTop` are calculated in `calculate()`\n * from the original visual rectangle.\n */\n const targetLeft = this.start.left + out.moveLeft;\n const targetTop = this.start.top + out.moveTop;\n\n /**\n * Browser's actual position after width/height changed.\n *\n * The difference between target and current position is the\n * correction that must be applied using transform.\n */\n const correctionX = targetLeft - current.left;\n const correctionY = targetTop - current.top;\n const hasCorrection = correctionX !== 0 || correctionY !== 0;\n if (!hasCorrection) {\n element.style.transform = this.beforeTransform;\n return;\n }\n /**\n * Preserve DragRef's existing transform and add only the\n * correction required by Resize.\n */\n const baseTransform =\n this.beforeTransform && this.beforeTransform !== 'none' ? `${this.beforeTransform} ` : '';\n const localCorrection = viewportDeltaToLocal(element, { x: correctionX, y: correctionY });\n element.style.transform =\n `${baseTransform}translate3d(` + `${localCorrection.x}px, ` + `${localCorrection.y}px, 0)`;\n }\n\n private clampGrid(value: number, axis: 'x' | 'y'): number {\n const grid = typeof this.grid() === 'number' ? this.grid : (this.grid() as any)?.[axis];\n if (!grid || grid <= 0) {\n return value;\n }\n return Math.round(value / grid) * grid;\n }\n\n private finish(): void {\n this.resizing.set(false);\n this.el.nativeElement.style.transition = this.beforeTransition;\n const pointerId = this.pointerId;\n this.pointerId = -1;\n for (const remove of this.removeDocumentListeners) remove();\n this.removeDocumentListeners = [];\n if (pointerId >= 0 && this.el.nativeElement.hasPointerCapture?.(pointerId)) {\n this.el.nativeElement.releasePointerCapture(pointerId);\n }\n this.beforeTransform = '';\n }\n\n private resolvedDirections(): ResizeDirection[] {\n const rtl = isRtl(this.el.nativeElement);\n const set = new Set<ResizeDirection>();\n for (const direction of this.directions()) {\n set.add(resolveLogicalDirection(direction, rtl) as ResizeDirection);\n }\n return [...set];\n }\n\n private hitDirection(e: PointerEvent): ResizeDirection | null {\n const element = this.el.nativeElement;\n const rect = element.getBoundingClientRect();\n const edge = Math.min(12, Math.max(6, Math.min(rect.width, rect.height) * 0.18));\n const isLeft = e.clientX - rect.left <= edge;\n const isRight = rect.right - e.clientX <= edge;\n const isTop = e.clientY - rect.top <= edge;\n const isBottom = rect.bottom - e.clientY <= edge;\n /**\n * Explicit resize handle has priority.\n */\n // TODO notsafe instanceof:node.nodeType === Node.ELEMENT_NODE\n const handle = isHTMLElementTarget(e.target)\n ? e.target.closest<HTMLElement>('[data-ngx-resize-handle]')\n : null;\n\n if (handle && element.contains(handle)) {\n const raw = handle.dataset['ngxResizeHandle'] as LogicalResizeDirection | undefined;\n\n if (!raw) {\n return null;\n }\n const resolved = resolveLogicalDirection(raw, isRtl(element)) as ResizeDirection;\n return this.resolvedDirections().includes(resolved) ? resolved : null;\n }\n\n /**\n * These are PHYSICAL screen directions.\n *\n * left -> w\n * right -> e\n *\n * RTL is handled only when a logical direction\n * such as \"start\" / \"end\" is requested.\n */\n const direction =\n isTop && isLeft\n ? 'nw'\n : isTop && isRight\n ? 'ne'\n : isBottom && isLeft\n ? 'sw'\n : isBottom && isRight\n ? 'se'\n : isTop\n ? 'n'\n : isRight\n ? 'e'\n : isBottom\n ? 's'\n : isLeft\n ? 'w'\n : null;\n\n if (!direction) {\n return null;\n }\n return this.resolvedDirections().includes(direction) ? direction : null;\n }\n}\n\nfunction isHTMLElementTarget(target: EventTarget | null): target is HTMLElement {\n return (\n !!target &&\n typeof target === 'object' &&\n 'nodeType' in target &&\n (target as Node).nodeType === 1 &&\n 'closest' in target\n );\n}\n","import { ApplicationRef, Directive, InjectionToken, TemplateRef, inject } from '@angular/core';\nimport { PlaceHolderRef } from '../placeholder-ref';\nimport { NGX_DROPLIST } from './ngx-drop-list.directive';\n\nexport const NGX_PLACEHOLDER = new InjectionToken<PlaceHolderRef>('ngx-place-holder');\n/**\n * Custom placeholder content, from `*ngxPlaceholder` inside the `ngxDropList`.\n *\n * @example\n * ```html\n * <div ngxDropList>\n * <span class=\"my-placeholder\" *ngxPlaceholder></span>\n * ...\n * </div>\n * ```\n */\n@Directive({\n selector: '[NgxPlaceholder],[ngxPlaceholder]',\n providers: [{ provide: NGX_PLACEHOLDER, useExisting: NgxPlaceholder }],\n})\nexport class NgxPlaceholder {\n readonly _ref = new PlaceHolderRef();\n private readonly list = inject(NGX_DROPLIST, { optional: true, skipSelf: true });\n constructor(public readonly tpl: TemplateRef<unknown>) {\n this._ref.tpl = tpl;\n this._ref.dropList = this.list?._ref;\n // Lets the embedded view join Angular's change-detection tree (matters in zoneless apps,\n // and for app-stability tracking) instead of being rendered once and left dangling.\n this._ref.appRef = inject(ApplicationRef);\n }\n}\n","import {\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n Output,\n inject,\n type AfterContentInit,\n} from '@angular/core';\nimport { DropListRef } from '../drop-list-ref';\nimport { DragDropService } from '../services/drag-drop.service';\nimport { IDropEvent } from '../contracts/IDropEvent';\nimport { NgxPlaceholder } from './ngx-place-holder.directive';\n\nexport const NGX_DROPLIST = new InjectionToken<NgxDropList>('ngx-drop-list');\n\n@Directive({\n selector: '[NgxDropList],[ngxDropList]',\n providers: [{ provide: NGX_DROPLIST, useExisting: NgxDropList }],\n host: { class: 'ngx-drop-list' },\n})\nexport class NgxDropList<T = any> implements OnInit, OnDestroy, AfterContentInit {\n readonly _ref = new DropListRef<T>();\n @Input('data') set data(value: T) {\n this._ref.data = value;\n }\n @Input() set connectedTo(value: HTMLElement[] | null | undefined) {\n this._ref.connectedTo = value ?? [];\n }\n @Input() set disableSort(value: boolean) {\n this._ref.disableSort = value === true;\n }\n @Output() readonly drop = new EventEmitter<IDropEvent<T>>();\n @ContentChild(NgxPlaceholder, {\n descendants: true,\n })\n private readonly customPlaceholder?: NgxPlaceholder;\n private sub?: { unsubscribe(): void };\n private readonly service = inject(DragDropService);\n\n constructor(private readonly el: ElementRef<HTMLElement>) {}\n\n ngOnInit(): void {\n this._ref.el = this.el.nativeElement;\n const parentEl = this.el.nativeElement.parentElement;\n const group = this.service.findAncestorGroup(parentEl);\n const parent = this.service.findAncestorDropList(parentEl);\n this._ref.dropListGroup = group ?? null;\n group?.add(this._ref);\n parent?._registerChild(this._ref);\n this.sub = this._ref.onDrop.subscribe((e) => this.drop.emit(e));\n this.service.registerDropList(this._ref);\n }\n ngAfterContentInit(): void {\n if (this.customPlaceholder) {\n this._ref.customPlaceholder = this.customPlaceholder._ref;\n }\n }\n\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n this._ref._release();\n this._ref.parentList?._unregisterChild(this._ref);\n this._ref.dropListGroup?.remove(this._ref);\n this.service.removeDropList(this._ref);\n }\n}\n","import { Directive, ElementRef, InjectionToken, OnDestroy, OnInit, inject } from '@angular/core';\nimport { DropListGroupRef } from '../drop-list-group-ref';\nimport { DragDropService } from '../services/drag-drop.service';\n\nexport const NGX_DROPLIST_GROUP = new InjectionToken<NgxDropListGroup>('ngx-drop-list-group');\n\n/** Wrap several `ngxDropList`s to let items move freely between them. */\n@Directive({\n selector: '[NgxDropListGroup],[ngxDropListGroup]',\n providers: [{ provide: NGX_DROPLIST_GROUP, useExisting: NgxDropListGroup }],\n})\nexport class NgxDropListGroup implements OnInit, OnDestroy {\n readonly _ref = new DropListGroupRef();\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly service = inject(DragDropService);\n\n ngOnInit(): void {\n // Registered by DOM element (not just provided via DI) so a list nested inside a recursive\n // `ngTemplateOutlet` tree can still find this group by walking its real ancestors — see the\n // comment on `DragDropService`'s registries for why DI alone can't do this.\n this.service.registerGroup(this.el.nativeElement, this._ref);\n }\n\n ngOnDestroy(): void {\n this._ref.lists.clear();\n this.service.removeGroup(this.el.nativeElement);\n }\n}\n","export function moveItemInArray<T>(array: T[], from: number, to: number): void {\n const f = clamp(from, array.length - 1);\n const t = clamp(to, array.length - 1);\n if (f === t) return;\n const target = array[f];\n const delta = t < f ? -1 : 1;\n for (let i = f; i !== t; i += delta) array[i] = array[i + delta];\n array[t] = target;\n}\n\nexport function transferArrayItem<T>(src: T[], dst: T[], from: number, to: number): void {\n const f = clamp(from, src.length - 1);\n const t = clamp(to, dst.length);\n if (src.length) dst.splice(t, 0, src.splice(f, 1)[0]);\n}\n/**\n * Copies an item from one array to another, leaving it in its\n * original position in current array.\n * @param currentArray Array from which to copy the item.\n * @param targetArray Array into which is copy the item.\n * @param currentIndex Index of the item in its current array.\n * @param targetIndex Index at which to insert the item.\n *\n */\nexport function copyArrayItem<T = any>(\n currentArray: T[],\n targetArray: T[],\n currentIndex: number,\n targetIndex: number,\n): void {\n const to = clamp(targetIndex, targetArray.length);\n\n if (currentArray.length) {\n targetArray.splice(to, 0, currentArray[currentIndex]);\n }\n}\n\nfunction clamp(v: number, max: number) {\n return Math.max(0, Math.min(max, v));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|