@scania/tegel
Version:
Tegel Design System
1 lines • 8.09 kB
JavaScript
import{t as e,p as t,H as s,c as o,h as i,a as d}from"./index.js";const a=t(class extends s{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.tdsCollapse=o(this,"tdsCollapse",7),this.internalTdsCollapse=o(this,"internalTdsCollapse",6),this.internalTdsSideMenuPropChange=o(this,"internalTdsSideMenuPropChange",6),this.open=!1,this.persistent=!1,this.collapsed=!1,this.isMobile=!1,this.isUpperSlotEmpty=!1,this.isCollapsed=!1,this.initialCollapsedState=!1,this.activeElementIndex=0,this.handleMatchesLgBreakpointChange=e=>{const t=!e.matches;this.isMobile=t,t?this.collapsed=!1:(this.open=!1,this.collapsed=this.initialCollapsedState)}}handleKeyDown(e){"Escape"===e.key&&this.isMobile&&this.open&&(this.open=!1)}connectedCallback(){this.matchesLgBreakpointMq=window.matchMedia("(min-width: 992px)"),this.matchesLgBreakpointMq.addEventListener("change",this.handleMatchesLgBreakpointChange),this.isMobile=!this.matchesLgBreakpointMq.matches,this.isCollapsed=this.collapsed,this.initialCollapsedState=this.collapsed}componentDidLoad(){var e;const t=(null===(e=this.host.shadowRoot)||void 0===e?void 0:e.querySelector("slot:not([name])")).assignedElements();(null==t?void 0:t.length)>0||(this.isUpperSlotEmpty=!0),this.isMobile&&(this.collapsed=!1)}disconnectedCallback(){this.matchesLgBreakpointMq&&this.matchesLgBreakpointMq.removeEventListener("change",this.handleMatchesLgBreakpointChange)}onCollapsedChange(e){this.internalTdsSideMenuPropChange.emit({changed:["collapsed"],collapsed:e}),this.isCollapsed=e}onOpenChange(e){if(this.isMobile)if(e)setTimeout((()=>{const e=this.getFocusableElements();e.length>0&&(this.activeElementIndex=0,e[0].focus())}),100);else{const e=document.querySelector("tds-header-hamburger");if(e&&e.shadowRoot){const t=e.shadowRoot.querySelector("button");t&&t.focus()}}else e&&(this.open=!1)}getFocusableElements(){var e,t,s;const o='a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex="-1"])',i=Array.from(null!==(t=null===(e=this.host.shadowRoot)||void 0===e?void 0:e.querySelectorAll(o))&&void 0!==t?t:[]),d=Array.from(this.host.querySelectorAll(o)),a=this.host.querySelector('[slot="close-button"]');let n;a&&(n=null===(s=a.shadowRoot)||void 0===s?void 0:s.querySelector("button"));const r=[...i,...d];return n&&r.push(n),r}handleFocusTrap(e){if(!this.open||!this.isMobile)return;if("Tab"!==e.key)return;const t=this.getFocusableElements();0!==t.length&&(e.preventDefault(),e.shiftKey?(this.activeElementIndex-=1,this.activeElementIndex<0&&(this.activeElementIndex=t.length-1)):(this.activeElementIndex+=1,this.activeElementIndex>=t.length&&(this.activeElementIndex=0)),t[this.activeElementIndex].focus())}collapsedSideMenuEventHandler(e){this.collapsed=e.detail.collapsed}render(){return i(d,{key:"3e7770cc6891a71d1757b0a7622f2912066643d8",class:{"menu-opened":this.open,"menu-persistent":this.persistent,"menu-collapsed":this.collapsed},"aria-expanded":(this.isMobile?this.open:!this.collapsed)?"true":"false"},i("div",{key:"5c556407075da5eae0b3343b3e0ee74c340575ac",class:{wrapper:!0,"state-upper-slot-empty":this.isUpperSlotEmpty,"state-open":this.open,"state-closed":!this.open}},i("slot",{key:"6b87fbf18cbfa65ab8552eb64456b87304022404",name:"overlay"}),i("aside",{key:"7d63212f845d1bba59a1b3a6e0b99998fd6a2202",class:"menu"},i("div",{key:"d8ce4ff50101691aeb9b88d17cc7ee2490272ad4",role:"navigation"},i("slot",{key:"f8a7ee24fbced61ff4931168902c397b082521eb",name:"close-button"}),i("div",{key:"072baef69437e6a444b32f0b62cef196cefe1575",class:"tds-side-menu-wrapper"},i("ul",{key:"bf1e19f6ba886f2c89b480b4f58b45c018daac4d",class:"tds-side-menu-list tds-side-menu-list-upper"},i("li",{key:"e319ea5fa177d10d2251b8ab26a06bef18bbd623"},i("slot",{key:"5fec36575727498f764896d4c585a77f4c83f8b4"}))),i("ul",{key:"b3a8d1af131f3ac8531d1f63bf7aa728ae87927b",class:"tds-side-menu-list tds-side-menu-list-end"},i("li",{key:"2d82fba190cdb96f6e7bb77a1f44d94b1a4f461b"},i("slot",{key:"c5d3f65e00c57911b5aae71d4a75b1ec894b3fcb",name:"end"})))),i("slot",{key:"eb8c2a7a4130e9e71851735219414a9d87e95853",name:"sticky-end"})))))}get host(){return this}static get watchers(){return{collapsed:[{onCollapsedChange:0}],open:[{onOpenChange:0}]}}static get style(){return":host,:root{--tds-scrollbar-width-standard:thin;--tds-scrollbar-width:10px;--tds-scrollbar-height:10px;--tds-scrollbar-thumb-border-width:3px;--tds-scrollbar-thumb-border-hover-width:2px}body{scrollbar-width:thin}:host{pointer-events:none;display:block;position:fixed;top:0;width:100%;height:100%;z-index:500}:host .wrapper{height:inherit;}:host .wrapper slot:not([name])::slotted(*){border-bottom:1px solid var(--tds-sidebar-side-menu-bottom-menu-border-top)}:host .wrapper ::slotted([slot=end]){border-top:1px solid var(--tds-sidebar-side-menu-bottom-menu-border-top)}:host .wrapper .tds-side-menu-list-end{margin-top:68px}:host .state-closed{display:none}:host .state-open slot[name=overlay]::slotted(tds-side-menu-overlay){opacity:0.4}:host .state-open slot[name=close-button]::slotted(tds-side-menu-close-button){opacity:1}:host .state-upper-slot-empty .tds-side-menu-list-upper{display:none}:host .state-upper-slot-empty .tds-side-menu-list-end{margin-top:0}:host .state-upper-slot-empty ::slotted([slot=end]){border-top:none;border-bottom:1px solid var(--tds-sidebar-side-menu-bottom-menu-border-top)}@media (max-width: 992px){:host(.menu-opened){pointer-events:auto;z-index:500}}@media (min-width: 992px){:host(.menu-persistent){pointer-events:auto;position:static;width:272px;height:auto;border-right:1px solid var(--tds-sidebar-side-menu-bottom-menu-border-top)}:host(.menu-persistent) .wrapper slot[name=overlay]::slotted(tds-side-menu-overlay){display:none}:host(.menu-persistent) .wrapper slot[name=close-button]::slotted(tds-side-menu-close-button){display:none}:host(.menu-persistent) .menu{width:272px}:host(.menu-persistent) .state-closed{display:block}:host(.menu-persistent):host(.menu-collapsed){width:69px;box-sizing:border-box}:host(.menu-persistent):host(.menu-collapsed) .menu{width:68px}:host(.menu-persistent) slot[name=end]::slotted(*){display:none}}.menu{width:80%;height:inherit;position:relative;left:0;display:flex;flex-direction:column;justify-content:space-between}.menu *{padding:0;margin:0;box-sizing:border-box}@media (max-width: 384px){.menu{width:100%}}aside .tds-side-menu-wrapper{display:flex;justify-content:space-between;flex-direction:column;flex-grow:1;background-color:var(--tds-sidebar-side-menu-background-cover);overflow-y:auto}aside .tds-side-menu-wrapper:hover::-webkit-scrollbar-thumb{border:var(--tds-scrollbar-thumb-border-hover-width) solid transparent;background-clip:padding-box}aside .tds-side-menu-wrapper::-webkit-scrollbar{width:var(--tds-scrollbar-width)}aside .tds-side-menu-wrapper::-webkit-scrollbar-track{background:var(--tds-scrollbar-track-color)}aside .tds-side-menu-wrapper::-webkit-scrollbar-thumb{border-radius:40px;background:var(--tds-scrollbar-thumb-color);border:var(--tds-scrollbar-thumb-border-width) solid transparent;background-clip:padding-box}aside .tds-side-menu-wrapper::-webkit-scrollbar-button{height:0;width:0}@supports not selector(::-webkit-scrollbar){aside .tds-side-menu-wrapper{scrollbar-color:var(--tds-scrollbar-thumb-color) var(--tds-scrollbar-track-color);scrollbar-width:var(--tds-scrollbar-width-standard)}}aside [role=navigation]{height:100%;display:flex;flex-direction:column}aside li{list-style:none;padding:0;margin:0}"}},[257,"tds-side-menu",{open:[1028],persistent:[4],collapsed:[1028],isMobile:[32],isUpperSlotEmpty:[32],isCollapsed:[32],initialCollapsedState:[32],activeElementIndex:[32]},[[8,"keydown","handleKeyDown"],[10,"keydown","handleFocusTrap"],[16,"internalTdsCollapse","collapsedSideMenuEventHandler"]],{collapsed:[{onCollapsedChange:0}],open:[{onOpenChange:0}]}]);function n(){"undefined"!=typeof customElements&&["tds-side-menu"].forEach((t=>{"tds-side-menu"===t&&(customElements.get(e(t))||customElements.define(e(t),a))}))}n();const r=a,l=n;export{r as TdsSideMenu,l as defineCustomElement}