All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.qui-badge.js Maven / Gradle / Ivy

The newest version!
import { LitElement, html, css} from 'lit';
import '@qomponent/qui-icons';

/**
 * Badge UI Component based on the vaadin theme one
 * see https://vaadin.com/docs/latest/components/badge
 */
export class QuiBadge extends LitElement {
    static styles = css`
        [theme~="badge"] {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            box-sizing: border-box;
            padding: 0.4em calc(0.5em + var(--lumo-border-radius-s, 0.25em) / 4);
            color: var(--lumo-primary-text-color, hsla(211, 63%, 54%, 1.0));
            background-color: var(--lumo-primary-color-10pct, hsla(214, 100%, 60%, 0.13));
            border-radius: var(--lumo-border-radius-s, 0.25em);
            font-family: var(--lumo-font-family, "Open Sans", sans-serif);
            font-size: var(--lumo-font-size-s, 0.875rem);
            line-height: 1;
            font-weight: 500;
            text-transform: initial;
            letter-spacing: initial;
            min-width: calc(var (--lumo-line-height-xs, 1.25) * 1em + 0.45em);
        }
        [theme~="success"] {
            color: var(--lumo-success-text-color, hsla(145, 85%, 25%, 1.0));
            background-color: var(--lumo-success-color-10pct, hsla(145, 72%, 31%, 0.1));
        }
        [theme~="error"] {
            color: var(--lumo-error-text-color, hsla(3, 89%, 42%, 1.0));
            background-color: var(--lumo-error-color-10pct, hsla(3, 85%, 49%, 0.1));
        }
        [theme~="warning"] {
            color: var(--lumo-warning-text-color, hsla(30, 89%, 42%, 1.0));
            background-color: var(--lumo-warning-color-10pct, hsla(30, 100%, 50%, 0.1));
        }
        [theme~="contrast"] {
            color: var(--lumo-contrast-80pct, hsla(214, 41%, 17%, 0.83));
            background-color: var(--lumo-contrast-5pct, hsla(214, 61%, 25%, 0.05));
        }
        [theme~="small"] {
            font-size: var(--lumo-font-size-xxs, 0.75rem);
            line-height: 1;
        }
        [theme~="tiny"] {
            font-size: var(--lumo-font-size-xxs, 0.75rem);
            line-height: 1;
            padding: 0.2em calc(0.2em + var(--lumo-border-radius-s, 0.25em) / 4);
        }
        [theme~="primary"] {
            color: var(--lumo-primary-contrast-color, hsla(0, 100%, 100%, 1.0));
            background-color: var(--lumo-primary-color, hsla(211, 63%, 54%, 1.0));
        }
        [theme~="successprimary"] {
            color: var(--lumo-success-contrast-color, hsla(0, 100%, 100%, 1.0));
            background-color: var(--lumo-success-color, hsla(145, 72%, 30%, 1.0));
        }
        [theme~="warningprimary"] {
            color: var(--lumo-warning-contrast-color, hsla(0, 100%, 100%, 1.0));
            background-color: var(--lumo-warning-color, hsla(30, 100%, 50%, 1.0));
        }
        [theme~="errorprimary"] {
            color: var(--lumo-error-contrast-color, hsla(0, 100%, 100%, 1.0));
            background-color: var(--lumo-error-color, hsla(3, 85%, 48%, 1.0));
        }
        [theme~="contrastprimary"] {
            color: var(--lumo-base-color, hsla(0, 100%, 100%, 1.0));
            background-color: var(--lumo-contrast, hsla(214, 35%, 15%, 1.0));
        }
        [theme~="pill"] {
            --lumo-border-radius-s: 1em;
        }
    `;

    static properties = {
        background: {type: String},
        color: {type: String},
        size: {type: String},
        icon: {type: String},
        level: {type: String},
        small: {type: Boolean},
        tiny: {type: Boolean},
        primary: {type: Boolean},
        pill: {type: Boolean},
        clickable: {type: Boolean},
        _theme: {attribute: false},
        _style: {attribute: false},
    };

    constructor(){
        super();
        this.icon = null;
        this.level = null;
        this.background = null;
        this.color = null;
        this.small = false;
        this.tiny = false;
        this.primary = false;
        this.pill = false;
        this.clickable = false;
        this.size = null;
        this._theme = "badge";
        this._style = "";
    }

    connectedCallback() {
        super.connectedCallback();
        this._resetTheme();
        this._resetStyle();
    }

    _resetTheme() {
        this._theme = "badge";
        if(this.level){
            this._theme = this._theme + " " + this.level;
        }
        if(this.primary){
            if(this.level){
                this._theme = this._theme + "primary";
            }else{
                this._theme = this._theme + " primary";
            }
        }

        if(this.small && !this.tiny){
            this._theme = this._theme + " small";
            this.size = "small";
        }
        if(this.tiny){
            this._theme = this._theme + " tiny";
            this.size = "tiny";
        }
        if(!this.tiny && !this.small && this.size){
            this._theme = this._theme + " " + this.size;
        }

        if(this.pill){
            this._theme = this._theme + " pill";
        }
    }

    _resetStyle() {
        this._style = "";
        if(this.background){
            this._style = this._style + "background: " + this.background + ";";
        }
        if(this.color){
            this._style = this._style + "color: " + this.color + ";";
        }
        if(this.clickable){
            this._style = this._style + "cursor: pointer";
        }
    }

    update(changedProperties) {
        this._resetTheme();
        this._resetStyle();

        // this will invoke re-rendering
        super.update(changedProperties);
    }


    render() {
        return html`
                ${this._renderIcon()}
                
            `;
    }

    _renderIcon(){
        if(this.icon){
            return html``;
        }
    }

}
customElements.define('qui-badge', QuiBadge);




© 2015 - 2024 Weber Informatics LLC | Privacy Policy