/*
* Copyright (C) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export class LitIcon extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' }).innerHTML = this.initHtml();
this.initElements();
}
static get observedAttributes() {
return ['name', 'size', 'color', 'path'];
}
get name() {
return this.getAttribute('name') || '';
}
set name(value) {
this.setAttribute('name', value);
}
get size() {
return parseInt(this.getAttribute('size') || '0', 10);
}
set size(value) {
this.setAttribute('size', `${value}`);
}
set color(value) {
this.setAttribute('color', value);
}
set path(value) {
this._path = value;
this.setAttribute('path', value);
}
initHtml() {
return `
`;
}
initElements() {
if (this.shadowRoot) {
this.icon = this.shadowRoot.getElementById('icon');
this.use = this.shadowRoot.querySelector('use');
this.apPath = this.shadowRoot.querySelector('path');
}
}
attributeChangedCallback(name, oldValue, value) {
switch (name) {
case 'name':
if (this.use) {
this.use.href.baseVal = `./base-ui/icon.svg#icon-${value}`;
}
break;
case 'path':
if (this.apPath) {
this.apPath.setAttribute('apPath', value);
}
break;
case 'color':
if (this.icon) {
this.icon.style.color = value;
}
break;
case 'size':
if (this.icon) {
this.icon.style.fontSize = `${value}px`;
}
break;
}
}
}
if (!customElements.get('lit-icon')) {
customElements.define('lit-icon', LitIcon);
}