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 } from '../BaseElement'; 17fb726d48Sopenharmony_ciimport '../icon/LitIcon'; 18fb726d48Sopenharmony_ci 19fb726d48Sopenharmony_ciconst initHtmlStyle: string = ` 20fb726d48Sopenharmony_ci <style> 21fb726d48Sopenharmony_ci :host{ 22fb726d48Sopenharmony_ci display: flex; 23fb726d48Sopenharmony_ci padding: 8px 10px; 24fb726d48Sopenharmony_ci transition: all .3s; 25fb726d48Sopenharmony_ci color: var(--dark-color2,#333); 26fb726d48Sopenharmony_ci tab-index: -1; 27fb726d48Sopenharmony_ci align-items: center; 28fb726d48Sopenharmony_ci width: max-content; 29fb726d48Sopenharmony_ci min-width: 100%; 30fb726d48Sopenharmony_ci max-lines: 1; 31fb726d48Sopenharmony_ci white-space: nowrap; 32fb726d48Sopenharmony_ci font-size: 0.8rem; 33fb726d48Sopenharmony_ci } 34fb726d48Sopenharmony_ci :host(:not([disabled])[selected]){ 35fb726d48Sopenharmony_ci background-color: #0A59F7; 36fb726d48Sopenharmony_ci color: #ffffff; 37fb726d48Sopenharmony_ci font-weight: bold; 38fb726d48Sopenharmony_ci } 39fb726d48Sopenharmony_ci :host(:not([disabled]):not([selected]):hover){ 40fb726d48Sopenharmony_ci background-color: var(--dark-background7,#f5f5f5); 41fb726d48Sopenharmony_ci } 42fb726d48Sopenharmony_ci :host([disabled]){ 43fb726d48Sopenharmony_ci cursor: not-allowed; 44fb726d48Sopenharmony_ci color: var(--dark-color,#bfbfbf); 45fb726d48Sopenharmony_ci } 46fb726d48Sopenharmony_ci :host([selected][check]) .check{ 47fb726d48Sopenharmony_ci display: flex; 48fb726d48Sopenharmony_ci } 49fb726d48Sopenharmony_ci :host(:not([selected])) .check{ 50fb726d48Sopenharmony_ci display: none; 51fb726d48Sopenharmony_ci } 52fb726d48Sopenharmony_ci :host(:not([check])) .check{ 53fb726d48Sopenharmony_ci display: none; 54fb726d48Sopenharmony_ci } 55fb726d48Sopenharmony_ci 56fb726d48Sopenharmony_ci :host([disabled]) .selected-box{ 57fb726d48Sopenharmony_ci display: none; 58fb726d48Sopenharmony_ci } 59fb726d48Sopenharmony_ci :host([selected]) .selected{ 60fb726d48Sopenharmony_ci display: flex; 61fb726d48Sopenharmony_ci color: #FFFFFF; 62fb726d48Sopenharmony_ci } 63fb726d48Sopenharmony_ci :host(:not([selected])) .selected{ 64fb726d48Sopenharmony_ci display: none; 65fb726d48Sopenharmony_ci } 66fb726d48Sopenharmony_ci </style> 67fb726d48Sopenharmony_ci `; 68fb726d48Sopenharmony_ci 69fb726d48Sopenharmony_ciexport class LitSelectOption extends BaseElement { 70fb726d48Sopenharmony_ci static get observedAttributes(): string[] { 71fb726d48Sopenharmony_ci return ['selected', 'disabled', 'check']; 72fb726d48Sopenharmony_ci } 73fb726d48Sopenharmony_ci 74fb726d48Sopenharmony_ci initHtml(): string { 75fb726d48Sopenharmony_ci return ` 76fb726d48Sopenharmony_ci ${initHtmlStyle} 77fb726d48Sopenharmony_ci <div class="selected-box"> 78fb726d48Sopenharmony_ci <lit-icon class="selected" name="check" size="20"></lit-icon> 79fb726d48Sopenharmony_ci </div> 80fb726d48Sopenharmony_ci <slot></slot> 81fb726d48Sopenharmony_ci<!-- <lit-icon class="check" name="check"></lit-icon>--> 82fb726d48Sopenharmony_ci `; 83fb726d48Sopenharmony_ci } 84fb726d48Sopenharmony_ci 85fb726d48Sopenharmony_ci initElements(): void {} 86fb726d48Sopenharmony_ci 87fb726d48Sopenharmony_ci //当 custom element首次被插入文档DOM时,被调用。 88fb726d48Sopenharmony_ci connectedCallback(): void { 89fb726d48Sopenharmony_ci if (!this.hasAttribute('disabled')) { 90fb726d48Sopenharmony_ci this.onclick = (ev): void => { 91fb726d48Sopenharmony_ci this.dispatchEvent( 92fb726d48Sopenharmony_ci new CustomEvent('onSelected', { 93fb726d48Sopenharmony_ci detail: { 94fb726d48Sopenharmony_ci selected: true, 95fb726d48Sopenharmony_ci value: this.getAttribute('value'), 96fb726d48Sopenharmony_ci text: this.textContent, 97fb726d48Sopenharmony_ci }, 98fb726d48Sopenharmony_ci }) 99fb726d48Sopenharmony_ci ); 100fb726d48Sopenharmony_ci ev.stopPropagation(); 101fb726d48Sopenharmony_ci }; 102fb726d48Sopenharmony_ci } 103fb726d48Sopenharmony_ci } 104fb726d48Sopenharmony_ci 105fb726d48Sopenharmony_ci //当 custom element从文档DOM中删除时,被调用。 106fb726d48Sopenharmony_ci disconnectedCallback(): void {} 107fb726d48Sopenharmony_ci 108fb726d48Sopenharmony_ci //当 custom element被移动到新的文档时,被调用。 109fb726d48Sopenharmony_ci adoptedCallback(): void {} 110fb726d48Sopenharmony_ci 111fb726d48Sopenharmony_ci //当 custom element增加、删除、修改自身属性时,被调用。 112fb726d48Sopenharmony_ci attributeChangedCallback(name: unknown, oldValue: unknown, newValue: unknown): void {} 113fb726d48Sopenharmony_ci} 114fb726d48Sopenharmony_ci 115fb726d48Sopenharmony_ciif (!customElements.get('lit-select-option')) { 116fb726d48Sopenharmony_ci customElements.define('lit-select-option', LitSelectOption); 117fb726d48Sopenharmony_ci} 118