UNPKG

@postnord/web-components

Version:
6 lines 12.7 kB
/*! * Built with Stencil * By PostNord. */ import{r as n,c as e,g as t,f as a,h as i,a as s}from"./p-C247oTEA.js";import{uuidv4 as o}from"./index.esm.js";import{a as r}from"./p-CQaMdITw.js";import{a as p}from"./p-D_UyW-KH.js";import{c as d}from"./p-DrYFvs2M.js";const h="pn-page-nav{display:block;position:relative;font-size:clamp(0.8em, 2vw, 1em);z-index:5}.pn-page-nav-wrapper{transform:translateZ(0);font-size:inherit;max-width:100%;overflow:hidden;position:relative;display:inline-flex;border-radius:3em}.pn-page-nav{display:flex;align-items:center;border-radius:3em;min-height:3em;background:#0d234b;border:0.0625em solid #d3cecb;position:relative;overflow-x:auto;scroll-snap-type:x mandatory}.pn-page-nav::-webkit-scrollbar{display:none}.pn-page-nav ul.pn-page-nav-items{display:flex;list-style-type:none;padding:0.25em;margin:0;position:relative}.pn-page-nav-items>.pn-pn-bg{position:absolute;top:50%;transform:translateY(-50%);will-change:transform;left:0;border-radius:3em;transition:width 0.25s cubic-bezier(0.29, 0.15, 0.24, 0.97), transform 0.25s cubic-bezier(0.29, 0.15, 0.24, 0.97), background 0.15s, opacity 0.15s, box-shadow 0.15s}.pn-page-nav-items>.pn-pn-bg.pn-pn-active{box-shadow:0px 0.3px 0.9px rgba(0, 0, 0, 0.1), 0px 1.6px 3.6px rgba(0, 0, 0, 0.13);background:#005d92;z-index:1}.pn-page-nav-items>.pn-pn-bg.pn-pn-hover{background:#ffffff;opacity:0;border:0.0625em solid transparent;z-index:0}.pn-page-nav-items>.pn-pn-bg.hidden{opacity:0}@media (hover: hover){ul.pn-page-nav-items:focus-within .pn-pn-hover,ul.pn-page-nav-items:hover .pn-pn-hover{opacity:0.12}}pn-page-nav .pn-pn-arrows{position:absolute;top:50%;transform:translateY(-50%);left:0;height:100%;width:100%;z-index:3;display:flex;justify-content:space-between;align-items:center;pointer-events:none;padding:0.125em 0.1em}pn-page-nav .pn-pn-arrows svg{width:1.5em}pn-page-nav .pn-pn-arrows svg.pn-icon-svg path{fill:#005d92}pn-page-nav .pn-pn-arrows>*{transition:transform 0.2s, opacity 0.2s, background 0.1s, box-shadow 0.1s;pointer-events:all;height:100%;aspect-ratio:1;background:#ffffff;display:flex;align-items:center;justify-content:center;outline:none;cursor:pointer;opacity:0;will-change:transform;-webkit-tap-highlight-color:transparent;border-radius:50%;border:0.0625em solid #0d234b}pn-page-nav .pn-pn-arrows>*.pn-pn-arrow-left{transform:translateX(-100%)}pn-page-nav .pn-pn-arrows>*.pn-pn-arrow-right{transform:translateX(100%)}@media screen and (max-width: 30em){pn-page-nav .pn-pn-arrows>*{border:none}pn-page-nav .pn-pn-arrows>* pn-icon .pn-icon-svg{width:100%;height:2em;animation:arrow 0.6s ease-in-out alternate infinite}pn-page-nav .pn-pn-arrows>* pn-icon .pn-icon-svg path{fill:#ffffff}pn-page-nav .pn-pn-arrows>*.pn-pn-arrow-left{background:linear-gradient(to left, transparent, #0d234b 60%);border-radius:50% 0 0 50%}pn-page-nav .pn-pn-arrows>*.pn-pn-arrow-right{background:linear-gradient(to right, transparent, #0d234b 40%);border-radius:0 50% 50% 0}}pn-page-nav .pn-pn-arrows.pn-pn-left-visible .pn-pn-arrow-left,pn-page-nav .pn-pn-arrows.pn-pn-right-visible .pn-pn-arrow-right{opacity:1;transform:translateX(0)}@keyframes arrow{to{transform:translateX(10%)}}button.pn-page-nav-dropdown-button{font-size:1em;border-radius:3em 0 0 3em;background:#0d234b;color:#ffffff;padding:0.5em 1em 0.5em 1.5em;cursor:pointer;display:flex;align-items:center;border:none;transition:background 0.15s;outline:none;height:100%;position:relative;margin:0 0.5em 0 0;font-weight:500}button.pn-page-nav-dropdown-button pn-icon{margin-left:0.5em}button.pn-page-nav-dropdown-button:hover,button.pn-page-nav-dropdown-button:focus{background:#263655}button.pn-page-nav-dropdown-button:focus{box-shadow:inset 0 0 0 0.1em #005d92, inset 0 0 0 0.2em #d3cecb}button.pn-page-nav-dropdown-button.pn-page-nav-dropdown-active{background:#005d92}button.pn-page-nav-dropdown-button.pn-page-nav-dropdown-active:hover,button.pn-page-nav-dropdown-button.pn-page-nav-dropdown-active:focus{background:#005d92}.pn-page-nav-divider{height:60%;background:#d3cecb;width:0.1em;position:absolute;right:0;transform:translateX(50%)}ul.pn-page-nav-dropdown{position:absolute;left:0;top:110%;background:#0d234b;border-radius:0.5em;margin:0;padding:0;list-style-type:none;box-shadow:0px 6.4000000954px 14.3999996185px 0px rgba(0, 0, 0, 0.1294117647), 0px 1.2000000477px 3.5999999046px 0px rgba(0, 0, 0, 0.1019607843);font-size:inherit;display:none}ul.pn-page-nav-dropdown.pn-page-nav-dropdown-open{display:block}";const c=class{constructor(t){n(this,t);this.navchange=e(this,"navchange")}mo;navContainer;navWrapper;navItems=[];dropdownButton;dropdownEl;dropdownItems;dropdownEls;eventHandler=this.keyboardEvents.bind(this);globalEventHandler=this.globalEvents.bind(this);activeBg;hoverBg;scrollRegistered=false;get hostElement(){return t(this)}currentSelection;showScrollArrows=false;showLeftArrow=false;showRightArrow=false;dropdownOpen=false;dropdownLinks=[];dropdownActive=false;value;dropdown=false;navid=`pn-page-nav-${o()}`;navchange;changeHandler({target:n}){this.currentSelection=n.closest("pn-page-nav-item");if(n.value)this.value=n.value;if(this.dropdownOpen)this.dropdownOpen=false}handleResize(){this.rerender()}valueHandler(){if(!this.value)this.currentSelection=null;this.calcHighlight(this.currentSelection,this.activeBg);this.navchange.emit(this.value);if(!this.dropdownActive)return;this.isDropdownItemActive()}dropdownHandler(){if(this.dropdownOpen){requestAnimationFrame((()=>{this.addGlobalEventListeners()}));return}this.removeGlobalEventListeners()}componentWillLoad(){if(!this.dropdown)return;this.dropdownEls=Array.from(this.hostElement.querySelectorAll("pn-page-nav-dropdown-item"));if(this.dropdownEls.length){this.dropdownActive=true;this.initiateDropdown()}}componentDidLoad(){if(this.mo)this.mo.disconnect();this.mo=new MutationObserver((()=>{a(this.hostElement);this.setActiveNavItem();this.rerender()}));this.mo.observe(this.hostElement,{childList:true,subtree:true});this.navWrapper=this.hostElement.querySelector(".pn-page-nav");this.navContainer=this.hostElement.querySelector(".pn-page-nav-items");this.activeBg=this.hostElement.querySelector(".pn-pn-active");this.hoverBg=this.hostElement.querySelector(".pn-pn-hover");this.hostElement.addEventListener("mouseover",(({target:n})=>this.calcHighlight(n,this.hoverBg)));this.setActiveNavItem();this.rerender()}setActiveNavItem(){this.navItems=Array.from(this.hostElement.querySelectorAll("pn-page-nav-item"));this.navItems.forEach((n=>{if(this.value===n.value){this.currentSelection=n}else{n.removeAttribute("selected")}n.querySelector("a").addEventListener("focus",(({target:n})=>this.calcHighlight(n,this.hoverBg)))}));if(!this.dropdownActive)return;this.dropdownItems=Array.from(this.hostElement.querySelectorAll(".pn-page-nav-dropdown-item"));this.isDropdownItemActive();this.dropdownLinks=this.dropdownItems.map(((n,e)=>{n.setAttribute("data-index",`${e}`);return n.closest("pn-page-nav-dropdown-item").value}))}rerender(){requestAnimationFrame((()=>{this.calcHighlight(this.currentSelection,this.activeBg);this.scrollArrowRender()}))}calcHighlight(n,e){if(!n?.closest("pn-page-nav-item")){e?.classList.add("hidden");return}if(e)e.classList.remove("hidden");const t=n.closest("pn-page-nav-item").getBoundingClientRect();const{left:a}=this.navContainer.getBoundingClientRect();const{left:i,height:s,width:o}=t;const r=i-a+this.navContainer.scrollLeft;e.style.setProperty("transform",`translate(${r}px, -50%`);e.style.setProperty("width",`${o}px`);e.style.setProperty("height",`${s}px`)}scrollArrowRender(){if(!this.navWrapper)return;if(this.navWrapper.scrollWidth>this.navWrapper.clientWidth){this.showScrollArrows=true;if(!this.scrollRegistered){this.navWrapper.addEventListener("scroll",this.scrollArrowRender.bind(this));this.scrollRegistered=true}const n=Math.round(this.navWrapper.scrollWidth-this.navWrapper.scrollLeft);const e=n-this.navWrapper.clientWidth;const t=this.navWrapper.scrollLeft;this.showLeftArrow=t>0;this.showRightArrow=e>0;return}this.showLeftArrow=false;this.showRightArrow=false;this.showScrollArrows=false}scroll(n){let e=this.navWrapper.scrollLeft+n;this.navWrapper.scroll({left:e,behavior:"smooth"})}scrollArrowClasses(){let n="pn-pn-arrows ";if(this.showLeftArrow)n+="pn-pn-left-visible ";if(this.showRightArrow)n+="pn-pn-right-visible ";return n}initiateDropdown(){requestAnimationFrame((()=>{this.dropdownButton=this.hostElement.querySelector(".pn-page-nav-dropdown-button");this.dropdownEl=this.hostElement.querySelector(".pn-page-nav-dropdown");this.addDropdownEventListeners()}))}toggleDropdown(){this.dropdownOpen=!this.dropdownOpen}isDropdownItemActive(){this.dropdownEls.forEach((n=>{if(n.value&&this.value===n.value){n.setAttribute("active","true");return}n.removeAttribute("active")}))}addDropdownEventListeners(){this.hostElement.addEventListener("keydown",this.eventHandler);this.hostElement.addEventListener("click",this.eventHandler)}addGlobalEventListeners(){const n=this.hostElement.getRootNode();n.addEventListener("focusin",this.globalEventHandler);n.addEventListener("keydown",this.globalEventHandler);n.addEventListener("click",this.globalEventHandler)}removeGlobalEventListeners(){const n=this.hostElement.getRootNode();n.removeEventListener("focusin",this.globalEventHandler);n.removeEventListener("keydown",this.globalEventHandler);n.removeEventListener("click",this.globalEventHandler)}keyboardEvents(n){const e=n.composedPath()[0];if(n.type==="keydown"){if(!this.dropdownOpen&&e===this.dropdownButton&&["ArrowUp","ArrowDown"].includes(n.code)){this.dropdownOpen=true;requestAnimationFrame((()=>{this.focusNextDropdownItem()}))}}}globalEvents(n){const e=n.composedPath()[0];if(n.type==="keydown"&&n.code==="Escape"){this.dropdownOpen=false;this.dropdownButton.focus()}if(n.code==="ArrowDown")this.focusNextDropdownItem();if(n.code==="ArrowUp")this.focusPrevDropdownItem();if((n.type==="click"||n.type==="focusin")&&!this.dropdownEl.contains(e)){this.dropdownOpen=false}}focusNextDropdownItem(){const{activeElement:n}=this.hostElement.getRootNode();if(!n.classList.contains("pn-page-nav-dropdown-item")){this.dropdownItems[0].focus();return}const e=parseInt(n.getAttribute("data-index"));if(e<this.dropdownItems.length-1){this.dropdownItems[e+1].focus()}}focusPrevDropdownItem(){const{activeElement:n}=this.hostElement.getRootNode();if(!n.classList.contains("dropdown-item")){this.dropdownItems[this.dropdownItems.length-1].focus()}const e=parseInt(n.getAttribute("data-index"));if(e>0){this.dropdownItems[e-1].focus();return}this.dropdownButton.focus()}dropdownButtonClasses(){let n="pn-page-nav-dropdown-button ";if(this.dropdownLinks.includes(this.value))n+="pn-page-nav-dropdown-active ";return n}dropdownClasses(){let n="pn-page-nav-dropdown ";if(this.dropdownOpen)n+="pn-page-nav-dropdown-open ";return n}render(){return i(s,{key:"84aa7d48fb35062728db273ed972832a2387c17f"},i("div",{key:"e3b748a26a92de0be7e5f34ac07bbd02d79ac051",class:"pn-page-nav-wrapper"},i("nav",{key:"7f368d201e6b4f6fdb8d3bbb88a82fd083248b66",class:"pn-page-nav"},this.dropdownActive&&i("button",{key:"b195fad1c0f965fd206781c2f68bf1e096ec1145",type:"button",class:this.dropdownButtonClasses(),onClick:()=>this.toggleDropdown(),"aria-controls":"page-nav-dropdown","aria-expanded":`${this.dropdownOpen}`},this.dropdown,i("pn-icon",{key:"7d861107335a022e21f00f9ad724adfb7ec6e83c",icon:d,color:"white",small:true}),i("div",{key:"724514a04c237aab0bde8eeaf0a5ea0ba4d57754",class:"pn-page-nav-divider"})),i("ul",{key:"a9904dfd2acf7425900bd5b1c400a40ef46930e5",class:"pn-page-nav-items"},i("slot",{key:"16240b85d64bc3667315389756505f426d202f16"}),i("li",{key:"da34a7805394b01718ab808c5c12f24fd434c692",class:"pn-pn-bg pn-pn-active",role:"presentation"}),i("li",{key:"6431c8c54c3547dd20a12b758740327729e41ce7",class:"pn-pn-bg pn-pn-hover",role:"presentation"}))),this.showScrollArrows&&i("div",{key:"94c7037eac435f475df4bf74214d423ab6a222a2",class:this.scrollArrowClasses()},i("button",{key:"4f54461490ffd67f0bc8c049b81d956704b5d2a0",class:"pn-pn-arrow-left",onClick:()=>this.scroll(-120),tabindex:"-1"},i("pn-icon",{key:"17c0a6744795cac8a6be6e876b440f4bf6cc826c",icon:r,color:"white"})),i("button",{key:"80548ab34ed33c15cae5e375de5971fbeb40efa2",class:"pn-pn-arrow-right",onClick:()=>this.scroll(120),tabindex:"-1"},i("pn-icon",{key:"6a6ed35f46f835a7c57584b2ef4faf5376ffa90e",icon:p,color:"blue700"})))),this.dropdownActive&&i("ul",{key:"6e48de81da28bd439fcea04f33a5e1ac6da5f1cd",id:this.navid,class:this.dropdownClasses()},i("slot",{key:"cd0c26b03d91afc099cefe622e46907eea1cb85a",name:"dropdown-item"})))}static get watchers(){return{value:["valueHandler"],dropdownOpen:["dropdownHandler"]}}};c.style=h;export{c as pn_page_nav}; //# sourceMappingURL=p-d0b75357.entry.js.map