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

sweet-sweet-gallery

v0.1.3

Published

![Screenshot](screenshot.png)

Downloads

18

Readme

Sweet Sweet Gallery

Screenshot

A zero-dependency tiny utility class to create a gallery of images in a grid of rows taking up the full width of the container while respecting the aspect ratio of the images. See example/index.html for more details.

Why is this different from other gallery libraries? The main goal of this is to provide a way for photos to take entire container width while respecting the aspect ratio of the photos and without clipping the photos themselves. Many other libraries exist but usually provide a cut-off photos (sometimes based on object-fit property) while others fix the height or width of all images and leaving spaces at the end of rows/columns.

Adding to project

pnpm install sweet-sweet-gallery

Importing in a project

import { SweetSweetGallery } from 'sweet-sweet-gallery';

Usage 1: Initializing in an empty container with list of images.

const images: SweetSweetImage[] = [{ src: '' }, { src: '' }, ...moreImages];
const container = document.querySelector('.sweet-sweet-gallery');
const gallery = new SweetSweetGallery({
  images,
  container,
  options: {
    perRowCount: 4,
    gap: 8,
    onClick: (image: SweetSweetImage, imageEl: HTMLImageElement, index: number) {
      console.log("clicked", image, imageEl, index);
    }
  }
});
// To destroy the gallery
gallery.onDestroy();

Usage 2: Initializing in a container with images.

const container = document.querySelector('.sweet-sweet-gallery');
const gallery = SweetSweetGallery.initFromContainer(
  container,
  {
    perRowCount: 4,
    gap: 8,
    onClick: (image: SweetSweetImage, imageEl: HTMLImageElement, index: number) {
      console.log("clicked", image, imageEl, index);
    }
  });
// To destroy the gallery
gallery.onDestroy();

Usage 3: Using in a React component

import { useLayoutEffect, useRef } from 'react';
import { SweetSweetGallery, SweetSweetImage } from 'sweet-sweet-gallery';

export const SweetGallery = ({ photos }: { photos: SweetSweetImage[] }) => {
  const ref = useRef < HTMLDivElement > null;

  useLayoutEffect(() => {
    if (!ref.current) return;

    const gallery = new SweetSweetGallery({
      container: ref.current,
      images: photos,
      options: {
        gap: 8,
        perRowCount: 5,
        onClick: (image, imageEl, index) => {
          console.log('clicked', image, imageEl, index);
        },
      },
    });
    return () => gallery.onDestroy();
  }, [photos]);

  return <div ref={ref}></div>;
};

Contributing

To setup and run the project locally run:

pnpm install
pnpm start

This will kick off the typescript compiler and watch the files to rebuild when changes happen.

To preview the example, run the following command from the root of the project:

npx serve .

Then go to http://localhost:3000/example/

While both of these commands are running you can make changes to the source code and preview the changes in the example.

Credits

Images used in screenshot and examples are from Unsplash.com

LICENSE

MIT