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_ciexport function element(tag: string): (el: unknown) => void { 17fb726d48Sopenharmony_ci return (el: unknown): void => { 18fb726d48Sopenharmony_ci if (!customElements.get(tag)) { 19fb726d48Sopenharmony_ci //@ts-ignore 20fb726d48Sopenharmony_ci customElements.define(tag, el); 21fb726d48Sopenharmony_ci } 22fb726d48Sopenharmony_ci }; 23fb726d48Sopenharmony_ci} 24fb726d48Sopenharmony_ci 25fb726d48Sopenharmony_ciexport abstract class BaseElement extends HTMLElement { 26fb726d48Sopenharmony_ci args: unknown; 27fb726d48Sopenharmony_ci 28fb726d48Sopenharmony_ci public constructor(args: unknown | undefined | null = null) { 29fb726d48Sopenharmony_ci super(); 30fb726d48Sopenharmony_ci this.args = args; 31fb726d48Sopenharmony_ci this.attachShadow({ mode: 'open' }).innerHTML = this.initHtml(); 32fb726d48Sopenharmony_ci this.initElements(); 33fb726d48Sopenharmony_ci } 34fb726d48Sopenharmony_ci 35fb726d48Sopenharmony_ci abstract initElements(): void; 36fb726d48Sopenharmony_ci 37fb726d48Sopenharmony_ci abstract initHtml(): string; 38fb726d48Sopenharmony_ci 39fb726d48Sopenharmony_ci public connectedCallback(): void {} 40fb726d48Sopenharmony_ci 41fb726d48Sopenharmony_ci public disconnectedCallback(): void {} 42fb726d48Sopenharmony_ci 43fb726d48Sopenharmony_ci public adoptedCallback(): void {} 44fb726d48Sopenharmony_ci 45fb726d48Sopenharmony_ci attributeChangedCallback(name: string, oldValue: string, newValue: string): void {} 46fb726d48Sopenharmony_ci} 47