For AI agents: the complete documentation index is available at https://gultyayev.github.io/ngx-virtual-dnd/llms.txt, the full documentation bundle is available at https://gultyayev.github.io/ngx-virtual-dnd/llms-full.txt, and this page is available as Markdown at https://gultyayev.github.io/ngx-virtual-dnd/changelog.md.

Changelog

All notable changes to this project will be documented in this file. See commit-and-tag-version for commit guidelines.

3.6.2 (2026-10-21)

Bug Fixes

  • lib: autoscroll lists that grow scrollable or register mid-drag (#152) (531a9c0)
  • lib: claim the server's rows when vdndVirtualFor hydrates (#153) (4e759b2)
  • lib: clamp keyboard targets to the list's live item count (#149) (1b3f249)
  • lib: drop a pending press once its draggable is disabled (#148) (2e18d21)
  • lib: end a drag whose draggable ID changes mid-drag (#146) (d4583ed)
  • lib: keep drag previews out of focus and the accessibility tree (#151) (f8f4606)
  • lib: keep the server's row order when vdnd-virtual-scroll hydrates (#145) (8a8104b)
  • lib: position and measure vdndVirtualFor rows after their check (#147) (470e1fb)
  • lib: skip visibility-hidden droppables in pointer hit-testing (#150) (7932d58)

3.6.1 (2026-10-14)

Bug Fixes

  • lib: re-read the scroll offset when a scroll container is shown again (#142) (a69c4f9)

3.6.0 (2026-10-08)

Features

  • lib: add scroll insets for sticky and overlaid content (#139) (1422e87)

3.5.0 (2026-10-07)

Features

  • lib: support lists and items inside open shadow roots (#125) (73f362c)

Bug Fixes

  • lib: compute scrollBy() and getScrollTop() from the element's live scrollTop (#122) (3622e11)
  • lib: count wrapped rows when calculating a plain list's source index (#137) (5113cdd)
  • lib: keep a list's scroll position after a drop into it at its bottom (#130) (b7964f5)
  • lib: keep a mouse drag going when another button is released (#138) (fbc53c7)
  • lib: keep the clone root's own placement out of the drag preview (#124) (9f04d10)
  • lib: let a pointer drag start on a button draggable or inside a control (#127) (6d468b7)
  • lib: open the placeholder gap and scroll a vdndVirtualFor used directly in vdndScrollable (#129) (adb78fa)
  • lib: report the source list in dragEnd of a draggable destroyed mid-drag (#121) (7bb5b9e)
  • lib: reveal the keyboard placeholder again after it renders at a list's end (4c7cfda), closes #116
  • lib: skip hidden droppables in keyboard cross-list navigation (b8bf247), closes #113
  • lib: snap a constrained drop to the list edge only once the list is scrolled there (#128) (deee3aa)

3.4.0 (2026-10-01)

Features

  • lib: scope the grabbing cursor to lists and items, skip it for touch drags (#109) (8c74877)

Performance

  • lib: run shift animations on the compositor by animating translate (#110) (4cccdcf)

3.3.0 (2026-09-30)

Features

  • lib: recycle vdnd-virtual-scroll rows with recycleRows (#106) (8fd5f33)

Bug Fixes

  • lib: emit drop at release instead of from a droppable effect (#89) (dd05b62)

Performance

  • lib: cut drag-start, per-drop and per-frame work in lists and hit-testing (#108) (afe8bc4)
  • lib: find droppables through a registry instead of document queries (#88) (1e613e7)
  • lib: forward sortable list outputs without template listeners (#100) (f85a49e)
  • lib: make the draggable touchstart listener passive when a drag delay is set (#107) (858bf29)
  • lib: move the drag preview in the pointer's animation frame (#101) (4e501d9)
  • lib: render only the virtual rows whose context changed (#99) (3325a36)
  • lib: stop re-rendering every vdnd-virtual-scroll row on placeholder moves (#105) (273081a)
  • lib: update HeightCache offsets only as far as a lookup needs (#86) (dbb7632)

3.2.1 (2026-09-27)

Bug Fixes

  • lib: account for contentOffset in vdnd-virtual-viewport drops (a46d3d3)
  • lib: allow destroying draggables and droppables before their first render (b42c738)
  • lib: cancel a pending drag-delay timer when a new press starts (909bbff)
  • lib: cancel a pointer drag when the window loses focus (#77) (19463f2)
  • lib: cancel a touch drag when the system cancels the touch (#85) (9c4f2b0)
  • lib: deprecate placeholderId, which is always END_OF_LIST (#82) (84c1a8b)
  • lib: don't let a second drag replace the one in progress (#76) (73d90cb)
  • lib: end the scheduler frame when a participant stops the drag (2a1c5b4)
  • lib: find the droppable and draggable parents at any depth (#79) (84501ef)
  • lib: follow the finger that started a touch drag (#78) (bc5ec2d)
  • lib: keep radio buttons checked when the preview clones their row (6b4a31f)
  • lib: leave keyboard-drag keys to the item being dragged (#84) (12c37c6)
  • lib: let no-drag cover the elements inside it (#75) (ac97757)
  • lib: let Space reach form controls inside a draggable (d786f82)
  • lib: make reorderItems ignore a missing source item (6f093bd)
  • lib: read the source list untracked in moveItem (a42f34e)
  • lib: render and tear down on the server without browser globals (#81) (0ef9567)
  • lib: render the rows in view in vdnd-virtual-viewport with a large contentOffset (7004826)
  • lib: start and stop measuring rows when dynamicItemHeight changes (#80) (4090360)
  • lib: store the offset the browser applied in VirtualScrollContainer.scrollTo (ea3bc1a)

3.2.0 (2026-09-25)

3.2.0-alpha.2 (2026-09-25)

Features

  • lib: animate the drag preview into place on drop (#72) (57186dc)

3.2.0-alpha.1 (2026-09-24)

Features

  • docs: add Rspress documentation site and upgrade npm to 12 (#69) (723fab1)

Bug Fixes

  • lib: end same-list keyboard navigation at the list's last slot (a5191de)
  • lib: keep the placeholder in view during keyboard drag autoscroll (29c0c42)
  • lib: scroll to the drop position on each keyboard move and fix the focus fallback (abd1760)

3.2.0-alpha.0 (2026-09-24)

Features

  • lib: add shift animation and placeholderMove event (#68) (0d697f0)

3.1.3 (2026-07-18)

Bug Fixes

  • demo: remove Ionic md elevation shadow from task page headers (e22ee19)
  • e2e: wait for stable demo layout (#65) (74e4242)
  • gate perf by measuring base and head on the same runner (#63) (62d314f)
  • lib: exclude disabled droppables from drag-time candidate sets (#51) (0efb3ec)
  • lib: fall through exhausted nested containers in autoscroll (#60) (38eee56)
  • lib: make autoscroll registration resilient to post-init layout changes (#61) (c71c51c)
  • lib: normalize keyboard drag end index (#45) (4f54b8f)
  • lib: preserve source index across rapid cross-list drags (#44) (6695753)
  • lib: refresh drag hit-test candidates on mid-drag DOM changes (#58) (b9d21d7)
  • lib: route keyboard cross-list count through DragIndexCalculatorService (#59) (a2bd956)
  • make performance regression gate reliable (#52) (061828c)

Performance

  • lib: stop active droppable effect from re-snapshotting every frame (#62) (b2acd8a)

3.1.2 (2026-07-07)

Bug Fixes

  • lib: refresh viewport transforms on drag exclusion changes (2057a38)
  • lib: safely resolve consumer IDs in attribute lookups (ab2ea17)
  • lib: sync auto-scroll registration with signal inputs (c084a32)

3.1.1 (2026-06-24)

Performance

  • lib: drag-and-drop hot-path optimizations (#18) (7f07562)

3.1.0 (2026-06-23)

Features

  • lib: allow Angular 22 in peer dependency range (40db308)

3.0.1 (2026-03-05)

Performance

  • lib: cache droppable metadata during active drag (53f9c59)
  • lib: optimize hot-path services for active drag (6be81b4)

3.0.0 (2026-02-20)

⚠ BREAKING CHANGES

  • lib: dragMove, dragReadyChange, dragEnter, dragLeave, dragOver, visibleRangeChange, and scrollPositionChange outputs have been removed along with their associated event types. Use DragStateService signals for equivalent reactive state, and the vdnd-drag-pending CSS class instead of dragReadyChange.

Features

  • lib: remove 7 unused outputs from public API (ff680d8)

Bug Fixes

  • lib: clamp constrainToContainer to scroll viewport and fix flaky E2E reorder (2ac1bd6)

2.0.0 (2026-02-17)

2.0.0-alpha.1 (2026-02-14)

Performance

  • lib: split high-frequency signals from monolithic drag state (18d642f)

2.0.0-alpha.0 (2026-02-13)

⚠ BREAKING CHANGES

  • lib: VirtualContentComponent template restructured — virtual area is now wrapped in a .vdnd-virtual-area div. Consumers using contentOffset are unaffected (it remains as an escape hatch).
  • lib: totalItems input removed from VirtualViewportComponent and VirtualContentComponent. The total item count is now derived automatically from the child VirtualForDirective via the shared strategy.

DX improvements:

  • *vdndVirtualFor inherits itemHeight, dynamicItemHeight, and droppableId from parent viewport/droppable when inside one — only trackBy remains required on the directive
  • VirtualSortableListComponent.group is now optional — inherits from parent vdndGroup directive
  • FixedHeightStrategy.setItemKeys() now bumps version on count change, enabling strategy-derived total height
  • VirtualScrollStrategy.getItemCount() is now a required interface method

Migration: Remove [totalItems] bindings from vdnd-virtual-viewport and vdnd-virtual-content. Remove redundant itemHeight, dynamicItemHeight, and droppableId from *vdndVirtualFor when inside a viewport component.

Features

  • lib: auto-measure projected header height via ContentHeaderDirective (b94b634)
  • lib: eliminate data duplication in Pattern B consumer API (2745934)

Bug Fixes

  • lib: unify constrained mode probe logic with capped center (9e20230)

1.3.0-alpha.6 (2026-02-13)

Bug Fixes

  • lib: dynamic height drift cases (916d97e)

1.3.0-alpha.5 (2026-02-13)

Bug Fixes

  • lib: harden dynamic height strategy performance and correctness (9caac28)
  • lib: use direction-aware probing for dynamic drag index (b6346d1)

1.3.0-alpha.4 (2026-02-13)

Bug Fixes

  • lib: allow constrained dynamic drag to reach list edges (38519b2)

1.3.0-alpha.3 (2026-02-13)

Features

  • lib: warn of trackBy duplicates (087f77d)

1.3.0-alpha.2 (2026-02-13)

Features

  • lib: add dynamic item height support for virtual scroll (#15) (a7479e3)
  • lib: constrain drag by container (#16) (2fe954f)

Bug Fixes

  • lib: don't print warnings in prod mode (d987c96)
  • lib: stabilize same-list dynamic placeholder index before exclusion sync (fe6063d)

1.3.0-alpha.1 (2026-02-12)

Bug Fixes

1.3.0-alpha.0 (2026-02-11)

Features

  • lib: add dynamic item height support for virtual scroll (5678c3c)

Bug Fixes

  • lib: don't print warnings in prod mode (d987c96)
  • lib: fix scroll with drag in dynamic height (871f9b4)

1.2.3 (2026-02-06)

Bug Fixes

  • lib: teleport drag preview to body overlay to fix CSS transform offset (979c443)

1.2.2 (2026-01-24)

Performance

  • lib: reduce drag jank and dedupe scroll bindings (#9) (52b0177)

1.2.1 (2026-01-23)

Bug Fixes

  • lib: prevent axis-lock offset at drag start (#7) (3cf1611)

Performance

  • lib: use transform-based positioning for drag preview (#5) (fcd8c75)

1.2.0 (2026-01-23)

Features

  • demo: add page-level scroll demo with Ionic (#4) (d1c7fb1)

1.1.2 (2026-01-14)

Performance

  • lib: optimize change detection and reduce allocations during drag (1b8a579)

1.1.1 (2026-01-08)

1.1.0 (2026-01-08)

Features