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 🙏

© 2024 – Pkg Stats / Ryan Hefner

frontal

v3.0.1

Published

An Angular select/dropdown component

Downloads

55

Readme

Frontal

An Angular select/dropdown accessible component

Build status Styled with prettier npm MIT License Code of Conduct

Installation

Install frontal from npm:

npm install frontal

Usage

Import the FrontalModule:

@NgModule({
  declarations: [
    ...
  ],
  imports: [
    ...
    FrontalModule,
  ],
})
export class AppModule {}

Use the frontal component and directives:

<frontal [itemToString]="heroToString">
  <ng-template let-value="inputValue" let-isOpen="isOpen" let-highlightedIndex="highlightedIndex"
   let-selectedItem="selectedItem">
    <label frontalLabel>Select your hero:</label>
    <input type="text" frontalInput/>

    <ul *ngIf="isOpen" frontalList>
      <li *ngFor="let hero of filteredHeroes(value); let index=index;" frontalItem
       [value]="hero" [class.highlight]="highlightedIndex === index">
        {{ hero.name }}
      </li>
    </ul>

    <div *ngIf="isOpen && filteredHeroes(value).length === 0">
      No heroes found...
    </div>

    <h4>Selected hero:</h4>
    <pre>{{ selectedItem | json }}</pre>
  </ng-template>
</frontal>

API

frontal

The frontal component is the container.

Input

itemToString

Used for converting the selected object to a string.

Optional. Default: (value: any) => value

isOpen

The initial isOpen value,

Optional. Default: false

reducer

For each action frontal will dispatch the current state with the dispatched action and the changes that will apply on the state. Based on this it's possible to modify the changes to fit your own needs. These changes will then be applied to frontal's state. The actions can be found at actions.ts

Optional. Default: ({ state: State; action: Action; changes: Partial<State> }) => Partial<State>

Output

change

Event that is fired whenever the inputValue changes. The payload ($event) will be the inputValue.

select

Event that is fired whenever the selectedItem changes. The payload ($event) will be the selectedItem.

State

id

The unique id of a frontal component.

selectedItem

The selected item.

default: null

highlightedIndex

The highlighted index.

default: null

highlightedItem

The highlighted item.

default: null

inputValue

The input value.

default: ''

inputText

The input text as shown in the input.

default: ''

isOpen

Decides if the menu is open or closed. Based on this frontal decides how to handle some actions or the value of some ARIA attributes. For example is the isOpen is false, the input keydown events wont be handled.

default: false

itemCount

The number of frontalItems in the list.

default: 0

frontalInput

frontalInput can be used as a directive to mark the input control. This will set the ARIA attributes as well as the id.

frontalButton

frontalButton can be used as a directive to mark the toggle control. This will set the ARIA attributes as well as the id.

frontalLabel

frontalLabel can be used as a directive to mark the label. This will set the for attribute as well as the id.

frontalList

frontalList can be used as a directive to mark the list. This will set the ARIA attributes as well as the id.

frontalItem

frontalItem can be used as a directive to mark a list item. This will set the ARIA attributes as well as the id.

Input

value

The value of the list item.

Required. Any.

Example

A couple of implementations can be found on StackBlitz.

Inspiration

By taking in all this information, I wondered how this would look like in Angular.

LICENSE

MIT