UNPKG

@trailstash/ultra

Version:

A web based tool for making MapLibre GL maps with data from sources such as Overpass, GeoJSON, GPX, KML, TCX, etc

87 lines (73 loc) 2.07 kB
import * as fontAwesome from "@fortawesome/fontawesome-svg-core"; import { faLink, faShareNodes, faQuestion, faDownload, faPlay, faXmark, faRotate, faUpRightAndDownLeftFromCenter, faDownLeftAndUpRightToCenter, faPaintbrush, faPenToSquare, faFileExport, faTriangleExclamation, } from "@fortawesome/free-solid-svg-icons"; import { h } from "../lib/dom.js"; import buttonStyle from "./button.css"; import { style as buttonCSS } from "./button.js"; import { normalizeCSS } from "../lib/normalize.js"; fontAwesome.library.add(faLink); fontAwesome.library.add(faShareNodes); fontAwesome.library.add(faQuestion); fontAwesome.library.add(faDownload); fontAwesome.library.add(faPlay); fontAwesome.library.add(faXmark); fontAwesome.library.add(faRotate); fontAwesome.library.add(faUpRightAndDownLeftFromCenter); fontAwesome.library.add(faDownLeftAndUpRightToCenter); fontAwesome.library.add(faPaintbrush); fontAwesome.library.add(faPenToSquare); fontAwesome.library.add(faFileExport); fontAwesome.library.add(faTriangleExclamation); export const css = new CSSStyleSheet(); css.replaceSync(` :host { display: inline-block; vertical-align: top; } svg { display: inline-block; height: 1em; width: 1em; vertical-align: top; padding: 1px 0; } `); export class FontAwesomeIcon extends HTMLElement { static observedAttributes = ["icon"]; get icon() { return this.getAttribute("icon"); } set icon(value) { this.setAttribute("icon", value); } constructor() { super(); } connectedCallback() { this.shadow = this.attachShadow({ mode: "open" }); this.shadow.adoptedStyleSheets.push(normalizeCSS); this.shadow.adoptedStyleSheets.push(css); const { html } = fontAwesome.icon({ prefix: "fas", iconName: this.icon }); this.shadow.innerHTML = html[0]; } attributeChangedCallback(name, oldVal, newVal) { if (!this.shadow) { return; } const { html } = fontAwesome.icon({ prefix: "fas", iconName: this.icon }); this.shadow.innerHTML = html[0]; } }