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

@trunghoang3012/avada-feature-request

v1.0.29

Published

Feature Request component library for React applications

Readme

Avada Feature Request

npm version npm downloads types included license

React component library that drops a fully featured feature-request board into any React app. It ships with real-time Firestore updates, voting and commenting flows, and a Shopify Polaris-inspired UI so you can launch a feedback hub in minutes instead of building one from scratch.

Avada Feature Request preview

Why use it

  • Drop-in widget with create, vote, comment, and trending views.
  • Real-time updates via Firestore subscriptions.
  • Headless store + hooks for teams that want to compose their own UI.
  • Typed API (TypeScript), CJS/ESM outputs, and bundled styles.
  • Polaris styling baked in, so it feels native to Shopify apps out of the box.

Installation

Install the package and its peer dependencies:

npm install avada-feature-request
# or
yarn add avada-feature-request

Quick start

Render the ready-to-use board with your app ID and shop context.

import "@shopify/polaris/build/esm/styles.css"; // once in your app
import { initializeApp } from "firebase/app";
import FeatureRequest from "avada-feature-request";

const shop = {
  shopId: "your-shop-id",
  email: "[email protected]",
  shopOwner: "Shop Owner",
  domain: "yourshop.myshopify.com",
};

const firebaseApp = initializeApp(
  {
    apiKey: "YOUR_FIREBASE_KEY",
    authDomain: "YOUR_FIREBASE_DOMAIN",
    projectId: "YOUR_FIREBASE_PROJECT_ID",
    appId: "YOUR_FIREBASE_APP_ID",
  },
  "avada-feature-request"
);

export default function FeatureRequestBoard() {
  return (
    <FeatureRequest
      appId="YOUR_APP_ID"
      activeShop={shop}
      firebaseApp={firebaseApp}
      firebaseAppName="avada-feature-request"
    />
  );
}

Styles: Polaris CSS is not bundled to keep the package lean—import it once in your app (see the snippet above). Library-specific styles ship with the bundle automatically.

Using a separate Firebase app

The widget spins up (or reuses) its own named Firebase app so it does not clash with your host project's Firebase instance. Pass your app/config and name if you want to control the project explicitly:

import { initializeApp } from "firebase/app";
import FeatureRequest from "avada-feature-request";

const firebaseApp = initializeApp({
  apiKey: "XXX",
  authDomain: "XXX",
  projectId: "XXX",
  appId: "XXX",
}, "avada-feature-request");

export default function FeatureRequestBoard() {
  return (
    <FeatureRequest
      appId="YOUR_APP_ID"
      activeShop={shop}
      firebaseApp={firebaseApp}
      firebaseAppName="avada-feature-request"
    />
  );
}

Required props

  • appId: string – Identifier used by the backend/Firestore collections.
  • activeShop: Partial<Shop> – At minimum include shopId and email; shopOwner and domain improve context.

The default export already includes library styles and Polaris CSS, so no extra CSS imports are needed.

Composable building blocks

You can assemble your own layout using the provider, components, and store helpers:

import {
  FeatureRequestProvider,
  FeatureReqHome,
  FeatureReqDetails,
  CreateFeatureReq,
  useFeatureRequestStore,
} from "avada-feature-request";

const shop = { shopId: "your-shop-id", email: "[email protected]" };

export function FeatureRequestShell() {
  const { stage, setStage, detailId } = useFeatureRequestStore();

  return (
    <FeatureRequestProvider appId="YOUR_APP_ID" activeShop={shop}>
      {stage === "home" && <FeatureReqHome />}
      {stage === "create" && <CreateFeatureReq isFullPage />}
      {stage === "details" && <FeatureReqDetails featureRequestId={detailId} />}
      {/* Drive navigation */}
      <button onClick={() => setStage("create")}>Request a feature</button>
    </FeatureRequestProvider>
  );
}

Exports at a glance

  • Components: FeatureRequest (default), FeatureReqHome, FeatureReqTrending, FeatureReqDetails, CreateFeatureReq, UserComment, ActionFeatureReq, NoFeatureRequest.
  • Context/store: FeatureRequestProvider, hydrateFeatureRequestStore, useFeatureRequestStore, FeatureRequestStage.
  • Types: FeatureRequestProps, FeatureRequestComment, FeatureRequestQuery, ShopSupport, ActionFeatureReqType, FeatureRequestStage.

Data + backend expectations

  • Firestore: The library boots a named Firebase app (avada-feature-request by default) so it stays isolated from your host app's Firebase project. You must pass firebaseApp or firebaseConfig (and optionally firebaseAppName) to point it to your Firebase project; it no longer falls back to a bundled config.
  • API calls: Non-Firestore operations call BASE_DOMAIN from src/helpers/fetchApi.ts (defaults to http://localhost:25002/proxy). Point this to your backend when deploying.

Development

  • yarn dev – Vite dev server for the demo playground.
  • yarn build – Bundle library and emit type declarations.
  • yarn test – Run Jest tests.
  • yarn lint – Lint the source.

Publishing

Build before publishing to ensure the dist/ artifacts and declaration files are up to date:

yarn build && npm publish

License

MIT © Avada