logo polydile dile-components

dile-toast

Web Component to send feedback to the user, inspired on the Material Design "toast" component.

Usage

Installation:

npm install @dile/dile-toast

Import the component:

import '@dile/dile-toast/dile-toast';

Use the component:

<dile-toast id="myToast" duration="5000"></dile-toast>

Properties

Methods

let toastElement = document.getElementById('myToast');
toastElement.open('This is a success toast!!', 'success');

Style customization

The background color of the toast depends on the status of the message. You can customize it using the CSS custom properties bellow.

Custom propertyDescriptionDefault
--dile-toast-success-colorSuccess background color#27ae60
--dile-toast-error-colorError background color#e74c3c
--dile-toast-neutral-colorNeutral background color#303030
--dile-toast-text-colorText color#fff
--dile-toast-widthWith of the toast element280px
--dile-toast-paddingPadding for the toasts10px 15px
--dile-toast-z-indexz-index for the toasts1001
--dile-toast-font-weightMessages font weightnormal
--dile-toast-font-sizeMessages font size1em
--dile-toast-border-radiusBorder radius0

dile-toast demos

Default toast

class MyComponent extends LitElement {
  static get styles() {
    return css`
      :host {
        position: relative;
        z-index: 1000;
      }
    `
  }
  render() {
    return html`
      <dile-toast id="myToast" duration="5000"></dile-toast>
      <button id="opensuccess">Show success toast</button>
      <button id="openneutral">Show neutral toast</button>
      <button id="openerror">Show error toast</button>
    `
  }
  firstUpdated() {
    this.shadowRoot.getElementById('opensuccess').addEventListener('click', () => {
      this.shadowRoot.getElementById('myToast').open('I am a success toast', 'success');
    });
    this.shadowRoot.getElementById('openneutral').addEventListener('click', () => {
      this.shadowRoot.getElementById('myToast').open('I am a neutral toast', 'neutral');
    });
    this.shadowRoot.getElementById('openerror').addEventListener('click', () => {
      this.shadowRoot.getElementById('myToast').open('I am a error toast', 'error');
    });
  }
}
customElements.define('my-component', MyComponent);
export const JsStory = () => html`<my-component></my-component>`;

Styled toast

class SecondComponent extends LitElement {
  
  static get styles() {
    return css`
      :host {
        position: relative;
        z-index: 1000;
      }
      dile-toast {
        --dile-toast-success-color: #cfd;
        --dile-toast-neutral-color: #ddd;
        --dile-toast-error-color: #fcd;
        --dile-toast-text-color: #303030;
        --dile-toast-font-weight: bold;
        --dile-toast-font-size: 1.1rem;
        --dile-toast-border-radius: 2rem;
      }
    `
  }

  render() {
    return html`
      <dile-toast id="myToast"></dile-toast>
      <button id="opensuccess">Show success toast</button>
      <button id="openneutral">Show neutral toast</button>
      <button id="openerror">Show error toast</button>
    `
  }
  firstUpdated() {
    this.shadowRoot.getElementById('opensuccess').addEventListener('click', () => {
      this.shadowRoot.getElementById('myToast').open('I am a success toast', 'success');
    });
    this.shadowRoot.getElementById('openneutral').addEventListener('click', () => {
      this.shadowRoot.getElementById('myToast').open('I am a neutral toast', 'neutral');
    });
    this.shadowRoot.getElementById('openerror').addEventListener('click', () => {
      this.shadowRoot.getElementById('myToast').open('I am a error toast', 'error');
    });
  }
}
customElements.define('second-component', SecondComponent);
export const JsStory2 = () => html`<second-component></second-component>`;