UNPKG

admin-lte

Version:

Responsive open source admin dashboard and control panel.

7 lines 27.5 kB
/*! * AdminLTE v4.9.1 (https://adminlte.io) * Copyright 2014-2026 Colorlib <https://colorlib.com> * Licensed under MIT (https://github.com/ColorlibHQ/AdminLTE/blob/master/LICENSE) */ const e=[],t={controller:new AbortController,hasInitialized:!1,isReplaying:!1},n=()=>t.controller.signal,s=()=>{if(!t.hasInitialized){t.hasInitialized=!0,t.isReplaying=!0;try{for(const t of e)t()}finally{t.isReplaying=!1}}},i=n=>{e.push(n),t.hasInitialized&&n()},a=()=>{t.controller.abort(),t.controller=new AbortController,t.hasInitialized=!1},o=()=>{t.isReplaying||(a(),s())};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",o,{once:!0}):s(),document.addEventListener("turbo:before-render",a),document.addEventListener("turbo:load",s);const r=new WeakMap,c=e=>{const t=r.get(e)??[];for(const e of t)globalThis.clearTimeout(e);r.delete(e)},l=e=>{for(const t of["height","padding-top","padding-bottom","margin-top","margin-bottom","overflow","transition-duration","transition-property"])e.style.removeProperty(t)},d=(e,t=500)=>{if(c(e),t<=1)return e.style.display="none",void l(e);e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=`${t}ms`,e.style.boxSizing="border-box",e.style.height=`${e.offsetHeight}px`,e.style.overflow="hidden";const n=globalThis.setTimeout(()=>{e.style.height="0",e.style.paddingTop="0",e.style.paddingBottom="0",e.style.marginTop="0",e.style.marginBottom="0"},1),s=globalThis.setTimeout(()=>{e.style.display="none",l(e),r.delete(e)},t);r.set(e,[n,s])},u=(e,t=500)=>{c(e),l(e),e.style.removeProperty("display");let{display:n}=globalThis.getComputedStyle(e);if("none"===n&&(n="block"),e.style.display=n,t<=1)return;const s=e.offsetHeight;e.style.overflow="hidden",e.style.height="0",e.style.paddingTop="0",e.style.paddingBottom="0",e.style.marginTop="0",e.style.marginBottom="0";const i=globalThis.setTimeout(()=>{e.style.boxSizing="border-box",e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=`${t}ms`,e.style.height=`${s}px`,e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom")},1),a=globalThis.setTimeout(()=>{l(e),r.delete(e)},t);r.set(e,[i,a])},h="hold-transition";class m{_element;_holdTransitionTimer;constructor(e){this._element=e,this._holdTransitionTimer=void 0}holdTransition(e=100){this._holdTransitionTimer&&clearTimeout(this._holdTransitionTimer),document.body.classList.add(h),this._holdTransitionTimer=setTimeout(()=>{document.body.classList.remove(h)},e)}}i(()=>{const e=new m(document.body);window.addEventListener("resize",()=>e.holdTransition(200),{signal:n()}),setTimeout(()=>{document.body.classList.add("app-loaded")},400)});const p=new WeakMap;class g{static get NAME(){throw new Error("Component subclasses must override the static NAME getter.")}static get DATA_KEY(){return`lte.${this.NAME}`}static _getInstance(e){return e?p.get(e)?.get(this.DATA_KEY)??null:null}_element;constructor(e){this._element=e;const t=p.get(e)??new Map;p.set(e,t),t.set(this.constructor.DATA_KEY,this)}dispose(){const e=p.get(this._element);e?.delete(this.constructor.DATA_KEY),0===e?.size&&p.delete(this._element)}}const b=(e,t,n={})=>{const s=new CustomEvent(t,{bubbles:!0,cancelable:n.cancelable??!1,detail:n.detail});return e.dispatchEvent(s),s},f="card-widget",y=`.lte.${f}`,v=`collapse${y}`,_=`expand${y}`,S=`remove${y}`,E=`collapsed${y}`,L=`expanded${y}`,A=`removed${y}`,T=`maximized${y}`,k=`minimized${y}`,w="card",x="collapsed-card",q="collapsing-card",M="expanding-card",$="was-collapsed",I="maximized-card",C='[data-lte-toggle="card-remove"]',N='[data-lte-toggle="card-collapse"]',R='[data-lte-toggle="card-maximize"]',P=`.${w}`,z=".card-body",B=".card-footer",D={animationSpeed:500,collapseTrigger:N,removeTrigger:C,maximizeTrigger:R};class O extends g{static get NAME(){return f}static getInstance(e){return this._getInstance(e)}static getOrCreateInstance(e,t={}){return this.getInstance(e)??new this(e,t)}_parent;_config;constructor(e,t={}){super(e),this._parent=e.closest(P),e.classList.contains(w)&&(this._parent=e),this._config={...D,...t}}collapse(){this._parent&&(b(this._parent,v,{cancelable:!0}).defaultPrevented||(this._parent.classList.add(q),this._parent.classList.remove(M),this._parent.querySelectorAll(`:scope > ${z}, :scope > ${B}`).forEach(e=>{e instanceof HTMLElement&&d(e,this._config.animationSpeed)}),setTimeout(()=>{this._parent?.classList.contains(q)&&(this._parent.classList.add(x),this._parent.classList.remove(q),b(this._parent,E))},this._config.animationSpeed)))}expand(){this._parent&&(b(this._parent,_,{cancelable:!0}).defaultPrevented||(this._parent.classList.add(M),this._parent.classList.remove(q,x),this._parent.querySelectorAll(`:scope > ${z}, :scope > ${B}`).forEach(e=>{e instanceof HTMLElement&&u(e,this._config.animationSpeed)}),setTimeout(()=>{this._parent?.classList.contains(M)&&(this._parent.classList.remove(M),b(this._parent,L))},this._config.animationSpeed)))}remove(){if(!this._parent)return;if(b(this._parent,S,{cancelable:!0}).defaultPrevented)return;const e=this._parent;d(e,this._config.animationSpeed),setTimeout(()=>{b(e,A),e.remove(),this.dispose()},this._config.animationSpeed)}toggle(){this._parent?.classList.contains(x)||this._parent?.classList.contains(q)?this.expand():this.collapse()}maximize(){this._parent&&(this._parent.style.height=`${this._parent.offsetHeight}px`,this._parent.style.width=`${this._parent.offsetWidth}px`,this._parent.style.transition="all .15s",setTimeout(()=>{const e=document.querySelector("html");e&&e.classList.add(I),this._parent&&(this._parent.classList.add(I),this._parent.classList.contains(x)&&this._parent.classList.add($),b(this._parent,T))},150))}minimize(){this._parent&&(this._parent.style.height="auto",this._parent.style.width="auto",this._parent.style.transition="all .15s",setTimeout(()=>{const e=document.querySelector("html");e&&e.classList.remove(I),this._parent&&(this._parent.classList.remove(I),this._parent?.classList.contains($)&&this._parent.classList.remove($),b(this._parent,k),setTimeout(()=>{this._parent?.style.removeProperty("height"),this._parent?.style.removeProperty("width"),this._parent?.style.removeProperty("transition")},150))},10))}toggleMaximize(){this._parent?.classList.contains(I)?this.minimize():this.maximize()}}document.addEventListener("click",e=>{const t=e.target;if(!(t instanceof Element))return;const n=t.closest(N),s=t.closest(C),i=t.closest(R),a=n??s??i;if(!a)return;e.preventDefault();const o=a.closest(P);if(!o)return;const r=O.getOrCreateInstance(o);n?r.toggle():s?r.remove():r.toggleMaximize()});const F="treeview",H=`.lte.${F}`,K=`expand${H}`,W=`collapse${H}`,Y=`expanded${H}`,U=`collapsed${H}`,j=`load${H}`,V="menu-open",G=".nav-item",J=".nav-link",Q=".nav-treeview",X='[data-lte-toggle="treeview"]',Z={animationSpeed:300,accordion:!0},ee=(e,t)=>{const n=e.querySelector(`:scope > ${J}`);n?.setAttribute("aria-expanded",String(t))};class te extends g{static get NAME(){return F}static getInstance(e){return this._getInstance(e)}static getOrCreateInstance(e,t={}){return this.getInstance(e)??new this(e,t)}_config;constructor(e,t={}){super(e),this._config={...Z,...t}}open(){if(b(this._element,K,{cancelable:!0}).defaultPrevented)return;if(this._config.accordion){const e=this._element.parentElement?.querySelectorAll(`${G}.${V}`);e?.forEach(e=>{if(!this._element.contains(e)){e.classList.remove(V),ee(e,!1);const t=e?.querySelector(Q);t&&d(t,this._config.animationSpeed)}})}this._element.classList.add(V),ee(this._element,!0);const e=this._element.querySelector(Q);e&&u(e,this._config.animationSpeed),setTimeout(()=>{this._element.classList.contains(V)&&b(this._element,Y)},this._config.animationSpeed)}close(){if(b(this._element,W,{cancelable:!0}).defaultPrevented)return;this._element.classList.remove(V),ee(this._element,!1);const e=this._element.querySelector(Q);e&&d(e,this._config.animationSpeed),setTimeout(()=>{this._element.classList.contains(V)||b(this._element,U)},this._config.animationSpeed)}toggle(){this._element.classList.contains(V)?this.close():this.open()}}document.addEventListener("click",e=>{const t=e.target;if(!(t instanceof Element))return;const n=t.closest(X);if(!n)return;const s=t.closest(G),i=t.closest(J);if(!s?.querySelector(Q))return;"#"!==t.getAttribute("href")&&"#"!==i?.getAttribute("href")||e.preventDefault();const a=n.dataset.accordion,o=n.dataset.animationSpeed,r={accordion:void 0===a?Z.accordion:"true"===a,animationSpeed:void 0===o?Z.animationSpeed:Number(o)};te.getOrCreateInstance(s,r).toggle()}),i(()=>{document.querySelectorAll(`${G}.${V}`).forEach(e=>{const t=e.querySelector(Q);if(t){u(t,0);const n=new Event(j);e.dispatchEvent(n)}}),document.querySelectorAll(X).forEach(e=>{e.querySelectorAll(G).forEach(e=>{e.querySelector(`:scope > ${Q}`)&&ee(e,e.classList.contains(V))})})});const ne="direct-chat",se=`.lte.${ne}`,ie=`expanded${se}`,ae=`collapsed${se}`,oe="direct-chat-contacts-open";class re extends g{static get NAME(){return ne}static getInstance(e){return this._getInstance(e)}static getOrCreateInstance(e){return this.getInstance(e)??new this(e)}toggle(){this._element.classList.contains(oe)?(this._element.classList.remove(oe),b(this._element,ae)):(this._element.classList.add(oe),b(this._element,ie))}}document.addEventListener("click",e=>{const t=e.target;if(!(t instanceof Element))return;const n=t.closest('[data-lte-toggle="chat-pane"]');if(!n)return;e.preventDefault();const s=n.closest(".direct-chat");s&&re.getOrCreateInstance(s).toggle()});const ce="fullscreen",le=`.lte.${ce}`,de=`maximized${le}`,ue=`minimized${le}`,he='[data-lte-toggle="fullscreen"]';function me(){const e=document.querySelector('[data-lte-icon="maximize"]'),t=document.querySelector('[data-lte-icon="minimize"]'),n=Boolean(document.fullscreenElement);e?.classList.toggle("d-none",n),t?.classList.toggle("d-none",!n);const s=n?de:ue;document.querySelectorAll(he).forEach(e=>{b(e,s)})}class pe extends g{static get NAME(){return ce}static getInstance(e){return this._getInstance(e)}static getOrCreateInstance(e){return this.getInstance(e)??new this(e)}inFullScreen(){document.documentElement.requestFullscreen().catch(()=>{})}outFullscreen(){document.exitFullscreen().catch(()=>{})}toggleFullScreen(){document.fullscreenEnabled&&(document.fullscreenElement?this.outFullscreen():this.inFullScreen())}}document.addEventListener("click",e=>{const t=e.target;if(!(t instanceof Element))return;const n=t.closest(he);n&&(e.preventDefault(),pe.getOrCreateInstance(n).toggleFullScreen())}),i(()=>{document.addEventListener("fullscreenchange",me,{signal:n()})});const ge="push-menu",be=`.lte.${ge}`,fe=`open${be}`,ye=`collapse${be}`,ve=`opened${be}`,_e=`collapsed${be}`,Se="sidebar-overlay",Ee="sidebar-collapse",Le="sidebar-open",Ae=".app-sidebar",Te="lte.sidebar.state",ke={sidebarBreakpoint:991.98,enablePersistence:!1};class we extends g{static get NAME(){return ge}static getInstance(e){return this._getInstance(e)}static getOrCreateInstance(e,t={}){return this.getInstance(e)??new this(e,t)}_config;constructor(e,t={}){super(e),this._config={...ke,...t}}isCollapsed(){return document.body.classList.contains(Ee)}isExplicitlyOpen(){return document.body.classList.contains(Le)}isMiniMode(){return document.body.classList.contains("sidebar-mini")}isMobileSize(){return globalThis.innerWidth<=this._config.sidebarBreakpoint}expand(){b(this._element,fe,{cancelable:!0}).defaultPrevented||(document.body.classList.remove(Ee),this.isMobileSize()&&document.body.classList.add(Le),b(this._element,ve))}collapse(){b(this._element,ye,{cancelable:!0}).defaultPrevented||(document.body.classList.remove(Le),document.body.classList.add(Ee),b(this._element,_e))}toggle(){const e=this.isCollapsed();e?this.expand():this.collapse(),this._config.enablePersistence&&this.saveSidebarState(e?Le:Ee)}setupSidebarBreakPoint(){const e=document.querySelector('[class*="sidebar-expand"]');if(!e)return;const t=globalThis.getComputedStyle(e,"::before").getPropertyValue("content");if(!t||"none"===t)return;const n=Number(t.replace(/[^\d.-]/g,""));Number.isNaN(n)||(this._config={...this._config,sidebarBreakpoint:n})}updateStateByResponsiveLogic(){this.isMobileSize()?this.isExplicitlyOpen()||this.collapse():this.isMiniMode()&&this.isCollapsed()||this.expand()}saveSidebarState(e){if(void 0!==globalThis.localStorage)try{localStorage.setItem(Te,e)}catch{}}loadSidebarState(){if(void 0!==globalThis.localStorage)try{const e=localStorage.getItem(Te);e===Ee?this.collapse():e===Le?this.expand():this.updateStateByResponsiveLogic()}catch{this.updateStateByResponsiveLogic()}}clearSidebarState(){if(void 0!==globalThis.localStorage)try{localStorage.removeItem(Te)}catch{}}init(){this.setupSidebarBreakPoint(),this._config.enablePersistence||this.clearSidebarState(),this._config.enablePersistence&&!this.isMobileSize()?this.loadSidebarState():this.isCollapsed()||this.updateStateByResponsiveLogic()}}document.addEventListener("click",e=>{const t=e.target;if(!(t instanceof Element))return;if(!t.closest('[data-lte-toggle="sidebar"]'))return;e.preventDefault();const n=document.querySelector(Ae);n&&we.getOrCreateInstance(n).toggle()}),i(()=>{const e=document.querySelector(Ae);if(!e)return;const t=e.dataset.sidebarBreakpoint,s=e.dataset.enablePersistence,i={sidebarBreakpoint:void 0===t?ke.sidebarBreakpoint:Number(t),enablePersistence:void 0===s?ke.enablePersistence:"true"===s},a=we.getOrCreateInstance(e,i);a.init(),globalThis.matchMedia(`(max-width: ${a._config.sidebarBreakpoint}px)`).addEventListener("change",()=>{a.updateStateByResponsiveLogic()},{signal:n()});const o=document.querySelector(".app-wrapper");let r=o?.querySelector(`:scope > .${Se}`);r||(r=document.createElement("div"),r.className=Se,o?.append(r));const c=n();let l=!1;r.addEventListener("touchstart",()=>{l=!1},{passive:!0,signal:c}),r.addEventListener("touchmove",()=>{l=!0},{passive:!0,signal:c}),r.addEventListener("touchend",e=>{l||(e.preventDefault(),a.collapse()),l=!1},{passive:!1,signal:c}),r.addEventListener("click",e=>{e.preventDefault(),a.collapse()},{signal:c})});const xe="lte-theme",qe="data-bs-theme",Me="data-bs-theme-value",$e=`[${Me}]`,Ie=new Set(["light","dark","auto"]),Ce=e=>Ie.has(e),Ne=()=>"off"===document.documentElement.getAttribute("data-lte-color-mode"),Re=(()=>{const{documentElement:e}=document;if(e.hasAttribute("data-lte-theme-resolved"))return null;const t=e.getAttribute(qe);return t&&Ce(t)?t:null})();class Pe{getStoredTheme(){try{const e=localStorage.getItem(xe);return e&&Ce(e)?e:null}catch{return null}}getMarkupTheme(){return Re}getPreferredTheme(){return(this.getStoredTheme()??this.getMarkupTheme())||(this._prefersDark()?"dark":"light")}resolveTheme(e){return"auto"===e?this._prefersDark()?"dark":"light":e}setTheme(e){try{localStorage.setItem(xe,e)}catch{}this._applyTheme(e),this._showActiveTheme(e),document.dispatchEvent(new CustomEvent("changed.lte.color-mode",{detail:{theme:e,resolved:this.resolveTheme(e)}}))}_applyTheme(e){const t=this.resolveTheme(e);document.documentElement.setAttribute(qe,t),document.documentElement.style.colorScheme=t}_prefersDark(){return globalThis.matchMedia("(prefers-color-scheme: dark)").matches}_showActiveTheme(e){document.querySelectorAll($e).forEach(t=>{const n=t.getAttribute(Me)===e;t.classList.toggle("active",n),t.setAttribute("aria-pressed",String(n)),t.querySelector(".bi-check-lg")?.classList.toggle("d-none",!n)}),document.querySelectorAll("[data-lte-theme-icon]").forEach(t=>{t.classList.toggle("d-none",t.dataset.lteThemeIcon!==e)})}init(){if(Ne())return;const e=this.getPreferredTheme();this._applyTheme(e),this._showActiveTheme(e)}}document.addEventListener("click",e=>{const t=e.target;if(!(t instanceof Element)||Ne())return;const n=t.closest($e),s=n?.getAttribute(Me);s&&Ce(s)&&(new Pe).setTheme(s)}),i(()=>{const e=new Pe;e.init(),globalThis.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{if(Ne())return;const t=e.getStoredTheme()??e.getMarkupTheme();t&&"auto"!==t||(e._applyTheme("auto"),e._showActiveTheme(t??"auto"))},{signal:n()})});const ze="sidebar-search",Be=`filtered.lte.${ze}`,De="menu-open",Oe='[data-lte-toggle="sidebar-search"]',Fe=".nav-item",He=".nav-header",Ke=":scope > .nav-link",We=e=>e.querySelector(":scope > .nav-treeview"),Ye=(e,t,n,s)=>{e.classList.toggle(De,n),e.querySelector(Ke)?.setAttribute("aria-expanded",String(n)),t.style.display=s};class Ue extends g{static get NAME(){return ze}static getInstance(e){return this._getInstance(e)}static getOrCreateInstance(e){return this.getInstance(e)??new this(e)}_menu;_emptyState;_snapshot=null;constructor(e){super(e);const t=e.dataset.lteTarget,n=e.closest(".app-sidebar")??document;this._menu=t?document.querySelector(t):n.querySelector(".sidebar-menu"),this._emptyState=n.querySelector("[data-lte-search-empty]")}search(e){const t=this._menu;if(!t)return;const n=e.trim().toLowerCase();if(!n)return void this.clear();this._snapshot??=this._takeSnapshot(t);const s=[...t.querySelectorAll(Fe)],i=new Set;for(const e of s){const t=e.querySelector(Ke)?.textContent?.replace(/\s+/g," ").trim().toLowerCase();t?.includes(n)&&i.add(e)}for(let e=s.length-1;e>=0;e--){const t=s[e];t.hidden=!(i.has(t)||t.querySelector(`${Fe}:not([hidden])`))}for(const e of i)for(const t of e.querySelectorAll(Fe))t.hidden=!1;let a=0;for(const e of s){e.hidden||a++;const t=We(e);if(t){const n=!e.hidden&&Boolean(e.querySelector(`${Fe}:not([hidden])`));Ye(e,t,n,n?"block":"none")}}for(const e of t.querySelectorAll(He))e.hidden=!0;this._emptyState&&(this._emptyState.hidden=a>0),b(this._element,Be,{detail:{query:n,matches:a}})}clear(){const e=this._menu;if(e){for(const t of e.querySelectorAll(`${Fe}, ${He}`))t.hidden=!1;if(this._snapshot){for(const[e,t]of this._snapshot){const n=We(e);n&&Ye(e,n,t.open,t.display)}this._snapshot=null}this._emptyState&&(this._emptyState.hidden=!0),b(this._element,Be,{detail:{query:"",matches:-1}})}}dispose(){this.clear(),super.dispose()}_takeSnapshot(e){const t=new Map;for(const n of e.querySelectorAll(Fe)){const e=We(n);e&&t.set(n,{open:n.classList.contains(De),display:e.style.display})}return t}}document.addEventListener("input",e=>{const t=e.target;t instanceof HTMLInputElement&&t.matches(Oe)&&Ue.getOrCreateInstance(t).search(t.value)}),document.addEventListener("keydown",e=>{const t=e.target;"Escape"===e.key&&t instanceof HTMLInputElement&&t.matches(Oe)&&(t.value="",Ue.getOrCreateInstance(t).clear())}),i(()=>{document.querySelectorAll(Oe).forEach(e=>{e.value&&Ue.getOrCreateInstance(e).search(e.value)})});class je{config;liveRegion=null;focusHistory=[];signal=n();constructor(e={}){this.config={announcements:!0,skipLinks:!0,focusManagement:!0,keyboardNavigation:!0,reducedMotion:!0,...e},this.init()}init(){this.config.announcements&&this.createLiveRegion(),this.config.skipLinks&&this.addSkipLinks(),this.config.focusManagement&&this.initFocusManagement(),this.config.keyboardNavigation&&this.initKeyboardNavigation(),this.config.reducedMotion&&this.respectReducedMotion(),this.initErrorAnnouncements(),this.initTableAccessibility(),this.initFormAccessibility()}createLiveRegion(){if(this.liveRegion)return;const e=document.getElementById("live-region");e?this.liveRegion=e:(this.liveRegion=document.createElement("div"),this.liveRegion.id="live-region",this.liveRegion.className="live-region",this.liveRegion.setAttribute("aria-live","polite"),this.liveRegion.setAttribute("aria-atomic","true"),this.liveRegion.setAttribute("role","status"),document.body.append(this.liveRegion))}addSkipLinks(){if(document.querySelector(".skip-links"))return void this.ensureSkipTargets();const e=document.createElement("div");e.className="skip-links";const t=document.createElement("a");t.href="#main",t.className="skip-link",t.textContent="Skip to main content";const n=document.createElement("a");n.href="#navigation",n.className="skip-link",n.textContent="Skip to navigation",e.append(t),e.append(n),document.body.insertBefore(e,document.body.firstChild),this.ensureSkipTargets()}ensureSkipTargets(){const e=[["main",'main, [role="main"]'],["navigation",'nav, [role="navigation"]']];for(const[t,n]of e){const e=document.getElementById(t)??document.querySelector(n);e&&(e.id||(e.id=t),e.hasAttribute("tabindex")||e.setAttribute("tabindex","-1"))}}initFocusManagement(){document.addEventListener("keydown",e=>{"Escape"===e.key&&this.handleEscapeKey(e)},{signal:this.signal}),this.initModalFocusManagement(),this.initDropdownFocusManagement()}handleEscapeKey(e){if(!document.querySelector(".modal.show")&&document.querySelector(".dropdown-menu.show")){const t=document.querySelector('[data-bs-toggle="dropdown"][aria-expanded="true"]');t?.click(),e.preventDefault()}}initKeyboardNavigation(){document.addEventListener("keydown",e=>{const t=e.target;t.matches("input, textarea, select, [contenteditable], [contenteditable] *")||(t.closest(".nav, .navbar-nav, .dropdown-menu")&&this.handleMenuNavigation(e),"Enter"!==e.key&&" "!==e.key||!t.hasAttribute("role")||"button"!==t.getAttribute("role")||t.matches('button, input[type="button"], input[type="submit"]')||(e.preventDefault(),t.click()))},{signal:this.signal})}handleMenuNavigation(e){if(!["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(e.key))return;const t=e.target,n=Array.from(t.closest(".nav, .navbar-nav, .dropdown-menu")?.querySelectorAll("a, button")||[]).filter(e=>null!==e.offsetParent),s=n.indexOf(t);if(-1===s)return;let i;switch(e.key){case"ArrowDown":case"ArrowRight":i=s<n.length-1?s+1:0;break;case"ArrowUp":case"ArrowLeft":i=s>0?s-1:n.length-1;break;case"Home":i=0;break;case"End":i=n.length-1;break;default:return}e.preventDefault(),n[i]?.focus()}respectReducedMotion(){if(globalThis.matchMedia("(prefers-reduced-motion: reduce)").matches&&(document.body.classList.add("reduce-motion"),document.documentElement.style.scrollBehavior="auto",!document.getElementById("adminlte-reduce-motion"))){const e=document.createElement("style");e.id="adminlte-reduce-motion",e.textContent="\n *, *::before, *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n ",document.head.append(e)}}initErrorAnnouncements(){const e=new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if(e.nodeType===Node.ELEMENT_NODE){const t=e;t.matches(".alert-danger, .invalid-feedback, .error")&&this.announce(t.textContent||"Error occurred","assertive"),t.matches(".alert-success, .success")&&this.announce(t.textContent||"Success","polite")}})})});e.observe(document.body,{childList:!0,subtree:!0}),this.signal.addEventListener("abort",()=>{e.disconnect()},{once:!0})}initTableAccessibility(){document.querySelectorAll("table").forEach(e=>{if(e.hasAttribute("role")||e.setAttribute("role","table"),e.querySelectorAll("th").forEach(e=>{if(!e.hasAttribute("scope")){const t=e.closest("thead"),n=0===e.cellIndex;t?e.setAttribute("scope","col"):n&&e.setAttribute("scope","row")}}),!e.querySelector("caption")&&e.hasAttribute("title")){const t=document.createElement("caption");t.textContent=e.getAttribute("title")||"",e.insertBefore(t,e.firstChild)}})}initFormAccessibility(){document.querySelectorAll("input, select, textarea").forEach(e=>{const t=e;if(!t.labels?.length&&!t.hasAttribute("aria-label")&&!t.hasAttribute("aria-labelledby")){const e=t.getAttribute("placeholder");e&&t.setAttribute("aria-label",e)}if(t.hasAttribute("required")){const e=t.labels?.[0];if(e&&!e.querySelector(".required-indicator")){const t=document.createElement("span");t.className="required-indicator sr-only",t.textContent=" (required)",e.append(t)}}t.classList.contains("disable-adminlte-validations")||t.addEventListener("invalid",()=>{this.handleFormError(t)},{signal:this.signal})})}handleFormError(e){e.id||e.name||(e.id=Je.generateId("field"));const t=`${e.id||e.name}-error`;let n=document.getElementById(t);n||(n=document.createElement("div"),n.id=t,n.className="invalid-feedback",n.setAttribute("role","alert"),e.parentNode?.append(n)),n.textContent=e.validationMessage;const s=(e.getAttribute("aria-describedby")||"").split(/\s+/).filter(Boolean);s.includes(t)||s.push(t),e.setAttribute("aria-describedby",s.join(" ")),e.classList.add("is-invalid"),this.announce(`Error in ${e.labels?.[0]?.textContent||e.name}: ${e.validationMessage}`,"assertive")}initModalFocusManagement(){document.addEventListener("show.bs.modal",()=>{this.focusHistory.push(document.activeElement)},{signal:this.signal}),document.addEventListener("shown.bs.modal",e=>{const t=e.target,n=t.querySelector("[autofocus]")||t.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');n?.focus()},{signal:this.signal}),document.addEventListener("hidden.bs.modal",()=>{const e=this.focusHistory.pop();e?.isConnected&&e.focus()},{signal:this.signal})}initDropdownFocusManagement(){document.addEventListener("shown.bs.dropdown",e=>{const t=e.target.querySelector(".dropdown-menu"),n=t?.querySelector("a, button");n&&n.focus()},{signal:this.signal})}announce(e,t="polite"){this.liveRegion||this.createLiveRegion(),this.liveRegion&&(this.liveRegion.setAttribute("aria-live",t),this.liveRegion.textContent=e,setTimeout(()=>{this.liveRegion&&(this.liveRegion.textContent="")},1e3))}focusElement(e){const t=document.querySelector(e);t&&(t.focus(),t.scrollIntoView({behavior:"smooth",block:"center"}))}trapFocus(e){const t=e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),n=Array.from(t),s=n[0],i=n.at(-1);e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===s&&(i?.focus(),e.preventDefault()):document.activeElement===i&&(s.focus(),e.preventDefault()))},{signal:this.signal})}addLandmarks(){if(!document.querySelector("main")){const e=document.querySelector(".app-main");e&&(e.setAttribute("role","main"),e.id||(e.id="main"))}document.querySelectorAll(".navbar-nav, .nav").forEach((e,t)=>{"UL"!==e.tagName&&"OL"!==e.tagName&&(e.hasAttribute("role")||e.setAttribute("role","navigation"),e.hasAttribute("aria-label")||e.setAttribute("aria-label",`Navigation ${t+1}`))});const e=document.querySelector('form[role="search"], .navbar-search');e&&!e.hasAttribute("role")&&e.setAttribute("role","search")}}const Ve=e=>new je(e),Ge=e=>{const[t,n,s]=(e=>{const t=/^#([\da-f]{3}|[\da-f]{6})$/i.exec(e.trim());if(t){let e=t[1];return 3===e.length&&(e=[...e].map(e=>e+e).join("")),[Number.parseInt(e.slice(0,2),16),Number.parseInt(e.slice(2,4),16),Number.parseInt(e.slice(4,6),16)]}return e.match(/\d+/g)?.map(Number)||[0,0,0]})(e).map(e=>(e/=255)<=.03928?e/12.92:(e+.055)**2.4/1.055**2.4);return.2126*t+.7152*n+.0722*s},Je={checkColorContrast:(e,t)=>{const n=Ge(e),s=Ge(t),i=(Math.max(n,s)+.05)/(Math.min(n,s)+.05);return{ratio:Math.round(100*i)/100,passes:i>=4.5}},generateId:(e="a11y")=>`${e}-${Math.random().toString(36).slice(2,11)}`,isFocusable:e=>["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])",'[tabindex]:not([tabindex="-1"])','[contenteditable="true"]'].some(t=>e.matches(t))};i(()=>{Ve({announcements:!0,skipLinks:!0,focusManagement:!0,keyboardNavigation:!0,reducedMotion:!0}).addLandmarks()});export{O as CardWidget,Pe as ColorMode,re as DirectChat,pe as FullScreen,m as Layout,we as PushMenu,Ue as SidebarSearch,te as Treeview,Ve as initAccessibility,o as initialize,a as teardown}; //# sourceMappingURL=adminlte.esm.min.js.map