@postnord/web-components
Version:
PostNord Web Components
79 lines (75 loc) • 4.22 kB
JavaScript
/*!
* Built with Stencil
* By PostNord.
*/
import { t as transformTag, r as registerInstance, g as getElement, f as forceUpdate, h, a as Host } from './index-XKg-ydzH.js';
import { awaitTopbar, en } from './index.js';
import { a as arrow_left } from './arrow_left-CQaMdITw.js';
const pnHeaderCss = () => `${transformTag("pn-header")}{display:block}${transformTag("pn-header")} h1{color:#2d2013;margin:0}${transformTag("pn-header")} p{color:#5e554a;margin:0}${transformTag("pn-header")} .pn-header-breadcrumbs{width:100%}${transformTag("pn-header")} .pn-header-container{position:relative;width:100%;max-width:var(--max-width);margin:0 auto;padding:clamp(1em, 3vw, 2em) clamp(0.5em, 3vw, 2em);display:flex;flex-wrap:wrap;align-items:center;gap:1.5em}${transformTag("pn-header")} .pn-header-container>${transformTag("pn-text-link")}{display:block}${transformTag("pn-header")} .pn-header-content{flex:1 1 auto;display:flex;flex-direction:column;gap:1em}${transformTag("pn-header")} .pn-header [slot=buttons]{display:flex;flex-direction:column;gap:1em}`;
const translations = {
sv: 'Tillbaka',
en: 'Back',
da: 'Tilbage',
fi: 'Takaisin',
no: 'Tilbake',
};
const PnHeader = class {
constructor(hostRef) {
registerInstance(this, hostRef);
}
mo;
hasBreadcrumb = false;
hasButtons = false;
get hostElement() { return getElement(this); }
/** The `h1` text content. */
heading;
/** Set a inner container max-width, any width CSS value is accepted. */
maxWidth;
setMaxWidth() {
if (!this.maxWidth)
return;
this.hostElement.style.setProperty('--max-width', this.maxWidth);
}
/** The href for the go back link. If this is provided a button be displayed. */
goBackHref;
/** The text for the back link. */
goBackText;
/** Set the language manually, only use this prop if the pnTopbar is not loaded. Supported: sv, en, da, fi and no. */
language = null;
connectedCallback() {
this.mo = new MutationObserver(() => {
forceUpdate(this.hostElement);
this.checkSlots();
});
this.mo.observe(this.hostElement, { subtree: true, childList: true });
}
disconnectedCallback() {
this.mo?.disconnect();
}
async componentWillLoad() {
this.checkSlots();
this.setMaxWidth();
if (this.language === null)
await awaitTopbar(this.hostElement);
}
checkSlots() {
this.hasBreadcrumb = !!this.hostElement.querySelector('[slot="breadcrumb"]');
this.hasButtons = !!this.hostElement.querySelector('[slot="buttons"]');
}
showBreadcrumb() {
return this.hasBreadcrumb || !!this.goBackHref?.length;
}
getButtonText() {
return this.goBackText || translations[this.language || en];
}
render() {
return (h(Host, { key: 'cffcb3a6763d13783bad5d6b75f5402cfd92798b' }, h("header", { key: '7b6d663687fe12546ed88aaea3b97efd82afac69', class: "pn-header" }, h("div", { key: 'aec8dbf448077f14036f0cd4885add8bb650d647', class: "pn-header-container" }, h("div", { key: 'bff188666b4aa2f5df35476eddf17ac4ba5ba182', class: "pn-header-breadcrumbs", hidden: !this.showBreadcrumb() }, this.goBackHref && (h("pn-text-link", { key: '0f2ad8624741de50b2ed1c13cf7cfcae9ad6c223', label: this.getButtonText(), href: this.goBackHref, icon: arrow_left, leftIcon: true })), h("slot", { key: 'ece3524aafbff34f28e0d9cc6eafc587e1daeba5', name: "breadcrumb" })), h("div", { key: '1356eb7d669666b327575a00abdf86bbf9a9e38a', class: "pn-header-content" }, this.heading && h("h1", { key: 'c3e1419dbf20e789c98ea32bb73a3e5e1021f75a' }, this.heading), h("slot", { key: '94491e7af78f2ee44bc45b3a261f2bcc8af81377' })), h("div", { key: 'e2db0dcd84f2fbeb58ab793cd4220861c2320433', class: "pn-header-buttons", hidden: !this.hasButtons }, h("slot", { key: '1745323caaf67eb3f316f4ff56451ffefb6d9b7e', name: "buttons" })), h("slot", { key: '17d56ba2c125c766c05ae84eb82839391447dd74', name: "menu" })))));
}
static get watchers() { return {
"maxWidth": [{
"setMaxWidth": 0
}]
}; }
};
PnHeader.style = pnHeaderCss();
export { PnHeader as pn_header };