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

@htmlbricks/hb-faq-component

v0.76.5

Published

FAQ layout with a horizontal topic strip (Bootstrap Icons + labels) that sets an optional `filter` key, and an accordion list built from JSON `info` entries (`title`, `topic`, HTML `text`). Checkbox hack expands/collapses answers; topics with `catchAll` c

Readme

hb-faq-component

Category: content · Tags: content

Summary

hb-faq-component shows topic chips (Bootstrap Icons + labels) and an accordion FAQ list. Topics can narrow entries by topic key; a chip with catchAll clears the filter. Answer bodies use {@html} — only trusted HTML.

What it does

  1. Parse: In $effect, string info / topics are JSON.parsed into arrays; invalid JSON is logged.
  2. Topics: Renders a flex wrap of light buttons; catchAll sets filter to undefined, else sets filter to the chip key.
  3. List: For each info item (optionally filtered by filter), a checkbox + label accordion row shows title and HTML text.
  4. Icons: Loads Bootstrap Icons CSS in <svelte:head> for bi-{icon} classes.

Custom element

hb-faq-component

Attributes

Attributes are snake_case. From HTML, structured props are JSON strings.

| Attribute | Type (logical) | HTML / notes | | --- | --- | --- | | id | string (optional) | Host id. | | style | string (optional) | In typings; not read in the current script. | | info | string | FaqInfoItem[] | FAQ rows: title, text (HTML), optional topic for filtering. | | topics | string | FaqTopicChip[] | Chips: key, label, icon (Bootstrap icon name without bi-), optional catchAll, optional index (filled when parsing JSON). | | filter | string (optional) | Active topic key; chips update this; catch-all clears it. |

Custom events

NoneEvents is {} in types/webcomponent.type.d.ts.

Styling

CSS custom properties (extra/docs.ts)

| Variable | Role | | --- | --- | | --bulma-column-gap | Gap between topic buttons. | | --bulma-block-spacing | Vertical padding per FAQ row. | | --bulma-border | Divider between accordion items. | | --bulma-text | Expand “+” color. | | --bulma-size-4 | Question label size. | | --bulma-size-5 | Answer body size. |

CSS parts

None.

Slots

None — see extra/docs.ts (htmlSlots).

TypeScript

types/webcomponent.type.d.tsComponent, Events, FaqInfoItem, FaqTopicChip.

Behavior notes

  • Accordion id / for use title with spaces removed — duplicate titles in the same list can collide.
  • Bootstrap Icons font is loaded from jsDelivr in the document head.

Minimal HTML example

<hb-faq-component
  topics='[{"key":"general","label":"General","icon":"question-circle"}]'
  info='[{"topic":"general","title":"What is this?","text":"<p>Short <strong>HTML</strong> answer.</p>"}]'
></hb-faq-component>

Security

Only pass HTML you trust in info[].text, or sanitize before serializing JSON.