UNPKG

@postnord/web-components

Version:

PostNord Web Components

6 lines 8.25 kB
/*! * Built with Stencil * By PostNord. */ import{r as n,c as a,g as t,f as o,h as e,a as i}from"./p-43660913.js";import{r as s,k as l,e as d}from"./p-f64d17a6.js";import{c as r}from"./p-92b0338a.js";const m={CLOSE_MODAL:{en:"Close dialog",sv:"Stäng dialogrutan",da:"Luk dialogboks",fi:"Sulje valintaikkuna",no:"Lukk dialogboksen"}};const c="/* Global utility variables */\n/* Input styles */\n/* Transition variables */\npn-modal .pn-modal {\n --pn-modal-max-width: 45em;\n --pn-modal-overflow: hidden auto;\n z-index: 10000;\n position: fixed;\n top: 0;\n inset-block-start: 0;\n inset-block-end: 0;\n margin: auto;\n overflow: var(--pn-modal-overflow);\n max-width: var(--pn-modal-max-width);\n max-height: 85vh;\n padding: clamp(1em, 5vw, 1.5em) 0;\n border: 0.0625em solid #f3f2f2;\n border-radius: 0.5em;\n flex-direction: column;\n align-items: stretch;\n gap: 0.75em;\n box-shadow: 0 0.25em 0.875em rgba(0, 0, 0, 0.18), 0 1.625em 3.5em rgba(0, 0, 0, 0.22);\n background-color: #ffffff;\n display: none;\n opacity: 0;\n transform: translate(0%, 20%);\n outline: 0.2rem solid transparent;\n outline-offset: 0.2rem;\n transition-property: opacity, overlay, display, transform, outline-color;\n transition-duration: 0.4s;\n transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);\n transition-behavior: allow-discrete;\n}\npn-modal .pn-modal:focus-visible {\n outline-color: #ffffff;\n}\npn-modal .pn-modal::-webkit-scrollbar {\n background-color: #ffffff;\n width: 0.875em;\n border-radius: 0.5em;\n}\npn-modal .pn-modal::-webkit-scrollbar-track {\n background-color: #ffffff;\n border-radius: 0.5em;\n}\npn-modal .pn-modal::-webkit-scrollbar-thumb {\n cursor: pointer;\n background-color: #969087;\n border-radius: 1em;\n border: 0.25em solid #ffffff;\n}\npn-modal .pn-modal::-webkit-scrollbar-thumb:hover {\n background-color: #5e554a;\n}\npn-modal .pn-modal::-webkit-scrollbar-corner, pn-modal .pn-modal::-webkit-scrollbar-button {\n display: none;\n}\n@media (prefers-reduced-motion: reduce) {\n pn-modal .pn-modal {\n transition-duration: 0s;\n transition-delay: 0s;\n }\n}\npn-modal .pn-modal[data-sheet] {\n margin: 0 0 0 auto;\n height: 100%;\n max-height: unset;\n border-radius: 0.5em 0 0 0.5em;\n transform: translate(20%, 0%);\n}\npn-modal .pn-modal[open] {\n display: flex;\n opacity: 1;\n transform: translate(0%, 0%);\n}\n@starting-style {\n pn-modal .pn-modal[open] {\n display: flex;\n opacity: 0;\n transform: translate(0%, 20%);\n }\n}\npn-modal .pn-modal[open][data-sheet] {\n transform: translate(0%, 0%);\n}\n@starting-style {\n pn-modal .pn-modal[open][data-sheet] {\n transform: translate(20%, 0%);\n }\n}\npn-modal .pn-modal::backdrop {\n background-color: rgba(0, 0, 0, 0);\n transition-property: opacity, background-color, overlay, display;\n transition-duration: 0.4s;\n transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);\n transition-behavior: allow-discrete;\n}\n@media (prefers-reduced-motion: reduce) {\n pn-modal .pn-modal::backdrop {\n transition-duration: 0s;\n transition-delay: 0s;\n }\n}\npn-modal .pn-modal[open]::backdrop {\n background-color: rgba(0, 0, 0, 0.55);\n}\n@starting-style {\n pn-modal .pn-modal[open]::backdrop {\n background-color: rgba(0, 0, 0, 0);\n }\n}\npn-modal .pn-modal-close-button {\n position: absolute;\n right: 0.5em;\n top: 0.5em;\n}\npn-modal .pn-modal-header {\n display: flex;\n flex-direction: column;\n gap: 0.5em;\n padding: 0 clamp(1em, 5vw, 1.5em);\n}\npn-modal .pn-modal-label {\n line-height: 1.5;\n padding-right: 1.5em;\n margin: 0;\n}\npn-modal .pn-modal-text {\n margin: 0;\n}\npn-modal .pn-modal-content {\n padding: 0 clamp(1em, 5vw, 1.5em);\n}\npn-modal .pn-modal-buttons {\n background-color: #ffffff;\n border-top: 0.0625em solid #d3cecb;\n padding: clamp(1em, 5vw, 1.5em) clamp(1em, 5vw, 1.5em) 0;\n display: flex;\n justify-content: flex-end;\n gap: 0.5em;\n}\npn-modal .pn-modal-buttons [slot=buttons]:not(pn-button) {\n display: flex;\n justify-content: flex-end;\n gap: 0.5em;\n}\npn-modal .pn-modal-buttons:empty {\n display: none;\n}\n\n@media (max-width: 30em) {\n pn-modal .pn-modal {\n width: 100%;\n max-height: 95vh;\n margin-bottom: 0;\n bottom: 0;\n transform: translate(0%, 20%);\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n}";const p=c;const h=class{constructor(t){n(this,t);this.modalToggle=a(this,"modalToggle",7);this.modalVisiblity=a(this,"modalVisiblity",7);this.close=a(this,"close",7);this.isClosing=false;this.isOpening=false;this.label=undefined;this.helpertext=undefined;this.language=null;this.open=false;this.persistent=false;this.hideClose=false;this.allowOverflow=false;this.sheet=false;this.maxWidth=null}mo;standardAnimationDuration=400;animationDuration=this.standardAnimationDuration;modalTimeout;modalElement;get hostElement(){return t(this)}handleOpen(){if(this.open)this.openModal();else{this.closeModal();this.close.emit(true)}this.handleOverflow();clearTimeout(this.modalTimeout);this.isClosing=!this.open&&true;if(s())this.animationDuration=0;else this.animationDuration=this.standardAnimationDuration;this.modalTimeout=setTimeout((()=>{this.isClosing=false;this.modalVisiblity.emit({visible:this.open})}),this.animationDuration)}handleMaxWidth(){const n=this.maxWidth||"45em";this.modalElement.style.setProperty("--pn-modal-max-width",n)}modalToggle;modalVisiblity;close;connectedCallback(){this.mo=new MutationObserver((()=>o(this.hostElement)));this.mo.observe(this.hostElement,{childList:true,subtree:true})}disconnectedCallback(){if(this.mo)this.mo.disconnect()}async componentWillLoad(){if(this.language===null)await l(this.hostElement)}componentDidLoad(){this.handleMaxWidth();if(this.open)this.openModal()}translate(n){return m?.[n]?.[this.language||d]||n}handleOverflow(){if(!this.allowOverflow)return;const n=this.modalElement.scrollHeight>innerHeight*.85?"hidden auto":"unset";this.modalElement.style.setProperty("--pn-modal-overflow",n)}isSameModal(n){return this.modalElement.isSameNode(n)}handleKeyboard(n){if(n.key!=="Escape")return;n.preventDefault();n.stopImmediatePropagation();if(!this.persistent)this.setModalClose()}clickModalBackground(n){const{clientY:a,clientX:t}=n;const o=n.target.localName!==this.modalElement.localName;const e=!this.isSameModal(n.target);if(o||e)return;const{top:i,left:s,height:l,width:d}=this.modalElement.getBoundingClientRect();const r=i<=a&&a<=i+l&&s<=t&&t<=s+d;if(!r&&!this.persistent)this.toggleOpen(false)}setModalClose(){this.toggleOpen(false)}closeModal(){this.modalElement.close()}openModal(){this.modalElement.showModal()}toggleOpen(n){this.open=n??!this.open}render(){return e(i,{key:"6bf631cc88584b24782904a9918091736e27c3d6"},e("dialog",{key:"543806f18626bd7f8f6983a5c3769f8bf0422544",class:"pn-modal","data-closing":this.isClosing,"data-sheet":this.sheet,onClose:()=>this.setModalClose(),onCancel:()=>this.setModalClose(),onToggle:()=>this.modalToggle.emit({open:this.open}),onKeyDown:n=>this.handleKeyboard(n),onClick:n=>this.clickModalBackground(n),ref:n=>this.modalElement=n},!this.hideClose&&e("pn-button",{key:"60350dfcac19aa570b78e4fb82ca2a0a288de1b7",small:true,class:"pn-modal-close-button",icon:r,iconOnly:true,arialabel:this.translate("CLOSE_MODAL"),appearance:"light",variant:"borderless",type:"button",onPnClick:()=>this.setModalClose()}),e("header",{key:"ba3d857e5f0b57c9567b045843f3b3a1aee9f06d",class:"pn-modal-header"},this.label&&e("h2",{key:"524b36cbeb3f1e0274fb29a3656638c4c221cec9",class:"pn-modal-label"},this.label),this.helpertext&&e("p",{key:"330777c3c194177f7fc811eb45f2ee3a585894fc",class:"pn-modal-text"},this.helpertext),e("slot",{key:"62dbf64100d4e62974a18752423a781db737333f",name:"header"})),e("section",{key:"57618a994095a9f24c7a142d86fa788cca531062",class:"pn-modal-content"},e("slot",{key:"14f533135af35a88d1fb03b8e57cd133d3981629"})),e("nav",{key:"d355d6c0024893a26b1e17bf187a7d0e3142b766",class:"pn-modal-buttons"},e("slot",{key:"20020f7fd89b706bfaf5825090d6a0470e91b577",name:"buttons"}))))}static get watchers(){return{open:["handleOpen"],maxWidth:["handleMaxWidth"]}}};h.style=p;export{h as pn_modal}; //# sourceMappingURL=p-2615282e.entry.js.map