UNPKG

@nysds/nys-globalfooter

Version:

The Globalfooter component from the NYS Design System.

91 lines (90 loc) 7.33 kB
import { LitElement as h, unsafeCSS as m, html as i } from "lit"; import { property as c, state as b } from "lit/decorators.js"; /*! * █▄ █ █ █ █▀▀▀█ █▀▀▄ █▀▀▀█ * █ █ █ █▄▄▄█ ▀▀▀▄▄ █ █ ▀▀▀▄▄ * █ ▀█ █ █▄▄▄█ █▄▄▀ █▄▄▄█ * * Global Footer Component v1.19.1 * Part of the New York State Design System * Repository: https://github.com/its-hcd/nysds * License: MIT */ const _ = ':host{--_nys-globalfooter-color: var( --nys-color-text, var(--nys-color-neutral-900, #1b1b1b) );--_nys-globalfooter-background-color: var( --nys-color-theme-weaker, var(--nys-color-state-blue-50, #eff6fb) );--_nys-globalfooter-gap: var(--nys-space-300, 24px);--_nys-globalfooter-padding--y: var(--nys-space-400, 32px);--_nys-globalfooter-padding--gutter: var(--nys-gutter-sm, 20px);--_nys-globalfooter-font-size--agency: var( --nys-font-size-agency-xl, var(--nys-font-size-2xl, 22px) );--_nys-globalfooter-font-size--link: var( --nys-font-size-body-md, var(--nys-font-size-md, 16px) );--_nys-globalfooter-line-height--agency: normal;--_nys-globalfooter-font-weight--regular: var(--nys-font-weight-regular, 400);--_nys-globalfooter-font-weight--semibold: var( --nys-font-weight-semibold, 600 );--_nys-globalfooter-max-width: var(--nys-max-content-width, 1280px);--_nys-globalfooter-font-family--agency: var( --nys-font-family-agency, "D Sari", Arial, sans-serif );--_nys-globalfooter-column-gap: var(--nys-space-400, 32px);--_nys-globalfooter-row-gap: var(--nys-space-400, 32px);--_nys-globalfooter-line-height--link: var(--nys-font-lineheight-ui-md, 24px);--_nys-globalfooter-letter-spacing: var( --nys-font-letterspacing-ui-md, var(--nys-font-letterspacing-400, .044px) );--_nys-globalfooter-font-family--link: var( --nys-font-family-ui, var( --nys-font-family-sans, "Proxima Nova", "Helvetica Neue", "Helvetica", "Arial", sans-serif ) );--_nys-globalfooter-text-decoration-thickness: var(--nys-size-2px, 2px);--_nys-globalfooter-background--divider: var(--nys-color-theme, #154973);--_nys-globalfooter-margin--divider: var(--nys-space-50, 4px)}.nys-globalfooter{display:flex;padding:var(--_nys-globalfooter-padding--y) var(--_nys-globalfooter-padding--gutter);justify-content:center;background-color:var(--_nys-globalfooter-background-color);color:var(--_nys-globalfooter-color);width:100%;box-sizing:border-box}.nys-globalfooter__main-container{display:flex;flex-direction:column;gap:var(--_nys-globalfooter-gap);width:100%;max-width:var(--_nys-globalfooter-max-width)}.nys-globalfooter__name{text-align:left;margin:0;color:var(--_nys-globalfooter-color);font-family:var(--_nys-globalfooter-font-family--agency);font-size:var(--_nys-globalfooter-font-size--agency);font-style:normal;font-weight:var(--_nys-globalfooter-font-weight--semibold);line-height:var(--_nys-globalfooter-line-height--agency);letter-spacing:normal}ul{list-style-type:none;padding:0;margin:0}li{margin:0;padding:0}a,span{color:var(--_nys-globalfooter-color);text-decoration:none;font-family:var(--_nys-globalfooter-font-family--link);font-size:var(--_nys-globalfooter-font-size--link);font-style:normal;font-weight:var(--_nys-globalfooter-font-weight--semibold);line-height:var(--_nys-globalfooter-line-height--link);letter-spacing:var(--_nys-globalfooter-letter-spacing)}ul li>span+ul li a{font-weight:var(--_nys-globalfooter-font-weight--regular)}a:hover{text-decoration:underline}a:active{text-decoration-thickness:var(--_nys-globalfooter-text-decoration-thickness)}.nys-globalfooter__content{width:100%}.nys-globalfooter__content ul{display:flex;flex-flow:column wrap;gap:var(--_nys-globalfooter-row-gap) var(--_nys-globalfooter-column-gap)}.nys-globalfooter__content ul li:has(span~ul){flex:1;display:flex;flex-direction:column}.nys-globalfooter__content ul:has(li>span~ul){--_nys-globalfooter-column-gap: var(--nys-space-500, 40px)}.nys-globalfooter__content ul li>span~ul{display:flex;flex-direction:column;gap:var(--nys-space-200, 16px)}.divider{margin-top:var(--_nys-globalfooter-margin--divider);margin-bottom:var(--nys-space-300, 24px)}@media(min-width:768px){.nys-globalfooter__content ul{flex-direction:row}.nys-globalfooter__content ul li:has(span~ul){flex:1 0 205px}:host{--_nys-globalfooter-padding--gutter: var(--nys-gutter-lg, 32px);--_nys-globalfooter-row-gap: var(--nys-space-600, 48px)}}@media(min-width:1280px){:host{--_nys-globalfooter-padding--gutter: var(--nys-gutter-xl, 64px)}}'; var v = Object.defineProperty, g = (y, a, l, n) => { for (var o = void 0, e = y.length - 1, t; e >= 0; e--) (t = y[e]) && (o = t(a, l, o) || o); return o && v(a, l, o), o; }; const f = class f extends h { constructor() { super(...arguments), this.agencyName = "", this.homepageLink = "", this.slotHasContent = !0; } /** * Lifecycle Methods * -------------------------------------------------------------------------- */ firstUpdated() { this.shadowRoot?.querySelector("slot")?.addEventListener("slotchange", () => this._handleSlotChange()), this._handleSlotChange(); } /** * Functions * -------------------------------------------------------------------------- */ // Gets called when the slot content changes and directly appends the slotted elements into the shadow DOM async _handleSlotChange() { const a = this.shadowRoot?.querySelector("slot"); if (!a) return; const l = a?.assignedNodes({ flatten: !0 }).filter((e) => e.nodeType === Node.ELEMENT_NODE); await Promise.resolve(), this.slotHasContent = l.length > 0; const n = this.shadowRoot?.querySelector( ".nys-globalfooter__content" ), o = l?.some( (e) => e.tagName === "H4" ); n && (n.classList.toggle("columns", o), n.classList.toggle("small", !o), n.innerHTML = "", l.forEach((t) => { if (t.nodeType === Node.ELEMENT_NODE) { const r = t.cloneNode(!0); ["script", "iframe", "object", "embed", "img"].forEach((d) => { r.querySelectorAll(d).forEach((p) => p.remove()); }), n.appendChild(r), t.remove(); } }), n.querySelectorAll("span").forEach((t) => { const r = document.createElement("nys-divider"); r.classList.add("divider"), t.insertAdjacentElement("afterend", r); })); } render() { return i` <footer class="nys-globalfooter"> <div class="nys-globalfooter__main-container"> ${this.homepageLink?.trim() ? i`<a href=${this.homepageLink?.trim()}> <h2 class="nys-globalfooter__name">${this.agencyName}</h2> </a>` : i`<h2 class="nys-globalfooter__name">${this.agencyName}</h2>`} ${this.slotHasContent ? i`<div class="nys-globalfooter__content"> <slot style="display: hidden" @slotchange="${this._handleSlotChange}" ></slot> </div>` : ""} </div> </footer> `; } }; f.styles = m(_); let s = f; g([ c({ type: String }) ], s.prototype, "agencyName"); g([ c({ type: String }) ], s.prototype, "homepageLink"); g([ b() ], s.prototype, "slotHasContent"); customElements.get("nys-globalfooter") || customElements.define("nys-globalfooter", s); export { s as NysGlobalFooter }; //# sourceMappingURL=nys-globalfooter.js.map