ngx-kit 6.3.0 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +3 -3
  2. package/angle-selector/README.md +34 -34
  3. package/box-shadow/README.md +33 -33
  4. package/color-picker/README.md +52 -49
  5. package/data-table/README.md +120 -113
  6. package/date-picker/README.md +74 -69
  7. package/dialog/README.md +92 -92
  8. package/drag-resize/README.md +55 -0
  9. package/dropzone/README.md +422 -422
  10. package/fesm2022/ngx-kit-angle-selector.mjs +2 -2
  11. package/fesm2022/ngx-kit-angle-selector.mjs.map +1 -1
  12. package/fesm2022/ngx-kit-box-shadow.mjs +2 -2
  13. package/fesm2022/ngx-kit-box-shadow.mjs.map +1 -1
  14. package/fesm2022/ngx-kit-color-picker.mjs +265 -73
  15. package/fesm2022/ngx-kit-color-picker.mjs.map +1 -1
  16. package/fesm2022/ngx-kit-data-table.mjs +2 -2
  17. package/fesm2022/ngx-kit-data-table.mjs.map +1 -1
  18. package/fesm2022/ngx-kit-date-picker.mjs +7 -9
  19. package/fesm2022/ngx-kit-date-picker.mjs.map +1 -1
  20. package/fesm2022/ngx-kit-dialog.mjs +3 -3
  21. package/fesm2022/ngx-kit-dialog.mjs.map +1 -1
  22. package/fesm2022/ngx-kit-drag-resize.mjs +1664 -0
  23. package/fesm2022/ngx-kit-drag-resize.mjs.map +1 -0
  24. package/fesm2022/ngx-kit-drawer-menu.mjs +389 -285
  25. package/fesm2022/ngx-kit-drawer-menu.mjs.map +1 -1
  26. package/fesm2022/ngx-kit-dropzone.mjs +2 -2
  27. package/fesm2022/ngx-kit-dropzone.mjs.map +1 -1
  28. package/fesm2022/ngx-kit-form-field.mjs +3 -5
  29. package/fesm2022/ngx-kit-form-field.mjs.map +1 -1
  30. package/fesm2022/ngx-kit-gallery.mjs +2 -2
  31. package/fesm2022/ngx-kit-gallery.mjs.map +1 -1
  32. package/fesm2022/ngx-kit-gradient-picker.mjs.map +1 -1
  33. package/fesm2022/ngx-kit-grid-layout.mjs +994 -0
  34. package/fesm2022/ngx-kit-grid-layout.mjs.map +1 -0
  35. package/fesm2022/ngx-kit-image-editor.mjs.map +1 -1
  36. package/fesm2022/ngx-kit-menu.mjs +8 -8
  37. package/fesm2022/ngx-kit-menu.mjs.map +1 -1
  38. package/fesm2022/ngx-kit-message.mjs.map +1 -1
  39. package/fesm2022/ngx-kit-notify.mjs +2 -2
  40. package/fesm2022/ngx-kit-notify.mjs.map +1 -1
  41. package/fesm2022/ngx-kit-shared.mjs +54 -3
  42. package/fesm2022/ngx-kit-shared.mjs.map +1 -1
  43. package/fesm2022/ngx-kit-time-picker.mjs +2 -2
  44. package/fesm2022/ngx-kit-time-picker.mjs.map +1 -1
  45. package/fesm2022/ngx-kit-virtual-scroll.mjs +392 -0
  46. package/fesm2022/ngx-kit-virtual-scroll.mjs.map +1 -0
  47. package/fesm2022/ngx-kit-webflow.mjs +709 -0
  48. package/fesm2022/ngx-kit-webflow.mjs.map +1 -0
  49. package/gallery/README.md +71 -71
  50. package/gradient-picker/README.md +41 -41
  51. package/grid-layout/README.md +64 -0
  52. package/image-editor/README.md +12 -12
  53. package/menu/README.md +85 -85
  54. package/message/README.md +70 -70
  55. package/notify/README.md +56 -58
  56. package/package.json +17 -1
  57. package/shared/README.md +117 -117
  58. package/time-picker/README.md +89 -95
  59. package/types/ngx-kit-color-picker.d.ts +72 -16
  60. package/types/ngx-kit-drag-resize.d.ts +368 -0
  61. package/types/ngx-kit-drawer-menu.d.ts +135 -86
  62. package/types/ngx-kit-grid-layout.d.ts +311 -0
  63. package/types/ngx-kit-image-editor.d.ts +1 -1
  64. package/types/ngx-kit-shared.d.ts +12 -1
  65. package/types/ngx-kit-virtual-scroll.d.ts +179 -0
  66. package/types/ngx-kit-webflow.d.ts +286 -0
  67. package/virtual-scroll/README.md +199 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-kit-drag-resize.mjs","sources":["../../../projects/libs/drag-resize/utils/check-boundary.ts","../../../projects/libs/drag-resize/utils/clone-drag-element-in-body.ts","../../../projects/libs/drag-resize/drag-ref.ts","../../../projects/libs/drag-resize/utils/rtl.ts","../../../projects/libs/drag-resize/sorting/positional-sort-strategy.ts","../../../projects/libs/drag-resize/placeholder-ref.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/directives/ngx-drop-list-group.directive.ts","../../../projects/libs/drag-resize/directives/ngx-drop-list.directive.ts","../../../projects/libs/drag-resize/utils/auto-scroll.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/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(selfRect: DOMRect, boundaryRect: DOMRect | undefined, offsetY: number): 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) 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(selfRect: DOMRect, boundaryRect: DOMRect | undefined, offsetX: number): 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 { copyComputedStyleTree } from './styling';\n\nexport interface DragPreviewState {\n element: HTMLElement;\n offsetX: number;\n offsetY: number;\n}\n\nexport function cloneDragElementInBody(\n dragEl: HTMLElement,\n rect: DOMRect,\n pointerX: number,\n pointerY: number,\n): DragPreviewState {\n const preview = dragEl.cloneNode(true) as HTMLElement;\n\n // Avoid duplicated ids in the document.\n preview.removeAttribute('id');\n\n preview.classList.add('ngx-drag-preview');\n\n Object.assign(preview.style, {\n position: 'fixed',\n top: `${rect.top}px`,\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n margin: '0',\n pointerEvents: 'none',\n boxSizing: 'border-box',\n });\n\n document.body.appendChild(preview);\n\n return {\n element: preview,\n offsetX: pointerX - rect.left,\n offsetY: pointerY - rect.top,\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 { checkBoundX, checkBoundY } from './utils/check-boundary';\nimport { cloneDragElementInBody } from './utils/clone-drag-element-in-body';\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 dropList: DropListRef<T> | null = null;\n dropListGroup?: DropListGroupRef | null;\n\n placeholder?: PlaceHolderRef;\n originDropList: DropListRef<T> | null = null;\n originIndex = -1;\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\n private preview?: HTMLElement;\n private previewOffsetX = 0;\n private previewOffsetY = 0;\n private sourceVisibility = '';\n private sourceDisplay = '';\n private sourcePointerEvents = '';\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\n this.originDropList = this.dropList;\n this.originIndex = this.dropList?.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\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 (this.dropList) {\n this.placeholder = this.dropList.createPlaceholder(this);\n\n const preview = cloneDragElementInBody(this.el, this.startRect, pointer.x, pointer.y);\n\n this.preview = preview.element;\n this.previewOffsetX = preview.offsetX;\n this.previewOffsetY = preview.offsetY;\n\n this.el.style.visibility = 'hidden';\n this.el.style.display = 'none';\n this.el.style.pointerEvents = 'none';\n\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.dropList) {\n this.updatePreview();\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 const dropList = this.dropList;\n\n this.isDragging.set(false);\n\n // Normal Drag MUST behave exactly like before.\n this.placeholder?.detach();\n this.placeholder = undefined;\n\n if (dropList) {\n dropList.finishDrag(this);\n this.el.style.transform = this.previousTransform;\n }\n\n // Remove body preview after DropList has finished reading its state.\n this.preview?.remove();\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 this.dropList?.exit(this);\n this.clearDropList();\n\n this.el.style.transform = this.previousTransform;\n this.el.style.visibility = this.sourceVisibility;\n this.el.style.pointerEvents = this.sourcePointerEvents;\n\n this.endDrag();\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 private applyTransform(): void {\n const base =\n this.previousTransform && this.previousTransform !== 'none'\n ? this.previousTransform + ' '\n : '';\n\n this.el.style.transform = `${base}translate3d(${this.moveDx}px, ${this.moveDy}px, 0)`;\n }\n private updatePreview(): void {\n if (!this.preview) return;\n\n this.preview.style.transform = `translate3d(${this.moveDx}px, ${this.moveDy}px, 0)`;\n }\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 { DragRef } from '../drag-ref';\nimport { isRtl } from '../utils/rtl';\nimport { SortResult } from './sort-strategy';\n\ntype Flow = 'grid' | 'flex-row' | 'flex-column' | 'free';\n\ninterface ItemGeometry {\n drag: DragRef;\n rect: DOMRect;\n domIndex: number;\n}\n\n/**\n * Live geometry sorting.\n *\n * Unlike the old snapshot-only implementation, every sort pass reads the\n * current DOM order and current client rects. This matters when:\n * - the placeholder changes layout,\n * - a Kanban column is scrolled while dragging,\n * - the dragged item enters another list,\n * - CSS grid/flex reflows occur.\n */\nexport class PositionalSortStrategy {\n private container!: HTMLElement;\n private dragging: DragRef | null = null;\n private index = -1;\n private flow: Flow = 'free';\n private rtl = false;\n\n withElementContainer(el: HTMLElement): this {\n this.container = el;\n return this;\n }\n\n start(_items: readonly DragRef<any>[]): void {\n this.flow = detectFlow(this.container);\n this.rtl = isRtl(this.container);\n this.index = -1;\n }\n\n enter(drag: DragRef<any>, x: number, y: number): void {\n this.dragging = drag;\n this.index = this.findInsertionIndex(drag, x, y);\n this.movePlaceholder(drag, this.index);\n }\n\n sort(drag: DragRef<any>, x: number, y: number): SortResult | null {\n this.dragging = drag;\n\n const next = this.findInsertionIndex(drag, x, y);\n const previous = this.getCurrentIndex();\n\n if (next === previous) return null;\n\n this.movePlaceholder(drag, next);\n\n return {\n previousIndex: previous,\n currentIndex: next,\n };\n }\n\n getCurrentIndex(): number {\n if (!this.container) return Math.max(0, this.index);\n\n const placeholder = this.dragging?.getPlaceholderElement();\n if (placeholder?.parentElement === this.container) {\n const refs = new Set(this.container.__ngxDragItems ?? []);\n let position = 0;\n\n const itemElements = new Set(Array.from(refs, (item) => item.el));\n\n for (const node of Array.from(this.container.children)) {\n if (node === placeholder) return position;\n\n if (\n node instanceof HTMLElement &&\n itemElements.has(node) &&\n node !== this.dragging?.el\n ) {\n position++;\n }\n }\n }\n\n return Math.max(0, this.index);\n }\n\n getItemIndex(item: DragRef): number {\n let index = 0;\n const refs = new Set(this.container.__ngxDragItems ?? []);\n\n const itemElements = new Set(Array.from(refs, (ref) => ref.el));\n\n for (const node of Array.from(this.container.children)) {\n if (node === item.el) return index;\n\n if (\n node instanceof HTMLElement &&\n !node.classList.contains('ngx-drag-placeholder') &&\n !node.classList.contains('ngx-drag-in-body') &&\n (!refs.size || itemElements.has(node))\n ) {\n index++;\n }\n }\n\n return -1;\n }\n\n reset(): void {\n this.dragging = null;\n this.index = -1;\n }\n\n private movePlaceholder(drag: DragRef, index: number): void {\n const ph = drag.getPlaceholderElement();\n if (!ph || !this.container) return;\n\n const items = this.readItems(drag);\n const reference = items[index]?.drag.el ?? null;\n\n if (reference) {\n if (ph !== reference.previousSibling) {\n this.container.insertBefore(ph, reference);\n }\n } else if (ph.parentElement !== this.container || ph !== this.container.lastElementChild) {\n this.container.appendChild(ph);\n }\n\n this.index = Math.max(0, Math.min(index, items.length));\n }\n\n private findInsertionIndex(drag: DragRef, x: number, y: number): number {\n const items = this.readItems(drag);\n if (!items.length) return 0;\n\n switch (this.flow) {\n case 'flex-row':\n return this.findFlexRow(items, x);\n case 'flex-column':\n return this.findFlexColumn(items, y);\n case 'grid':\n case 'free':\n default:\n return this.findGrid(items, x, y);\n }\n }\n\n private readItems(drag: DragRef): ItemGeometry[] {\n const itemSet = new Set<DragRef>(\n // DropListRef maintains the authoritative set; DOM order is authoritative\n // for placement, so we only inspect direct children here.\n this.container.__ngxDragItems ?? [],\n );\n const byElement = new Map<HTMLElement, DragRef>(\n Array.from(itemSet, (item) => [item.el, item] as const),\n );\n\n const result: ItemGeometry[] = [];\n\n Array.from(this.container.children).forEach((element, domIndex) => {\n if (\n !(element instanceof HTMLElement) ||\n element === drag.el ||\n element.classList.contains('ngx-drag-placeholder') ||\n element.classList.contains('ngx-drag-in-body')\n ) {\n return;\n }\n\n const ref = byElement.get(element);\n if (!ref) return;\n\n result.push({\n drag: ref,\n rect: element.getBoundingClientRect(),\n domIndex,\n });\n });\n\n // Fallback for environments where the private bridge is not available.\n if (!result.length) {\n return [];\n }\n\n return result;\n }\n\n private findFlexRow(items: ItemGeometry[], x: number): number {\n for (let i = 0; i < items.length; i++) {\n const r = items[i].rect;\n const mid = r.left + r.width / 2;\n const before = this.rtl ? x > mid : x < mid;\n if (before) return i;\n }\n return items.length;\n }\n\n private findFlexColumn(items: ItemGeometry[], y: number): number {\n for (let i = 0; i < items.length; i++) {\n const r = items[i].rect;\n if (y < r.top + r.height / 2) return i;\n }\n return items.length;\n }\n\n private findGrid(items: ItemGeometry[], x: number, y: number): number {\n let best = items[0];\n let bestScore = Number.POSITIVE_INFINITY;\n\n for (const item of items) {\n const cx = item.rect.left + item.rect.width / 2;\n const cy = item.rect.top + item.rect.height / 2;\n const dx = Math.abs(x - cx) / Math.max(item.rect.width, 1);\n const dy = Math.abs(y - cy) / Math.max(item.rect.height, 1);\n const score = dx + dy * 1.2;\n if (score < bestScore) {\n bestScore = score;\n best = item;\n }\n }\n\n const target = best.rect;\n const sameRow =\n y >= target.top - target.height * 0.35 &&\n y <= target.bottom + target.height * 0.35;\n\n const before = sameRow\n ? this.rtl\n ? x > target.left + target.width / 2\n : x < target.left + target.width / 2\n : y < target.top + target.height / 2;\n\n return Math.max(\n 0,\n Math.min(items.length, items.findIndex((x) => x === best) + (before ? 0 : 1)),\n );\n }\n}\n\nfunction detectFlow(el: HTMLElement): Flow {\n const s = getComputedStyle(el);\n\n if (s.display.includes('grid')) return 'grid';\n\n if (s.display.includes('flex')) {\n if (s.flexWrap !== 'nowrap') return 'grid';\n return s.flexDirection.startsWith('column') ? 'flex-column' : 'flex-row';\n }\n\n return 'free';\n}\n\n// Internal, DOM-local bridge used to avoid introducing a circular dependency\n// between the sorting strategy and DropListRef.\ndeclare global {\n interface HTMLElement {\n __ngxDragItems?: Iterable<DragRef>;\n }\n}\n","import { TemplateRef } from '@angular/core';\nimport { DropListRef } from './drop-list-ref';\n\nexport class PlaceHolderRef {\n tpl?: TemplateRef<unknown>;\n dropList?: DropListRef;\n element?: HTMLElement;\n\n private _visible = false;\n\n attach(\n container: HTMLElement,\n source: HTMLElement,\n reference?: Node | null,\n ): HTMLElement {\n if (!this.element) {\n // 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 }\n\n // The placeholder must never inherit a live drag transform/animation.\n this.element.style.setProperty('transform', 'none', 'important');\n this.element.style.setProperty('transition', 'none', 'important');\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 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 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 detach(): void {\n this.element?.remove();\n this._visible = false;\n }\n\n get visible(): boolean {\n return this._visible && !!this.element?.isConnected;\n }\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 { PositionalSortStrategy } from './sorting/positional-sort-strategy';\nimport { PlaceHolderRef } from './placeholder-ref';\nimport { copyComputedStyleTree } from './utils/styling';\n\n/**\n * DropListRef is intentionally generic, while the positional sorting strategy\n * works on DragRef<any>. The public DropList/DragRef relationship is invariant\n * because IDropEvent<T> contains T in a callback position. Keep the strongly\n * typed Set here, and narrow only at the DOM-local bridge / strategy boundary.\n */\nexport class DropListRef<T = any> {\n data?: T;\n el!: HTMLElement;\n disableSort = false;\n connectedTo: HTMLElement[] = [];\n dropListGroup?: DropListGroupRef | null;\n\n readonly _draggables = new Set<DragRef<T>>();\n readonly onDrop = new EventEmitter<IDropEvent<T>>();\n\n private strategy = new PositionalSortStrategy();\n private active = false;\n private previousIndex = -1;\n private placeholder?: PlaceHolderRef;\n\n addItem(item: DragRef<T>): void {\n this._draggables.add(item);\n this.publishDragItems();\n }\n\n removeItem(item: DragRef<T>): void {\n this._draggables.delete(item);\n this.publishDragItems();\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 createPlaceholder(drag: DragRef<T>): PlaceHolderRef {\n // There is exactly one placeholder for the active drag.\n this.placeholder?.detach();\n\n const ref = new PlaceHolderRef();\n ref.dropList = this;\n const source = drag.el;\n const rect = source.getBoundingClientRect();\n\n ref.attach(this.el, source);\n this.copyPlaceholderGeometry(source, ref.element!, rect);\n\n this.placeholder = ref;\n drag.placeholder = ref;\n\n this.enter(drag, drag.pointer.x, drag.pointer.y);\n\n return ref;\n }\n\n enter(drag: DragRef<T>, x = 0, y = 0): void {\n if (!this.active) {\n this.active = true;\n this.previousIndex = this.indexOf(drag);\n\n // Sorting strategy reads the live DOM. Expose the authoritative refs\n // through a DOM-local bridge with the intentionally wider any type.\n this.publishDragItems();\n\n this.strategy.withElementContainer(this.el).start(this.getStrategyItems());\n\n this.el.classList.add('ngx-drop-list--active');\n }\n\n this.strategy.enter(this.asStrategyDrag(drag), x, y);\n }\n\n sortItem(drag: DragRef<T>, position: IPosition): number | null {\n if (!this.active || this.disableSort) return null;\n\n return (\n this.strategy.sort(this.asStrategyDrag(drag), position.x, position.y)?.currentIndex ?? null\n );\n }\n\n finishDrag(drag: DragRef<T>): void {\n if (!this.active) return;\n\n const currentIndex = this.strategy.getCurrentIndex();\n\n this.onDrop.emit({\n previousIndex: Math.max(0, drag.originIndex >= 0 ? drag.originIndex : this.previousIndex),\n currentIndex,\n item: drag,\n container: this,\n previousContainer: drag.originDropList ?? this,\n });\n\n this.reset();\n }\n\n exit(_drag: DragRef<T>): void {\n if (!this.active) return;\n\n this.placeholder?.detach();\n this.reset();\n }\n\n resetSortTransforms(): void {\n this.reset();\n }\n\n getFinalIndex(): number {\n return this.strategy.getCurrentIndex();\n }\n\n getItemIndex(item: DragRef<T>): number {\n return this.indexOf(item);\n }\n\n private indexOf(item: DragRef<T>): number {\n const elements = new Set(this._draggables as Set<DragRef<T>>);\n\n let index = 0;\n for (const node of Array.from(this.el.children)) {\n if (!(node instanceof HTMLElement)) continue;\n if (node === this.placeholder?.element) continue;\n if (node.classList.contains('ngx-drag-in-body')) continue;\n\n const ref = Array.from(elements).find((candidate) => candidate.el === node);\n if (!ref) continue;\n\n if (ref === item) return index;\n index++;\n }\n\n return -1;\n }\n\n private reset(): void {\n this.active = false;\n this.strategy.reset();\n this.placeholder?.detach();\n this.placeholder = undefined;\n this.publishDragItems();\n this.el.classList.remove('ngx-drop-list--active');\n }\n\n private copyPlaceholderGeometry(\n source: HTMLElement,\n placeholder: HTMLElement,\n rect: DOMRect,\n ): void {\n // copyComputedStyleTree(source, placeholder);\n\n placeholder.style.setProperty('width', `${rect.width}px`, 'important');\n placeholder.style.setProperty('height', `${rect.height}px`, 'important');\n placeholder.style.setProperty('min-width', `${rect.width}px`, 'important');\n placeholder.style.setProperty('min-height', `${rect.height}px`, 'important');\n placeholder.style.setProperty('max-width', `${rect.width}px`, 'important');\n placeholder.style.setProperty('max-height', `${rect.height}px`, 'important');\n placeholder.style.setProperty('visibility', 'visible', 'important');\n placeholder.style.setProperty('opacity', '0.16', 'important');\n placeholder.style.setProperty('pointer-events', 'none', 'important');\n placeholder.style.setProperty('transform', 'none', 'important');\n placeholder.style.setProperty('transition', 'none', 'important');\n placeholder.style.setProperty('animation', 'none', 'important');\n placeholder.style.setProperty('box-sizing', 'border-box', 'important');\n }\n\n /**\n * The sorting strategy only needs a read-only collection of draggable refs.\n * Using DragRef<any> at this internal boundary avoids the invariant generic\n * relationship between DragRef<T> and DragRef<unknown>.\n */\n private getStrategyItems(): readonly DragRef<any>[] {\n return Array.from(this._draggables) as readonly DragRef<any>[];\n }\n\n private asStrategyDrag(drag: DragRef<T>): DragRef<any> {\n return drag as DragRef<any>;\n }\n\n private publishDragItems(): void {\n this.el.__ngxDragItems = this._draggables as Iterable<DragRef<any>>;\n }\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';\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 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 }\n\n removeDropList(ref: DropListRef<any>): void {\n this.dropLists.update((items) => items.filter((x) => x !== ref));\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 findDropList(\n point: { x: number; y: number },\n current?: DropListRef | null,\n ): DropListRef | null {\n const candidates = this.dropLists()\n .filter((list) => {\n const r = list.el?.getBoundingClientRect();\n return (\n !!r &&\n point.x >= r.left &&\n point.x <= r.right &&\n point.y >= r.top &&\n point.y <= r.bottom\n );\n });\n\n // Staying over the current list should always win.\n if (current && candidates.includes(current)) return current;\n\n // Never jump into an unrelated list just because it overlaps the pointer.\n // Prefer the smallest matching connected container (useful for nested lists).\n return candidates\n .filter((list) => !current || current.isConnectedTo(list))\n .sort((a, b) => {\n const ra = a.el.getBoundingClientRect();\n const rb = b.el.getBoundingClientRect();\n return ra.width * ra.height - rb.width * rb.height;\n })[0] ?? null;\n }\n}\n","import { Directive, InjectionToken, OnDestroy } from '@angular/core';\nimport { DropListGroupRef } from '../drop-list-group-ref';\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 OnDestroy {\n readonly _ref = new DropListGroupRef();\n ngOnDestroy(): void {\n this._ref.lists.clear();\n }\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n Output,\n inject,\n} from '@angular/core';\nimport { DropListRef } from '../drop-list-ref';\nimport { DragDropService } from '../services/drag-drop.service';\nimport { NGX_DROPLIST_GROUP } from './ngx-drop-list-group.directive';\nimport { IDropEvent } from '../contracts/IDropEvent';\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 {\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\n private readonly service = inject(DragDropService);\n private readonly group = inject(NGX_DROPLIST_GROUP, { optional: true, skipSelf: true });\n\n constructor(private readonly el: ElementRef<HTMLElement>) {}\n\n ngOnInit(): void {\n this._ref.el = this.el.nativeElement;\n this._ref.dropListGroup = this.group?._ref ?? null;\n // Previously the group directive never actually tracked its lists — fixed here.\n this.group?._ref.add(this._ref);\n this._ref.onDrop.subscribe((e) => this.drop.emit(e));\n this.service.registerDropList(this._ref);\n }\n ngOnDestroy(): void {\n this.group?._ref.remove(this._ref);\n this.service.removeDropList(this._ref);\n }\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 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 start(fromEl: HTMLElement): void {\n this.container = findScrollableAncestor(fromEl);\n }\n\n /** Call on every pointermove with the current client coordinates. */\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 }\n\n private tick = (): void => {\n if (!this.speed.x && !this.speed.y) {\n this.raf = 0;\n return;\n }\n if (this.container instanceof Window) {\n this.container.scrollBy(this.speed.x, this.speed.y);\n } else {\n this.container.scrollLeft += this.speed.x;\n this.container.scrollTop += this.speed.y;\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): { left: number; right: number; top: number; bottom: number } {\n if (container instanceof Window) {\n return { left: 0, top: 0, right: window.innerWidth, bottom: window.innerHeight };\n }\n return container.getBoundingClientRect();\n}\n\nfunction findScrollableAncestor(el: HTMLElement): HTMLElement | Window {\n let node: HTMLElement | null = el;\n while (node) {\n const style = getComputedStyle(node);\n const scrollable = /(auto|scroll|overlay)/.test(style.overflowY + style.overflowX);\n if (scrollable && node.scrollHeight > node.clientHeight) return node;\n node = node.parentElement;\n }\n return window;\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n InjectionToken,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n inject,\n signal,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { DragDropService } from '../services/drag-drop.service';\nimport { NGX_DROPLIST } from './ngx-drop-list.directive';\nimport { NGX_DROPLIST_GROUP } from './ngx-drop-list-group.directive';\nimport { DragRef, DragAxis } from '../drag-ref';\nimport { IPosition } from '../contracts/IPosition';\nimport { AutoScroller } from '../utils/auto-scroll';\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 },\n})\nexport class NgxDraggable<T = unknown> implements OnInit, OnDestroy {\n @Input() disabled = false;\n /** Element whose rect constrains the drag. Now actually enforced. */\n @Input() boundary?: HTMLElement;\n @Input() dragRootElement = '';\n /** CSS selector for a drag handle. When set, only pointerdowns inside it start a drag. */\n @Input() dragHandle = '';\n /** Restrict movement to a single axis. */\n @Input() lockAxis: DragAxis;\n /** Minimum pointer travel (px) before a drag starts, so clicks still register normally. */\n @Input() dragThreshold = 3;\n /** Pixel step used when dragging via the keyboard (arrow keys, focus required). */\n @Input() keyboardStep = DEFAULT_KEYBOARD_STEP;\n /** Auto-scroll the nearest scrollable ancestor while dragging near its edge. */\n @Input() autoScroll = true;\n @Input('data') set data(v: T) {\n this._ref.data = v;\n }\n\n @Output() readonly dragStart = new EventEmitter<IPosition>();\n @Output() readonly dragMove = new EventEmitter<IPosition>();\n @Output() readonly dragEnd = new EventEmitter<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 list = inject(NGX_DROPLIST, { optional: true, skipSelf: true });\n private readonly group = inject(NGX_DROPLIST_GROUP, { optional: true, skipSelf: true });\n private readonly scroller = new AutoScroller();\n\n private down = false;\n private start = { x: 0, y: 0 };\n private pointerId = -1;\n private removeDown?: () => void;\n private removeMove?: () => void;\n private removeUp?: () => void;\n private removeKeydown?: () => void;\n private removeEscape?: () => void;\n\n constructor(\n private readonly host: ElementRef<HTMLElement>,\n private readonly renderer: Renderer2,\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 this._ref.dropListGroup = this.group?._ref;\n this._ref.init();\n this._ref.withDropList(this.list?._ref ?? 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\n ngOnDestroy(): void {\n this.removeDown?.();\n this.removeMove?.();\n this.removeUp?.();\n this.removeKeydown?.();\n this.removeEscape?.();\n this.scroller.stop();\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 e.preventDefault();\n this.down = true;\n this.pointerId = e.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.doc, 'pointermove', (ev: PointerEvent) =>\n this.pointerMove(ev),\n );\n this.removeUp = this.renderer.listen(this.doc, '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 }\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 if (!this.dragging() && Math.hypot(p.x - this.start.x, p.y - this.start.y) < this.dragThreshold)\n return;\n if (!this.dragging()) {\n this._ref.startDrag(p);\n this.dragging.set(true);\n this.service.begin(this._ref);\n if (this.autoScroll) this.scroller.start(this._ref.el);\n this.dragStart.emit(p);\n }\n this._ref.dragMove(p);\n\n const target = this.service.findDropList(p, this._ref.dropList);\n\n if (target !== this._ref.dropList) {\n this._ref.dropList?.exit(this._ref);\n this._ref.clearDropList();\n\n if (target) {\n this._ref.withDropList(target);\n target.createPlaceholder(this._ref);\n\n if (this.autoScroll) {\n this.scroller.stop();\n this.scroller.start(target.el);\n }\n } else if (this.autoScroll) {\n this.scroller.stop();\n }\n }\n\n // Sorting uses the pointer against the currently active list. Its geometry\n // is read live, so the placeholder and auto-scroll are both reflected.\n this._ref.dropList?.sortItem(this._ref, p);\n\n if (this.autoScroll) this.scroller.update(p.x, p.y);\n this.dragMove.emit(p);\n }\n\n private pointerUp(e: PointerEvent): void {\n if (!this.down || e.pointerId !== this.pointerId) return;\n if (this.dragging()) {\n if (this._ref.dropList) {\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 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.removeMove?.();\n this.removeUp?.();\n this.removeEscape?.();\n this.removeMove = this.removeUp = this.removeEscape = 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 this._ref.pointerDown({ x: 0, y: 0 });\n this._ref.boundary = this.boundary;\n this._ref.lockAxis = this.lockAxis;\n this._ref.startDrag({ x: 0, y: 0 });\n this.dragging.set(true);\n this.service.begin(this._ref);\n this.dragStart.emit({ x: 0, y: 0 });\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 } 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 return target instanceof HTMLElement && !!target.closest(this.dragHandle);\n }\n\n private isInteractive(target: EventTarget | null): boolean {\n return (\n target instanceof HTMLElement &&\n !!target.closest('button,a,input,textarea,select,[data-no-drag]')\n );\n }\n}\n","import {\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n Output,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n IResizableOutput,\r\n LogicalResizeDirection,\r\n ResizeDirection,\r\n} from '../contracts/IResizableOutput';\r\nimport { clampResizeWithinBoundary } from '../utils/check-boundary';\r\nimport { isRtl, resolveLogicalDirection } from '../utils/rtl';\r\n\r\nconst ALL_DIRECTIONS: ResizeDirection[] = ['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'];\r\nconst KEYBOARD_STEP = 8;\r\n\r\n@Directive({\r\n selector: '[NgxResizable],[ngxResizable]',\r\n host: {\r\n '[style.touch-action]': '\"none\"',\r\n class: 'ngx-resizable',\r\n },\r\n})\r\nexport class NgxResizable {\r\n @Input() disabled = false;\r\n @Input() minWidth = 20;\r\n @Input() minHeight = 20;\r\n @Input() maxWidth = Infinity;\r\n @Input() maxHeight = Infinity;\r\n @Input() directions: LogicalResizeDirection[] = [...ALL_DIRECTIONS];\r\n @Input() grid?: number | { x: number; y: number };\r\n /** Element whose rect constrains the resize. Previously accepted nowhere on this directive. */\r\n @Input() boundary?: HTMLElement;\r\n /** Pixel step used when resizing via the keyboard (arrow keys, focus required). */\r\n @Input() keyboardStep = KEYBOARD_STEP;\r\n\r\n @Output() readonly resizeStart = new EventEmitter<IResizableOutput>();\r\n @Output() readonly resizeMove = new EventEmitter<IResizableOutput>();\r\n @Output() readonly resizeEnd = new EventEmitter<IResizableOutput>();\r\n\r\n readonly resizing = signal(false);\r\n private direction: ResizeDirection = 'se';\r\n\r\n private start!: DOMRect;\r\n private pointer = {\r\n x: 0,\r\n y: 0,\r\n };\r\n private beforeTransition = '';\r\n private beforeWidth = '';\r\n private beforeHeight = '';\r\n private beforeTransform = '';\r\n private pointerId = -1;\r\n constructor(private readonly el: ElementRef<HTMLElement>) {}\r\n\r\n @HostListener('pointerdown', ['$event'])\r\n onPointerDown(e: PointerEvent): void {\r\n if (this.disabled || e.button !== 0) {\r\n return;\r\n }\r\n\r\n const dir = this.hitDirection(e);\r\n\r\n if (!dir) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n e.stopImmediatePropagation();\r\n\r\n const element = this.el.nativeElement;\r\n this.direction = dir;\r\n this.pointerId = e.pointerId;\r\n /**\r\n * This is the actual visual rectangle.\r\n * It already contains any transform created by DragRef.\r\n */\r\n this.start = element.getBoundingClientRect();\r\n\r\n this.pointer = {\r\n x: e.clientX,\r\n y: e.clientY,\r\n };\r\n\r\n this.beforeTransition = element.style.transition;\r\n\r\n /**\r\n * Keep DragRef's transform as the immutable base.\r\n *\r\n * Resize will temporarily add its own translation\r\n * on top of this transform.\r\n */\r\n this.beforeTransform = element.style.transform;\r\n\r\n this.resizing.set(true);\r\n element.style.transition = 'none';\r\n element.setPointerCapture?.(e.pointerId);\r\n const out = this.calculate(e);\r\n this.apply(out);\r\n this.resizeStart.emit(out);\r\n }\r\n\r\n @HostListener('document:pointermove', ['$event'])\r\n onPointerMove(e: PointerEvent): void {\r\n if (!this.resizing() || e.pointerId !== this.pointerId) {\r\n return;\r\n }\r\n const out = this.calculate(e);\r\n this.apply(out);\r\n this.resizeMove.emit(out);\r\n }\r\n\r\n @HostListener('document:pointerup', ['$event'])\r\n onPointerUp(e: PointerEvent): void {\r\n if (!this.resizing() || e.pointerId !== this.pointerId) {\r\n return;\r\n }\r\n const out = this.calculate(e);\r\n this.apply(out);\r\n this.resizeEnd.emit(out);\r\n this.finish();\r\n }\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n onDocumentKeyDown(e: KeyboardEvent): void {\r\n if (!this.resizing()) {\r\n return;\r\n }\r\n if (e.key !== 'Escape') {\r\n return;\r\n }\r\n e.preventDefault();\r\n const element = this.el.nativeElement;\r\n element.style.width = this.beforeWidth;\r\n element.style.height = this.beforeHeight;\r\n element.style.transform = this.beforeTransform;\r\n this.finish();\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onHandleKeyDown(e: KeyboardEvent): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n const rtl = isRtl(this.el.nativeElement);\r\n const step = this.keyboardStep * (e.shiftKey ? 4 : 1);\r\n let dw = 0;\r\n let dh = 0;\r\n if (e.key === 'ArrowRight') {\r\n dw = rtl ? -step : step;\r\n } else if (e.key === 'ArrowLeft') {\r\n dw = rtl ? step : -step;\r\n } else if (e.key === 'ArrowDown') {\r\n dh = step;\r\n } else if (e.key === 'ArrowUp') {\r\n dh = -step;\r\n } else {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n const rect = this.el.nativeElement.getBoundingClientRect();\r\n const width = this.clampGrid(\r\n Math.max(this.minWidth, Math.min(this.maxWidth, rect.width + dw)),\r\n 'x',\r\n );\r\n const height = this.clampGrid(\r\n Math.max(this.minHeight, Math.min(this.maxHeight, rect.height + dh)),\r\n 'y',\r\n );\r\n this.el.nativeElement.style.width = `${width}px`;\r\n this.el.nativeElement.style.height = `${height}px`;\r\n const out: IResizableOutput = {\r\n width,\r\n height,\r\n moveLeft: 0,\r\n moveTop: 0,\r\n left: rect.left,\r\n top: rect.top,\r\n direction: 'se',\r\n };\r\n this.resizeMove.emit(out);\r\n this.resizeEnd.emit(out);\r\n }\r\n\r\n private calculate(e: PointerEvent): IResizableOutput {\r\n const dx = e.clientX - this.pointer.x;\r\n const dy = e.clientY - this.pointer.y;\r\n\r\n let width = this.start.width;\r\n let height = this.start.height;\r\n /**\r\n * East\r\n */\r\n if (this.direction.includes('e')) {\r\n width += dx;\r\n }\r\n\r\n /**\r\n * West\r\n */\r\n if (this.direction.includes('w')) {\r\n width -= dx;\r\n }\r\n\r\n /**\r\n * South\r\n */\r\n if (this.direction.includes('s')) {\r\n height += dy;\r\n }\r\n\r\n /**\r\n * North\r\n */\r\n if (this.direction.includes('n')) {\r\n height -= dy;\r\n }\r\n\r\n width = this.clampGrid(Math.max(this.minWidth, Math.min(this.maxWidth, width)), 'x');\r\n\r\n height = this.clampGrid(Math.max(this.minHeight, Math.min(this.maxHeight, height)), 'y');\r\n\r\n /**\r\n * Calculate the intended visual position.\r\n *\r\n * This is useful for boundary calculations and\r\n * emitted resize events.\r\n */\r\n let left = this.start.left;\r\n let top = this.start.top;\r\n\r\n if (this.direction.includes('w')) {\r\n left = this.start.right - width;\r\n }\r\n\r\n if (this.direction.includes('n')) {\r\n top = this.start.bottom - height;\r\n }\r\n\r\n let moveLeft = left - this.start.left;\r\n let moveTop = top - this.start.top;\r\n /**\r\n * Boundary constraint.\r\n */\r\n if (this.boundary) {\r\n const clamped = clampResizeWithinBoundary(\r\n this.boundary.getBoundingClientRect(),\r\n this.start,\r\n width,\r\n height,\r\n moveLeft,\r\n moveTop,\r\n );\r\n width = clamped.width;\r\n height = clamped.height;\r\n moveLeft = clamped.left;\r\n moveTop = clamped.top;\r\n left = this.start.left + moveLeft;\r\n top = this.start.top + moveTop;\r\n }\r\n\r\n return {\r\n width,\r\n height,\r\n moveLeft,\r\n moveTop,\r\n left,\r\n top,\r\n direction: this.direction,\r\n };\r\n }\r\n\r\n private apply(out: IResizableOutput): void {\r\n const element = this.el.nativeElement;\r\n /**\r\n * Always reset to the transform that existed before\r\n * this resize operation started.\r\n *\r\n * This prevents resize corrections from accumulating.\r\n */\r\n element.style.transform = this.beforeTransform;\r\n\r\n /**\r\n * Apply the actual size first.\r\n *\r\n * Changing width/height may cause the browser to re-layout\r\n * the element, especially for relative/flex/grid/static layouts.\r\n */\r\n element.style.width = `${out.width}px`;\r\n element.style.height = `${out.height}px`;\r\n\r\n /**\r\n * Force/read layout after changing the size.\r\n */\r\n const current = element.getBoundingClientRect();\r\n\r\n /**\r\n * These are the positions where the element MUST visually be.\r\n *\r\n * `out.moveLeft` / `out.moveTop` are calculated in `calculate()`\r\n * from the original visual rectangle.\r\n */\r\n const targetLeft = this.start.left + out.moveLeft;\r\n const targetTop = this.start.top + out.moveTop;\r\n\r\n /**\r\n * Browser's actual position after width/height changed.\r\n *\r\n * The difference between target and current position is the\r\n * correction that must be applied using transform.\r\n */\r\n const correctionX = targetLeft - current.left;\r\n const correctionY = targetTop - current.top;\r\n const hasCorrection = correctionX !== 0 || correctionY !== 0;\r\n if (!hasCorrection) {\r\n element.style.transform = this.beforeTransform;\r\n return;\r\n }\r\n /**\r\n * Preserve DragRef's existing transform and add only the\r\n * correction required by Resize.\r\n */\r\n const baseTransform =\r\n this.beforeTransform && this.beforeTransform !== 'none' ? `${this.beforeTransform} ` : '';\r\n element.style.transform =\r\n `${baseTransform}translate3d(` + `${correctionX}px, ` + `${correctionY}px, 0)`;\r\n }\r\n\r\n private clampGrid(value: number, axis: 'x' | 'y'): number {\r\n const grid = typeof this.grid === 'number' ? this.grid : this.grid?.[axis];\r\n if (!grid || grid <= 0) {\r\n return value;\r\n }\r\n return Math.round(value / grid) * grid;\r\n }\r\n\r\n private finish(): void {\r\n this.resizing.set(false);\r\n this.el.nativeElement.style.transition = this.beforeTransition;\r\n this.pointerId = -1;\r\n this.beforeTransform = '';\r\n }\r\n\r\n private resolvedDirections(): ResizeDirection[] {\r\n const rtl = isRtl(this.el.nativeElement);\r\n const set = new Set<ResizeDirection>();\r\n for (const direction of this.directions) {\r\n set.add(resolveLogicalDirection(direction, rtl) as ResizeDirection);\r\n }\r\n return [...set];\r\n }\r\n\r\n private hitDirection(e: PointerEvent): ResizeDirection | null {\r\n const element = this.el.nativeElement;\r\n const rect = element.getBoundingClientRect();\r\n const edge = Math.min(12, Math.max(6, Math.min(rect.width, rect.height) * 0.18));\r\n const isLeft = e.clientX - rect.left <= edge;\r\n const isRight = rect.right - e.clientX <= edge;\r\n const isTop = e.clientY - rect.top <= edge;\r\n const isBottom = rect.bottom - e.clientY <= edge;\r\n /**\r\n * Explicit resize handle has priority.\r\n */\r\n const handle =\r\n e.target instanceof HTMLElement\r\n ? e.target.closest<HTMLElement>('[data-ngx-resize-handle]')\r\n : null;\r\n\r\n if (handle && element.contains(handle)) {\r\n const raw = handle.dataset['ngxResizeHandle'] as LogicalResizeDirection | undefined;\r\n\r\n if (!raw) {\r\n return null;\r\n }\r\n const resolved = resolveLogicalDirection(raw, isRtl(element)) as ResizeDirection;\r\n return this.resolvedDirections().includes(resolved) ? resolved : null;\r\n }\r\n\r\n /**\r\n * These are PHYSICAL screen directions.\r\n *\r\n * left -> w\r\n * right -> e\r\n *\r\n * RTL is handled only when a logical direction\r\n * such as \"start\" / \"end\" is requested.\r\n */\r\n const direction =\r\n isTop && isLeft\r\n ? 'nw'\r\n : isTop && isRight\r\n ? 'ne'\r\n : isBottom && isLeft\r\n ? 'sw'\r\n : isBottom && isRight\r\n ? 'se'\r\n : isTop\r\n ? 'n'\r\n : isRight\r\n ? 'e'\r\n : isBottom\r\n ? 's'\r\n : isLeft\r\n ? 'w'\r\n : null;\r\n\r\n if (!direction) {\r\n return null;\r\n }\r\n return this.resolvedDirections().includes(direction) ? direction : null;\r\n }\r\n}\r\n","import { 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@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 }\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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"}