@miraidesigns/chips

1.0.2 • Public • Published

Chips

Chips are elements that represent small pieces of information like tags or inputs.


HTML

<div class="mdf-chips">
    <div class="mdf-chips__grid" role="grid">   
        <div class="mdf-chips__chip" role="row">
            <span role="gridcell">
                <span class="mdf-chips__text" tabindex="0">Some preview text</span>
            </span>
        </div>

        <div class="mdf-chips__chip" role="row">
            <span role="gridcell">
                <span class="mdf-chips__text" tabindex="0">Some other text</span>
            </span>
        </div>
    </div>
</div>

Sass

// Include default styles without configuration
@forward '@miraidesigns/chips/styles';
// Configure appearance
@use '@miraidesigns/chips' with (
    $variable: value
);

@include chips.styles();

Examples

Some basic examples on how the module can be used.

User Created Chips

Requires the Elements module for the mdf-icon class.
Requires the Helpers module for the mdf-offscreen class.

<div class="mdf-chips mdf-chips--has-input">
    <div class="mdf-chips__grid" role="grid">   
        <div class="mdf-chips__chip" role="row">
            <span role="gridcell">
                <span class="mdf-chips__text" tabindex="0">Preview</span>
            </span>

            <span role="gridcell">
                <button class="mdf-chips__action" aria-label="Remove chip">
                    <svg class="mdf-icon" viewBox="0 0 24 24" aria-hidden="true">
                        <use href="icons.svg#cancel"></use>
                    </svg>
                </button>
            </span>
        </div>
    </div>

    <input class="mdf-chips__input" placeholder="Add new chip">

    <span class="mdf-offscreen" aria-live="polite"></span>
</div>

TypeScript

import { MDFChips } from '@miraidesigns/chips';

const chips = new MDFChips(document.querySelector('.mdf-chips'), {
    iconURL: 'icons.svg#cancel' // Make sure to set this URL correctly
});

// Get the chips container and text input elements.
const chipsContainer = chips.container;
const chipsInput = chips.input;

// Listen to keydown events on the text input.
chipsInput.addEventListener('keydown', (evt: KeyboardEvent) => {
    if (evt.key === 'Enter') {
        // Get the input value when the user hits `ENTER`.
        const input = evt.target as HTMLInputElement;
        const value = input.value;

        // Array of the existing chips values.
        const chipsValues = chips.getValues();

        // Make sure there is no existing chip with the same value.
        if (!chipsValues.includes(value)) {
            // Add the new chip.
            chips.addChip(value);

            // Clear out the text input.
            input.value = '';
        }
    }
});

// Event delegation on the chips container.
chipsContainer.addEventListener('click', (evt: MouseEvent) => {
    // Get the clicked element.
    const _this = evt.target as HTMLElement;

    // Only trigger when we click the `action` button.
    if (_this.matches('.mdf-chips__action')) {
        // Get the chip element it belongs to.
        const chip: HTMLElement = _this.closest('.mdf-chips__chip');

        // Delete the chip.
        chips.deleteChip(chip);
    }
});

Implementation

Attributes

Please see the WAI-ARIA page for attributes and best practices regarding layout grids.

Classes

Name Type Description
mdf-chips Parent Contains the chips elements
mdf-chips--has-input Modifier Apply if an input is present to dynamically create chip elements
mdf-chips--active Modifier Applied when the chips container is in focus
mdf-chips__grid Child Contains the grid elements. Child to .mdf-chips
mdf-chips__chip Parent / Child Chip element. Child to .mdf-chips__grid
mdf-chips__text Child Text element. Child to .mdf-chips__chip
mdf-chips__icon Child Icon element. Child to .mdf-chips__chip
mdf-chips__action Child Button element used to delete a chip. Child to .mdf-chips__chip
mdf-chips__input Child Input element to dynamically create chips. Child to .mdf-chips

Events

Name Data Description
MDFChips:added {text: string} Fires when a new chip gets added. Includes the chip's text value
MDFChips:deleted null Fires when a chip gets removed

Properties

Name Type Description
.chips HTMLCollectionOf<Element> Returns a collection of all chips elements
.container HTMLElement Returns the chips container element
.grid HTMLElement Returns the chips grid
.input HTMLInputElement Returns the chips input element if available
.addChip(text, callback?) (string, () => void) Create a chip with the given text and execute the callback function if provided
.deleteChip(element, callback?) (HTMLElement, () => void) Delete the given chip element and execute the callback function if provided
.getValues() (): string[] Returns an Array of all chips text values

Options

Name Type Default Description
iconURL string null URL to the .svg file used in the <use> href attribute of the close button

Package Sidebar

Install

npm i @miraidesigns/chips

Weekly Downloads

1

Version

1.0.2

License

ISC

Unpacked Size

25.4 kB

Total Files

10

Last publish

Collaborators

  • miraidesigns