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

@myrmidon/cadmus-ui-flag-set

v9.0.4

Published

Cadmus - flags set component.

Readme

CadmusUiFlagSet

📦 @myrmidon/cadmus-ui-flag-set

This project was generated using Angular CLI version 20.0.0.

FlagSetComponent

A set of checkable flags. This component replaces the legacy (V2) Cadmus UI flags picker, which required a much more complex configuration to avoid concurrency issues in handling its settings. If you want to migrate to this new component, just map a thesaurus to flags and bind them via flags, while setting the selected flags IDs via checkedIds; handle checkedIdsChange to update them in your component.

Besides being much easier, this component provides additional features, like custom coloring and "black IDs" for each flag.

  • 🔑 FlagSetComponent
  • 🚩 cadmus-ui-flag-set
  • ▶️ input:
    • flags (Flag[]): the flags set.
    • checkedIds (string[]): the IDs of checked flags.
    • allowCustom (boolean?): allow custom-defined flags.
    • hideToolbar (boolean?): hide toolbar.
    • numbering (boolean?): number flags when displaying their list.
  • 🔥 output:
    • checkedIdsChange (string[])

This component represents a set of checkable flags. The available flags are specified by flags, using this mode (Flag):

  • id (string): the flag ID.
  • label (string): the flag label.
  • custom (boolean?): true if this is a custom flag. This is set by the control when the user adds a custom flag.
  • blackIds (string[]?): an optional set of flag IDs which should be switched off whenever this flag is switched on.
  • color (string?): an optional color for this flag.

Usage:

  1. import FlagSetComponent component in your component's imports.
  2. provide an array of Flag's to the component, and handle the IDs of the checked flags in an array of strings (typically in a form control).

Example (here we use an array of Cadmus thesaurus entries as the input):

import { Flag, FlagSetComponent } from '@myrmidon/cadmus-ui-flag-set';

function entryToFlag(entry: ThesaurusEntry): Flag {
  return {
    id: entry.id,
    label: entry.value,
  };
}

@Component({
  // ...
  imports: [
    // ...
    FlagSetComponent,
  ],
})
export class MyComponent {
  // selected flag IDs in a control
  public features: FormControl<string[]>;

  // a set of thesaurus entries mapped to flags
  public readonly featureEntries = input<ThesaurusEntry[]>();

  // flags mapped from thesaurus entries
  public featureFlags = computed<Flag[]>(
    () => this.featureEntries()?.map((e) => entryToFlag(e)) || []
  );

  constructor(formBuilder: FormBuilder) {
    this.features = formBuilder.control([], { nonNullable: true });
    // ...
  }

  public onFeatureCheckedIdsChange(ids: string[]): void {
    this.features.setValue(ids);
    this.features.markAsDirty();
    this.features.updateValueAndValidity();
  }
}

Template:

@if (featureFlags().length) {
<div>
  <cadmus-ui-flag-set
    [flags]="featureFlags()"
    [checkedIds]="features.value"
    (checkedIdsChange)="onFeatureCheckedIdsChange($event)"
  />
</div>
}

💡 If you want to provide further metadata like color or black IDs, you can either define some convention for IDs, or use component settings.

FlagSetBadge

A set of flags badges, used to provide a compact visualization of a set of selected flags.

  • 🔑 FlagSetBadge
  • 🚩 cadmus-ui-flag-set
  • ▶️ input:
    • flags (Flag[]): the flags set.
    • noInitials (boolean): true to hide flag initials and just show the color.
    • flagSymbol (string): the symbol to use for the flag. Default is a filled circle.
    • size (string): the CSS-like size of the flag symbol. Default is 1em.

History

9.0.2

  • 2025-09-10: set components to OnPush.

9.0.1

  • 2025-06-03:
    • ⚠️ upgraded to Angular 20.
    • fix: do not add custom flags if not allowed.

8.0.1

  • 2024-12-23:
    • fixed selector name (cadmus-ui-flag-set).
    • added numbering option.