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

@internetarchive/feature-feedback

v1.1.1

Published

A webcomponent to help collect feedback on features.

Readme

Build Status

Internet Archive Feature Feedback Component

This is a collection of widgets that let us collect feedback on features that we release. Written in LitElement.

Feature Feedback

Installation

> npm i @internetarchive/feature-feedback

Usage

Feature Feedback widget for single-question feedback

import { RecaptchaManager } from '@internetarchive/recaptcha-manager';
import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
import { FeatureFeedbackService } from '@internetarchive/feature-feedback';
import '@internetarchive/feature-feedback';

const recaptchaManager = new RecaptchaManager({
  defaultSiteKey: '',
});
const featureFeedbackService = new FeatureFeedbackService({
  serviceUrl: 'http://local.archive.org:5000',
});
const resizeObserver = new SharedResizeObserver();

html`
  <feature-feedback
    .recaptchaManager=${recaptchaManager}
    .featureFeedbackService=${featureFeedbackService}
    .resizeObserver=${resizeObserver}
    .featureIdentifier=${'demo-feature'}
    .prompt=${'Do you find foos to be better than bars?'}
  ></feature-feedback>`;

Feedback Survey widget for multi-question feedback

  import { RecaptchaManager } from '@internetarchive/recaptcha-manager';
  import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
  import { FeatureFeedbackService } from '@internetarchive/feature-feedback';
  import '@internetarchive/feature-feedback';

  const recaptchaManager = new RecaptchaManager({
    defaultSiteKey: '',
  });
  const featureFeedbackService = new FeatureFeedbackService({
    serviceUrl: 'http://local.archive.org:5000',
  });
  const resizeObserver = new SharedResizeObserver();

  html`
    <ia-feedback-survey
      .recaptchaManager=${recaptchaManager}
      .featureFeedbackService=${featureFeedbackService}
      .resizeObserver=${resizeObserver}
      .surveyIdentifier=${'demo-survey'}
      .buttonText=${'Take the survey'}
      showButtonThumbs
      showQuestionNumbers
    >
      <ia-survey-vote
        prompt="Do you find foos better than bars?"
        showComments
        required
      ></ia-survey-vote>
      <ia-survey-vote
        prompt="Would you recommend foos to a friend?"
      ></ia-survey-vote>
      <ia-survey-comment
        prompt="Anything else to add?"
        placeholder="Add optional comments..."
      ></ia-survey-comment>
      <ia-survey-extra name="Search query" value=${this.query}>
    </ia-feedback-survey>
  `;

Feedback survey question components

Currently this package defines three subcomponents that can be used as survey "questions":

  • <ia-survey-vote>: Seeks an up/down vote, optionally with a freeform text comment too -- like the single-question feature feedback widget. Accepts the following attributes/properties:

    • prompt (string): The question text to display beside the vote buttons. If not provided, no prompt text will be rendered.
    • vote ("up" | "down"): Optionally allows setting the initial up/down vote state of the question if desired.
    • comment (string): Optionally allows setting the comment response for the question if desired.
    • showComments (boolean): If true, shows a freeform textarea beneath the vote buttons.
    • commentPlaceholder (string): The placeholder text to render in the textarea when it is empty (see placeholder for <ia-survey-comment> below).
    • required (boolean): If true, ensures that the survey cannot be submitted unless a vote is entered for this question. A text comment is never required for these questions, even when shown. To require text input, use a separate <ia-survey-comment> question.
    • disabled (boolean): If true, the question will not allow the vote to be changed or the comment to be edited by the user.
    • skipNumber (boolean): If true, this question will not participate in question numbering -- it will neither display a number itself nor increment the number used for the next question.
  • <ia-survey-comment>: Seeks a freeform text comment alone. Accepts the following attributes/properties:

    • prompt (string): The question text to display above the textarea. If not provided, no prompt text will be rendered.
    • value (string): Optionally allows setting the comment response for the question if desired.
    • placeholder (string): The placeholder text to render in the textarea when it is empty. If not provided, a default of either Comments or Comments (optional) will be used, depending on the required state of this component.
    • required (boolean): If true, ensures that the survey cannot be submitted unless a non-empty comment is entered for this question.
    • disabled (boolean): If true, the question will not allow the user to edit the comment.
    • skipNumber (boolean): If true, this question will not participate in question numbering -- it will neither display a number itself nor increment the number used for the next question.
  • <ia-survey-extra>: Does not render a question to the user, but instead defines additional info to be submitted with survey responses for context. Accepts the following attributes/properties:

    • name (string): A name to associate with this extra info field.
    • value (string): The value of this field to be submitted in the survey response.

One may define additional question components that can participate in survey responses, as long as they conform to the IASurveyQuestionInterface.

Other arbitrary elements may also be included presentationally within the survey, to be slotted into the popup alongside any questions. Such elements will generally not have any effect on submitted survey responses unless they conform to the interface noted above.

Styling

Both the <ia-survey-vote> and <ia-survey-comment> components accept optional CSS variables to adjust the height or resizability of their comment textareas:

  • --commentHeight (defaults to 50px)
  • --commentResize (none, horizontal, vertical, or both -- defaults to none). See MDN for more details.

Local Demo with web-dev-server

yarn start

To run a local development server that serves the basic demo located in demo/index.html

Testing with Web Test Runner

To run the suite of Web Test Runner tests, run

yarn run test

To run the tests in watch mode (for <abbr title="test driven development">TDD</abbr>, for example), run

yarn run test:watch

Linting with ESLint, Prettier, and Types

To scan the project for linting errors, run

yarn run lint

You can lint with ESLint and Prettier individually as well

yarn run lint:eslint
yarn run lint:prettier

To automatically fix many linting errors, run

yarn run format

You can format using ESLint and Prettier individually as well

yarn run format:eslint
yarn run format:prettier

Tooling configs

For most of the tools, the configuration is in the package.json to reduce the amount of files in your project.

If you customize the configuration a lot, you can consider moving them to individual files.