1fb726d48Sopenharmony_ci/* 2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb726d48Sopenharmony_ci * You may obtain a copy of the License at 6fb726d48Sopenharmony_ci * 7fb726d48Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb726d48Sopenharmony_ci * 9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and 13fb726d48Sopenharmony_ci * limitations under the License. 14fb726d48Sopenharmony_ci */ 15fb726d48Sopenharmony_ci 16fb726d48Sopenharmony_ciimport { BaseElement, element } from '../BaseElement'; 17fb726d48Sopenharmony_ci 18fb726d48Sopenharmony_ci@element('lit-button') 19fb726d48Sopenharmony_ciexport class LitButton extends BaseElement { 20fb726d48Sopenharmony_ci private slotHtml: HTMLElement | undefined; 21fb726d48Sopenharmony_ci private button: HTMLButtonElement | null | undefined; 22fb726d48Sopenharmony_ci private litIcon: LitButton | null | undefined; 23fb726d48Sopenharmony_ci 24fb726d48Sopenharmony_ci static get observedAttributes(): string[] { 25fb726d48Sopenharmony_ci return [ 26fb726d48Sopenharmony_ci 'text', 27fb726d48Sopenharmony_ci 'back', 28fb726d48Sopenharmony_ci 'icon', 29fb726d48Sopenharmony_ci 'height', 30fb726d48Sopenharmony_ci 'width', 31fb726d48Sopenharmony_ci 'color', 32fb726d48Sopenharmony_ci 'font_size', 33fb726d48Sopenharmony_ci 'border', 34fb726d48Sopenharmony_ci 'padding', 35fb726d48Sopenharmony_ci 'justify_content', 36fb726d48Sopenharmony_ci 'border_radius', 37fb726d48Sopenharmony_ci 'margin_icon', 38fb726d48Sopenharmony_ci 'opacity', 39fb726d48Sopenharmony_ci ]; 40fb726d48Sopenharmony_ci } 41fb726d48Sopenharmony_ci 42fb726d48Sopenharmony_ci get text(): string { 43fb726d48Sopenharmony_ci return this.getAttribute('text') || ''; 44fb726d48Sopenharmony_ci } 45fb726d48Sopenharmony_ci 46fb726d48Sopenharmony_ci set text(text: string) { 47fb726d48Sopenharmony_ci this.setAttribute('text', text); 48fb726d48Sopenharmony_ci } 49fb726d48Sopenharmony_ci 50fb726d48Sopenharmony_ci get back(): string { 51fb726d48Sopenharmony_ci return this.getAttribute('back') || ''; 52fb726d48Sopenharmony_ci } 53fb726d48Sopenharmony_ci 54fb726d48Sopenharmony_ci set back(backColor: string) { 55fb726d48Sopenharmony_ci this.button!.style.backgroundColor = backColor; 56fb726d48Sopenharmony_ci this.setAttribute('back', backColor); 57fb726d48Sopenharmony_ci } 58fb726d48Sopenharmony_ci 59fb726d48Sopenharmony_ci get icon(): string { 60fb726d48Sopenharmony_ci return this.getAttribute('icon') || ''; 61fb726d48Sopenharmony_ci } 62fb726d48Sopenharmony_ci 63fb726d48Sopenharmony_ci set icon(icon: string) { 64fb726d48Sopenharmony_ci this.litIcon?.setAttribute('name', icon); 65fb726d48Sopenharmony_ci this.setAttribute('icon', icon); 66fb726d48Sopenharmony_ci if (icon) { 67fb726d48Sopenharmony_ci this.litIcon!.style.display = 'block'; 68fb726d48Sopenharmony_ci } 69fb726d48Sopenharmony_ci } 70fb726d48Sopenharmony_ci 71fb726d48Sopenharmony_ci get height(): string { 72fb726d48Sopenharmony_ci return this.getAttribute('height') || ''; 73fb726d48Sopenharmony_ci } 74fb726d48Sopenharmony_ci 75fb726d48Sopenharmony_ci set height(height: string) { 76fb726d48Sopenharmony_ci this.setAttribute('height', height); 77fb726d48Sopenharmony_ci } 78fb726d48Sopenharmony_ci 79fb726d48Sopenharmony_ci get width(): string { 80fb726d48Sopenharmony_ci return this.getAttribute('width') || ''; 81fb726d48Sopenharmony_ci } 82fb726d48Sopenharmony_ci 83fb726d48Sopenharmony_ci set width(width: string) { 84fb726d48Sopenharmony_ci this.setAttribute('width', width); 85fb726d48Sopenharmony_ci } 86fb726d48Sopenharmony_ci 87fb726d48Sopenharmony_ci set color(color: string) { 88fb726d48Sopenharmony_ci this.setAttribute('color', color); 89fb726d48Sopenharmony_ci } 90fb726d48Sopenharmony_ci 91fb726d48Sopenharmony_ci set font_size(fontSize: string) { 92fb726d48Sopenharmony_ci this.setAttribute('font_size', fontSize); 93fb726d48Sopenharmony_ci } 94fb726d48Sopenharmony_ci 95fb726d48Sopenharmony_ci set border(border: string) { 96fb726d48Sopenharmony_ci this.setAttribute('border', border); 97fb726d48Sopenharmony_ci } 98fb726d48Sopenharmony_ci 99fb726d48Sopenharmony_ci set padding(padding: string) { 100fb726d48Sopenharmony_ci this.setAttribute('padding', padding); 101fb726d48Sopenharmony_ci } 102fb726d48Sopenharmony_ci 103fb726d48Sopenharmony_ci set justify_content(justifyContent: string) { 104fb726d48Sopenharmony_ci this.setAttribute('justify_content', justifyContent); 105fb726d48Sopenharmony_ci } 106fb726d48Sopenharmony_ci 107fb726d48Sopenharmony_ci set border_radius(borderRadius: string) { 108fb726d48Sopenharmony_ci this.setAttribute('border_radius', borderRadius); 109fb726d48Sopenharmony_ci } 110fb726d48Sopenharmony_ci 111fb726d48Sopenharmony_ci set margin_icon(value: string) { 112fb726d48Sopenharmony_ci this.litIcon?.setAttribute('margin_icon', value); 113fb726d48Sopenharmony_ci } 114fb726d48Sopenharmony_ci 115fb726d48Sopenharmony_ci set opacity(value: string) { 116fb726d48Sopenharmony_ci this.litIcon?.setAttribute('opacity', value); 117fb726d48Sopenharmony_ci } 118fb726d48Sopenharmony_ci 119fb726d48Sopenharmony_ci set hidden(hidden: boolean) { 120fb726d48Sopenharmony_ci if (hidden) { 121fb726d48Sopenharmony_ci this.setAttribute('hidden', 'true'); 122fb726d48Sopenharmony_ci this.style.display = 'none'; 123fb726d48Sopenharmony_ci } else { 124fb726d48Sopenharmony_ci this.removeAttribute('hidden'); 125fb726d48Sopenharmony_ci this.style.display = 'block'; 126fb726d48Sopenharmony_ci } 127fb726d48Sopenharmony_ci } 128fb726d48Sopenharmony_ci 129fb726d48Sopenharmony_ci initHtml(): string { 130fb726d48Sopenharmony_ci return ` 131fb726d48Sopenharmony_ci ${this.initHtmlStyle()} 132fb726d48Sopenharmony_ci <div id='custom-div'> 133fb726d48Sopenharmony_ci <button id="custom-button" type="button"> 134fb726d48Sopenharmony_ci <slot id="sl" tyle= "padding: 10px"></slot> 135fb726d48Sopenharmony_ci <lit-icon id="button-icon" name="" size="18" style= "margin-left: 10px" color="var(--dark-color1,#4D4D4D)"></lit-icon> 136fb726d48Sopenharmony_ci </button> 137fb726d48Sopenharmony_ci </div> 138fb726d48Sopenharmony_ci `; 139fb726d48Sopenharmony_ci } 140fb726d48Sopenharmony_ci 141fb726d48Sopenharmony_ci private initHtmlStyle(): string { 142fb726d48Sopenharmony_ci return ` 143fb726d48Sopenharmony_ci <style> 144fb726d48Sopenharmony_ci :host{ 145fb726d48Sopenharmony_ci display: block; 146fb726d48Sopenharmony_ci width: 100%; 147fb726d48Sopenharmony_ci height: 100%; 148fb726d48Sopenharmony_ci position: relative; 149fb726d48Sopenharmony_ci background: background: var(--dark-background3,#FFFFFF); 150fb726d48Sopenharmony_ci } 151fb726d48Sopenharmony_ci 152fb726d48Sopenharmony_ci #custom-button{ 153fb726d48Sopenharmony_ci display: flex; 154fb726d48Sopenharmony_ci flex-direction: row; 155fb726d48Sopenharmony_ci align-items: center; 156fb726d48Sopenharmony_ci align-content: center; 157fb726d48Sopenharmony_ci justify-content: right; 158fb726d48Sopenharmony_ci cursor: pointer; 159fb726d48Sopenharmony_ci color: var(--dark-background3,#FFFFFF); 160fb726d48Sopenharmony_ci background: var(--dark-background3,#FFFFFF); 161fb726d48Sopenharmony_ci border: 2px solid #409eff; 162fb726d48Sopenharmony_ci border-radius: 20px; 163fb726d48Sopenharmony_ci padding: 15px; 164fb726d48Sopenharmony_ci transition: opacity 0.2s; 165fb726d48Sopenharmony_ci outline: none; 166fb726d48Sopenharmony_ci position: relative; 167fb726d48Sopenharmony_ci } 168fb726d48Sopenharmony_ci #custom-button::before { 169fb726d48Sopenharmony_ci position: absolute; 170fb726d48Sopenharmony_ci top: 50%; 171fb726d48Sopenharmony_ci left: 50%; 172fb726d48Sopenharmony_ci width: 100%; 173fb726d48Sopenharmony_ci height: 100%; 174fb726d48Sopenharmony_ci background-color: #000; 175fb726d48Sopenharmony_ci border: inherit; 176fb726d48Sopenharmony_ci border-color: #000; 177fb726d48Sopenharmony_ci border-radius: inherit; 178fb726d48Sopenharmony_ci transform: translate(-50%, -50%); 179fb726d48Sopenharmony_ci opacity: 0; 180fb726d48Sopenharmony_ci content: ' '; 181fb726d48Sopenharmony_ci } 182fb726d48Sopenharmony_ci #custom-button:active::before { 183fb726d48Sopenharmony_ci opacity: 0.1; 184fb726d48Sopenharmony_ci } 185fb726d48Sopenharmony_ci </style> 186fb726d48Sopenharmony_ci `; 187fb726d48Sopenharmony_ci } 188fb726d48Sopenharmony_ci 189fb726d48Sopenharmony_ci initElements(): void { 190fb726d48Sopenharmony_ci this.slotHtml = this.shadowRoot?.querySelector('#sl') as HTMLElement; 191fb726d48Sopenharmony_ci this.button = this.shadowRoot?.querySelector('#custom-button'); 192fb726d48Sopenharmony_ci this.litIcon = this.shadowRoot?.querySelector('#button-icon') as LitButton; 193fb726d48Sopenharmony_ci if (this.litIcon.getAttribute('name') === '') { 194fb726d48Sopenharmony_ci this.litIcon!.style.display = 'none'; 195fb726d48Sopenharmony_ci } 196fb726d48Sopenharmony_ci } 197fb726d48Sopenharmony_ci 198fb726d48Sopenharmony_ci attributeChangedCallback(name: string, oldValue: string, value: string): void { 199fb726d48Sopenharmony_ci switch (name) { 200fb726d48Sopenharmony_ci case 'text': 201fb726d48Sopenharmony_ci this.slotHtml!.innerText = value; 202fb726d48Sopenharmony_ci break; 203fb726d48Sopenharmony_ci case 'back': 204fb726d48Sopenharmony_ci this.button!.style.backgroundColor = value; 205fb726d48Sopenharmony_ci break; 206fb726d48Sopenharmony_ci case 'icon': 207fb726d48Sopenharmony_ci this.litIcon?.setAttribute('name', value); 208fb726d48Sopenharmony_ci if (value) { 209fb726d48Sopenharmony_ci this.litIcon!.style.display = 'block'; 210fb726d48Sopenharmony_ci } 211fb726d48Sopenharmony_ci break; 212fb726d48Sopenharmony_ci case 'height': 213fb726d48Sopenharmony_ci this.button!.style.height = value; 214fb726d48Sopenharmony_ci break; 215fb726d48Sopenharmony_ci case 'color': 216fb726d48Sopenharmony_ci this.button!.style.color = value; 217fb726d48Sopenharmony_ci break; 218fb726d48Sopenharmony_ci case 'font_size': 219fb726d48Sopenharmony_ci this.button!.style.fontSize = value; 220fb726d48Sopenharmony_ci break; 221fb726d48Sopenharmony_ci case 'border': 222fb726d48Sopenharmony_ci this.button!.style.border = value; 223fb726d48Sopenharmony_ci break; 224fb726d48Sopenharmony_ci case 'padding': 225fb726d48Sopenharmony_ci this.button!.style.padding = value; 226fb726d48Sopenharmony_ci break; 227fb726d48Sopenharmony_ci case 'justify_content': 228fb726d48Sopenharmony_ci this.button!.style.justifyContent = value; 229fb726d48Sopenharmony_ci break; 230fb726d48Sopenharmony_ci case 'border_radius': 231fb726d48Sopenharmony_ci this.button!.style.borderRadius = value; 232fb726d48Sopenharmony_ci break; 233fb726d48Sopenharmony_ci case 'margin_icon': 234fb726d48Sopenharmony_ci this.litIcon!.style.margin = value; 235fb726d48Sopenharmony_ci break; 236fb726d48Sopenharmony_ci case 'opacity': 237fb726d48Sopenharmony_ci this.button!.style.opacity = value; 238fb726d48Sopenharmony_ci break; 239fb726d48Sopenharmony_ci } 240fb726d48Sopenharmony_ci } 241fb726d48Sopenharmony_ci} 242