1import {css, html, LitElement} from 'lit';
2import {customElement, property} from 'lit/decorators.js';
3
4@customElement('ns-customize-button')
5export class CustomizeButton extends LitElement {
6  @property() disabled: boolean = false;
7
8  @property() eventName: string = '';
9
10  static styles = css`
11    :host {
12      display: var(--lit-button-display, inline-block);
13      box-sizing: inherit;
14    }
15
16    :host(.block) {
17      --lit-button-display: block;
18      --lit-button-width: 100%;
19    }
20
21    .lit-button {
22      background-color: var(--lit-button-bg-color, transparent);
23      border: none;
24      border-radius: 0.25rem;
25      color: var(--lit-button-color, var(--white, #ffffff));
26      cursor: pointer;
27      font-weight: 400;
28      font-size: 1.2rem;
29      height: 2.5rem;
30      line-height: 1.5;
31      min-width: var(--lit-button-min-width, 10rem);
32      outline: 0;
33      padding: 0 var(--lit-button-padding-horizontal, 1rem);
34      position: relative;
35      transition: background-color 0.15s ease-in-out 0s;
36      text-align: center;
37      text-decoration: none;
38      text-transform: none;
39      user-select: none;
40      vertical-align: middle;
41      width: var(--lit-button-width, auto);
42    }
43    .lit-button-icon {
44      --lit-button-min-width: 5rem;
45      --lit-button-padding-horizontal: 0;
46    }
47
48    button[disabled],
49    button[disabled]:hover {
50      opacity: 0.65;
51      pointer-events: none;
52    }
53
54    button:focus::before {
55      content: '';
56      border-radius: 0.25rem;
57      border: 1px solid var(--white, #fff);
58      box-sizing: inherit;
59      display: block;
60      position: absolute;
61      height: calc(100% - 0.8rem);
62      top: 0.4rem;
63      left: 0.4rem;
64      visibility: visible;
65      width: calc(100% - 0.8rem);
66    }
67
68    :host(.primary) {
69      --lit-button-bg-color: var(--primary, #903d57);
70    }
71
72    :host(.primary) button:active,
73    :host(.primary) button:hover {
74      --lit-button-bg-color: var(--primary-active, #0062cc);
75    }
76
77    :host(.icon) {
78      --lit-button-min-width: 5rem;
79      --lit-button-padding-horizontal: 0;
80    }
81  `;
82
83  render() {
84    return html`
85      <button
86        @click="${() => {
87      window.dispatchEvent(new CustomEvent(this.eventName));
88    }}"
89        class="lit-button"
90        ?disabled=${this.disabled}
91      >
92        <slot></slot>
93      </button>
94    `;
95  }
96}
97