UNPKG

@electrovir/icon-element

Version:

reusable element for displaying SVG icons

37 lines (34 loc) 1.21 kB
import { css, defineElement, unsafeHTML } from 'element-vir'; import { virIconColorCssVars } from './icon-color-css-vars'; export const VirIcon = defineElement()({ tagName: 'vir-icon', hostClasses: { /** Ignores the given icon's embedded size and causes the <svg> element to fill its parent. */ 'vir-icon-fit-icon': ({ inputs }) => !!inputs.fitContainer, }, styles: ({ hostClasses }) => css ` :host { display: block; color: ${virIconColorCssVars['vir-icon-color'].value}; fill: ${virIconColorCssVars['vir-icon-fill-color'].value}; stroke: ${virIconColorCssVars['vir-icon-stroke-color'].value}; } svg { /* svg is set to inline by default which causes weird padding under the image. See: https://stackoverflow.com/a/34952703 */ display: block; } ${hostClasses['vir-icon-fit-icon'].name} svg { height: 100%; width: 100%; } `, renderCallback: ({ inputs }) => { if (!inputs.icon) { return ''; } return unsafeHTML(inputs.icon.templateString); }, });