@vaadin/icon
Version:
Web component for creating SVG icons
62 lines (55 loc) • 2.12 kB
JavaScript
/**
* @license
* Copyright (c) 2021 - 2025 Vaadin Ltd.
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
*/
import './vaadin-iconset.js';
import { html, LitElement } from 'lit';
import { ifDefined } from 'lit/directives/if-defined.js';
import { defineCustomElement } from '@vaadin/component-base/src/define.js';
import { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';
import { PolylitMixin } from '@vaadin/component-base/src/polylit-mixin.js';
import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
import { IconMixin } from './vaadin-icon-mixin.js';
import { iconStyles } from './vaadin-icon-styles.js';
/**
* LitElement based version of `<vaadin-icon>` web component.
*
* ## Disclaimer
*
* This component is an experiment not intended for publishing to npm.
* There is no ETA regarding specific Vaadin version where it'll land.
* Feel free to try this code in your apps as per Apache 2.0 license.
*/
class Icon extends IconMixin(ElementMixin(ThemableMixin(PolylitMixin(LitElement)))) {
static styles = iconStyles;
/** @protected */
render() {
return html`
<svg
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="${this.__computeViewBox(this.size, this.__viewBox)}"
preserveAspectRatio="${this.__computePAR(this.__defaultPAR, this.__preserveAspectRatio)}"
fill="${ifDefined(this.__fill)}"
stroke="${ifDefined(this.__stroke)}"
stroke-width="${ifDefined(this.__strokeWidth)}"
stroke-linecap="${ifDefined(this.__strokeLinecap)}"
stroke-linejoin="${ifDefined(this.__strokeLinejoin)}"
aria-hidden="true"
>
<g id="svg-group"></g>
<g id="use-group" visibility="${this.__computeVisibility(this.__useRef, this.svg)}">
<use href="${this.__useRef}" />
</g>
</svg>
<slot name="tooltip"></slot>
`;
}
static get is() {
return 'vaadin-icon';
}
}
defineCustomElement(Icon);
export { Icon };