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

solid-quill

v0.4.0

Published

The Quill rich-text editor as a Solid component.

Readme

solid-quill

A quilljs wrapper for Solid. This package is pretty new and probably incomplete in some way.

PR & issues are much welcomed to help me fill in the missing pieces

Installation

This package has two peer-dependencies, quill and solid-js

# npm
$ npm install solid-quill solid-js quill

# pnpm
$ pnpm add solid-quill solid-js quill

# yarn
$ yarn add solid-quill solid-js quill

Usage

This package leaves the whole state management to quill internals and therefore doesn't (yet at least) provide a way to do a controlled editor out of the box. The reason behind that decision is that while researching and playing myself with other editor (namely codemirror), I found that trying to get in the way to impose a controlled flow generally results in a Frankenstein of a package.

Initially, I would like to avoid being put in that situation and delegating to quill everything state related. You are provided with the quill instance and can do whatever you'd do with vanilla quill. This is just a wrapper meant to help integration within a solid application.

Example usage

const App: Component = () => {
  let q: Quill;

  onMount(() => {
    console.log(q);
    // log: undefined
    // This is because the `SolidQuill` component also needs to wait for
    // the element to be mounted to the dom bubbling the reference
    // upward to the parent component.
  });

  const init = (quill: Quill) => {
    console.assert(q.getText() === quill.getText());
  };

  return (
    <SolidQuill
      // Bind the `Quill` instance to the parent
      ref={q}
      // Which element to create (default to `div`)
      as="main"
      // Events
      onReady={init}
      onTextChange={console.log}
      onSelectionChange={console.log}
      onEditorChange={console.log}
      // Quill options
      debug={false}
      modules={} // see defaults below
      formats={} // see defaults below
      placeholder=""
      readOnly={false} // for now this is the only reactive props
      theme="snow"
      bounds={}
      scrollingContainer={}
      strict={}
      // All other props will be attached to the rendered
      // dom element, so you can add classes, styles, w/e
      class="quill"
      style="transform: rotate(90deg)"
      classList={{ active: true }}
    />
  );
};

Listen to text change

import Quill from "quill";
import { SolidQuill } from "solid-quill";

function App() {
  let quill: Quill;
  return (
    <SolidQuill ref={quill} onTextChange={() => console.log(quill.getText())} />
  );
}

Default values

const defaultValues: QuillOptionsStatic = {
  theme: "snow",

  formats: [
    "bold",
    "italic",
    "underline",
    "strike",
    "align",
    "list",
    "indent",
    "size",
    "header",
    "link",
    "image",
    "video",
    "color",
    "background",
    "clean",
  ],

  modules: {
    toolbar: [
      ["bold", "italic", "underline", "strike"],
      [{ align: [] }],

      [{ list: "ordered" }, { list: "bullet" }],
      [{ indent: "-1" }, { indent: "+1" }],

      [{ size: ["small", false, "large", "huge"] }],
      [{ header: [1, 2, 3, 4, 5, 6, false] }],
      ["link", "image", "video"],
      [{ color: [] }, { background: [] }],

      ["clean"],
    ],
    clipboard: {
      matchVisual: false,
    },
  },
};

Contribute

  1. Clone the project
  2. pnpm install (you can install it via npm i -g pnpm)
  3. You can use pnpm dev to start a local server and hack your wait around