npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

listine

v1.1.0

Published

Angular virtual scroll component supporting variable item heights.

Downloads

94

Readme

Listine virtual scroller

Why Our Custom Virtual Scroll? Our virtual scroll implementation bridges the gap left by existing solutions by offering:

True Dynamic Height Support: Unlike Angular CDK and PrimeNG virtual scrollers that require a fixed item size, our library intelligently measures and handles items of varying heights dynamically, providing smooth scrolling experience even with heterogeneous content.

Standalone Component Compatibility: Built for Angular 14+ standalone components architecture, it does not rely on NgModules, making it future-proof and easy to integrate with modern Angular projects without legacy module constraints.

Optimized Performance: Uses smart view recycling and virtualization techniques, minimizing DOM node creation and improving rendering performance in large lists with variable heights.

Flexible API: Provides hooks and event emitters to customize rendering, handle loading states, and integrate seamlessly with asynchronous data sources.

Responsive and Accessible: Designed with responsiveness in mind and supports keyboard navigation and ARIA accessibility standards.

Use Cases This virtual scroll is ideal when:

Your list items have variable heights that cannot be predetermined.

You want to adopt Angular's latest standalone components without legacy module dependencies.

You need a lightweight but powerful scrolling solution tailored to your specific UI needs.

You are working on complex data-heavy applications requiring smooth, performant scrolling experiences.

Summary While existing libraries like Angular CDK virtual scroll and ngx-virtual-scroller cover many scenarios, they fall short when it comes to combining dynamic height support with standalone component compatibility in Angular 14+. Our custom virtual scroll library fills this gap, offering a modern, performant, and flexible solution for Angular developers.

Installation

Install listine with npm

  npm install listine

Example


import { ListineVirtualScrollModule } from "/listine";

   <listine-variable-virtual-scroll
    [items]="options"
    [buffer]="10"
    [viewportHeight]="600"
    [itemTemplate]="itemTemplate"
  >
    <ng-template #itemTemplate let-option let-i="index">
      <p>{{ option.label }} (ID: {{ option.value }})</p>
    </ng-template>
  </listine-variable-virtual-scroll>
  

In some cases if parent element have display flex than virtual scroll will not work

Authors

License

MIT