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 🙏

© 2024 – Pkg Stats / Ryan Hefner

unsvelte

v1.0.1

Published

Lazy loading components for svelte 🦥

Downloads

2

Readme

unsvelte

Lazy loading components for svelte 🦥

Components

There are three components that come with unsvelte, which you can all import separately, so your bundle stays tiny:

1. Island

The simplest and yet most powerful component of those is the Island. It's basically a dummy component that will be replaced with your actual component when visible. To use it, first create a separate component file, for example called MyComponent.svelte, then you could use the Island like this:

<Island content={() => import('./MyComponent.svelte')} />

Yep, it's that easy. If you want to load your component a bit earlier, maybe because the user has a bad connection (which you can btw find out using prefeb), you can change the rootMargin:

<Island content={() => import('./MyComponent.svelte')} rootMargin="500px" />

2. LazyImg

Still pretty simple. If you want to lazy load an image (maybe because you e building an image gallery), you can just use this component. It can be used to load an image lazily, like this:

<LazyImg src="/my.jpg" alt="An image" />

The actual source will first be defined when the image is in the users viewport.

If you have additional props you want to pass down to the image, you can use the props property

<LazyImg src="/my.jpg" alt="An image" props={{
   height: '10px',
   width: '10px'
}} />

Optionally, you can also set how much earlier the image should be loaded:

<LazyImg src="/my.jpg" alt="An image" rootMargin="100px" /> 

3. InfiniteScroller

This one is rather complex, but still simplifies it a lot for you. You can use this component to create a infinite scroll. This expects that every item you want to render is based on the same component, and will be rendered differently based on props. It also expects that you have an api which allows you to fetch a page at a time.

To use this component, just initiate it with a data object containing this:

<InfiniteScroller data={{
   async getData (page: number) {
       // Fetch items on a specific page and
       // return props for the component here!
       return [{
           prop1: 'HelloWorld!'
       }]
   },
   async pageCount () {
       // Fetch the page count here
       return 1
   },
   initLayout (element: HTMLDivElement) {
       // You can use this to define your layout
       element.style.display = 'flex'
       element.style.justifyContent = 'center'
   }
   // This should be the item component
   displayComponent: MyComponent
}} />

If you are expecting to deal with a really huge amount of items, you can define a overflow to automatically delete first items when new ones get initialized. NOTE: Your old items will never come back!

<InfiniteScroller data={{
   ...yourOtherStuff,
   // Maximum amount of items
   overflow: 1000,
   // Number of items to delete if overflow was hit
   overflowDelete: 100
}} />