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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@salla.sa/twilight-bundles-starter-kit

v0.1.31

Published

Starter kit for building custom Salla components

Readme

Salla Twilight Bundles Starter Kit

This starter kit provides a foundation for building custom Twilight components for Salla's e-commerce platform. It includes a pre-configured build setup and development environment to help you get started quickly.

Getting Started

  1. Clone this repository
  2. Remove the example components in src/components/ using:
    tw-delete-component
  3. Create your own components using the component generator:
    tw-create-component <component-name>
  4. Run pnpm install to install dependencies
  5. Run pnpm run dev to start the development server
  6. Run pnpm run build to build your components for production

Project Structure

src/
  components/
    your-component-name/
      index.ts        # Main component file
      styles.ts       # Component styles (optional)
      types.ts        # Component types (optional)

Built-in Plugins

This starter kit includes three Vite plugins that handle the build process:

1. Transform Plugin (sallaTransformPlugin)

  • Transforms component files to ensure proper naming and registration
  • Matches components in src/components/*/index.ts
  • To disable: Remove from vite.config.ts plugins array

2. Build Plugin (sallaBuildPlugin)

  • Handles component bundling and output
  • Creates individual files for each component in dist/
  • Configures external dependencies (lit libraries)
  • To customize: Remove from plugins array and configure your own build settings:
    {
      build: {
        lib: {
          entry: {/* your entries */},
          formats: ['es'],
          fileName: (format, entryName) => `${entryName}.js`
        },
        rollupOptions: {
          external: [/^lit/],
          output: {/* your output config */}
        }
      }
    }

3. Demo Plugin (sallaDemoPlugin)

  • Provides a development environment for testing components
  • Creates a demo page with your components
  • Configures hot module reloading
  • To disable: Remove from plugins array and set up your own dev server

Demo Plugin Options

The sallaDemoPlugin accepts the following configuration options:

{
  // Optional: Show only specific components
  components?: string[];

  // Optional: Customize the demo grid layout
  grid?: {
    // CSS grid-template-columns value
    columns?: string;     // default: 'repeat(auto-fill, minmax(300px, 1fr))'
    
    // Gap between components
    gap?: string;        // default: '1rem'
    
    // Responsive breakpoint
    minWidth?: string;   // default: '300px'
  };

  // Optional: Add custom CSS
  css?: string;

  // Optional: Add custom JavaScript
  js?: string;
}

Example Configuration

// vite.config.ts
export default defineConfig({
  plugins: [
    // ... other plugins
    sallaDemoPlugin({
      // Show only specific components
      components: ['product-card', 'scroll-top'],
      
      // Customize grid layout
      grid: {
        columns: 'repeat(3, 1fr)',
        gap: '1.5rem',
        minWidth: '768px'
      },

      // Add custom styles
      css: `
        .component-card {
          box-shadow: 0 2px 4px rgba(0,0,0,0.1);
          transition: transform 0.2s;
        }
        .component-card:hover {
          transform: translateY(-2px);
        }
      `,

      // Add custom JavaScript
      js: `
        console.log('Demo page loaded!');
        // Add your custom JavaScript here
      `
    })
  ]
});

Component Management

Creating New Components

This starter kit includes a component generator to help you create new components quickly. To use it, run:

tw-create-component <component-name>

Or run without arguments for interactive mode:

tw-create-component

The generator will:

  1. Prompt you for a component name (in kebab-case format)
  2. Validate that the name is in kebab-case and doesn't already exist
  3. Create a new component folder with an index.ts file
  4. Add the component definition to twilight-bundle.json

Deleting Components

To remove a component, use:

tw-delete-component <component-name>

Or run without arguments to see a list of available components:

tw-delete-component

This will:

  1. Show a list of available components to select from
  2. Ask for confirmation before deletion
  3. Remove the component folder from src/components/
  4. Remove the component definition from twilight-bundle.json

Component Requirements

Each component should:

  1. Be a class that extends LitElement
  2. Export the class as default
  3. Be placed in its own directory under src/components/
  4. Have an index.ts as the entry point

Example:

import { css, html, LitElement } from 'lit';
import { property } from 'lit/decorators.js';

export default class MyComponent extends LitElement {
  @property({ type: Object })
  config?: {
      title: string;
      // ... Add more properties as needed
  };
  

  static styles = css`/* your styles */`;

  render() {
    return html`<div>Hello ${this.config?.title || 'World'}!</div>`;
  }
}

Building for Production

Run pnpm run build to create production-ready bundles in the dist/ directory. Each component will have its own file named after the component (e.g., my-component.js).

Development

Run pnpm run dev to start the development server. This will:

  1. Create a demo page with all your components
  2. Enable hot module reloading
  3. Provide a development environment for testing

License

MIT