@wpmoo/ui 0.9.0 → 1.0.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ASSET_LICENSE.md +4 -2
- package/LICENSE +28 -0
- package/README.md +105 -100
- package/certification.json +25 -3
- package/dist/assets/css/moo-ui.css +14005 -12457
- package/dist/assets/css/moo-ui.min.css +10 -28
- package/dist/assets/css/moo.css +2606 -902
- package/dist/assets/css/moo.min.css +10 -29
- package/dist/js/chart.js +15312 -0
- package/dist/js/chart.min.js +27 -0
- package/dist/js/combobox.js +129 -85
- package/dist/js/context-menu.js +35 -66
- package/dist/js/datatable.js +390 -188
- package/dist/js/datepicker.js +1197 -0
- package/dist/js/datepicker.min.js +7 -0
- package/dist/js/moo-ui.js +3947 -0
- package/dist/js/moo-ui.min.js +7 -0
- package/dist/js/sheet.js +46 -0
- package/dist/js/sidebar.js +190 -172
- package/dist/js/slider.js +289 -0
- package/dist/js/state.js +76 -0
- package/dist/release-manifest.json +24 -0
- package/package.json +39 -9
- package/scss/_components.scss +70 -0
- package/scss/_config.scss +18 -0
- package/scss/_settings.scss +5 -0
- package/scss/components/_accordion.scss +54 -0
- package/scss/components/_alert.scss +82 -0
- package/scss/components/_avatar.scss +139 -0
- package/scss/components/_badge.scss +34 -0
- package/scss/components/_breadcrumb.scss +119 -0
- package/scss/components/_button.scss +200 -0
- package/scss/components/_button_group.scss +57 -0
- package/scss/components/_card.scss +114 -0
- package/scss/components/_checkbox.scss +78 -0
- package/scss/components/_close_button.scss +56 -0
- package/scss/components/_collapsible.scss +44 -0
- package/scss/components/_combobox.scss +253 -0
- package/scss/components/_context-menu.scss +18 -0
- package/scss/components/_datatable.scss +1067 -0
- package/scss/components/_datepicker.scss +237 -0
- package/scss/components/_dialog.scss +69 -0
- package/scss/components/_dropdown.scss +201 -0
- package/scss/components/_field.scss +94 -0
- package/scss/components/_input.scss +31 -0
- package/scss/components/_input_group.scss +151 -0
- package/scss/components/_kbd.scss +11 -0
- package/scss/components/_menubar.scss +17 -0
- package/scss/components/_navigation.scss +36 -0
- package/scss/components/_pagination.scss +58 -0
- package/scss/components/_popover.scss +26 -0
- package/scss/components/_progress.scss +5 -0
- package/scss/components/_radio_group.scss +108 -0
- package/scss/components/_search_trigger.scss +61 -0
- package/scss/components/_select.scss +8 -0
- package/scss/components/_separator.scss +10 -0
- package/scss/components/_sheet.scss +16 -0
- package/scss/components/_sidebar.scss +5 -0
- package/scss/components/_skeleton.scss +10 -0
- package/scss/components/_slider.scss +213 -0
- package/scss/components/_spinner.scss +11 -0
- package/scss/components/_switch.scss +30 -0
- package/scss/components/_table.scss +12 -0
- package/scss/components/_tabs.scss +116 -0
- package/scss/components/_textarea.scss +8 -0
- package/scss/components/_toast.scss +116 -0
- package/scss/components/_toggle_group.scss +17 -0
- package/scss/components/_tooltip.scss +64 -0
- package/scss/components/sidebar/_base.scss +86 -0
- package/scss/components/sidebar/_collapsed.scss +112 -0
- package/scss/components/sidebar/_identity.scss +71 -0
- package/scss/components/sidebar/_menus.scss +219 -0
- package/scss/foundations/_backdrop.scss +102 -0
- package/scss/foundations/_focus.scss +83 -0
- package/scss/foundations/_globals.scss +5 -0
- package/scss/foundations/_scope.scss +26 -0
- package/scss/layouts/_app.scss +75 -0
- package/scss/layouts/_page_grid.scss +27 -0
- package/scss/layouts/app/sidebar/_base.scss +84 -0
- package/scss/layouts/app/sidebar/_default.scss +20 -0
- package/scss/layouts/app/sidebar/_floating.scss +36 -0
- package/scss/layouts/app/sidebar/_inset.scss +32 -0
- package/scss/mixins/_banner.scss +9 -0
- package/scss/moo-core.scss +16 -0
- package/scss/moo-ui.scss +54 -0
- package/scss/settings/_bootstrap_overrides.scss +7 -0
- package/scss/settings/_component_variables.scss +244 -0
- package/scss/settings/_forms.scss +28 -0
- package/scss/settings/_options.scss +2 -0
- package/scss/settings/_palette.scss +90 -0
- package/scss/themes/_forms.scss +15 -0
- package/scss/themes/_root.scss +20 -0
- package/scss/themes/_standalone.scss +3 -0
- package/scss/themes/_theme.scss +244 -0
- package/scss/utilities/_background_color.scss +18 -0
- package/scss/utilities/_scroll_fade.scss +193 -0
- package/scss/utilities/_scroll_fade_primitives.scss +43 -0
- package/scss/_facade-settings.scss +0 -51
- package/scss/settings/_facade_public.scss +0 -23
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Moo UI moo-ui.min.js v1.0.0-rc.10 (https://wpmoo.org/)
|
|
3
|
+
* Copyright 2026 WPMoo Authors
|
|
4
|
+
* Licensed under MIT (https://github.com/wpmoo-org/ui/blob/main/LICENSE)
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
var Z=new WeakMap,tt=a=>a.trim().toLowerCase(),V=class a{static getInstance(t){return t?.nodeType===1&&Z.get(t)||null}static getOrCreateInstance(t,e={}){return a.getInstance(t)||new a(t,e)}constructor(t,e={}){if(t?.nodeType!==1||!t.matches(".combobox"))throw new TypeError("Combobox requires a .combobox root element.");let i=Z.get(t);if(i)return i;if(this._element=t,this._document=t.ownerDocument,this._window=this._document.defaultView,this._config={noResultsText:"No results found.",...e},this._input=t.querySelector(".combobox-input"),this._menu=t.querySelector(".combobox-menu"),this._options=Array.from(t.querySelectorAll(".combobox-option")),!this._input||!this._menu||this._options.length===0)throw new TypeError("Combobox requires an input, menu, and at least one option.");this._isMultiple=t.dataset.comboboxMultiple==="true",this._hidden=this._isMultiple?null:t.querySelector('input[type="hidden"]'),this._chipValue=t.querySelector(".combobox-value"),this._valueStore=t.querySelector("[data-combobox-value-store]"),this._chipIconTemplate=t.querySelector("[data-combobox-chip-icon]"),this._clearTrigger=t.querySelector("[data-combobox-clear]"),this._indicator=t.querySelector(".combobox-indicator"),this._groups=Array.from(t.querySelectorAll("[data-combobox-group]")),this._separators=Array.from(t.querySelectorAll("[data-combobox-separator]")),this._listeners=[],this._generated=[],this._startsOpen=this._menu.classList.contains("show"),this._empty=this._menu.querySelector("[data-combobox-empty]"),this._empty||(this._empty=this._document.createElement("li"),this._empty.className="combobox-empty",this._empty.hidden=!0,this._empty.dataset.comboboxEmpty="true",this._empty.textContent=this._config.noResultsText,this._menu.appendChild(this._empty),this._generated.push(this._empty)),this._liveRegion=t.querySelector("[data-combobox-live]"),this._liveRegion||(this._liveRegion=this._document.createElement("span"),this._liveRegion.className="visually-hidden",this._liveRegion.setAttribute("aria-live","polite"),this._liveRegion.dataset.comboboxLive="true",t.appendChild(this._liveRegion),this._generated.push(this._liveRegion)),Z.set(t,this),this._bindEvents(),this._toggleClear(this._input.dataset.comboboxSelected==="true"||t.dataset.comboboxSelected==="true"),this._syncMultipleValue(),this._filterOptions({open:this._startsOpen,activate:this._startsOpen}),this._startsOpen||this._closeMenu(!1)}dispose(){this._listeners.forEach(({target:t,type:e,handler:i,options:s})=>{t.removeEventListener(e,i,s)}),this._listeners=[],this._closeMenu(!1),this._generated.forEach(t=>t.remove()),this._generated=[],this._chipValue?.querySelectorAll("[data-combobox-generated]").forEach(t=>t.remove()),this._valueStore?.querySelectorAll("[data-combobox-generated]").forEach(t=>t.remove()),Z.delete(this._element)}_listen(t,e,i,s){t?.addEventListener(e,i,s),t&&this._listeners.push({target:t,type:e,handler:i,options:s})}_trigger(t,e={}){return this._element.dispatchEvent(new this._window.CustomEvent("".concat(t,".moo.combobox"),{bubbles:!0,cancelable:t==="show"||t==="hide",detail:e}))}_optionGroupIsHidden(t){return t.closest("[data-combobox-group]")?.hidden||!1}_visibleOptions(){return this._options.filter(t=>!t.hidden&&!t.disabled&&!this._optionGroupIsHidden(t))}_syncGroupVisibility(){if(this._groups.length===0)return;let t=0;this._groups.forEach(e=>{let i=Array.from(e.querySelectorAll(".combobox-option")).some(s=>!s.hidden);e.hidden=!i,t+=i?1:0}),this._separators.forEach(e=>{e.hidden=t<2})}_openMenu(t=!0){if(this._menu.classList.contains("show")){this._input.setAttribute("aria-expanded","true");return}t&&!this._trigger("show")||(this._menu.classList.add("show"),this._input.setAttribute("aria-expanded","true"),t&&this._trigger("shown"))}_closeMenu(t=!0){let e=this._menu.classList.contains("show");e&&t&&!this._trigger("hide")||(this._menu.classList.remove("show"),this._input.setAttribute("aria-expanded","false"),this._input.removeAttribute("aria-activedescendant"),this._options.forEach(i=>{i.removeAttribute("aria-current"),i.classList.remove("active")}),e&&t&&this._trigger("hidden"))}_optionLabel(t){return t?.querySelector(".combobox-option__label")?.textContent?.trim()||""}_selectedOptions(){return this._options.filter(t=>t.getAttribute("aria-selected")==="true")}_toggleClear(t){let e=t?"true":"false";this._element.dataset.comboboxSelected=e,this._input.dataset.comboboxSelected=e,this._clearTrigger&&(this._clearTrigger.hidden=!t,this._indicator&&(this._indicator.hidden=t))}_createChip(t){let e=t.dataset.value||"",i=this._optionLabel(t),s=this._document.createElement("span");s.className="badge text-bg-secondary combobox-chip",s.dataset.value=e,s.dataset.comboboxGenerated="true";let r=this._document.createElement("span");r.className="combobox-chip__label",r.textContent=i,s.appendChild(r);let n=this._document.createElement("button");return n.className="combobox-chip__remove",n.type="button",n.dataset.value=e,n.dataset.comboboxChipRemove="true",n.setAttribute("aria-label","Remove ".concat(i)),n.append(this._chipIconTemplate?.content.cloneNode(!0)||"x"),s.appendChild(n),s}_syncMultipleValue(){if(!this._isMultiple)return;let t=this._selectedOptions();if(this._chipValue&&this._chipValue.replaceChildren(...t.map(e=>this._createChip(e))),this._valueStore){this._valueStore.replaceChildren();let e=this._valueStore.dataset.comboboxName||"";t.forEach(i=>{let s=this._document.createElement("input");s.type="hidden",s.name=e,s.value=i.dataset.value||"",s.dataset.comboboxGenerated="true",this._valueStore.appendChild(s)})}this._toggleClear(t.length>0)}_emitChange(){let t=this._selectedOptions();this._trigger("change",{values:t.map(e=>e.dataset.value||"")})}_removeChip(t){let e=this._options.find(i=>i.dataset.value===t);e&&(e.setAttribute("aria-selected","false"),this._syncMultipleValue(),this._emitChange())}_clearSelection(t=!0){this._hidden&&(this._hidden.value=""),this._options.forEach(e=>e.setAttribute("aria-selected","false")),this._isMultiple?this._syncMultipleValue():this._toggleClear(!1),t&&this._emitChange()}_clearStaleSelection(){if(this._isMultiple){this._input.value="",this._options.forEach(i=>{i.hidden=!1}),this._syncGroupVisibility(),this._empty.hidden=!0;return}let t=this._selectedOptions()[0]||null,e=this._optionLabel(t);!this._input.value||e&&tt(this._input.value)===tt(e)||(this._clearSelection(),this._input.value="")}_activeOption(){let t=this._input.getAttribute("aria-activedescendant");return t&&this._visibleOptions().find(e=>e.id===t)||null}_selectedOption(){return this._isMultiple?null:this._visibleOptions().find(t=>t.getAttribute("aria-selected")==="true")||null}_preferredActiveOption(){return this._selectedOption()||this._visibleOptions()[0]||null}_activatePreferredOptionIfNeeded(){this._activeOption()||this._setActiveOption(this._preferredActiveOption())}_setActiveOption(t,{scroll:e=!0}={}){if(this._options.forEach(i=>{let s=i===t;s?i.setAttribute("aria-current","true"):i.removeAttribute("aria-current"),i.classList.toggle("active",s)}),!t){this._input.removeAttribute("aria-activedescendant");return}if(this._input.setAttribute("aria-activedescendant",t.id),e){let i=t.getBoundingClientRect(),s=this._menu.getBoundingClientRect();i.top<s.top?this._menu.scrollTop-=s.top-i.top:i.bottom>s.bottom&&(this._menu.scrollTop+=i.bottom-s.bottom)}}_activateOptionFromPointer(t,e){e.pointerType==="touch"||t.disabled||t.getAttribute("aria-disabled")==="true"||t===this._activeOption()||this._setActiveOption(t,{scroll:!1})}_restoreSelectedActiveOption(){if(!this._menu.classList.contains("show"))return;let t=this._selectedOption();t&&this._setActiveOption(t,{scroll:!1})}_chooseOption(t){if(!(!t||t.disabled)){if(this._isMultiple){t.setAttribute("aria-selected",t.getAttribute("aria-selected")==="true"?"false":"true"),this._input.value="",this._syncMultipleValue(),this._filterOptions(),this._setActiveOption(t),this._emitChange();return}this._options.forEach(e=>{e.setAttribute("aria-selected",e===t?"true":"false")}),this._input.value=this._optionLabel(t),this._hidden&&(this._hidden.value=t.dataset.value||""),this._toggleClear(!0),this._setActiveOption(t),this._emitChange()}}_filterOptions({open:t=!0,activate:e=!0,resetActive:i=!1}={}){t&&this._openMenu();let s=tt(this._input.value),r=0;this._options.forEach(n=>{let o=!s||tt(n.textContent).includes(s);n.hidden=!o,r+=o?1:0}),this._syncGroupVisibility(),this._empty.hidden=r!==0,this._liveRegion.textContent=r===0?"No results":"".concat(r," result").concat(r===1?"":"s"),i&&this._setActiveOption(null,{scroll:!1}),e&&this._activatePreferredOptionIfNeeded()}_bindEvents(){this._listen(this._input,"focus",()=>{this._openMenu(),!this._isMultiple&&this._input.dataset.comboboxSelected==="true"&&this._input.select(),this._activatePreferredOptionIfNeeded()}),this._listen(this._input,"input",()=>{this._isMultiple||this._clearSelection(),this._filterOptions({resetActive:!0})}),this._listen(this._input,"blur",t=>{let e=t.relatedTarget;e instanceof this._window.Node&&this._element.contains(e)||this._clearStaleSelection()}),this._listen(this._input,"click",()=>{this._openMenu(),this._setActiveOption(this._preferredActiveOption())}),this._listen(this._input,"keydown",t=>this._handleKeydown(t)),this._options.forEach(t=>{this._listen(t,"keydown",e=>this._handleKeydown(e)),this._listen(t,"pointerenter",e=>{this._activateOptionFromPointer(t,e)}),this._listen(t,"click",()=>{this._chooseOption(t),this._isMultiple?this._input.focus():this._closeMenu()})}),this._listen(this._clearTrigger,"click",t=>{t.preventDefault(),this._clearSelection(),this._input.value="",this._input.focus(),this._filterOptions({resetActive:!0})}),this._listen(this._menu,"pointerleave",()=>this._restoreSelectedActiveOption()),this._listen(this._element,"click",t=>this._handleRootClick(t)),this._listen(this._document,"click",t=>{t.target instanceof this._window.Node&&!this._element.contains(t.target)&&this._closeMenu()})}_handleRootClick(t){let e=t.target,i=e instanceof this._window.Element?e.closest("[data-combobox-chip-remove]"):null;i?(t.preventDefault(),this._removeChip(i.dataset.value||""),this._input.focus()):this._isMultiple&&e instanceof this._window.Element&&e.closest(".combobox-chips")&&this._input.focus()}_handleKeydown(t){let e=this._visibleOptions(),i=e.findIndex(n=>n.id===this._input.getAttribute("aria-activedescendant")),s=t.key==="ArrowDown"||t.key==="Down",r=t.key==="ArrowUp"||t.key==="Up";if(this._isMultiple&&t.key==="Backspace"&&this._input.value===""){let n=this._selectedOptions(),o=n[n.length-1];o&&(t.preventDefault(),this._removeChip(o.dataset.value||""))}else if((s||r)&&e.length){t.preventDefault(),this._openMenu();let o=i===-1?0:(i+(s?1:-1)+e.length)%e.length;this._setActiveOption(e[o]),t.target!==this._input&&this._input.focus({preventScroll:!0})}else if(t.key==="Enter"){let n=e[i];n&&(t.preventDefault(),this._chooseOption(n),this._isMultiple||this._closeMenu())}else t.key==="Escape"?(this._closeMenu(),this._input.focus()):t.key==="Tab"&&this._closeMenu()}};var et=new WeakMap;function Pt(a){let{clientX:t,clientY:e}=a;return{top:e,left:t,right:t,bottom:e,width:0,height:0,x:t,y:e}}function ct(a){return!!(a?.disabled||a?.getAttribute?.("aria-disabled")==="true")}function Ft(a){let t=a.target,e=t.closest?.(".dropdown-item");return e||t.closest?.("li")?.querySelector(":scope > .dropdown-item")||null}var N=class a{static getInstance(t){return t?.nodeType===1&&et.get(t)||null}static getOrCreateInstance(t,e={}){return a.getInstance(t)||new a(t,e)}constructor(t,e={}){if(t?.nodeType!==1||!t.matches(".context-menu"))throw new TypeError("ContextMenu requires a .context-menu root element.");let i=et.get(t);if(i)return i;if(this._element=t,this._document=t.ownerDocument,this._window=this._document.defaultView,this._menu=t.querySelector(":scope > .context-menu-menu"),this._fallback=t.querySelector(":scope > [data-context-menu-fallback]"),!this._menu)throw new TypeError("ContextMenu requires a .context-menu-menu element.");if(!this._fallback)throw new TypeError("ContextMenu requires an explicit fallback trigger.");let s=this._bootstrap("Dropdown");if(!s)throw new TypeError("ContextMenu requires bootstrap.Dropdown (bootstrap.bundle.js).");this._config={...e},this._listeners=[],this._invoker=null,this._pointerRect=null,this._openMethod=null,this._reference={getBoundingClientRect:()=>this._currentRect(),contextElement:this._fallback},this._dropdown=new s(this._fallback,{reference:this._reference,autoClose:"outside"}),et.set(t,this),this._bindEvents()}dispose(){this._listeners.forEach(({target:t,type:e,handler:i,options:s})=>{t.removeEventListener(e,i,s)}),this._listeners=[],this._dropdown.dispose(),this._syncExpanded(!1),this._invoker=null,this._pointerRect=null,et.delete(this._element)}show(t=this._fallback){this._open(t,null)}hide(){this._dropdown.hide()}_listen(t,e,i,s){t.addEventListener(e,i,s),this._listeners.push({target:t,type:e,handler:i,options:s})}_bootstrap(t){return this._window.bootstrap?.[t]||null}_currentRect(){return this._pointerRect?this._pointerRect:(this._invoker||this._fallback).getBoundingClientRect()}_trigger(t,e=!1){return this._element.dispatchEvent(new this._window.CustomEvent("".concat(t,".moo.context-menu"),{bubbles:!0,cancelable:e}))}_triggers(){return Array.from(this._element.querySelectorAll(":scope > .context-menu-trigger"))}_syncExpanded(t){this._triggers().forEach(e=>{e.setAttribute("aria-expanded",String(t))})}_menuItems(){return Array.from(this._menu.querySelectorAll(".dropdown-item")).filter(t=>!ct(t)&&!t.classList.contains("disabled"))}_open(t,e,i){ct(t)||(this._menu.classList.contains("show")&&this._dropdown.hide(),this._invoker=t,this._pointerRect=e?Pt(e):null,this._openMethod=i,this._dropdown.show())}_handleContextMenu(t){let e=t.target.closest(".context-menu-trigger");!e||!this._element.contains(e)||(t.preventDefault(),this._open(e,t,"pointer"))}_handleKeydown(t){let e=t.target.closest(".context-menu-trigger");if(!e||!this._element.contains(e))return;let i=t.shiftKey&&t.key==="F10",s=t.key==="ContextMenu";!i&&!s||(t.preventDefault(),this._open(e,null,"keyboard"))}_handleFallbackClick(){this._invoker=this._fallback,this._pointerRect=null,this._openMethod="pointer"}_handleFallbackKeydown(t){if(!(t.key!==" "&&t.key!=="Spacebar")){if(t.preventDefault(),t.stopPropagation(),this._menu.classList.contains("show")){this._dropdown.hide();return}this._open(this._fallback,null,"fallback-keyboard")}}_handleMenuClick(t){let e=Ft(t);if(!e)return;let i=e.matches(".dropdown-item-check, [data-context-menu-persistent]");if(e.matches('.dropdown-item.disabled, .dropdown-item[aria-disabled="true"], .dropdown-item:disabled')||ct(e)){t.preventDefault(),t.stopPropagation();return}let r=e.matches("[data-context-menu-radio-group]")?e:null;if(r){t.preventDefault(),t.stopPropagation();let n=r.dataset.contextMenuRadioGroup;this._menu.querySelectorAll('[data-context-menu-radio-group="'.concat(n,'"]')).forEach(o=>{let h=o===r;o.classList.toggle("active",h),o.setAttribute("aria-pressed",String(h))});return}i||this._dropdown.hide()}_bindEvents(){this._listen(this._element,"contextmenu",t=>this._handleContextMenu(t)),this._listen(this._element,"keydown",t=>this._handleKeydown(t)),this._listen(this._fallback,"click",()=>this._handleFallbackClick()),this._listen(this._fallback,"keydown",t=>this._handleFallbackKeydown(t)),this._listen(this._menu,"click",t=>this._handleMenuClick(t)),this._listen(this._fallback,"show.bs.dropdown",t=>{this._trigger("show",!0)||t.preventDefault()}),this._listen(this._fallback,"shown.bs.dropdown",()=>{this._syncExpanded(!0),this._openMethod==="fallback-keyboard"?this._fallback.focus():this._openMethod==="keyboard"?this._menuItems()[0]?.focus():this._menu.focus(),this._trigger("shown")}),this._listen(this._fallback,"hide.bs.dropdown",t=>{this._trigger("hide",!0)||t.preventDefault()}),this._listen(this._fallback,"hidden.bs.dropdown",()=>{this._syncExpanded(!1);let t=this._invoker;this._pointerRect=null,this._invoker=null,this._openMethod=null,this._trigger("hidden"),queueMicrotask(()=>{t&&t!==this._fallback&&this._document.activeElement===this._fallback&&t.focus()})})}};var yt='.moo-ui[data-bs-theme="light"], .moo-ui[data-bs-theme="dark"]',Tt="[data-moo-overlay-host]";function It(a){return a?.nodeType===9?a:a?.ownerDocument?a.ownerDocument:typeof document>"u"?null:document}function Ot(a){return!!a?.matches?.(yt)}function qt(a){let t=It(a);return a?.nodeType===9||a===t?.body?t?.body?.firstElementChild||null:a}function E(a=typeof document>"u"?null:document){let t=qt(a);return t?Ot(t)?t:t.closest?.(yt)||null:null}function T(a){return a?Array.from(a.children||[]).find(t=>t.matches?.(Tt))||a:null}var it=new WeakMap;function M(a){return(a??"").toString().trim().toLowerCase()}var B=class a{static getInstance(t){return t?.nodeType===1&&it.get(t)||null}static getOrCreateInstance(t,e={}){return a.getInstance(t)||new a(t,e)}constructor(t,e={}){if(t?.nodeType!==1||!t.matches(".datatable"))throw new TypeError("DataTable requires a .datatable root element.");let i=it.get(t);if(i)return i;if(this._element=t,this._document=t.ownerDocument,this._window=this._document.defaultView,this._table=t.querySelector(":scope .datatable-table"),this._tbody=this._table?.querySelector(":scope > tbody"),!this._table||!this._tbody)throw new TypeError("DataTable requires a .datatable-table with a tbody.");this._cards=t.querySelector("[data-datatable-cards]");let s=new Map(Array.from(t.querySelectorAll("[data-datatable-card]")).map(r=>[r.dataset.datatableCardFor,r]));this._config={...e},this._listeners=[],this._pageSize=Number(t.dataset.datatablePageSize)||10,this._currentPage=1,this._sortKey=null,this._sortDirection=null,this._selectedIds=new Set,this._facetSelections=new Map,this._visibleFacets=new Map,this._searchTerm="",this._tooltips=[],this._filterMode=t.dataset.datatableFilterMode||"inline",this._reparentedRowMenus=new Map,this._reparentedRowMenuByTrigger=new WeakMap,this._reparentedSortMenus=new Map,this._reparentedSortMenuByTrigger=new WeakMap,this._rows=Array.from(this._tbody.querySelectorAll(":scope > tr[data-datatable-row]")).map((r,n)=>({element:r,cardElement:s.get(r.id)||null,index:n,search:M(r.dataset.datatableSearch),facets:this._readFacets(r)})),this._readInitialFacetVisibility(),this._readInitialSort(),it.set(t,this),this._bindEvents(),this._render(),this._initBulkTooltips(),this._initViewToggle(),this._initRowActionDropdowns(),this._initSortDropdowns()}dispose(){this._disposeRowActionDropdowns(),this._disposeSortDropdowns(),this._restoreRowActionMenus(),this._restoreSortMenus(),this._listeners.forEach(({target:t,type:e,handler:i,options:s})=>{t.removeEventListener(e,i,s)}),this._listeners=[],this._tooltips.forEach(t=>t.dispose()),this._tooltips=[],it.delete(this._element)}getSelectedIds(){return Array.from(this._selectedIds)}_listen(t,e,i,s){t&&(t.addEventListener(e,i,s),this._listeners.push({target:t,type:e,handler:i,options:s}))}_rowActionTriggers(){return this._element.querySelectorAll('tr[data-datatable-row] .dropdown [data-bs-toggle="dropdown"], [data-datatable-card] .dropdown [data-bs-toggle="dropdown"]')}_initRowActionDropdowns(){let t=this._bootstrap("Dropdown");t&&this._rowActionTriggers().forEach(e=>{t.getOrCreateInstance(e,{popperConfig:i=>this._clippingSafePopperConfig(i)})})}_sortTriggers(){return this._element.querySelectorAll('.datatable-sort [data-bs-toggle="dropdown"]')}_initSortDropdowns(){let t=this._bootstrap("Dropdown");t&&this._sortTriggers().forEach(e=>{t.getOrCreateInstance(e,{popperConfig:i=>this._clippingSafePopperConfig(i)})})}_clippingSafePopperConfig(t){return{...t,strategy:"fixed",modifiers:[...t.modifiers||[],{name:"flip",options:{fallbackPlacements:["top-end","top-start","bottom-end","bottom-start"]}},{name:"preventOverflow",options:{boundary:"viewport",padding:8}}]}}_disposeRowActionDropdowns(){let t=this._bootstrap("Dropdown");t&&this._rowActionTriggers().forEach(e=>{let i=t.getInstance(e);i&&(i.hide(),i.dispose())})}_disposeSortDropdowns(){let t=this._bootstrap("Dropdown");t&&this._sortTriggers().forEach(e=>{let i=t.getInstance(e);i&&(i.hide(),i.dispose())})}_rowActionMenuForTrigger(t){return t?.closest?.("tr[data-datatable-row], [data-datatable-card]")&&t.closest(".dropdown")?.querySelector(":scope > .dropdown-menu")||null}_rowActionOwnerIdForTrigger(t){let e=t?.closest?.("tr[data-datatable-row]")?.id;return e||t?.closest?.("[data-datatable-card]")?.getAttribute("data-datatable-card-for")||""}_reparentRowActionMenu(t){let e=this._rowActionMenuForTrigger(t);if(!e||this._reparentedRowMenus.has(e))return;let i=this._rowActionOwnerIdForTrigger(t);i&&e.setAttribute("data-datatable-row-action-owner",i),t.id&&e.setAttribute("data-datatable-row-action-trigger",t.id),this._reparentedRowMenus.set(e,{parent:e.parentNode,nextSibling:e.nextSibling,trigger:t,owner:E(t)}),this._reparentedRowMenuByTrigger.set(t,e),this._portalRoot(t).appendChild(e)}_restoreRowActionMenuForTrigger(t){let e=this._reparentedRowMenuByTrigger.get(t)||this._rowActionMenuForTrigger(t);e&&this._restoreRowActionMenu(e)}_restoreRowActionMenu(t){let e=this._reparentedRowMenus.get(t);if(!e)return;let{parent:i,nextSibling:s,trigger:r,owner:n}=e;n?.isConnected===!1?t.remove():i?.isConnected?s?.parentNode===i?i.insertBefore(t,s):i.appendChild(t):t.remove(),r&&this._reparentedRowMenuByTrigger.delete(r),t.removeAttribute("data-datatable-row-action-owner"),t.removeAttribute("data-datatable-row-action-trigger"),this._reparentedRowMenus.delete(t)}_restoreRowActionMenus(){Array.from(this._reparentedRowMenus.keys()).forEach(t=>{this._restoreRowActionMenu(t)})}_sortMenuForTrigger(t){return t?.closest?.(".datatable-sort")&&(this._reparentedSortMenuByTrigger.get(t)||t?.closest?.(".dropdown")?.querySelector(":scope > .dropdown-menu"))||null}_reparentSortMenu(t){let e=this._sortMenuForTrigger(t);!e||this._reparentedSortMenus.has(e)||(this._reparentedSortMenus.set(e,{parent:e.parentNode,nextSibling:e.nextSibling,trigger:t,owner:t.closest(".datatable-sort"),themeOwner:E(t)}),this._reparentedSortMenuByTrigger.set(t,e),this._portalRoot(t).appendChild(e))}_restoreSortMenuForTrigger(t){let e=this._reparentedSortMenuByTrigger.get(t)||this._sortMenuForTrigger(t);e&&this._restoreSortMenu(e)}_restoreSortMenu(t){let e=this._reparentedSortMenus.get(t);if(!e)return;let{parent:i,nextSibling:s,trigger:r,themeOwner:n}=e;n?.isConnected===!1?t.remove():i?.isConnected?s?.parentNode===i?i.insertBefore(t,s):i.appendChild(t):t.remove(),r&&this._reparentedSortMenuByTrigger.delete(r),this._reparentedSortMenus.delete(t)}_restoreSortMenus(){Array.from(this._reparentedSortMenus.keys()).forEach(t=>{this._restoreSortMenu(t)})}_bootstrap(t){return this._window.bootstrap?.[t]||null}_portalRoot(t=this._element){return T(E(t))||this._document.body||this._document.documentElement}_initBulkTooltips(){let t=this._bootstrap("Tooltip");t&&this._element.querySelectorAll('[data-datatable-bulk-actions] [data-bs-title]:not([data-bs-toggle="dropdown"])').forEach(e=>{this._tooltips.push(t.getOrCreateInstance(e,{animation:!1,container:this._portalRoot(e)}))})}_hideBulkTooltips({blur:t=!1}={}){if(this._tooltips.forEach(i=>{i.hide()}),!t)return;let e=this._document.activeElement;e?.closest?.("[data-datatable-bulk-actions]")&&e.blur()}_initViewToggle(){let t=Array.from(this._element.querySelectorAll(".datatable-view-toggle"));if(!t.length)return;let e=t.flatMap(d=>Array.from(d.querySelectorAll("input"))),i=this._window.getComputedStyle(this._element).getPropertyValue("--moo-datatable-responsive-breakpoint").trim(),s=this._element.hasAttribute("data-datatable-responsive-breakpoint"),r=s&&i?this._window.matchMedia("(min-width: ".concat(i,")")):null,n=new Map,o=()=>"moo-datatable-view:".concat(this._element.id).concat(r?r.matches?":wide":":narrow":""),h=(d,{persist:b=!1}={})=>{if(this._element.dataset.datatableView!==d){let f=this._bootstrap("Dropdown");[...this._rowActionTriggers(),...this._sortTriggers()].forEach(_=>{f?.getInstance(_)?.hide()})}if(this._element.dataset.datatableView=d,e.forEach(f=>{f.checked=f.value===d}),b){n.set(o(),d);try{this._window.localStorage.setItem(o(),d)}catch{}}},l=()=>{let d=n.get(o());try{d??(d=this._window.localStorage.getItem(o()))}catch{}h(d==="table"||d==="cards"?d:r?r.matches?"table":"cards":this._element.dataset.datatableView)};!s||r?l():e.forEach(d=>{d.checked=!1}),r&&this._listen(r,"change",l),t.forEach(d=>{this._listen(d,"change",b=>{let f=b.target.value;f!=="table"&&f!=="cards"||h(f,{persist:!0})})})}_readFacets(t){let e={};return Array.from(t.attributes).forEach(i=>{let s=/^data-datatable-facet-(.+)$/.exec(i.name);s&&(e[s[1]]=i.value)}),e}_readInitialFacetVisibility(){this._element.querySelectorAll("[data-datatable-facet]").forEach(t=>{let e=t.dataset.datatableFacet;e&&this._visibleFacets.set(e,!t.hidden)}),this._element.querySelectorAll("[data-datatable-filter-group]").forEach(t=>{let e=t.dataset.datatableFilterGroup;e&&!this._visibleFacets.has(e)&&this._visibleFacets.set(e,!1)}),this._element.querySelectorAll("[data-datatable-filter-option-key]").forEach(t=>{let e=t.dataset.datatableFilterOptionKey;e&&!this._visibleFacets.has(e)&&this._visibleFacets.set(e,!1)})}_readInitialSort(){let t=this._element.querySelector("th[data-datatable-initial-sort][data-datatable-column]"),e=t?.dataset.datatableInitialSort;e!=="asc"&&e!=="desc"||(this._sortKey=t.dataset.datatableColumn||null,this._sortDirection=this._sortKey?e:null)}_trigger(t,e={}){this._element.dispatchEvent(new this._window.CustomEvent("".concat(t,".moo.datatable"),{bubbles:!0,detail:e}))}_sortValue(t,e){let i=t.element.querySelector(':scope > [data-datatable-column="'.concat(e,'"]'));return i?M(i.dataset.datatableSortValue??i.textContent):""}_matchesFilters(t){if(this._searchTerm&&!t.search.includes(this._searchTerm))return!1;for(let[e,i]of this._facetSelections)if(i.size!==0&&!i.has(t.facets[e]))return!1;return!0}_visibleRows(){let t=this._rows.filter(e=>this._matchesFilters(e));if(this._sortKey){let e=this._sortDirection==="desc"?-1:1;t.sort((i,s)=>{let r=this._sortValue(i,this._sortKey),n=this._sortValue(s,this._sortKey);return r===n?i.index-s.index:r>n?e:-e})}else t.sort((e,i)=>e.index-i.index);return t}_pageCount(t){return Math.max(1,Math.ceil(t/this._pageSize))}_render(){let t=this._visibleRows(),e=this._pageCount(t.length);this._currentPage=Math.min(Math.max(1,this._currentPage),e);let i=(this._currentPage-1)*this._pageSize,s=t.slice(i,i+this._pageSize),r=new Set(s.map(l=>l.element.id));this._rows.forEach(l=>{let d=r.has(l.element.id);l.element.hidden=!d,l.cardElement&&(l.cardElement.hidden=!d)});let n=Array.from(this._tbody.children).filter(l=>r.has(l.id)).map(l=>l.id),o=s.map(l=>l.element.id);(n.length!==o.length||n.some((l,d)=>l!==o[d]))&&s.forEach(l=>{this._tbody.appendChild(l.element),this._cards&&l.cardElement&&this._cards.appendChild(l.cardElement)}),this._renderToolbarState(),this._renderSortHeaders(),this._renderSelection(s),this._renderFrameState(t.length),this._renderEmptyState(t.length),this._renderPagination(t.length,e),this._renderPageSize(),this._renderBulkActions()}_renderToolbarState(){let t=!!this._searchTerm,e=Array.from(this._facetSelections.values()).some(s=>s.size>0),i=this._element.querySelector("[data-datatable-reset]");i&&(i.hidden=!(t||e)),this._element.querySelectorAll("[data-datatable-facet]").forEach(s=>{let r=s.dataset.datatableFacet,n=this._facetSelections.get(r)||new Set;this._visibleFacets.has(r)&&(s.hidden=!this._visibleFacets.get(r)),s.querySelector(".datatable-facet-trigger")?.classList.toggle("datatable-facet-trigger-active",n.size>0);let h=s.querySelector("[data-datatable-facet-summary]");h&&(h.hidden=n.size===0,h.replaceChildren(),n.size>2?h.appendChild(this._createFacetBadge("".concat(n.size," selected"))):n.forEach(l=>{let b=s.querySelector('[data-datatable-facet-option="'.concat(l,'"]'))?.querySelector("[data-datatable-facet-option-label]")?.textContent??l;h.appendChild(this._createFacetBadge(b))})),s.querySelectorAll("[data-datatable-facet-option]").forEach(l=>{let d=n.has(l.dataset.datatableFacetOption);l.classList.toggle("active",d),l.setAttribute("aria-pressed",String(d))})}),this._element.querySelectorAll("[data-datatable-filter-toggle]").forEach(s=>{let r=s.dataset.datatableFilterToggle,n=this._visibleFacets.get(r)??!0;s.classList.toggle("active",n),s.setAttribute("aria-pressed",n?"true":"false")}),this._element.querySelectorAll("[data-datatable-filter-option]").forEach(s=>{let r=s.dataset.datatableFilterOptionKey,o=(this._facetSelections.get(r)||new Set).has(s.dataset.datatableFilterOption);s.classList.toggle("active",o),s.setAttribute("aria-pressed",o?"true":"false")}),this._element.querySelectorAll("[data-datatable-filter-group-summary]").forEach(s=>{let r=this._facetSelections.get(s.dataset.datatableFilterGroupSummary)||new Set;s.hidden=r.size===0,s.textContent=r.size>0?"".concat(r.size," selected"):""})}_createFacetBadge(t){let e=this._document.createElement("span");return e.className="datatable-facet-badge",e.textContent=t,e}_renderSelection(t){let e=Array.from(this._element.querySelectorAll("[data-datatable-select-all]"));t.forEach(r=>{[r.element,r.cardElement].forEach(n=>{let o=n?.querySelector("[data-datatable-select-row]");o&&(o.checked=this._selectedIds.has(r.element.id)),n?.classList.toggle("datatable-row-selected",this._selectedIds.has(r.element.id))})});let i=t.length,s=t.filter(r=>this._selectedIds.has(r.element.id)).length;e.forEach(r=>{r.checked=i>0&&s===i,r.indeterminate=s>0&&s<i})}_renderBulkActions(){let t=this._element.querySelector("[data-datatable-bulk-actions]");if(!t)return;t.hidden=this._selectedIds.size===0;let e=t.querySelector("[data-datatable-bulk-count]");e&&(e.textContent=String(this._selectedIds.size))}_renderFrameState(t){let e=t===0;this._element.querySelectorAll(".datatable-frame, .datatable-card-frame").forEach(i=>{i.hidden=e})}_renderEmptyState(t){let e=this._element.querySelector("[data-datatable-empty]");if(!e)return;let i=this._rows.length>0;e.hidden=t!==0,e.querySelector(".datatable-empty-title")?.replaceChildren(this._document.createTextNode(i?"No matching results":"No rows to display"));let s=e.querySelector(".datatable-empty-copy");s&&(s.hidden=!i);let r=e.querySelector("[data-datatable-empty-reset]");r&&(r.hidden=!i)}_sortAriaValue(t){return t==="asc"?"ascending":t==="desc"?"descending":"none"}_renderSortHeaders(){this._element.querySelectorAll("th[data-datatable-column]").forEach(t=>{if(!t.querySelector("[data-datatable-sort-key]")){delete t.dataset.datatableSortState,delete t.dataset.datatableSortDirection,t.removeAttribute("aria-sort");return}let i=t.dataset.datatableColumn,s=i&&i===this._sortKey?this._sortDirection:"none";t.dataset.datatableSortState=s||"none",t.setAttribute("aria-sort",this._sortAriaValue(s)),s==="asc"||s==="desc"?t.dataset.datatableSortDirection=s:delete t.dataset.datatableSortDirection})}_renderPagination(t,e){let i=this._element.querySelector("[data-datatable-page-first]"),s=this._element.querySelector("[data-datatable-page-prev]"),r=this._element.querySelector("[data-datatable-page-next]"),n=this._element.querySelector("[data-datatable-page-last]"),o=this._currentPage<=1,h=this._currentPage>=e;[i,s].forEach(u=>this._setPageItemDisabled(u,o)),[r,n].forEach(u=>this._setPageItemDisabled(u,h));let l=this._element.querySelector("[data-datatable-results-summary]");if(l)if(t===0)l.textContent="No results";else{let u=(this._currentPage-1)*this._pageSize+1,c=Math.min(this._currentPage*this._pageSize,t);l.textContent="Showing ".concat(u,"-").concat(c," of ").concat(t)}let d=this._element.querySelector("template[data-datatable-page-numbers]");if(!d)return;let b=this._pageWindow(this._currentPage,e),f=Array.from(d.parentNode.querySelectorAll("[data-datatable-page-number], [data-datatable-page-ellipsis]")),_=f.map(u=>u.dataset.datatablePageEllipsis===void 0?Number(u.dataset.datatablePageNumber):"\u2026");if(_.length!==b.length||_.some((u,c)=>u!==b[c])){f.forEach(c=>c.remove());let u=this._document.createDocumentFragment();b.forEach(c=>{let D=this._document.createElement("li");if(D.className="page-item",c==="\u2026")D.dataset.datatablePageEllipsis="",D.innerHTML='<span class="page-link">\u2026</span>';else{D.dataset.datatablePageNumber=String(c);let w=this._document.createElement("button");w.type="button",w.className="page-link",w.textContent=String(c),w.setAttribute("aria-label","Go to page ".concat(c)),w.dataset.datatablePageGo=String(c),D.appendChild(w)}u.appendChild(D)}),d.parentNode.insertBefore(u,d)}d.parentNode.querySelectorAll("[data-datatable-page-number]").forEach(u=>{let c=Number(u.dataset.datatablePageNumber)===this._currentPage;u.classList.toggle("active",c),c?u.setAttribute("aria-current","page"):u.removeAttribute("aria-current")})}_renderPageSize(){let t=String(this._pageSize),e=this._element.querySelector("[data-datatable-page-size-value]");e&&(e.textContent=t);let i=this._element.querySelector("[data-datatable-page-size-select]");i&&(i.value=t),this._element.querySelectorAll("[data-datatable-page-size-option]").forEach(s=>{let r=s.dataset.datatablePageSizeOption===t;s.classList.toggle("active",r),s.setAttribute("aria-pressed",r?"true":"false")})}_setPageItemDisabled(t,e){t&&(t.disabled=e,t.closest(".page-item")?.classList.toggle("disabled",e))}_pageWindow(t,e){if(e<=7)return Array.from({length:e},(n,o)=>o+1);let i=new Set([1,e,t-1,t,t+1]),s=Array.from(i).filter(n=>n>=1&&n<=e).sort((n,o)=>n-o),r=[];return s.forEach((n,o)=>{o>0&&n-s[o-1]>1&&r.push("\u2026"),r.push(n)}),r}_isColumnFixed(t){return this._element.querySelector('th[data-datatable-column="'.concat(t,'"]'))?.hasAttribute("data-datatable-column-fixed")||!1}_setColumnVisible(t,e,{syncViewToggle:i=!0}={}){!e&&this._isColumnFixed(t)||(this._element.querySelectorAll('[data-datatable-column="'.concat(t,'"], [data-datatable-detail-column="').concat(t,'"]')).forEach(s=>{s.classList.toggle("datatable-col-hidden",!e)}),i&&this._element.querySelectorAll('[data-datatable-column-toggle="'.concat(t,'"]')).forEach(s=>{s.classList.toggle("active",e),s.setAttribute("aria-pressed",String(e))}))}_setSort(t,e){let i=e==="asc"||e==="desc"?e:null;this._sortKey=i?t:null,this._sortDirection=i,this._render(),this._trigger("sort",{key:this._sortKey,direction:this._sortDirection})}_handleSortAction(t){let e=t.target.closest("[data-datatable-sort-action]");if(!e)return;let i=e.closest(".dropdown-menu"),s=i?.closest(".datatable-sort")||this._reparentedSortMenus.get(i)?.owner;if(!s||!this._element.contains(s))return;let r=s.querySelector("[data-datatable-sort-key]")?.dataset.datatableSortKey;if(!r)return;let n=e.dataset.datatableSortAction;if(n==="hide"){this._setColumnVisible(r,!1);return}this._setSort(r,n)}_handleFacetClick(t){let e=t.target.closest("[data-datatable-facet-option]"),i=t.target.closest("[data-datatable-facet-clear]");if(!e&&!i)return;let r=t.target.closest("[data-datatable-facet]")?.dataset.datatableFacet;if(!r)return;let n=this._facetSelections.get(r)||new Set;if(i)n.clear();else{let o=e.dataset.datatableFacetOption;n.has(o)?n.delete(o):n.add(o)}this._facetSelections.set(r,n),this._filterMode==="picker"&&n.size===0&&this._visibleFacets.set(r,!1),this._currentPage=1,this._render(),this._trigger("filter")}_handleFacetSearch(t){let e=t.target.closest("[data-datatable-facet-search]");if(!e)return;let i=e.closest("[data-datatable-facet]"),s=M(e.value);i?.querySelectorAll("[data-datatable-facet-option]").forEach(r=>{let n=M(r.querySelector("[data-datatable-facet-option-label]")?.textContent||r.textContent);r.closest("li")?.classList.toggle("datatable-facet-search-hidden",s.length>0&&!n.includes(s))})}_handleFacetSearchKeydown(t){if(t.key!=="ArrowDown")return;let e=t.target.closest("[data-datatable-facet-search]");if(!e)return;let i=e.closest("[data-datatable-facet]"),r=Array.from(i?.querySelectorAll("[data-datatable-facet-option]")||[]).find(n=>!n.closest("li")?.classList.contains("datatable-facet-search-hidden"));r&&(t.preventDefault(),r.focus())}_handleFilterOptionClick(t){let e=t.target.closest("[data-datatable-filter-option]");if(!e)return;let i=e.dataset.datatableFilterOptionKey,s=e.dataset.datatableFilterOption;if(!i||!this._visibleFacets.has(i))return;this._visibleFacets.set(i,!0);let r=this._facetSelections.get(i)||new Set;r.has(s)?r.delete(s):r.add(s),this._facetSelections.set(i,r),r.size===0&&this._visibleFacets.set(i,!1),this._currentPage=1,this._render(),this._trigger("filter")}_showFilterPickerPanel(t=null){this._element.querySelectorAll("[data-datatable-filter-panel]").forEach(e=>{let i=e.dataset.datatableFilterPanel==="facets",s=e.dataset.datatableFilterPanelKey===t;e.hidden=t?!s:!i}),this._element.querySelector(".datatable-search-filter-menu")?.setAttribute("data-datatable-filter-menu-panel",t?"options":"facets")}_handleFilterPickerClick(t){let e=t.target.closest("[data-datatable-filter-group]");if(e){let i=e.dataset.datatableFilterGroup;this._showFilterPickerPanel(i);let s=this._element.querySelector('[data-datatable-filter-option-search="'.concat(i,'"]')),r=this._element.querySelector('[data-datatable-filter-option-key="'.concat(i,'"]'));(s||r)?.focus({preventScroll:!0});return}t.target.closest("[data-datatable-filter-back]")&&this._showFilterPickerPanel()}_handleFilterOptionSearch(t){let e=t.target.closest("[data-datatable-filter-option-search]");if(!e)return;let i=e.dataset.datatableFilterOptionSearch,s=M(e.value);this._element.querySelectorAll('[data-datatable-filter-option-key="'.concat(i,'"]')).forEach(r=>{let n=M(r.querySelector("[data-datatable-filter-option-label]")?.textContent||r.textContent);r.closest("li")?.classList.toggle("datatable-filter-option-search-hidden",s.length>0&&!n.includes(s))})}_handleFilterOptionSearchKeydown(t){if(t.key!=="ArrowDown")return;let e=t.target.closest("[data-datatable-filter-option-search]");if(!e)return;let i=e.dataset.datatableFilterOptionSearch,r=Array.from(this._element.querySelectorAll('[data-datatable-filter-option-key="'.concat(i,'"]'))).find(n=>!n.closest("li")?.classList.contains("datatable-filter-option-search-hidden"));r&&(t.preventDefault(),r.focus())}_handleFilterToggleClick(t){let e=t.target.closest("[data-datatable-filter-toggle]");if(!e)return;let i=e.dataset.datatableFilterToggle;if(!i||!this._visibleFacets.has(i))return;let s=!this._visibleFacets.get(i);this._visibleFacets.set(i,s),s||(this._facetSelections.get(i)?.clear(),this._currentPage=1,this._trigger("filter")),this._render()}_handleColumnToggleClick(t){let e=t.target.closest("[data-datatable-column-toggle]");if(!e)return;let i=e.dataset.datatableColumnToggle,s=e.getAttribute("aria-pressed")==="true";this._setColumnVisible(i,s,{syncViewToggle:!1})}_handleReset(){let t=this._element.querySelector("[data-datatable-search]");t&&(t.value=""),this._searchTerm="",this._facetSelections.forEach(e=>e.clear()),this._filterMode==="picker"&&this._visibleFacets.forEach((e,i)=>{this._visibleFacets.set(i,!1)}),this._currentPage=1,this._render(),this._trigger("filter")}_handleSelectAll(t){let e=t.target.checked,i=this._visibleRows(),s=(this._currentPage-1)*this._pageSize;i.slice(s,s+this._pageSize).forEach(n=>{e?this._selectedIds.add(n.element.id):this._selectedIds.delete(n.element.id)}),this._render(),this._trigger("select")}_handleSelectRow(t){let e=t.target.closest("[data-datatable-select-row]");if(!e)return;let i=e.closest("[data-datatable-row]"),s=e.closest("[data-datatable-card]"),r=i?.id||s?.dataset.datatableCardFor;r&&(e.checked?this._selectedIds.add(r):this._selectedIds.delete(r),this._render(),this._trigger("select"))}_handleBulkClick(t){if(t.target.closest("[data-datatable-bulk-clear]")){this._clearSelection();return}let e=t.target.closest("[data-datatable-bulk-update]");if(e){let s=e.dataset.datatableBulkUpdate,r=e.dataset.datatableBulkUpdateValue;this._applyBulkUpdate(s,r,e);return}let i=t.target.closest("[data-datatable-bulk-action]");if(i){let s=i.dataset.datatableBulkAction;if(s==="delete"){this._applyBulkDelete();return}this._trigger("bulk-".concat(s),{ids:this.getSelectedIds()})}}_clearSelection(){this._hideBulkTooltips({blur:!0}),this._selectedIds.clear(),this._render(),this._trigger("select")}_applyBulkUpdate(t,e,i){let s=i.querySelector("svg")?.cloneNode(!0),r=i.querySelector("span")?.textContent?.trim()??e;this._selectedIds.forEach(n=>{let o=this._rows.find(f=>f.element.id===n);if(!o)return;o.element.setAttribute("data-datatable-facet-".concat(t),e),o.facets[t]=e;let h=o.element.querySelector('[data-datatable-column="'.concat(t,'"]'));if(!h)return;let l=h.querySelector("[data-datatable-cell-label]");l?l.textContent=r:h.textContent=r;let d=h.querySelector("svg");d&&s&&d.replaceWith(s.cloneNode(!0));let b=o.cardElement?.querySelector('[data-datatable-detail-column="'.concat(t,'"] .datatable-card-value'));b&&(b.innerHTML=h.innerHTML)}),this._render(),this._trigger("bulk-update",{key:t,value:e,ids:this.getSelectedIds()})}_applyBulkDelete(){let t=this.getSelectedIds();t.forEach(e=>{let i=this._rows.findIndex(s=>s.element.id===e);i!==-1&&(this._rows[i].element.remove(),this._rows[i].cardElement?.remove(),this._rows.splice(i,1))}),this._selectedIds.clear(),this._render(),this._trigger("bulk-delete",{ids:t})}_handlePageClick(t){let e=t.target.closest("[data-datatable-page-go]");if(e){this._currentPage=Number(e.dataset.datatablePageGo),this._render();return}if(t.target.closest("[data-datatable-page-first]")){this._currentPage=1,this._render();return}if(t.target.closest("[data-datatable-page-prev]")){this._currentPage-=1,this._render();return}if(t.target.closest("[data-datatable-page-next]")){this._currentPage+=1,this._render();return}t.target.closest("[data-datatable-page-last]")&&(this._currentPage=this._pageCount(this._visibleRows().length),this._render())}_setPageSize(t){let e=Number(t);!Number.isFinite(e)||e<=0||(this._pageSize=e,this._element.dataset.datatablePageSize=String(e),this._currentPage=1,this._render())}_bindEvents(){let t=this._element.querySelector("[data-datatable-search]");this._listen(t,"input",s=>{this._searchTerm=M(s.target.value),this._currentPage=1,this._render(),this._trigger("filter")}),this._listen(t,"keydown",s=>{if(s.key!=="Enter")return;s.preventDefault();let r=this._element.querySelector("[data-datatable-filter-menu-trigger]"),n=this._bootstrap("Dropdown");r&&n&&n.getOrCreateInstance(r).hide()}),this._listen(this._element,"click",s=>{this._handleFilterPickerClick(s),this._handleFilterOptionClick(s),this._handleFilterToggleClick(s),this._handleFacetClick(s),this._handleColumnToggleClick(s),this._handlePageClick(s),this._handleBulkClick(s),s.target.closest("[data-datatable-empty-reset]")&&this._handleReset(),s.target.closest("[data-datatable-select-row]")&&this._handleSelectRow(s)}),this._listen(this._document,"click",s=>this._handleSortAction(s)),this._listen(this._document,"keydown",s=>{s.key==="Escape"&&this._selectedIds.size>0&&this._clearSelection()}),this._listen(this._element,"show.bs.dropdown",s=>{this._reparentRowActionMenu(s.target),this._reparentSortMenu(s.target);let r=this._bootstrap("Tooltip")?.getInstance(s.target);r?.hide(),r?.disable()}),this._listen(this._element,"hidden.bs.dropdown",s=>{this._restoreRowActionMenuForTrigger(s.target),this._restoreSortMenuForTrigger(s.target),this._bootstrap("Tooltip")?.getInstance(s.target)?.enable(),s.target.matches("[data-datatable-filter-menu-trigger]")&&this._showFilterPickerPanel()}),this._element.querySelectorAll("[data-datatable-filter-option-search]").forEach(s=>{this._listen(s,"input",r=>this._handleFilterOptionSearch(r)),this._listen(s,"keydown",r=>this._handleFilterOptionSearchKeydown(r))}),this._element.querySelectorAll("[data-datatable-facet-search]").forEach(s=>{this._listen(s,"input",r=>this._handleFacetSearch(r)),this._listen(s,"keydown",r=>this._handleFacetSearchKeydown(r))});let e=this._element.querySelector("[data-datatable-reset]");this._listen(e,"click",()=>this._handleReset()),this._element.querySelectorAll("[data-datatable-select-all]").forEach(s=>{this._listen(s,"change",r=>this._handleSelectAll(r))});let i=this._element.querySelector("[data-datatable-page-size-select]");this._listen(i,"change",s=>this._setPageSize(s.target.value)),this._element.querySelectorAll("[data-datatable-page-size-option]").forEach(s=>{this._listen(s,"click",()=>{this._setPageSize(s.dataset.datatablePageSizeOption)})})}};var $=new WeakMap,z=new WeakMap,K=new WeakMap,A="en",ie=1440*60*1e3,Rt=new Date(2026,7,16),I=8;function pt(a,t){return a?.nodeType===1&&!!a.matches?.(t)}function m(a,t,e,i,s){t&&(t.addEventListener(e,i,s),a.push({target:t,type:e,handler:i,options:s}))}function F(a){a.forEach(({target:t,type:e,handler:i,options:s})=>{t.removeEventListener(e,i,s)}),a.length=0}function g(a){if(!a)return null;if(a instanceof Date)return Number.isNaN(a.getTime())?null:new Date(a.getFullYear(),a.getMonth(),a.getDate());if(typeof a=="number")return g(new Date(a));let t=String(a).trim(),e=/^(\d{4})-(\d{2})-(\d{2})$/.exec(t);if(e){let i=new Date(Number(e[1]),Number(e[2])-1,Number(e[3]));return i.getFullYear()===Number(e[1])&&i.getMonth()===Number(e[2])-1&&i.getDate()===Number(e[3])?i:null}return null}function wt(a){return String(a).padStart(2,"0")}function y(a){return"".concat(a.getFullYear(),"-").concat(wt(a.getMonth()+1),"-").concat(wt(a.getDate()))}function v(a,t){return!a||!t?0:a.getTime()-t.getTime()}function P(a,t){return!!(a&&t&&y(a)===y(t))}function x(a,t){return new Date(a.getFullYear(),a.getMonth(),a.getDate()+t)}function dt(a,t){let e=new Date(a.getFullYear(),a.getMonth()+t,1),i=Math.min(a.getDate(),ut(e.getFullYear(),e.getMonth()));return new Date(e.getFullYear(),e.getMonth(),i)}function st(a=A){try{if(typeof Intl<"u"&&typeof Intl.Locale=="function"){let t=new Intl.Locale(a||A),e=t.weekInfo||t.getWeekInfo?.();if(Number.isInteger(e?.firstDay))return e.firstDay%7}}catch{}return 0}function Lt(a=A){let t=st(a);return Array.from({length:7},(e,i)=>x(Rt,(t+i)%7))}function C(a){return new Date(a.getFullYear(),a.getMonth(),1)}function ut(a,t){return new Date(a,t+1,0).getDate()}function Vt(a,t,e){return t&&v(a,t)<0?new Date(t):e&&v(a,e)>0?new Date(e):a}function Nt(a){if(Array.isArray(a))return a.map(g).filter(Boolean).map(y);if(!a)return[];let t=String(a).trim();if(!t)return[];try{let e=JSON.parse(t);if(Array.isArray(e))return e.map(g).filter(Boolean).map(y)}catch{}return t.split(",").map(g).filter(Boolean).map(y)}function O(a,t=A){return a?new Intl.DateTimeFormat(t||A,{month:"short",day:"numeric",year:"numeric"}).format(a):""}function St(a,t=A){return new Intl.DateTimeFormat(t||A,{month:"long",year:"numeric"}).format(a)}function ht(a,t,e=A){if(a)return t==="yyyy-mm-dd"?y(a):t?O(a,e):new Date(a)}function ft(a,t={}){let e=a.dataset||{},i=t.locale||e.datepickerLocale||e.calendarLocale||A,s=g(t.minDate||e.calendarMinDate||e.datepickerMinDate),r=g(t.maxDate||e.calendarMaxDate||e.datepickerMaxDate);return{locale:i,mode:t.mode||e.calendarMode||e.datepickerMode||"single",placeholder:t.placeholder||e.datepickerPlaceholder||"Pick a date",value:t.value||e.calendarValue||e.datepickerValue||"",startValue:t.startValue||e.calendarStartValue||e.datepickerStartValue||"",endValue:t.endValue||e.calendarEndValue||e.datepickerEndValue||"",minDate:s,maxDate:r,disabledDates:Nt(t.disabledDates||e.calendarDisabledDates||e.datepickerDisabledDates),captionLayout:t.captionLayout||e.calendarCaptionLayout||"",showPresets:t.showPresets??(e.calendarShowPresets==="true"||e.datepickerShowPresets==="true")}}function k(a,t,e,i={},s=!1){return a.dispatchEvent(new t.CustomEvent(e,{bubbles:!0,cancelable:s,detail:i}))}function _t(a,t){a&&(a.value=t||"")}function Et(a,t){a&&(a.value=t||"")}function gt(a,t,e){if(e){a.dataset.invalid="true",t.classList.add("is-invalid"),t.setAttribute("aria-invalid","true");return}delete a.dataset.invalid,t.classList.remove("is-invalid"),t.removeAttribute("aria-invalid")}function At(a,t,e){e?.required&&e.checkValidity()&>(a,t,!1)}function vt(a,t,e){return e<t?t:Math.min(Math.max(a,t),e)}function Bt(a,t,e){let i=a?.ownerDocument?.defaultView||window,s=a?i.getComputedStyle(a).getPropertyValue(t).trim():"",r=Number.parseFloat(s);if(!Number.isFinite(r))return e;if(s.endsWith("rem")){let n=a.ownerDocument.documentElement,o=Number.parseFloat(i.getComputedStyle(n).fontSize);return Number.isFinite(o)?r*o:e}if(s.endsWith("em")){let n=Number.parseFloat(i.getComputedStyle(a).fontSize);return Number.isFinite(n)?r*n:e}return Number.isFinite(r)?r:e}function W(a,t){return!!(t&&(a._element.contains(t)||a._popover.contains(t)))}function Dt(a){let e=E(a._trigger)?.getAttribute("data-bs-theme")||null,i=a._document.defaultView?.getComputedStyle(a._trigger).direction;e?a._popover.setAttribute("data-bs-theme",e):a._popover.removeAttribute("data-bs-theme"),i==="ltr"||i==="rtl"?a._popover.setAttribute("dir",i):a._popover.removeAttribute("dir")}function $t(a){let t=a._popover,e=E(a._trigger),i=T(e)||a._document.body||a._document.documentElement;if(i){if(a._popoverPortal?.portal===i&&t.parentElement===i){Dt(a);return}nt(a),a._popoverPortal={parent:t.parentNode,nextSibling:t.nextSibling,owner:e,portal:i,hadTheme:t.hasAttribute("data-bs-theme"),theme:t.getAttribute("data-bs-theme"),hadDirection:t.hasAttribute("dir"),direction:t.getAttribute("dir")},i.appendChild(t),Dt(a)}}function nt(a){let t=a._popoverPortal;if(!t)return;let e=a._popover;t.owner?.isConnected===!1?e.remove():t.parent?.isConnected?t.nextSibling?.parentNode===t.parent?t.parent.insertBefore(e,t.nextSibling):t.parent.appendChild(e):e.remove(),t.hadTheme?e.setAttribute("data-bs-theme",t.theme):e.removeAttribute("data-bs-theme"),t.hadDirection?e.setAttribute("dir",t.direction):e.removeAttribute("dir"),a._popoverPortal=null}function zt(a,t,e,i){let s=Bt(e,"--moo-datepicker-popover-offset",6),r=getComputedStyle(a).direction;t.style.position="fixed",t.style.inset="auto",t.style.right="auto",t.style.bottom="auto",t.style.maxHeight="",t.style.overflowY="";let n=a.getBoundingClientRect(),o=t.getBoundingClientRect(),h=i.innerWidth,l=i.innerHeight,d=r==="rtl"?n.right-o.width:n.left,b=vt(d,I,h-o.width-I),f=n.bottom+s<=l?l-n.bottom-s-I:0,_=n.top-s-I,p=o.height>f&&_>f,u=p?"top":"bottom",c=Math.max(0,p?_:f),D=Math.min(o.height,c),w=p?n.top-s-D:n.bottom+s;t.style.left="".concat(Math.round(b),"px"),t.style.top="".concat(Math.round(vt(w,I,l-D-I)),"px"),c>0&&(t.style.maxHeight="".concat(Math.floor(c),"px"),t.style.overflowY="auto"),t.dataset.datepickerPlacement=u}function Kt(a){a.style.position="",a.style.inset="",a.style.right="",a.style.bottom="",a.style.left="",a.style.top="",a.style.maxHeight="",a.style.overflowY="",delete a.dataset.datepickerPlacement}function Ct(a){F(a._floatingListeners),$t(a);let t=()=>{a.isOpen()&&zt(a._trigger,a._popover,a._element,a._window)};a._positionPopover=t,t(),m(a._floatingListeners,a._window,"resize",t),m(a._floatingListeners,a._window,"scroll",t,!0),m(a._floatingListeners,a._document,"scroll",t,!0)}function at(a){F(a._floatingListeners),a._positionPopover=null,Kt(a._popover),nt(a)}function Wt(a,t){return new Intl.DateTimeFormat(t||A,{month:"short"}).format(new Date(2026,a,1))}function Yt(a,t,e){let i=a?a.getFullYear():e.getFullYear()-100,s=t?t.getFullYear():e.getFullYear()+20,r=[];for(let n=i;n<=s;n+=1)r.push(n);return r}function kt(a,t,e=""){let i=a.createElement("span");return i.className=e,i.setAttribute("aria-hidden","true"),i.textContent=t,i}var q=class a{static getInstance(t){return t?.nodeType===1&&z.get(t)||null}static getOrCreateInstance(t,e={}){return a.getInstance(t)||new a(t,e)}constructor(t,e={}){if(!pt(t,"[data-calendar]"))throw new TypeError("MooCalendar requires a [data-calendar] root element.");let i=z.get(t);if(i)return i;this._element=t,this._document=t.ownerDocument,this._window=this._document.defaultView||window,this._listeners=[],this._disposed=!1,this._config=ft(t,e),this._mode=this._config.mode==="range"?"range":"single",this._disabledDates=new Set(this._config.disabledDates),this._selectedDate=g(this._config.value),this._rangeStart=g(this._config.startValue),this._rangeEnd=g(this._config.endValue),this._activeDate=this._nearestEnabledDate(this._rangeStart||this._selectedDate||new Date),this._viewDate=C(this._activeDate),this._captionId=this._element.id?"".concat(this._element.id,"-caption"):"moo-calendar-caption-".concat(Math.random().toString(36).slice(2)),this._labelId=this._element.id?"".concat(this._element.id,"-label"):"moo-calendar-label-".concat(Math.random().toString(36).slice(2)),z.set(t,this),this._bindEvents(),this._render()}dispose(){this._disposed||(this._disposed=!0,F(this._listeners),this._element.replaceChildren(),z.get(this._element)===this&&z.delete(this._element))}getDate(t=void 0){return this._mode==="range"?this.getDates(t):ht(this._selectedDate,t,this._config.locale)}getDates(t=void 0){return[ht(this._rangeStart,t,this._config.locale),ht(this._rangeEnd,t,this._config.locale)]}setDate(t,e={}){if(this._mode!=="single")return!1;let i=g(t);return!i||this._isDisabled(i)?!1:(this._selectedDate=i,this._activeDate=i,this._viewDate=C(i),this._render(),e.emit!==!1&&this._emitChange(!0),!0)}setDates(t,e,i={}){if(this._mode!=="range")return!1;let s=g(t),r=g(e);return s&&this._isDisabled(s)||r&&this._isDisabled(r)?!1:(this._rangeStart=s,this._rangeEnd=r,this._rangeStart&&this._rangeEnd&&v(this._rangeStart,this._rangeEnd)>0&&([this._rangeStart,this._rangeEnd]=[this._rangeEnd,this._rangeStart]),this._activeDate=this._rangeEnd||this._rangeStart||this._activeDate,this._viewDate=C(this._activeDate),this._render(),i.emit!==!1&&this._emitChange(!!(this._rangeStart&&this._rangeEnd)),!0)}clear(t={}){this._selectedDate=null,this._rangeStart=null,this._rangeEnd=null,this._render(),t.emit!==!1&&this._emitChange(!1)}focusActiveDay(){this._dayButton(this._activeDate)?.focus()}_bindEvents(){m(this._listeners,this._element,"click",t=>{let e=t.target,i=e.closest?.("[data-calendar-day]"),s=e.closest?.("[data-calendar-prev]"),r=e.closest?.("[data-calendar-next]"),n=e.closest?.("[data-calendar-preset]");s?this._changeMonth(-1,!0):r?this._changeMonth(1,!0):n?this._selectPreset(n.dataset.calendarPreset):i&&this._selectDate(g(i.dataset.calendarDay),!0)}),m(this._listeners,this._element,"keydown",t=>{t.target.closest?.("[data-calendar-day]")&&this._handleDayKeydown(t)}),m(this._listeners,this._element,"change",t=>{t.target.matches?.("[data-calendar-month]")&&this._setActiveMonth(this._viewDate.getFullYear(),Number(t.target.value),!0),t.target.matches?.("[data-calendar-year]")&&this._setActiveMonth(Number(t.target.value),this._viewDate.getMonth(),!0)})}_emitChange(t){k(this._element,this._window,"change.moo.calendar",{date:this._selectedDate?new Date(this._selectedDate):void 0,value:this._selectedDate?y(this._selectedDate):"",startDate:this._rangeStart?new Date(this._rangeStart):void 0,endDate:this._rangeEnd?new Date(this._rangeEnd):void 0,startValue:this._rangeStart?y(this._rangeStart):"",endValue:this._rangeEnd?y(this._rangeEnd):"",complete:t})}_changeMonth(t,e){let i=C(dt(this._viewDate,t));this._setActiveMonth(i.getFullYear(),i.getMonth(),e)}_setActiveMonth(t,e,i=!1){let s=Math.min(this._activeDate.getDate(),ut(t,e));this._activeDate=this._nearestEnabledDate(new Date(t,e,s)),this._viewDate=C(this._activeDate),this._render(),i&&this.focusActiveDay()}_selectPreset(t){if(!t)return;let e=new Date,i={today:0,tomorrow:1,"in-3-days":3,"in-a-week":7,"in-2-weeks":14};t in i&&this._selectDate(x(e,i[t]),!0)}_handleDayKeydown(t){let e=t.target.closest?.("[data-calendar-day]"),i=g(e?.dataset?.calendarDay);i&&v(i,this._activeDate)!==0&&(this._activeDate=i);let s={ArrowRight:1,ArrowLeft:-1,ArrowDown:7,ArrowUp:-7},r=null;if(t.key in s)r=x(this._activeDate,s[t.key]);else if(t.key==="Home"){let n=st(this._config.locale),o=(this._activeDate.getDay()-n+7)%7;r=x(this._activeDate,-o)}else if(t.key==="End"){let n=st(this._config.locale),o=(this._activeDate.getDay()-n+7)%7;r=x(this._activeDate,6-o)}else if(t.key==="PageUp")r=dt(this._activeDate,-1);else if(t.key==="PageDown")r=dt(this._activeDate,1);else if(t.key==="Enter"||t.key===" "||t.key==="Spacebar"){t.preventDefault(),this._selectDate(this._activeDate,!0);return}else return;t.preventDefault(),this._setActiveDate(r,!0,v(r,this._activeDate)<0?-1:1)}_setActiveDate(t,e=!1,i=0){let s=i===0?this._nearestEnabledDate(t):this._nextEnabledDate(t,i);this._activeDate=s,this._viewDate=C(s),this._render(),e&&this.focusActiveDay()}_nextEnabledDate(t,e){let i=g(t);if(!i)return this._activeDate;let s=e<0?-1:1;for(let r=0;r<366&&!(this._config.minDate&&v(i,this._config.minDate)<0||this._config.maxDate&&v(i,this._config.maxDate)>0);r+=1){if(!this._isDisabled(i))return i;i=x(i,s)}return this._activeDate}_nearestEnabledDate(t){let e=Vt(g(t)||new Date,this._config.minDate,this._config.maxDate);if(!this._isDisabled(e))return e;let i=C(e),s=ut(i.getFullYear(),i.getMonth());for(let r=1;r<=s;r+=1){let n=new Date(i.getFullYear(),i.getMonth(),r);if(!this._isDisabled(n))return n}return e}_selectDate(t,e){if(!(!t||this._isDisabled(t))){if(this._activeDate=t,this._viewDate=C(t),this._mode==="range"){!this._rangeStart||this._rangeEnd||v(t,this._rangeStart)<0?(this._rangeStart=t,this._rangeEnd=null):this._rangeEnd=t,this._render(),e&&this._emitChange(!!(this._rangeStart&&this._rangeEnd));return}this._selectedDate=t,this._render(),e&&this._emitChange(!0)}}_isDisabled(t){return!t||this._config.minDate&&v(t,this._config.minDate)<0||this._config.maxDate&&v(t,this._config.maxDate)>0?!0:this._disabledDates.has(y(t))}_isSelected(t){return this._mode==="range"?P(t,this._rangeStart)||P(t,this._rangeEnd):P(t,this._selectedDate)}_rangeState(t){return this._mode!=="range"||!this._rangeStart?"":P(t,this._rangeStart)?"start":P(t,this._rangeEnd)?"end":this._rangeStart&&this._rangeEnd&&v(t,this._rangeStart)>0&&v(t,this._rangeEnd)<0?"middle":""}_dayButton(t){return this._element.querySelector('[data-calendar-day="'.concat(y(t),'"]'))}_render(){let t=this._document,e=t.createDocumentFragment(),i=t.createElement("div");i.className="moo-calendar__header";let s=t.createElement("button");s.className="btn btn-ghost btn-icon-sm moo-calendar__nav",s.type="button",s.dataset.calendarPrev="true",s.setAttribute("aria-label","Previous month"),s.appendChild(kt(t,"\u2039","moo-calendar__nav-icon"));let r=t.createElement("button");r.className="btn btn-ghost btn-icon-sm moo-calendar__nav",r.type="button",r.dataset.calendarNext="true",r.setAttribute("aria-label","Next month"),r.appendChild(kt(t,"\u203A","moo-calendar__nav-icon"));let n=t.createElement("div");if(n.className="moo-calendar__caption",n.id=this._captionId,n.setAttribute("aria-live","polite"),this._config.captionLayout==="dropdown"){let _=t.createElement("select");_.className="moo-calendar__select",_.dataset.calendarMonth="true",_.setAttribute("aria-label","Month");for(let u=0;u<12;u+=1){let c=t.createElement("option");c.value=String(u),c.textContent=Wt(u,this._config.locale),c.selected=u===this._viewDate.getMonth(),_.appendChild(c)}let p=t.createElement("select");p.className="moo-calendar__select",p.dataset.calendarYear="true",p.setAttribute("aria-label","Year"),Yt(this._config.minDate,this._config.maxDate,this._viewDate).forEach(u=>{let c=t.createElement("option");c.value=String(u),c.textContent=String(u),c.selected=u===this._viewDate.getFullYear(),p.appendChild(c)}),n.append(_,p)}else n.textContent=St(this._viewDate,this._config.locale);i.append(s,n,r),e.appendChild(i);let o=t.createElement("div");o.id=this._labelId,o.className="visually-hidden",o.textContent=this._element.getAttribute("aria-label")||St(this._viewDate,this._config.locale),e.appendChild(o);let h=t.createElement("div");h.className="moo-calendar__weekdays",h.setAttribute("role","row"),Lt(this._config.locale).forEach(_=>{let p=t.createElement("span");p.className="moo-calendar__weekday",p.setAttribute("role","columnheader"),p.textContent=new Intl.DateTimeFormat(this._config.locale,{weekday:"narrow"}).format(_),h.appendChild(p)});let l=t.createElement("div");l.className="moo-calendar__grid",l.setAttribute("role","grid"),l.setAttribute("aria-labelledby",this._labelId),l.appendChild(h);let d=C(this._viewDate),b=st(this._config.locale),f=x(d,-((d.getDay()-b+7)%7));for(let _=0;_<6;_+=1){let p=t.createElement("div");p.className="moo-calendar__week",p.setAttribute("role","row");for(let u=0;u<7;u+=1){let c=x(f,_*7+u),D=y(c),w=t.createElement("div");w.className="moo-calendar__cell",w.setAttribute("role","gridcell");let S=t.createElement("button");S.className="moo-calendar__day",S.type="button",S.dataset.calendarDay=D,S.textContent=String(c.getDate()),S.tabIndex=P(c,this._activeDate)?0:-1,S.setAttribute("aria-label",O(c,this._config.locale));let mt=this._isSelected(c);S.dataset.calendarSelected=String(mt),w.setAttribute("aria-selected",mt?"true":"false"),c.getMonth()!==this._viewDate.getMonth()&&(S.dataset.calendarOutside="true"),P(c,new Date)&&(S.dataset.calendarToday="true",S.setAttribute("aria-current","date"));let bt=this._rangeState(c);bt&&(S.dataset.calendarRange=bt),this._isDisabled(c)&&(S.disabled=!0,S.setAttribute("aria-disabled","true")),w.appendChild(S),p.appendChild(w)}l.appendChild(p)}if(e.appendChild(l),this._config.showPresets){let _=t.createElement("div");_.className="moo-calendar__presets",[["today","Today"],["tomorrow","Tomorrow"],["in-3-days","In 3 days"],["in-a-week","In a week"],["in-2-weeks","In 2 weeks"]].forEach(([p,u])=>{let c=t.createElement("button");c.className="btn btn-outline-secondary btn-sm moo-calendar__preset",c.type="button",c.dataset.calendarPreset=p,c.textContent=u,_.appendChild(c)}),e.appendChild(_)}this._element.classList.add("moo-calendar"),this._element.dataset.calendar=this._element.dataset.calendar||"",this._element.dataset.calendarMode=this._mode,this._element.dataset.calendarActiveDate=y(this._activeDate),this._mode==="single"&&this._selectedDate?this._element.dataset.calendarValue=y(this._selectedDate):delete this._element.dataset.calendarValue,this._mode==="range"?(this._element.dataset.calendarStartValue=this._rangeStart?y(this._rangeStart):"",this._element.dataset.calendarEndValue=this._rangeEnd?y(this._rangeEnd):""):(delete this._element.dataset.calendarStartValue,delete this._element.dataset.calendarEndValue),this._element.replaceChildren(e)}},Y=class a{static getInstance(t){return t?.nodeType===1&&$.get(t)||null}static getOrCreateInstance(t,e={}){return a.getInstance(t)||new a(t,e)}constructor(t,e={}){if(!pt(t,"[data-datepicker]"))throw new TypeError("MooDatepicker requires a [data-datepicker] root element.");let i=$.get(t);if(i)return i;if(this._element=t,this._document=t.ownerDocument,this._window=this._document.defaultView||window,this._listeners=[],this._floatingListeners=[],this._disposed=!1,this._positionPopover=null,this._popoverPortal=null,this._trigger=t.querySelector("[data-datepicker-trigger]"),this._popover=t.querySelector("[data-datepicker-popover]"),this._label=t.querySelector("[data-datepicker-label]"),this._input=t.querySelector("[data-datepicker-input]")||t.querySelector('input[type="hidden"]'),this._validationInput=t.querySelector("[data-datepicker-validation]"),this._calendarRoot=t.querySelector("[data-calendar]"),!this._trigger||!this._popover||!this._label||!this._input||!this._calendarRoot)throw new TypeError("MooDatepicker requires a trigger, popover, calendar, and hidden input.");this._config=ft(t,{...e,value:e.value||this._input.value||t.dataset.datepickerValue}),this._placeholder=this._config.placeholder,this._defaultValue=this._input.defaultValue||this._input.getAttribute("value")||"",this.calendar=q.getOrCreateInstance(this._calendarRoot,{...this._config,mode:"single",value:this._input.value||this._config.value}),$.set(t,this),this._syncFromCalendar(),this._bindEvents()}dispose(){this._disposed||(this._disposed=!0,F(this._listeners),this.hide(!1),at(this),nt(this),F(this._floatingListeners),this.calendar?.dispose(),$.get(this._element)===this&&$.delete(this._element))}show(){this._trigger.disabled||this._element.dataset.datepickerDisabled==="true"||this.isOpen()||k(this._element,this._window,"show.moo.datepicker",{},!0)&&(this._popover.hidden=!1,this._popover.classList.add("show"),Ct(this),this._trigger.setAttribute("aria-expanded","true"),this.calendar.focusActiveDay(),k(this._element,this._window,"shown.moo.datepicker"))}hide(t=!0){this.isOpen()&&k(this._element,this._window,"hide.moo.datepicker",{},!0)&&(this._popover.hidden=!0,this._popover.classList.remove("show"),at(this),this._trigger.setAttribute("aria-expanded","false"),t&&this._trigger.focus(),k(this._element,this._window,"hidden.moo.datepicker"))}toggle(){this.isOpen()?this.hide():this.show()}isOpen(){return!this._popover.hidden}getDate(t=void 0){return this.calendar.getDate(t)}setDate(t,e={}){let i=this.calendar.setDate(t,{emit:!1});return i&&(this._syncFromCalendar(),e.emit!==!1&&this._emitChange()),i}clear(t={}){this.calendar.clear({emit:!1}),this._syncFromCalendar(),t.emit!==!1&&this._emitChange()}_bindEvents(){m(this._listeners,this._trigger,"click",()=>this.toggle()),m(this._listeners,this._popover,"keydown",e=>{e.key==="Escape"&&(e.preventDefault(),this.hide())}),m(this._listeners,this._document,"pointerdown",e=>{this.isOpen()&&!W(this,e.target)&&this._window.setTimeout(()=>{this.isOpen()&&!W(this,e.target)&&this.hide()},0)}),m(this._listeners,this._calendarRoot,"change.moo.calendar",e=>{this._syncFromCalendar(),this._emitChange(),e.detail.complete&&this.hide()});let t=this._input.form||this._element.closest("form");m(this._listeners,this._validationInput,"invalid",e=>{e.preventDefault(),gt(this._element,this._trigger,!0),this._trigger.focus({preventScroll:!0})}),m(this._listeners,t,"reset",()=>{this._window.setTimeout(()=>{this._defaultValue?this.setDate(this._defaultValue,{emit:!1}):this.clear({emit:!1})},0)})}_syncFromCalendar(){let t=this.calendar.getDate("yyyy-mm-dd")||"";_t(this._input,t),Et(this._validationInput,t),At(this._element,this._trigger,this._validationInput),this._element.dataset.datepickerValue=t,this._label.textContent=t?O(g(t),this._config.locale):this._placeholder}_emitChange(){k(this._element,this._window,"change.moo.datepicker",{date:this.getDate(),value:this.getDate("yyyy-mm-dd")||""})}},rt=class a{static getInstance(t){return t?.nodeType===1&&K.get(t)||null}static getOrCreateInstance(t,e={}){return a.getInstance(t)||new a(t,e)}constructor(t,e={}){if(!pt(t,"[data-datepicker-range]"))throw new TypeError("MooDateRangePicker requires a [data-datepicker-range] root element.");let i=K.get(t);if(i)return i;if(this._element=t,this._document=t.ownerDocument,this._window=this._document.defaultView||window,this._listeners=[],this._floatingListeners=[],this._disposed=!1,this._positionPopover=null,this._popoverPortal=null,this._trigger=t.querySelector("[data-datepicker-trigger]"),this._popover=t.querySelector("[data-datepicker-popover]"),this._label=t.querySelector("[data-datepicker-label]"),this._startInput=t.querySelector("[data-datepicker-range-start]"),this._endInput=t.querySelector("[data-datepicker-range-end]"),this._validationInput=t.querySelector("[data-datepicker-validation]"),this._calendarRoot=t.querySelector("[data-calendar]"),!this._trigger||!this._popover||!this._label||!this._startInput||!this._endInput||!this._calendarRoot)throw new TypeError("MooDateRangePicker requires a trigger, popover, calendar, and start/end hidden inputs.");this._config=ft(t,{...e,mode:"range",startValue:e.startValue||this._startInput.value||t.dataset.datepickerStartValue,endValue:e.endValue||this._endInput.value||t.dataset.datepickerEndValue}),this._placeholder=this._config.placeholder,this._defaultStartValue=this._startInput.defaultValue||this._startInput.getAttribute("value")||"",this._defaultEndValue=this._endInput.defaultValue||this._endInput.getAttribute("value")||"",this.calendar=q.getOrCreateInstance(this._calendarRoot,this._config),K.set(t,this),this._syncFromCalendar(),this._bindEvents()}dispose(){this._disposed||(this._disposed=!0,F(this._listeners),this.hide(!1),at(this),nt(this),F(this._floatingListeners),this.calendar?.dispose(),K.get(this._element)===this&&K.delete(this._element))}show(){this._trigger.disabled||this._element.dataset.datepickerDisabled==="true"||this.isOpen()||k(this._element,this._window,"show.moo.datepicker",{},!0)&&(this._popover.hidden=!1,this._popover.classList.add("show"),Ct(this),this._trigger.setAttribute("aria-expanded","true"),this.calendar.focusActiveDay(),k(this._element,this._window,"shown.moo.datepicker"))}hide(t=!0){this.isOpen()&&k(this._element,this._window,"hide.moo.datepicker",{},!0)&&(this._popover.hidden=!0,this._popover.classList.remove("show"),at(this),this._trigger.setAttribute("aria-expanded","false"),t&&this._trigger.focus(),k(this._element,this._window,"hidden.moo.datepicker"))}toggle(){this.isOpen()?this.hide():this.show()}isOpen(){return!this._popover.hidden}getDates(t=void 0){return this.calendar.getDates(t)}setDates(t,e,i={}){let s=this.calendar.setDates(t,e,{emit:!1});return s&&(this._syncFromCalendar(),i.emit!==!1&&this._emitChange()),s}clear(t={}){this.calendar.clear({emit:!1}),this._syncFromCalendar(),t.emit!==!1&&this._emitChange()}_bindEvents(){m(this._listeners,this._trigger,"click",()=>this.toggle()),m(this._listeners,this._popover,"keydown",i=>{i.key==="Escape"&&(i.preventDefault(),this.hide())}),m(this._listeners,this._document,"pointerdown",i=>{this.isOpen()&&!W(this,i.target)&&this._window.setTimeout(()=>{this.isOpen()&&!W(this,i.target)&&this.hide()},0)});let t=()=>{this._window.setTimeout(()=>{this.isOpen()&&!W(this,this._document.activeElement)&&this.hide(!1)},0)};m(this._listeners,this._element,"focusout",t),m(this._listeners,this._popover,"focusout",t),m(this._listeners,this._calendarRoot,"change.moo.calendar",i=>{this._syncFromCalendar(),this._emitChange(),i.detail.complete?this.hide():this.calendar.focusActiveDay()});let e=this._startInput.form||this._element.closest("form");m(this._listeners,this._validationInput,"invalid",i=>{i.preventDefault(),gt(this._element,this._trigger,!0),this._trigger.focus({preventScroll:!0})}),m(this._listeners,e,"reset",()=>{this._window.setTimeout(()=>{this.setDates(this._defaultStartValue,this._defaultEndValue,{emit:!1})},0)})}_syncFromCalendar(){let[t="",e=""]=this.calendar.getDates("yyyy-mm-dd");_t(this._startInput,t||""),_t(this._endInput,e||""),Et(this._validationInput,t&&e?"".concat(t," - ").concat(e):""),At(this._element,this._trigger,this._validationInput),this._element.dataset.datepickerStartValue=t||"",this._element.dataset.datepickerEndValue=e||"",t&&e?this._label.textContent="".concat(O(g(t),this._config.locale)," - ").concat(O(g(e),this._config.locale)):t?this._label.textContent=O(g(t),this._config.locale):this._label.textContent=this._placeholder}_emitChange(){let[t,e]=this.getDates(),[i="",s=""]=this.getDates("yyyy-mm-dd");k(this._element,this._window,"change.moo.datepicker",{startDate:t,endDate:e,startValue:i,endValue:s})}};var ot=new WeakMap,H=class a{static getInstance(t){return t?.nodeType===1&&ot.get(t)||null}static getOrCreateInstance(t,e={}){return a.getInstance(t)||new a(t,e)}constructor(t,e={}){if(t?.nodeType!==1||!t.matches('[data-slot="sidebar-wrapper"]'))throw new TypeError("Sidebar requires a [data-slot=sidebar-wrapper] root.");let i=ot.get(t);if(i)return i;this._element=t,this._document=t.ownerDocument,this._window=this._document.defaultView,this._documentElement=this._document.documentElement,this._root=E(t)||this._document.body||this._documentElement,this._sidebar=t.querySelector('[data-slot="sidebar"]'),this._config={breakpoint:"(min-width: 992px)",storagePrefix:"moo-sidebar:",keyboard:!0,...e},this._listeners=[],this._tooltipAnchors=new Set,this._flyout=null,this._flyoutOwner=null,this._offcanvas=null,this._offcanvasTrigger=null,ot.set(t,this),this._bindEvents(),this._restoreState(),this._scrollActiveItemIntoView(),this._element.setAttribute("data-sidebar-ready",""),this._observeDirection()}dispose(){this._listeners.forEach(({target:t,type:e,handler:i,options:s})=>{t.removeEventListener(e,i,s)}),this._listeners=[],this._directionObserver?.disconnect(),this._closeFlyouts(),this._element.querySelectorAll("[data-sidebar-dropdown-positioned]").forEach(t=>this._clearDropdownPosition(t)),this._element.querySelectorAll("[data-sidebar-tooltip]").forEach(t=>this._disposeTooltip(t)),this._offcanvas?.dispose(),this._offcanvas=null,this._offcanvasTrigger=null,this._element.removeAttribute("data-sidebar-ready"),ot.delete(this._element)}_listen(t,e,i,s){t?.addEventListener(e,i,s),t&&this._listeners.push({target:t,type:e,handler:i,options:s})}_bootstrap(t){return this._window.bootstrap?.[t]||null}_portalRoot(t=this._element){return T(E(t))||this._document.body||this._documentElement}_isDesktop(){return this._window.matchMedia(this._config.breakpoint).matches}_isCollapsed(){return this._isDesktop()&&this._sidebar?.dataset?.collapsible==="icon"&&this._element.dataset.sidebarState==="collapsed"}_trigger(t,e={}){return this._element.dispatchEvent(new this._window.CustomEvent("".concat(t,".moo.sidebar"),{bubbles:!0,cancelable:t==="show"||t==="hide",detail:e}))}_observeDirection(){let t=this._window.MutationObserver;t&&(this._directionObserver=new t(()=>{this._closeFlyouts(),this._syncTooltips()}),this._directionObserver.observe(this._documentElement,{attributes:!0,attributeFilter:["dir"]}))}_restoreState(){let t=this._element.dataset.sidebarKey,e=null;if(t)try{e=this._window.localStorage.getItem(this._config.storagePrefix+t)}catch{e=null}let i=e==="collapsed"||e==="expanded"?e:this._element.dataset.sidebarState==="collapsed"?"collapsed":"expanded";this._setState(i,!1,!1)}_scrollActiveItemIntoView(){let e=this._element.querySelector('[data-slot="sidebar-content"] a[data-slot="sidebar-menu-button"][aria-current="page"], [data-slot="sidebar-content"] a.sidebar-menu-button[aria-current="page"], [data-slot="sidebar-content"] a.sidebar-menu-button.active')||this._element.querySelector('[data-slot="sidebar-content"] [data-slot="sidebar-menu-button"][aria-current="page"], [data-slot="sidebar-content"] .sidebar-menu-button[aria-current="page"], [data-slot="sidebar-content"] .sidebar-menu-button.active'),i=e?.closest?.('[data-slot="sidebar-content"]');if(!e||!i||i.clientHeight<=0)return;let s=i.scrollHeight-i.clientHeight;if(s<=0)return;let r=i.getBoundingClientRect(),n=e.getBoundingClientRect();if(r.height<=0||n.height<=0)return;let o=i.scrollTop+n.top-r.top-(i.clientHeight-n.height)/2;i.scrollTop=Math.round(Math.min(Math.max(o,0),s))}_setState(t,e=!0,i=!0){let s=t==="collapsed"?"collapsed":"expanded",r=this._element.dataset.sidebarState;this._element.dataset.sidebarState=s;let n=this._element.dataset.sidebarKey;if(n==="catalog-shell"&&(this._root.dataset.sidebarCatalogState=s),e&&n)try{this._window.localStorage.setItem(this._config.storagePrefix+n,s)}catch{}this._syncControls(),s==="expanded"&&this._element.querySelectorAll(".sidebar-menu-item").forEach(o=>this._resetFlyoutTrigger(o)),this._syncTooltips(),i&&r!==s&&this._trigger("change",{state:s,previousState:r||null})}_toggle(){this._setState(this._element.dataset.sidebarState==="collapsed"?"expanded":"collapsed")}_syncControls(){let t=this._isDesktop()?this._element.dataset.sidebarState==="expanded":this._sidebar?.classList.contains("show")||!1;this._element.querySelectorAll("[data-sidebar-trigger], [data-sidebar-rail]").forEach(e=>e.setAttribute("aria-expanded",String(t)))}_resetFlyoutTrigger(t,e=null){let i=t?.querySelector(":scope > .sidebar-menu-sub-trigger"),s=t?.querySelector(":scope > .sidebar-menu-sub");i&&s&&i.setAttribute("aria-expanded",String(e??s.classList.contains("show")))}_clearDropdownPosition(t){let e=t?.matches?.(".sidebar-menu-item")?t:t?.closest?.(".sidebar-menu-item");e&&(delete e.dataset.sidebarDropdownPositioned,e.style.removeProperty("--moo-sidebar-dropdown-block-start"),e.style.removeProperty("--moo-sidebar-dropdown-block-end"),e.style.removeProperty("--moo-sidebar-dropdown-left"),e.style.removeProperty("--moo-sidebar-dropdown-right"))}_closeDropdowns(t=null){let e=this._bootstrap("Dropdown");this._element.querySelectorAll('[data-bs-toggle="dropdown"][aria-expanded="true"]').forEach(i=>{i!==t&&(e?e.getOrCreateInstance(i).hide():(i.setAttribute("aria-expanded","false"),i.closest(".dropdown")?.querySelector(".dropdown-menu.show")?.classList.remove("show"),this._clearDropdownPosition(i)))})}_positionDropdown(t){let e=t?.closest?.(".sidebar-menu-item"),i=t?.classList.contains("sidebar-menu-button--workspace")&&t.closest('[data-slot="sidebar-header"]'),s=t?.closest(".sidebar-menu-item--account")&&t.closest('[data-slot="sidebar-footer"]');if(!t||!e||!(i||s)||!this._isDesktop()){this._clearDropdownPosition(t);return}this._closeFlyouts();let r=t.getBoundingClientRect(),n=4;if((t.closest('[data-slot="sidebar"]')?.dataset.side||"left")==="right"){let l=this._window.innerWidth-r.left+n;e.style.setProperty("--moo-sidebar-dropdown-right","".concat(Math.round(l),"px")),e.style.removeProperty("--moo-sidebar-dropdown-left")}else{let l=r.right+n;e.style.setProperty("--moo-sidebar-dropdown-left","".concat(Math.round(l),"px")),e.style.removeProperty("--moo-sidebar-dropdown-right")}i?(e.style.setProperty("--moo-sidebar-dropdown-block-start","".concat(Math.round(r.bottom+n),"px")),e.style.removeProperty("--moo-sidebar-dropdown-block-end")):(e.style.setProperty("--moo-sidebar-dropdown-block-end","".concat(Math.round(this._window.innerHeight-r.top+n),"px")),e.style.removeProperty("--moo-sidebar-dropdown-block-start")),e.dataset.sidebarDropdownPositioned=""}_removeFlyoutPortal(){this._flyout?.remove(),this._flyoutOwner&&this._resetFlyoutTrigger(this._flyoutOwner,!1),this._flyout=null,this._flyoutOwner=null}_closeFlyouts(){this._removeFlyoutPortal(),this._element.querySelectorAll(".sidebar-menu-item--flyout-open").forEach(t=>{t.classList.remove("sidebar-menu-item--flyout-open"),t.style.removeProperty("--moo-sidebar-flyout-block-start"),t.style.removeProperty("--moo-sidebar-flyout-left"),this._resetFlyoutTrigger(t,!1)})}_openFlyout(t){let e=t?.querySelector(":scope > .sidebar-menu-sub"),i=t?.querySelector(":scope > .sidebar-menu-sub-trigger");if(!t||!e||!this._isCollapsed()||this._flyoutOwner===t&&this._flyout)return;this._closeDropdowns(),this._closeFlyouts();let s=t.getBoundingClientRect(),r=this._sidebar,n=r?.getBoundingClientRect()||s,o=4,h=e.cloneNode(!0);h.removeAttribute("id"),h.classList.remove("collapse","show","collapsing"),h.classList.add("sidebar-menu-flyout"),h.dataset.sidebarFlyout="",h.removeAttribute("style"),h.style.setProperty("--moo-sidebar-flyout-block-start","".concat(Math.round(s.top),"px"));let l=r?.dataset.side||"left";this._portalRoot(t).appendChild(h);let d=h.getBoundingClientRect().width,b=l==="right"?n.left-d-o:n.right+o,f=Math.max(0,Math.min(this._window.innerWidth-d,b));h.style.setProperty("--moo-sidebar-flyout-left","".concat(Math.round(f),"px")),this._flyout=h,this._flyoutOwner=t,t.classList.add("sidebar-menu-item--flyout-open"),i?.setAttribute("aria-expanded","true")}_tooltipAnchor(t){return t.closest("li")||t}_isIdentityTrigger(t){return t.closest(".sidebar-menu-item--account")||t.classList.contains("sidebar-menu-button--workspace")}_disposeTooltip(t){let e=this._bootstrap("Tooltip");if(!e||!t)return;let i=this._tooltipAnchor(t);e.getInstance(i)?.dispose(),this._tooltipAnchors.delete(i),i.removeAttribute("title"),i.removeAttribute("data-bs-title"),i.removeAttribute("data-bs-original-title"),i.removeAttribute("aria-describedby")}_syncTooltips(){let t=this._bootstrap("Tooltip");if(!t)return;let e=this._isCollapsed(),s=(this._sidebar?.dataset.side||"left")==="right"?"left":"right";this._element.querySelectorAll("[data-sidebar-tooltip]").forEach(r=>{if(this._disposeTooltip(r),!e||this._isIdentityTrigger(r)||r.closest(".sidebar-menu-item")?.querySelector(":scope > .sidebar-menu-sub"))return;let n=this._tooltipAnchor(r);new t(n,{title:r.getAttribute("data-sidebar-tooltip"),placement:s,offset:[0,8],container:this._portalRoot(r),trigger:"hover focus"}),this._tooltipAnchors.add(n)})}_bindEvents(){this._listen(this._sidebar,"shown.bs.offcanvas",()=>this._syncControls()),this._listen(this._sidebar,"hidden.bs.offcanvas",()=>{this._syncControls();let t=this._offcanvasTrigger;this._offcanvasTrigger=null,t?.isConnected&&t.focus()}),this._listen(this._document,"show.bs.dropdown",t=>{let e=this._dropdownControl(t.target);e&&(this._closeDropdowns(e),this._disposeTooltip(e),this._positionDropdown(e))}),this._listen(this._document,"hidden.bs.dropdown",t=>{let e=this._dropdownControl(t.target);e&&(this._clearDropdownPosition(e),this._syncTooltips())}),this._listen(this._element,"click",t=>this._handleControlClick(t)),this._listen(this._window,"click",t=>this._handleSubmenuClick(t),!0),this._listen(this._document,"click",t=>this._handleOutsideFlyoutClick(t)),this._listen(this._document,"keydown",t=>this._handleShortcut(t)),this._listen(this._window,"resize",()=>{this._closeFlyouts(),this._element.querySelectorAll("[data-sidebar-dropdown-positioned]").forEach(t=>this._clearDropdownPosition(t)),this._syncControls(),this._syncTooltips()})}_dropdownControl(t){return!(t instanceof this._window.Element)||!this._element.contains(t)?null:t.matches('[data-bs-toggle="dropdown"][data-sidebar-tooltip]')?t:t.querySelector?.('[data-bs-toggle="dropdown"][data-sidebar-tooltip]')||null}_handleControlClick(t){let e=t.target,i=e instanceof this._window.Element?e.closest("[data-sidebar-trigger], [data-sidebar-rail]"):null;if(!i||!this._element.contains(i))return;if(this._isDesktop()){t.preventDefault(),this._closeFlyouts(),this._toggle();return}if(!i.matches("[data-sidebar-trigger]"))return;let s=this._document.getElementById(i.getAttribute("aria-controls")),r=this._bootstrap("Offcanvas");s&&r&&(this._offcanvasTrigger=i,this._offcanvas=r.getOrCreateInstance(s),this._offcanvas.toggle())}_handleSubmenuClick(t){let e=t.target,i=e instanceof this._window.Element?e.closest(".sidebar-menu-sub-trigger"):null,s=i?.closest(".sidebar-menu-item");!i||!s||!this._element.contains(s)||!this._isCollapsed()||(t.preventDefault(),t.stopImmediatePropagation(),this._flyoutOwner===s&&this._flyout?this._closeFlyouts():this._openFlyout(s))}_handleOutsideFlyoutClick(t){this._flyout&&(this._flyout.contains(t.target)?this._closeFlyouts():this._flyoutOwner?.contains(t.target)||this._closeFlyouts())}_handleShortcut(t){let e=t.target,i=e instanceof this._window.Element&&(e.matches("input, textarea, select")||e.isContentEditable);t.defaultPrevented||t.isComposing||i||!this._config.keyboard||!(t.metaKey||t.ctrlKey)||t.key.toLowerCase()!=="b"||!this._isDesktop()||(this._document.querySelector('[data-slot="sidebar-wrapper"][data-sidebar-key]')||this._document.querySelector('[data-slot="sidebar-wrapper"]'))!==this._element||(t.preventDefault(),this._closeFlyouts(),this._toggle())}};var G=new WeakMap;function j(a,t){let e=Number(a);return Number.isFinite(e)?e:t}function L(a){return j(a.min,0)}function X(a){return j(a.max,100)}function Ht(a){if(!a.step||a.step==="any")return 1;let t=Number(a.step);return Number.isFinite(t)&&t>0?t:1}function R(a,t,e){return Math.min(Math.max(a,t),e)}function xt(a){let t=String(a);return t.includes(".")?t.split(".").at(-1).length:0}function Gt(a,t){let e=L(t),i=X(t);if(t.step==="any")return Number(R(a,e,i).toFixed(4));let s=Ht(t),r=e+Math.round((a-e)/s)*s,n=Math.max(xt(s),xt(e));return R(Number(r.toFixed(n)),e,i)}function U(a){let t=L(a),e=X(a);return e<=t?0:(j(a.value,t)-t)/(e-t)*100}function lt(a){return a.value||String(L(a))}var J=class a{static getInstance(t){return t?.nodeType===1&&G.get(t)||null}static getOrCreateInstance(t,e={}){return a.getInstance(t)||new a(t,e)}constructor(t,e={}){if(t?.nodeType!==1||!t.matches("[data-slider]"))throw new TypeError("MooSlider requires a [data-slider] root element.");let i=G.get(t);if(i)return i;if(this._element=t,this._document=t.ownerDocument,this._window=this._document.defaultView,this._config={...e},this._listeners=[],this._dragListeners=[],this._draggingInput=null,this._disposed=!1,this._inputs=Array.from(t.querySelectorAll(':scope input[type="range"][data-slider-input]')),this._track=t.querySelector("[data-slider-track]"),this._output=t.querySelector("[data-slider-output]"),this._inputs.length<1||this._inputs.length>2)throw new TypeError("MooSlider requires one or two native range inputs.");if(!this._track)throw new TypeError("MooSlider requires a [data-slider-track] element.");G.set(t,this),this._bindEvents(),this._sync()}dispose(){this._disposed||(this._disposed=!0,this._clearDragListeners(),this._clearPointerFocus(),this._listeners.forEach(({target:t,type:e,handler:i,options:s})=>{t.removeEventListener(e,i,s)}),this._listeners=[],G.get(this._element)===this&&G.delete(this._element))}_listen(t,e,i,s){t&&(t.addEventListener(e,i,s),this._listeners.push({target:t,type:e,handler:i,options:s}))}_listenDuringDrag(t,e,i,s){t&&(t.addEventListener(e,i,s),this._dragListeners.push({target:t,type:e,handler:i,options:s}))}_clearDragListeners(){this._dragListeners.forEach(({target:t,type:e,handler:i,options:s})=>{t.removeEventListener(e,i,s)}),this._dragListeners=[],this._draggingInput=null,this._element.removeAttribute("data-slider-dragging")}_bindEvents(){this._inputs.forEach(e=>{this._listen(e,"input",()=>this._sync(e)),this._listen(e,"change",()=>{this._sync(e),this._trigger("change")}),this._listen(e,"keydown",()=>this._clearPointerFocus()),this._listen(e,"focusout",()=>this._clearPointerFocus())}),new Set(this._inputs.map(e=>e.form||e.closest?.("form")).filter(Boolean)).forEach(e=>{this._listen(e,"reset",()=>{this._window.setTimeout(()=>this._sync(),0)})}),this._listen(this._track,"pointerdown",e=>this._handleTrackPointer(e))}_trigger(t){this._element.dispatchEvent(new this._window.CustomEvent("".concat(t,".moo.slider"),{bubbles:!0}))}_isRange(){return this._inputs.length===2}_sync(t=null){if(this._isRange()){let[i,s]=this._inputs,r=j(i.value,L(i)),n=j(s.value,X(s));r>n&&(t===s?s.value=i.value:i.value=s.value),this._writeFill(U(i),U(s)),this._writeOutput("".concat(lt(i)," - ").concat(lt(s))),this._syncAria(i),this._syncAria(s);return}let e=this._inputs[0];this._writeFill(0,U(e)),this._writeOutput(lt(e)),this._syncAria(e)}_syncAria(t){t.setAttribute("aria-valuemin",String(L(t))),t.setAttribute("aria-valuemax",String(X(t))),t.setAttribute("aria-valuenow",lt(t))}_writeFill(t,e){let i=R(t,0,100),s=R(e,0,100);this._element.style.setProperty("--moo-slider-start","".concat(Math.min(i,s),"%")),this._element.style.setProperty("--moo-slider-end","".concat(Math.max(i,s),"%"))}_writeOutput(t){this._output&&(this._output.textContent=t)}_handleTrackPointer(t){if(t.button!==void 0&&t.button!==0)return;let e=this._inputs.filter(r=>!r.disabled);if(!e.length)return;t.preventDefault?.();let i=this._pointerPercent(t),s=this._nearestInput(i*100,e);this._setPointerFocus(),this._startDrag(s,t),this._setInputFromPointer(s,t)}_setPointerFocus(){this._element.setAttribute("data-slider-pointer-focus","true")}_clearPointerFocus(){this._element.removeAttribute("data-slider-pointer-focus")}_startDrag(t,e){this._clearDragListeners(),this._draggingInput=t,this._element.setAttribute("data-slider-dragging","true"),this._track.setPointerCapture?.(e.pointerId);let i=e.pointerId,s=o=>i===void 0||o.pointerId===i,r=o=>{!s(o)||this._draggingInput!==t||(o.preventDefault?.(),this._setInputFromPointer(t,o))},n=o=>{!s(o)||this._draggingInput!==t||(o.preventDefault?.(),this._setInputFromPointer(t,o,!1),t.dispatchEvent(new this._window.Event("change",{bubbles:!0})),this._track.releasePointerCapture?.(i),this._clearDragListeners())};this._listenDuringDrag(this._document,"pointermove",r),this._listenDuringDrag(this._document,"pointerup",n),this._listenDuringDrag(this._document,"pointercancel",n)}_setInputFromPointer(t,e,i=!0){let s=this._pointerPercent(e),r=L(t),n=X(t);t.value=String(Gt(r+s*(n-r),t)),t.focus({preventScroll:!0}),this._sync(t),i&&t.dispatchEvent(new this._window.Event("input",{bubbles:!0}))}_pointerPercent(t){let e=this._track.getBoundingClientRect();return(this._element.dataset.sliderOrientation||"horizontal")==="vertical"?R((e.bottom-t.clientY)/(e.height||1),0,1):this._horizontalPointerPercent(t,e)}_horizontalPointerPercent(t,e){let s=this._window.getComputedStyle?.(this._element).direction==="rtl"?e.right-t.clientX:t.clientX-e.left;return R(s/(e.width||1),0,1)}_nearestInput(t,e){if(e.length===1)return e[0];let[i,s]=e,r=U(i),n=U(s),o=Math.abs(r-t),h=Math.abs(n-t);return o===h?t>=r?s:i:h<o?s:i}};var Q=new WeakMap;function Mt(a=document){if(Q.has(a))return Q.get(a);let e=(a.nodeType===9?a:a.ownerDocument)?.defaultView?.bootstrap?.Offcanvas;if(!e)return()=>{};let i=Array.from(a.querySelectorAll(".offcanvas.sheet")),s=n=>{n.target===n.currentTarget&&n.currentTarget.querySelector("[autofocus]:not(:disabled)")?.focus()},r=()=>{Q.get(a)===r&&(i.forEach(n=>{n.removeEventListener("shown.bs.offcanvas",s)}),Q.delete(a))};return Q.set(a,r),i.forEach(n=>{n.addEventListener("shown.bs.offcanvas",s),n.dataset.sheetOpenOnLoad==="true"&&(n.removeAttribute("data-sheet-open-on-load"),e.getOrCreateInstance(n).show())}),r}async function Ut(){let{default:a}=await import("./chart.js");return a}var Xt={loadChart:Ut,Combobox:V,ContextMenu:N,DataTable:B,Datepicker:Y,MooCalendar:q,MooDateRangePicker:rt,Sidebar:H,Slider:J,initSheets:Mt};var fe=Xt;export{V as Combobox,N as ContextMenu,B as DataTable,Y as Datepicker,q as MooCalendar,rt as MooDateRangePicker,H as Sidebar,J as Slider,fe as default,Mt as initSheets,Ut as loadChart};
|
package/dist/js/sheet.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Moo UI sheet.js v1.0.0-rc.10 (https://wpmoo.org/)
|
|
3
|
+
* Copyright 2026 WPMoo Authors
|
|
4
|
+
* Licensed under MIT (https://github.com/wpmoo-org/ui/blob/main/LICENSE)
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// src/js/components/sheet.js
|
|
8
|
+
var states = /* @__PURE__ */ new WeakMap();
|
|
9
|
+
function initSheets(root = document) {
|
|
10
|
+
if (states.has(root)) {
|
|
11
|
+
return states.get(root);
|
|
12
|
+
}
|
|
13
|
+
const documentRoot = root.nodeType === 9 ? root : root.ownerDocument;
|
|
14
|
+
const Offcanvas = documentRoot?.defaultView?.bootstrap?.Offcanvas;
|
|
15
|
+
if (!Offcanvas) {
|
|
16
|
+
return () => {
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const sheets = Array.from(root.querySelectorAll(".offcanvas.sheet"));
|
|
20
|
+
const focusInitialField = (event) => {
|
|
21
|
+
if (event.target === event.currentTarget) {
|
|
22
|
+
event.currentTarget.querySelector("[autofocus]:not(:disabled)")?.focus();
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const dispose = () => {
|
|
26
|
+
if (states.get(root) !== dispose) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
sheets.forEach((sheet) => {
|
|
30
|
+
sheet.removeEventListener("shown.bs.offcanvas", focusInitialField);
|
|
31
|
+
});
|
|
32
|
+
states.delete(root);
|
|
33
|
+
};
|
|
34
|
+
states.set(root, dispose);
|
|
35
|
+
sheets.forEach((sheet) => {
|
|
36
|
+
sheet.addEventListener("shown.bs.offcanvas", focusInitialField);
|
|
37
|
+
if (sheet.dataset.sheetOpenOnLoad === "true") {
|
|
38
|
+
sheet.removeAttribute("data-sheet-open-on-load");
|
|
39
|
+
Offcanvas.getOrCreateInstance(sheet).show();
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return dispose;
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
initSheets
|
|
46
|
+
};
|