@finqu/cool 1.3.0 → 2.0.2
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/README.md +23 -9
- package/dist/css/cool.css +13391 -7742
- package/dist/css/cool.css.map +1 -1
- package/dist/css/cool.min.css +2 -93
- package/dist/css/cool.min.css.map +1 -1
- package/dist/js/cool.bundle.js +16051 -17050
- package/dist/js/cool.bundle.js.map +1 -1
- package/dist/js/cool.bundle.min.js +11 -18
- package/dist/js/cool.bundle.min.js.map +1 -1
- package/dist/js/cool.esm.js +3469 -4468
- package/dist/js/cool.esm.js.map +1 -1
- package/dist/js/cool.esm.min.js +2 -8
- package/dist/js/cool.esm.min.js.map +1 -1
- package/dist/js/cool.js +5083 -6089
- package/dist/js/cool.js.map +1 -1
- package/dist/js/cool.min.js +2 -8
- package/dist/js/cool.min.js.map +1 -1
- package/package.json +48 -16
- package/scss/LISENCE +15 -0
- package/scss/_badge.scss +134 -0
- package/scss/_button-group.scss +80 -0
- package/scss/_buttons.scss +304 -0
- package/scss/_dark.scss +637 -0
- package/scss/_dialog.scss +351 -0
- package/scss/_dropdown.scss +165 -0
- package/scss/_forms.scss +613 -0
- package/scss/_frame.scss +948 -0
- package/scss/_grid.scss +215 -0
- package/scss/_input-group.scss +326 -0
- package/scss/_list-group.scss +127 -0
- package/scss/_media.scss +439 -0
- package/scss/_navbar.scss +122 -0
- package/scss/_notification.scss +115 -0
- package/scss/_pagination.scss +82 -0
- package/scss/_popover.scss +61 -0
- package/scss/_reboot.scss +306 -0
- package/scss/_root.scss +848 -0
- package/scss/_section.scss +735 -0
- package/scss/_select.scss +559 -0
- package/scss/_tables.scss +611 -0
- package/scss/_tabs.scss +50 -0
- package/scss/_toast.scss +277 -0
- package/scss/_tooltip.scss +130 -0
- package/scss/_typography.scss +166 -0
- package/scss/_variables.scss +1229 -0
- package/scss/cool.scss +69 -0
- package/scss/utilities/_align.scss +51 -0
- package/scss/utilities/_animation.scss +165 -0
- package/scss/utilities/_background.scss +72 -0
- package/scss/utilities/_borders.scss +205 -0
- package/scss/utilities/_collapse.scss +28 -0
- package/scss/utilities/_cursor.scss +160 -0
- package/scss/utilities/_display.scss +116 -0
- package/scss/utilities/_embed.scss +89 -0
- package/scss/utilities/_fill.scss +79 -0
- package/scss/utilities/_filters.scss +233 -0
- package/scss/utilities/_flex.scss +216 -0
- package/scss/utilities/_grid.scss +136 -0
- package/scss/utilities/_opacity.scss +131 -0
- package/scss/utilities/_overflow.scss +242 -0
- package/scss/utilities/_perfect-scrollbar.scss +147 -0
- package/scss/utilities/_pointer-events.scss +125 -0
- package/scss/utilities/_position.scss +130 -0
- package/scss/utilities/_screen-readers.scss +95 -0
- package/scss/utilities/_shadows.scss +195 -0
- package/scss/utilities/_sizing.scss +288 -0
- package/scss/utilities/_spacing.scss +168 -0
- package/scss/utilities/_stroke.scss +124 -0
- package/scss/utilities/_text.scss +420 -0
- package/scss/utilities/_transform.scss +232 -0
- package/scss/utilities/_transitions.scss +147 -0
- package/scss/utilities/_user-select.scss +93 -0
- package/scss/utilities/_visibility.scss +66 -0
- package/scss/utilities/_z-index.scss +169 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Component","initializeElement","selector","options","el","document","querySelector","$el","$","data","this","NAME","instance","instances","push","initializeElements","_this","querySelectorAll","forEach","_proto","prototype","onInit","opts","call","onUpdate","onDestroy","onShow","onClose","onReset","Section","_Component","window","Cool","settings","section","extend","DEFAULTS","_eventHandlers","_updateTimeout","_rafId","init","_inheritsLoose","observeSections","initializeSectionObserver","initFormControls","initializeFormControls","initTableHandlers","initializeTableHandlers","initButtonGroups","initializeButtonGroups","initTabs","initializeTabs","destroy","destroySectionObserver","unbindEvents","clearTimeout","cancelAnimationFrame","_addEventListener","element","event","handler","addEventListener","_this2","_isUpdating","sectionObserver","MutationObserver","mutations","every","mutation","type","attributeName","target","oldClasses","oldValue","split","newClasses","Array","from","classList","addedClasses","filter","c","includes","removedClasses","concat","setTimeout","requestAnimationFrame","updateLastVisibleElements","observe","body","attributes","childList","subtree","attributeFilter","attributeOldValue","subtreeFilter","node","contains","nodeName","_this3","updates","sections","tables","rows","visibleChildren","getVisibleChildren","length","lastVisible","table","tbody","visibleRows","getVisibleElements","lastVisibleRow","row","visibleCells","lastVisibleCell","remove","_ref","add","_ref2","_ref3","parent","_this4","children","isElementVisible","elements","_this5","_computedStyle","_styleInvalidated","getComputedStyle","offsetParent","offsetHeight","display","disconnect","e","formControl","closest","disabled","readOnly","inputGroup","updateFormLabelGroup","formLabelGroup","input","hasValue","value","toggle","matches","blur","stopPropagation","tableLink","container","href","dataset","ctrlKey","metaKey","open","location","tableBtn","btn","click","btnGroupToggle","dispatchEvent","Event","bubbles","btnGroup","parentElement","b","_b$querySelector","checked","tabItem","item","_ref4","removeEventListener","refresh","val","get","set","obj","key","style","div","className","createElement","elMatches","Element","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","query","Error","parentNode","removeChild","queryChildren","child","cls","main","rtl","thumb","x","rail","consuming","state","focus","clicking","active","scrolling","scrollingClassTimeout","y","addScrollingClass","i","removeScrollingClass","isAlive","scrollingThreshold","setScrollingClassInstantly","EventElement","handlers","prototypeAccessors","isEmpty","configurable","bind","eventName","unbind","this$1","unbindAll","name","Object","keys","defineProperties","EventManager","eventElements","createEvent","CustomEvent","evt","initCustomEvent","undefined","processScrollDiff","axis","diff","useScrollingClass","forceFireReachEvent","fields","processScrollDiff$1","ref","contentHeight","containerHeight","scrollTop","up","down","reach","toInt","parseInt","isEditable","outerWidth","styles","width","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","eventElement","ee","splice","indexOf","once","onceHandler","env","isWebKit","documentElement","supportsTouch","navigator","maxTouchPoints","DocumentTouch","supportsIePointer","msMaxTouchPoints","isChrome","test","userAgent","updateGeometry","roundedScrollTop","Math","floor","rect","getBoundingClientRect","containerWidth","height","contentWidth","scrollWidth","scrollHeight","scrollbarXRail","appendChild","scrollbarYRail","suppressScrollX","scrollXMarginOffset","scrollbarXActive","railXWidth","railXMarginWidth","railXRatio","scrollbarXWidth","getThumbSize","scrollbarXLeft","negativeScrollAdjustment","scrollLeft","suppressScrollY","scrollYMarginOffset","scrollbarYActive","railYHeight","railYMarginHeight","railYRatio","scrollbarYHeight","scrollbarYTop","updateCss","isRtl","thumbSize","minScrollbarLength","max","maxScrollbarLength","min","xRailOffset","left","isScrollbarXUsingBottom","bottom","scrollbarXBottom","top","scrollbarXTop","yRailOffset","isScrollbarYUsingRight","right","scrollbarYRight","scrollbarYOuterWidth","scrollbarYLeft","scrollbarX","railBorderXWidth","scrollbarY","railBorderYWidth","clickRail","direction","pageY","pageYOffset","pageX","pageXOffset","activeSlider","setupScrollHandlers","bindMouseScrollHandler","containerDimension","contentDimension","pageAxis","railDimension","scrollbarAxis","scrollbarDimension","scrollAxis","scrollbarRail","startingScrollPosition","startingMousePagePosition","scrollBy","moveHandler","touches","toUpperCase","preventDefault","endHandler","bindMoves","passive","cancelable","keyboard","ownerDocument","isDefaultPrevented","defaultPrevented","activeElement","tagName","contentDocument","shadowRoot","deltaX","deltaY","which","altKey","shiftKey","wheelPropagation","shouldPreventDefault","wheel","mousewheelHandler","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","getDeltaFromEvent","cursor","overflowY","match","maxScrollTop","clientHeight","overflowX","maxScrollLeft","clientWidth","shouldBeConsumedByChild","shouldPrevent","useBothWheelAxes","wheelSpeed","isTop","isBottom","isLeft","isRight","offsetWidth","abs","onwheel","onmousewheel","touch","startOffset","startTime","speed","easingLoop","touchStart","touchMove","touchEnd","PointerEvent","MSPointerEvent","applyTouchMove","differenceX","differenceY","getTouch","targetTouches","shouldHandle","pointerType","buttons","MSPOINTER_TYPE_MOUSE","Date","getTime","clearInterval","currentOffset","currentTime","timeGap","magnitudeX","magnitudeY","scrollY","swipeEasing","setInterval","isInitialized","defaultSettings","PerfectScrollbar","userSettings","result","originalScrollLeft","isNegativeScroll","setAttribute","railXStyle","isNaN","marginLeft","marginRight","railYStyle","borderTopWidth","borderBottomWidth","marginTop","marginBottom","handlerName","lastScrollTop","lastScrollLeft","onScroll","update","removePsClasses","join","Sidebar","sidebar","buildCache","bindEvents","initializeScrollbars","destroyScrollbars","$content","find","content","$toggler","toggler","isFloating","hasClass","isOpen","$tabs","$tabSelectors","resizeTimeout","_toggleHandler","handleToggle","_mousedownHandler","sidebarContent","mousedownScrollbar","_mouseupHandler","_tabSelectHandler","switchTab","_collapseClickHandler","collapseToggle","breakpoint","matchMedia","_collapseToggle$nextE","_collapseToggle$paren","linkElement","nextElementSibling","_this2$scrollbar","scrollbar","ResizeObserver","resizeObserver","entries","rafId","innerWidth","removeBackdrop","_resizeHandler","now","performance","lastResizeTime","tabScrollbars","Map","each","index","tab","scrollContainer","ps","clear","toggleWithTransition","action","html","createBackdrop","backdrop","ariaExpanded","siteMainEl","isCurrentlyOpen","tabId","activeTab","getElementById","sidebarTabs","toArray","tabContent","transform","isBeforeActive","activeTabContent","toggleClass","close","floating","ResizeManager","handleWindowResize","windowCallbacks","callback","contentRect","innerHeight","callbacks","WeakMap","observer","Set","isWindowListening","entry","startWindowListening","unobserve","delete","size","stopWindowListening","ScrollManager","handleScroll","isListening","_proto2","id","startListening","stopListening","contentElement","scrollElement","resizeManager","scrollManager","debounce","func","wait","immediate","timeout","context","args","arguments","apply","touchEvents","generateUUID","replace","r","random","toString","escapeHtml","text","createTextNode","p","innerHTML","playAnimation","animationClass","domEl","jquery","Promise","resolve","_domEl$classList","classes","onEnd","_domEl$classList2","escapeChar","chr","escape","string","String","Popover","popover","fn","constructor","defaults","_jQueryInterface","config","_jQueryInit","previousName","Constructor","noConflict","$popover","removeData","setPosition","$container","containerAutoDetect","trigger","placement","align","title","offset","collisionDetection","on","show","hoverTimeout","popupHasFocus","_resizeCallback","off","buildPopover","append","triggerPosX","triggerPosY","viewportWidth","viewportHeight","popoverWidth","popoverHeight","outerHeight","triggerWidth","triggerHeight","containerOffset","triggerOffset","popoverPosX","popoverPosY","offsetX","offsetY","offsets","computedStyle","spacing","getPropertyValue","calculatePosition","currentPlacement","currentAlign","finalPlacement","finalAlign","position","checkCollision","pos","collision","popoverScreenLeft","popoverScreenTop","popoverScreenRight","popoverScreenBottom","newCollision","finalCollision","css","round","attr","addClass","removeAttr","Select","select","useChips","cachedTitle","lastSearchQuery","_scrollCallback","buildScroll","updatePromise","searchApi","_performInitialSearch","then","reset","items","$select","$selectItems","$selectIconContainer","selectIconDefault","$selectHeader","removeClass","dynamicTitle","$selectTitle","dynamicTitleDefault","trim","dynamicTitleEmptyDefault","showSearch","searchData","$searchInput","searchString","search","$searchIconContainer","faPro","scroll","scrollContentHeight","useNativeScroll","searchRequest","contentOpen","searchPlaceholder","btnCloseText","labelTemplate","confirmCheck","confirmUncheck","preventUncheck","allowNoneOnRadioSelect","showValidStateIcon","itemsToExclude","primaryKeyword","preventClose","map","setData","isArray","arr","_renderChips","showFooter","selectItems","_renderItemList","_renderSearch","_renderFooter","values","_","$input","prop","$checkedInput","$scrollableContent","$searchContainer","$clearSearchButton","tabIndex","$footerContainer","$closeButton","buildSearchData","_updateScrollbarVisibility","isSearchApiEnabled","_showSpinner","reject","ajax","method","url","success","dataItem","matchingItem","label","empty","$chip","valueId","_hideSpinner","_recalculateContentHeight","error","xhr","status","console","totalMargin","actualContentHeight","finalHeight","_this6","selectLabels","_this7","self","closeTimeout","cb","_self$data$self$name$","onSelect","_self$data$self$name$2","n","not","mousedown","mouseup","is","has","getData","_this8","faNameSpace","searchUrl","itemCount","currentCount","encodeURIComponent","done","itemIds","useObjects","findIndex","$inputs","inputValues","_this9","_this0","abort","_searchDebounceTimer","parents","searchStringLower","toLowerCase","results","_this1","$selectContent","headerHeight","searchHeight","footerHeight","scrollableHeight","scrollableClientHeight","shouldOpenUpwards","selectTop","constrainedHeight","contentMarginBottom","contentMarginTop","spaceBelow","spaceAbove","scrollableMaxHeight","_this10","$otherSelects","zindex","first","contentRequiredWidth","scrollIntoView","behavior","block","inline","_this$data$this$name$","_this11","isEmptyObject","grep","getItem","getSelectedItems","segment","_this12","ids","getSelectedItem","_this13","checkedItems","createDocumentFragment","resultItems","isChecked","$item","_getItemTemplate","selectItem","_this14","_this$data$this$name$2","_this15","$checkedInputs","onSearch","scrollEl","Dropdown","dropdown","setupResizeHandling","resizeHandler","setupScrollHandling","$dropdown","$scrollableParent","scrollableParents","overflow","scrollHandler","setupVisibilityDetection","IntersectionObserver","intersectionObserver","isIntersecting","threshold","rootMargin","catch","hasDarkMode","parentsUntil","animation","animationIn","animationOut","animationSpeed","minWidth","positionObserver","JSON","parse","closeOnItemClick","$existingMenu","clone","nestedContainer","$nestedContainer","$nestedTrigger","$nestedMenu","parentZIndex","dropdownEl","$dropdownItems","menuRight","positionTypes","fixed","absolute","after","when","$target","onItemClick","_documentClickHandler","isClickInThisDropdown","isNestedDropdownTrigger","dropdownTriggerPosX","dropdownTriggerPosY","triggerRect","dropdownWidth","dropdownHeight","dropdownTriggerWidth","dropdownTriggerHeight","parentOffset","dropdownPosX","dropdownPosY","pl","al","dropdownLeft","dropdownTop","dropdownRight","dropdownBottom","dropdownScreenLeft","dropdownScreenTop","relativeX","relativeY","animationDuration","duration","parseFloat","Tooltip","tooltip","$tooltip","placementChanged","buildTooltip","$arrow","arrowPos","tooltipPosX","tooltipPosY","containerInnerWidth","containerInnerHeight","tooltipWidth","tooltipHeight","tooltipTriggerWidth","tooltipTriggerHeight","tooltipTriggerPosX","tooltipTriggerPosY","arrowWidth","arrowHeight","tooltipOverflowCount","tooltipPosition","tooltipOverflow","fixTooltipPosition","overflowAmount","Collapse","collapse","targetSelector","expanded","indicatorSelector","$indicator","indicator","_clickHandler","SectionTabs","sectionTabs","_tabsCache","_resizeObserver","_isProcessing","dropdownContainer","checkForChanges","$dropdownContainer","$dropdownList","dropdownList","observeTarget","moveToList","uuid","getAttribute","removeAttribute","moveToDropdown","hasAttribute","crypto","randomUUID","cloneNode","itemActionEl","getTabDimensions","wasInvisible","originalOverflow","totalWidth","dimensions","availableSpace","sectionHeader","headerStyles","flexDirection","containerStyles","sectionSearch","gap","tabs","dropdownItems","accumulatedWidth","visibleTabs","overflowTabs","widthWithGap","relatedDropdownId","dropdownItem","remainingSpace","originalTab","hasDropdownItems","Toast","toast","toasts","queue","processingQueue","onInitialize","lastToastContent","isSimilarToast","addQueue","t","processQueue","shift","buildToast","placementX","placementY","dismiss","header","theme","template","maxBodyHeight","_renderTemplate","$inner","$closeBtn","toastPosX","toastPosY","toastWidth","toastHeight","bodyCloseBtn","_Toast$DEFAULTS","Dialog","dialog","dialogs","actions","hasOwnProperty","buildDialog","footer","centered","preventScroll","closeBtn","overflowVisible","actionInProgress","actionThreshold","commonActions","actionKey","_step","_iterator","_createForOfIteratorHelperLoose","commonAction","resetActionFlag","immediately","promiseResult","updateMaxBodyHeight","newHeight","lastOrientation","orientation","orientationChanged","$prevDialog","eq","zIndex","transition","opacity","visibility","checkForBackdrop","$dialogContentEl","actionsArr","visible","idx","sort","a","some","btns","btnStyle","primary","btnContent","charAt","slice","attrs","_renderHeader","closeBtnHtml","overFlowVisible","_Dialog$DEFAULTS","Common","_sectionInstance","initialize","sidebarLeft","_sidebarInstance","initComponent","selectors","initQueue","visibleQueue","hiddenQueue","allQueue","processBatch","requestIdleCallback","observeResize","warn","unobserveResize","addScrollListener","removeScrollListener","getSidebar","getSection","index_esm"],"sources":["../../js/src/component.js","../../js/src/section.js","../../node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js","../../js/src/sidebar.js","../../js/src/utils.js","../../js/src/popover.js","../../js/src/select.js","../../js/src/dropdown.js","../../js/src/tooltip.js","../../js/src/collapse.js","../../js/src/section-tabs.js","../../js/src/toast.js","../../js/src/dialog.js","../../js/src/common.js","../../js/index.esm.js"],"sourcesContent":["import 'jquery';\n\nexport default class Component {\n\n static instances = [];\n\n static initializeElement(selector, options = {}) {\n const el = typeof selector === 'string' ? document.querySelector(selector) : selector;\n if (!el) return false;\n\n const $el = $(el);\n\n if (!$el.data(`plugin_${this.NAME}`)) {\n const instance = new this(el, options);\n $el.data(`plugin_${this.NAME}`, instance);\n this.instances.push(instance);\n return instance;\n }\n\n return false;\n }\n\n static initializeElements(selector, options = {}) { \n document.querySelectorAll(selector).forEach(el => {\n this.initializeElement(el, options);\n });\n \n return this.instances;\n }\n\n onInit() {\n let onInit = this.opts.onInit;\n if (typeof onInit === 'function') {\n onInit.call(this);\n }\n }\n\n onUpdate() {\n let onUpdate = this.opts.onUpdate;\n if (typeof onUpdate === 'function') {\n onUpdate.call(this);\n }\n }\n\n onDestroy() {\n let onDestroy = this.opts.onDestroy;\n if (typeof onDestroy === 'function') {\n onDestroy.call(this);\n }\n }\n \n onShow() {\n let onShow = this.opts.onShow;\n\n if (typeof onShow === 'function') {\n onShow.call(this);\n }\n }\n\n onClose() {\n let onClose = this.opts.onClose;\n if (typeof onClose === 'function') {\n onClose.call(this);\n }\n }\n\n onReset() {\n let onReset = this.opts.onReset;\n if (typeof onReset === 'function') {\n onReset.call(this);\n }\n }\n}","import Component from './component';\n\nclass Section extends Component {\n\n static DEFAULTS = {\n observeSections: true,\n initFormControls: true,\n initTableHandlers: true,\n initButtonGroups: true,\n initTabs: true,\n onInit: null,\n onDestroy: null\n };\n\n constructor(opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool && window.Cool.settings && window.Cool.settings.section) {\n $.extend(true, this.opts, Section.DEFAULTS, window.Cool.settings.section, opts);\n } else {\n $.extend(true, this.opts, Section.DEFAULTS, opts);\n }\n\n this._eventHandlers = [];\n this._updateTimeout = null;\n this._rafId = null;\n \n this.init();\n }\n\n init() {\n if (this.opts.observeSections) {\n this.initializeSectionObserver();\n }\n \n if (this.opts.initFormControls) {\n this.initializeFormControls();\n }\n \n if (this.opts.initTableHandlers) {\n this.initializeTableHandlers();\n }\n \n if (this.opts.initButtonGroups) {\n this.initializeButtonGroups();\n }\n \n if (this.opts.initTabs) {\n this.initializeTabs();\n }\n \n this.onInit();\n }\n\n destroy() {\n this.destroySectionObserver();\n this.unbindEvents();\n if (this._updateTimeout) {\n clearTimeout(this._updateTimeout);\n }\n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n }\n this.onDestroy();\n }\n\n _addEventListener(element, event, handler, options) {\n element.addEventListener(event, handler, options);\n this._eventHandlers.push({ element, event, handler, options });\n }\n\n initializeSectionObserver() {\n this._isUpdating = false;\n \n this.sectionObserver = new MutationObserver((mutations) => {\n if (this._isUpdating) return;\n \n const isOwnUpdate = mutations.every(mutation => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n const target = mutation.target;\n const oldClasses = mutation.oldValue ? mutation.oldValue.split(' ') : [];\n const newClasses = Array.from(target.classList);\n const addedClasses = newClasses.filter(c => !oldClasses.includes(c));\n const removedClasses = oldClasses.filter(c => !newClasses.includes(c));\n const changedClasses = [...addedClasses, ...removedClasses];\n \n return changedClasses.every(c => \n c === 'is-last-visible' || \n c === 'is-last-visible-row' || \n c === 'is-last-visible-cell'\n );\n }\n return false;\n });\n \n if (isOwnUpdate) return;\n \n if (this._updateTimeout) {\n clearTimeout(this._updateTimeout);\n }\n \n this._updateTimeout = setTimeout(() => {\n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n }\n \n this._rafId = requestAnimationFrame(() => {\n this.updateLastVisibleElements();\n });\n }, 50);\n });\n\n this.sectionObserver.observe(document.body, {\n attributes: true,\n childList: true,\n subtree: true,\n attributeFilter: ['class', 'style', 'hidden'],\n attributeOldValue: true,\n subtreeFilter: (node) => {\n return node.classList && (\n node.classList.contains('section') ||\n node.classList.contains('select') ||\n node.nodeName === 'TABLE' ||\n node.nodeName === 'TR' ||\n node.nodeName === 'TD' ||\n node.nodeName === 'TH'\n );\n }\n });\n\n this.updateLastVisibleElements();\n }\n\n updateLastVisibleElements() {\n this._isUpdating = true;\n \n const updates = {\n sections: [],\n tables: [],\n rows: []\n };\n\n document.querySelectorAll('.section').forEach(section => {\n const visibleChildren = this.getVisibleChildren(section);\n if (visibleChildren.length) {\n updates.sections.push({\n section,\n lastVisible: visibleChildren[visibleChildren.length - 1]\n });\n }\n });\n\n document.querySelectorAll('table').forEach(table => {\n const tbody = table.querySelector('tbody') || table;\n const visibleRows = this.getVisibleElements(tbody.querySelectorAll('tr'));\n \n if (visibleRows.length) {\n updates.tables.push({\n tbody,\n lastVisibleRow: visibleRows[visibleRows.length - 1]\n });\n }\n });\n\n document.querySelectorAll('table tr').forEach(row => {\n const visibleCells = this.getVisibleElements(row.querySelectorAll('td, th'));\n \n if (visibleCells.length) {\n updates.rows.push({\n row,\n lastVisibleCell: visibleCells[visibleCells.length - 1]\n });\n }\n });\n\n requestAnimationFrame(() => {\n document.querySelectorAll('.is-last-visible, .is-last-visible-row, .is-last-visible-cell')\n .forEach(el => {\n el.classList.remove('is-last-visible', 'is-last-visible-row', 'is-last-visible-cell');\n });\n\n updates.sections.forEach(({ lastVisible }) => {\n lastVisible.classList.add('is-last-visible');\n });\n\n updates.tables.forEach(({ lastVisibleRow }) => {\n lastVisibleRow.classList.add('is-last-visible-row');\n });\n\n updates.rows.forEach(({ lastVisibleCell }) => {\n lastVisibleCell.classList.add('is-last-visible-cell');\n });\n \n setTimeout(() => {\n this._isUpdating = false;\n }, 0);\n });\n }\n\n getVisibleChildren(parent) {\n return Array.from(parent.children).filter(el => this.isElementVisible(el));\n }\n\n getVisibleElements(elements) {\n return Array.from(elements).filter(el => this.isElementVisible(el));\n }\n\n isElementVisible(el) {\n if (!el._computedStyle || el._styleInvalidated) {\n el._computedStyle = window.getComputedStyle(el);\n el._styleInvalidated = false;\n }\n \n return !el.classList.contains('d-none') &&\n !el.classList.contains('d-md-none') &&\n el.offsetParent !== null &&\n el.offsetHeight > 0 &&\n el._computedStyle.display !== 'none';\n }\n\n destroySectionObserver() {\n if (this.sectionObserver) {\n this.sectionObserver.disconnect();\n this.sectionObserver = null;\n }\n if (this._updateTimeout) {\n clearTimeout(this._updateTimeout);\n this._updateTimeout = null;\n }\n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n this._rafId = null;\n }\n }\n\n initializeFormControls() {\n this._addEventListener(document, 'focusin', (e) => {\n const formControl = e.target.closest('.form-control');\n if (!formControl) return;\n \n if (!formControl.disabled && !formControl.readOnly) {\n const inputGroup = formControl.closest('.input-group');\n inputGroup?.classList.add('input-group-focus');\n }\n });\n\n this._addEventListener(document, 'focusout', (e) => {\n const formControl = e.target.closest('.form-control');\n if (!formControl) return;\n \n if (!formControl.disabled && !formControl.readOnly) {\n const inputGroup = formControl.closest('.input-group');\n inputGroup?.classList.remove('input-group-focus');\n }\n });\n\n const updateFormLabelGroup = (formLabelGroup) => {\n const input = formLabelGroup.querySelector('input, select');\n const hasValue = !!input?.value;\n formLabelGroup.classList.toggle('label-on-top', hasValue);\n };\n\n this._addEventListener(document, 'input', (e) => {\n const formLabelGroup = e.target.closest('.form-label-group');\n if (formLabelGroup) {\n updateFormLabelGroup(formLabelGroup);\n }\n });\n\n this._addEventListener(document, 'change', (e) => {\n const formLabelGroup = e.target.closest('.form-label-group');\n if (formLabelGroup) {\n updateFormLabelGroup(formLabelGroup);\n }\n \n if (e.target.matches('select')) {\n e.target.blur();\n }\n });\n\n document.querySelectorAll('.form-label-group').forEach(updateFormLabelGroup);\n }\n\n initializeTableHandlers() {\n document.querySelectorAll('.table').forEach(table => {\n if (table.querySelector('[data-table-link], [data-table-btn]') && \n !table.classList.contains('table-hover')) {\n table.classList.add('table-hover');\n }\n });\n\n this._addEventListener(document, 'click', (e) => {\n if (e.target.closest('[data-table-link] .table-link-exclude, ' +\n '[data-table-link] input, [data-table-link] button, ' +\n '[data-table-link] a, [data-table-link] label, ' +\n '[data-table-link] .td-col-select')) {\n e.stopPropagation();\n return;\n }\n\n const tableLink = e.target.closest('[data-table-link]');\n if (tableLink) {\n const container = tableLink.closest('table, .table');\n const href = tableLink.dataset.tableLink;\n\n if (container?.classList.contains('bulk-actions-active')) {\n return;\n }\n\n if (e.ctrlKey || e.metaKey) {\n window.open(href, '_blank');\n } else {\n window.location.href = href;\n }\n }\n\n if (e.target.closest('[data-table-btn] .table-btn-exclude, ' +\n '[data-table-btn] input, [data-table-btn] button, ' +\n '[data-table-btn] a, [data-table-btn] label, ' +\n '[data-table-btn] .td-col-select')) {\n e.stopPropagation();\n return;\n }\n\n const tableBtn = e.target.closest('[data-table-btn]');\n if (tableBtn) {\n const container = tableBtn.closest('tr, .tr');\n const btn = tableBtn.querySelector('button');\n\n if (!btn || container?.classList.contains('bulk-actions-active')) {\n return;\n }\n\n btn.click();\n }\n });\n }\n\n initializeButtonGroups() {\n this._addEventListener(document, 'click', (e) => {\n const btnGroupToggle = e.target.closest('.btn-group-toggle .btn');\n if (btnGroupToggle && !e.target.matches('input')) {\n const input = btnGroupToggle.querySelector('input');\n if (input) {\n input.click();\n input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n }\n\n if (e.target.matches('.btn-group-toggle .btn > input')) {\n e.stopPropagation();\n }\n });\n\n this._addEventListener(document, 'change', (e) => {\n if (e.target.matches('.btn-group-toggle .btn > input[type=\"radio\"]')) {\n const btn = e.target.parentElement;\n const btnGroup = btn.closest('.btn-group-toggle');\n if (btnGroup) {\n btnGroup.querySelectorAll('.btn').forEach(b => {\n b.classList.toggle('active', b.querySelector('input')?.checked);\n });\n }\n } else if (e.target.matches('.btn-group-toggle .btn > input[type=\"checkbox\"]')) {\n const btn = e.target.parentElement;\n btn.classList.toggle('active', e.target.checked);\n }\n });\n }\n\n initializeTabs() {\n this._addEventListener(document, 'click', (e) => {\n const tabItem = e.target.closest('.tabs .tab-item')\n if (tabItem) {\n e.stopPropagation();\n const tabs = tabItem.closest('.tabs');\n tabs.querySelectorAll('.tab-item').forEach(item => \n item.classList.remove('active')\n );\n tabItem.classList.add('active');\n }\n });\n }\n\n unbindEvents() {\n this._eventHandlers.forEach(({ element, event, handler, options }) => {\n element.removeEventListener(event, handler, options);\n });\n this._eventHandlers = [];\n }\n\n refresh() {\n document.querySelectorAll('.form-label-group').forEach(formLabelGroup => {\n const input = formLabelGroup.querySelector('input, select');\n const val = input?.value;\n formLabelGroup.classList.toggle('label-on-top', !!val);\n });\n }\n}\n\nexport default Section;","/*!\n * perfect-scrollbar v1.5.6\n * Copyright 2024 Hyunje Jun, MDBootstrap and Contributors\n * Licensed under MIT\n */\n\nfunction get(element) {\n return getComputedStyle(element);\n}\n\nfunction set(element, obj) {\n for (var key in obj) {\n var val = obj[key];\n if (typeof val === 'number') {\n val = val + \"px\";\n }\n element.style[key] = val;\n }\n return element;\n}\n\nfunction div(className) {\n var div = document.createElement('div');\n div.className = className;\n return div;\n}\n\nvar elMatches =\n typeof Element !== 'undefined' &&\n (Element.prototype.matches ||\n Element.prototype.webkitMatchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector);\n\nfunction matches(element, query) {\n if (!elMatches) {\n throw new Error('No element matching method supported');\n }\n\n return elMatches.call(element, query);\n}\n\nfunction remove(element) {\n if (element.remove) {\n element.remove();\n } else {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n}\n\nfunction queryChildren(element, selector) {\n return Array.prototype.filter.call(element.children, function (child) { return matches(child, selector); }\n );\n}\n\nvar cls = {\n main: 'ps',\n rtl: 'ps__rtl',\n element: {\n thumb: function (x) { return (\"ps__thumb-\" + x); },\n rail: function (x) { return (\"ps__rail-\" + x); },\n consuming: 'ps__child--consume',\n },\n state: {\n focus: 'ps--focus',\n clicking: 'ps--clicking',\n active: function (x) { return (\"ps--active-\" + x); },\n scrolling: function (x) { return (\"ps--scrolling-\" + x); },\n },\n};\n\n/*\n * Helper methods\n */\nvar scrollingClassTimeout = { x: null, y: null };\n\nfunction addScrollingClass(i, x) {\n var classList = i.element.classList;\n var className = cls.state.scrolling(x);\n\n if (classList.contains(className)) {\n clearTimeout(scrollingClassTimeout[x]);\n } else {\n classList.add(className);\n }\n}\n\nfunction removeScrollingClass(i, x) {\n scrollingClassTimeout[x] = setTimeout(\n function () { return i.isAlive && i.element.classList.remove(cls.state.scrolling(x)); },\n i.settings.scrollingThreshold\n );\n}\n\nfunction setScrollingClassInstantly(i, x) {\n addScrollingClass(i, x);\n removeScrollingClass(i, x);\n}\n\nvar EventElement = function EventElement(element) {\n this.element = element;\n this.handlers = {};\n};\n\nvar prototypeAccessors = { isEmpty: { configurable: true } };\n\nEventElement.prototype.bind = function bind (eventName, handler) {\n if (typeof this.handlers[eventName] === 'undefined') {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(handler);\n this.element.addEventListener(eventName, handler, false);\n};\n\nEventElement.prototype.unbind = function unbind (eventName, target) {\n var this$1 = this;\n\n this.handlers[eventName] = this.handlers[eventName].filter(function (handler) {\n if (target && handler !== target) {\n return true;\n }\n this$1.element.removeEventListener(eventName, handler, false);\n return false;\n });\n};\n\nEventElement.prototype.unbindAll = function unbindAll () {\n for (var name in this.handlers) {\n this.unbind(name);\n }\n};\n\nprototypeAccessors.isEmpty.get = function () {\n var this$1 = this;\n\n return Object.keys(this.handlers).every(\n function (key) { return this$1.handlers[key].length === 0; }\n );\n};\n\nObject.defineProperties( EventElement.prototype, prototypeAccessors );\n\nvar EventManager = function EventManager() {\n this.eventElements = [];\n};\n\nEventManager.prototype.eventElement = function eventElement (element) {\n var ee = this.eventElements.filter(function (ee) { return ee.element === element; })[0];\n if (!ee) {\n ee = new EventElement(element);\n this.eventElements.push(ee);\n }\n return ee;\n};\n\nEventManager.prototype.bind = function bind (element, eventName, handler) {\n this.eventElement(element).bind(eventName, handler);\n};\n\nEventManager.prototype.unbind = function unbind (element, eventName, handler) {\n var ee = this.eventElement(element);\n ee.unbind(eventName, handler);\n\n if (ee.isEmpty) {\n // remove\n this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n }\n};\n\nEventManager.prototype.unbindAll = function unbindAll () {\n this.eventElements.forEach(function (e) { return e.unbindAll(); });\n this.eventElements = [];\n};\n\nEventManager.prototype.once = function once (element, eventName, handler) {\n var ee = this.eventElement(element);\n var onceHandler = function (evt) {\n ee.unbind(eventName, onceHandler);\n handler(evt);\n };\n ee.bind(eventName, onceHandler);\n};\n\nfunction createEvent(name) {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(name);\n }\n\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(name, false, false, undefined);\n return evt;\n}\n\nfunction processScrollDiff (i, axis, diff, useScrollingClass, forceFireReachEvent) {\n if ( useScrollingClass === void 0 ) useScrollingClass = true;\n if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n var fields;\n if (axis === 'top') {\n fields = ['contentHeight', 'containerHeight', 'scrollTop', 'y', 'up', 'down'];\n } else if (axis === 'left') {\n fields = ['contentWidth', 'containerWidth', 'scrollLeft', 'x', 'left', 'right'];\n } else {\n throw new Error('A proper axis should be provided');\n }\n\n processScrollDiff$1(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff$1(\n i,\n diff,\n ref,\n useScrollingClass,\n forceFireReachEvent\n) {\n var contentHeight = ref[0];\n var containerHeight = ref[1];\n var scrollTop = ref[2];\n var y = ref[3];\n var up = ref[4];\n var down = ref[5];\n if ( useScrollingClass === void 0 ) useScrollingClass = true;\n if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n var element = i.element;\n\n // reset reach\n i.reach[y] = null;\n\n // 1 for subpixel rounding\n if (element[scrollTop] < 1) {\n i.reach[y] = 'start';\n }\n\n // 1 for subpixel rounding\n if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n i.reach[y] = 'end';\n }\n\n if (diff) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + y)));\n\n if (diff < 0) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + up)));\n } else if (diff > 0) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + down)));\n }\n\n if (useScrollingClass) {\n setScrollingClassInstantly(i, y);\n }\n }\n\n if (i.reach[y] && (diff || forceFireReachEvent)) {\n element.dispatchEvent(createEvent((\"ps-\" + y + \"-reach-\" + (i.reach[y]))));\n }\n}\n\nfunction toInt(x) {\n return parseInt(x, 10) || 0;\n}\n\nfunction isEditable(el) {\n return (\n matches(el, 'input,[contenteditable]') ||\n matches(el, 'select,[contenteditable]') ||\n matches(el, 'textarea,[contenteditable]') ||\n matches(el, 'button,[contenteditable]')\n );\n}\n\nfunction outerWidth(element) {\n var styles = get(element);\n return (\n toInt(styles.width) +\n toInt(styles.paddingLeft) +\n toInt(styles.paddingRight) +\n toInt(styles.borderLeftWidth) +\n toInt(styles.borderRightWidth)\n );\n}\n\nvar env = {\n isWebKit:\n typeof document !== 'undefined' &&\n 'WebkitAppearance' in document.documentElement.style,\n supportsTouch:\n typeof window !== 'undefined' &&\n ('ontouchstart' in window ||\n ('maxTouchPoints' in window.navigator &&\n window.navigator.maxTouchPoints > 0) ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)),\n supportsIePointer:\n typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n isChrome:\n typeof navigator !== 'undefined' &&\n /Chrome/i.test(navigator && navigator.userAgent),\n};\n\n/* eslint-disable no-lonely-if */\n\nfunction updateGeometry (i) {\n var element = i.element;\n var roundedScrollTop = Math.floor(element.scrollTop);\n var rect = element.getBoundingClientRect();\n\n i.containerWidth = Math.floor(rect.width);\n i.containerHeight = Math.floor(rect.height);\n\n i.contentWidth = element.scrollWidth;\n i.contentHeight = element.scrollHeight;\n\n if (!element.contains(i.scrollbarXRail)) {\n // clean up and append\n queryChildren(element, cls.element.rail('x')).forEach(function (el) { return remove(el); });\n element.appendChild(i.scrollbarXRail);\n }\n if (!element.contains(i.scrollbarYRail)) {\n // clean up and append\n queryChildren(element, cls.element.rail('y')).forEach(function (el) { return remove(el); });\n element.appendChild(i.scrollbarYRail);\n }\n\n if (\n !i.settings.suppressScrollX &&\n i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n ) {\n i.scrollbarXActive = true;\n i.railXWidth = i.containerWidth - i.railXMarginWidth;\n i.railXRatio = i.containerWidth / i.railXWidth;\n i.scrollbarXWidth = getThumbSize(i, toInt((i.railXWidth * i.containerWidth) / i.contentWidth));\n i.scrollbarXLeft = toInt(\n ((i.negativeScrollAdjustment + element.scrollLeft) * (i.railXWidth - i.scrollbarXWidth)) /\n (i.contentWidth - i.containerWidth)\n );\n } else {\n i.scrollbarXActive = false;\n }\n\n if (\n !i.settings.suppressScrollY &&\n i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n ) {\n i.scrollbarYActive = true;\n i.railYHeight = i.containerHeight - i.railYMarginHeight;\n i.railYRatio = i.containerHeight / i.railYHeight;\n i.scrollbarYHeight = getThumbSize(\n i,\n toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n );\n i.scrollbarYTop = toInt(\n (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n (i.contentHeight - i.containerHeight)\n );\n } else {\n i.scrollbarYActive = false;\n }\n\n if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n }\n if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n }\n\n updateCss(element, i);\n\n if (i.scrollbarXActive) {\n element.classList.add(cls.state.active('x'));\n } else {\n element.classList.remove(cls.state.active('x'));\n i.scrollbarXWidth = 0;\n i.scrollbarXLeft = 0;\n element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n }\n if (i.scrollbarYActive) {\n element.classList.add(cls.state.active('y'));\n } else {\n element.classList.remove(cls.state.active('y'));\n i.scrollbarYHeight = 0;\n i.scrollbarYTop = 0;\n element.scrollTop = 0;\n }\n}\n\nfunction getThumbSize(i, thumbSize) {\n if (i.settings.minScrollbarLength) {\n thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n }\n if (i.settings.maxScrollbarLength) {\n thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n }\n return thumbSize;\n}\n\nfunction updateCss(element, i) {\n var xRailOffset = { width: i.railXWidth };\n var roundedScrollTop = Math.floor(element.scrollTop);\n\n if (i.isRtl) {\n xRailOffset.left =\n i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth - i.contentWidth;\n } else {\n xRailOffset.left = element.scrollLeft;\n }\n if (i.isScrollbarXUsingBottom) {\n xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n } else {\n xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n }\n set(i.scrollbarXRail, xRailOffset);\n\n var yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n if (i.isScrollbarYUsingRight) {\n if (i.isRtl) {\n yRailOffset.right =\n i.contentWidth -\n (i.negativeScrollAdjustment + element.scrollLeft) -\n i.scrollbarYRight -\n i.scrollbarYOuterWidth -\n 9;\n } else {\n yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n }\n } else {\n if (i.isRtl) {\n yRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth * 2 -\n i.contentWidth -\n i.scrollbarYLeft -\n i.scrollbarYOuterWidth;\n } else {\n yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n }\n }\n set(i.scrollbarYRail, yRailOffset);\n\n set(i.scrollbarX, {\n left: i.scrollbarXLeft,\n width: i.scrollbarXWidth - i.railBorderXWidth,\n });\n set(i.scrollbarY, {\n top: i.scrollbarYTop,\n height: i.scrollbarYHeight - i.railBorderYWidth,\n });\n}\n\n/* eslint-disable */\n\nfunction clickRail (i) {\n // const element = i.element;\n\n i.event.bind(i.scrollbarY, 'mousedown', function (e) { return e.stopPropagation(); });\n i.event.bind(i.scrollbarYRail, 'mousedown', function (e) {\n var positionTop = e.pageY - window.pageYOffset - i.scrollbarYRail.getBoundingClientRect().top;\n var direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n i.element.scrollTop += direction * i.containerHeight;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n\n i.event.bind(i.scrollbarX, 'mousedown', function (e) { return e.stopPropagation(); });\n i.event.bind(i.scrollbarXRail, 'mousedown', function (e) {\n var positionLeft =\n e.pageX - window.pageXOffset - i.scrollbarXRail.getBoundingClientRect().left;\n var direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n i.element.scrollLeft += direction * i.containerWidth;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n}\n\nvar activeSlider = null; // Variable to track the currently active slider\n\nfunction setupScrollHandlers(i) {\n bindMouseScrollHandler(i, [\n 'containerHeight',\n 'contentHeight',\n 'pageY',\n 'railYHeight',\n 'scrollbarY',\n 'scrollbarYHeight',\n 'scrollTop',\n 'y',\n 'scrollbarYRail' ]);\n\n bindMouseScrollHandler(i, [\n 'containerWidth',\n 'contentWidth',\n 'pageX',\n 'railXWidth',\n 'scrollbarX',\n 'scrollbarXWidth',\n 'scrollLeft',\n 'x',\n 'scrollbarXRail' ]);\n}\n\nfunction bindMouseScrollHandler(\n i,\n ref\n) {\n var containerDimension = ref[0];\n var contentDimension = ref[1];\n var pageAxis = ref[2];\n var railDimension = ref[3];\n var scrollbarAxis = ref[4];\n var scrollbarDimension = ref[5];\n var scrollAxis = ref[6];\n var axis = ref[7];\n var scrollbarRail = ref[8];\n\n var element = i.element;\n var startingScrollPosition = null;\n var startingMousePagePosition = null;\n var scrollBy = null;\n\n function moveHandler(e) {\n if (e.touches && e.touches[0]) {\n e[pageAxis] = e.touches[0][(\"page\" + (axis.toUpperCase()))];\n }\n\n // Only move if the active slider is the one we started with\n if (activeSlider === scrollbarAxis) {\n element[scrollAxis] =\n startingScrollPosition + scrollBy * (e[pageAxis] - startingMousePagePosition);\n addScrollingClass(i, axis);\n updateGeometry(i);\n\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n function endHandler() {\n removeScrollingClass(i, axis);\n i[scrollbarRail].classList.remove(cls.state.clicking);\n document.removeEventListener('mousemove', moveHandler);\n document.removeEventListener('mouseup', endHandler);\n document.removeEventListener('touchmove', moveHandler);\n document.removeEventListener('touchend', endHandler);\n activeSlider = null; // Reset active slider when interaction ends\n }\n\n function bindMoves(e) {\n if (activeSlider === null) {\n // Only bind if no slider is currently active\n activeSlider = scrollbarAxis; // Set current slider as active\n\n startingScrollPosition = element[scrollAxis];\n if (e.touches) {\n e[pageAxis] = e.touches[0][(\"page\" + (axis.toUpperCase()))];\n }\n startingMousePagePosition = e[pageAxis];\n scrollBy =\n (i[contentDimension] - i[containerDimension]) / (i[railDimension] - i[scrollbarDimension]);\n\n if (!e.touches) {\n document.addEventListener('mousemove', moveHandler);\n document.addEventListener('mouseup', endHandler);\n } else {\n document.addEventListener('touchmove', moveHandler, { passive: false });\n document.addEventListener('touchend', endHandler);\n }\n\n i[scrollbarRail].classList.add(cls.state.clicking);\n }\n\n e.stopPropagation();\n if (e.cancelable) {\n e.preventDefault();\n }\n }\n\n i[scrollbarAxis].addEventListener('mousedown', bindMoves);\n i[scrollbarAxis].addEventListener('touchstart', bindMoves);\n}\n\n/* eslint-disable */\n\nfunction keyboard (i) {\n var element = i.element;\n\n var elementHovered = function () { return matches(element, ':hover'); };\n var scrollbarFocused = function () { return matches(i.scrollbarX, ':focus') || matches(i.scrollbarY, ':focus'); };\n\n function shouldPreventDefault(deltaX, deltaY) {\n var scrollTop = Math.floor(element.scrollTop);\n if (deltaX === 0) {\n if (!i.scrollbarYActive) {\n return false;\n }\n if (\n (scrollTop === 0 && deltaY > 0) ||\n (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n\n var scrollLeft = element.scrollLeft;\n if (deltaY === 0) {\n if (!i.scrollbarXActive) {\n return false;\n }\n if (\n (scrollLeft === 0 && deltaX < 0) ||\n (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n return true;\n }\n\n i.event.bind(i.ownerDocument, 'keydown', function (e) {\n if ((e.isDefaultPrevented && e.isDefaultPrevented()) || e.defaultPrevented) {\n return;\n }\n\n if (!elementHovered() && !scrollbarFocused()) {\n return;\n }\n\n var activeElement = document.activeElement\n ? document.activeElement\n : i.ownerDocument.activeElement;\n if (activeElement) {\n if (activeElement.tagName === 'IFRAME') {\n activeElement = activeElement.contentDocument.activeElement;\n } else {\n // go deeper if element is a webcomponent\n while (activeElement.shadowRoot) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n }\n if (isEditable(activeElement)) {\n return;\n }\n }\n\n var deltaX = 0;\n var deltaY = 0;\n\n switch (e.which) {\n case 37: // left\n if (e.metaKey) {\n deltaX = -i.contentWidth;\n } else if (e.altKey) {\n deltaX = -i.containerWidth;\n } else {\n deltaX = -30;\n }\n break;\n case 38: // up\n if (e.metaKey) {\n deltaY = i.contentHeight;\n } else if (e.altKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = 30;\n }\n break;\n case 39: // right\n if (e.metaKey) {\n deltaX = i.contentWidth;\n } else if (e.altKey) {\n deltaX = i.containerWidth;\n } else {\n deltaX = 30;\n }\n break;\n case 40: // down\n if (e.metaKey) {\n deltaY = -i.contentHeight;\n } else if (e.altKey) {\n deltaY = -i.containerHeight;\n } else {\n deltaY = -30;\n }\n break;\n case 32: // space bar\n if (e.shiftKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = -i.containerHeight;\n }\n break;\n case 33: // page up\n deltaY = i.containerHeight;\n break;\n case 34: // page down\n deltaY = -i.containerHeight;\n break;\n case 36: // home\n deltaY = i.contentHeight;\n break;\n case 35: // end\n deltaY = -i.contentHeight;\n break;\n default:\n return;\n }\n\n if (i.settings.suppressScrollX && deltaX !== 0) {\n return;\n }\n if (i.settings.suppressScrollY && deltaY !== 0) {\n return;\n }\n\n element.scrollTop -= deltaY;\n element.scrollLeft += deltaX;\n updateGeometry(i);\n\n if (shouldPreventDefault(deltaX, deltaY)) {\n e.preventDefault();\n }\n });\n}\n\n/* eslint-disable */\n\nfunction wheel (i) {\n var element = i.element;\n\n function shouldPreventDefault(deltaX, deltaY) {\n var roundedScrollTop = Math.floor(element.scrollTop);\n var isTop = element.scrollTop === 0;\n var isBottom = roundedScrollTop + element.offsetHeight === element.scrollHeight;\n var isLeft = element.scrollLeft === 0;\n var isRight = element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n var hitsBound;\n\n // pick axis with primary direction\n if (Math.abs(deltaY) > Math.abs(deltaX)) {\n hitsBound = isTop || isBottom;\n } else {\n hitsBound = isLeft || isRight;\n }\n\n return hitsBound ? !i.settings.wheelPropagation : true;\n }\n\n function getDeltaFromEvent(e) {\n var deltaX = e.deltaX;\n var deltaY = -1 * e.deltaY;\n\n if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n // OS X Safari\n deltaX = (-1 * e.wheelDeltaX) / 6;\n deltaY = e.wheelDeltaY / 6;\n }\n\n if (e.deltaMode && e.deltaMode === 1) {\n // Firefox in deltaMode 1: Line scrolling\n deltaX *= 10;\n deltaY *= 10;\n }\n\n if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n // IE in some mouse drivers\n deltaX = 0;\n deltaY = e.wheelDelta;\n }\n\n if (e.shiftKey) {\n // reverse axis with shift key\n return [-deltaY, -deltaX];\n }\n return [deltaX, deltaY];\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n // FIXME: this is a workaround for <select> issue in FF and IE #571\n if (!env.isWebKit && element.querySelector('select:focus')) {\n return true;\n }\n\n if (!element.contains(target)) {\n return false;\n }\n\n var cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n var style = get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n var maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n var maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function mousewheelHandler(e) {\n var ref = getDeltaFromEvent(e);\n var deltaX = ref[0];\n var deltaY = ref[1];\n\n if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\n return;\n }\n\n var shouldPrevent = false;\n if (!i.settings.useBothWheelAxes) {\n // deltaX will only be used for horizontal scrolling and deltaY will\n // only be used for vertical scrolling - this is the default\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else if (i.scrollbarYActive && !i.scrollbarXActive) {\n // only vertical scrollbar is active and useBothWheelAxes option is\n // active, so let's scroll vertical bar using both mouse wheel axes\n if (deltaY) {\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n } else {\n element.scrollTop += deltaX * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n } else if (i.scrollbarXActive && !i.scrollbarYActive) {\n // useBothWheelAxes and only horizontal bar is active, so use both\n // wheel axes for horizontal bar\n if (deltaX) {\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else {\n element.scrollLeft -= deltaY * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n }\n\n updateGeometry(i);\n\n shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\n if (shouldPrevent && !e.ctrlKey) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n if (typeof window.onwheel !== 'undefined') {\n i.event.bind(element, 'wheel', mousewheelHandler);\n } else if (typeof window.onmousewheel !== 'undefined') {\n i.event.bind(element, 'mousewheel', mousewheelHandler);\n }\n}\n\nfunction touch (i) {\n if (!env.supportsTouch && !env.supportsIePointer) {\n return;\n }\n\n var element = i.element;\n\n var state = {\n startOffset: {},\n startTime: 0,\n speed: {},\n easingLoop: null,\n };\n\n function shouldPrevent(deltaX, deltaY) {\n var scrollTop = Math.floor(element.scrollTop);\n var scrollLeft = element.scrollLeft;\n var magnitudeX = Math.abs(deltaX);\n var magnitudeY = Math.abs(deltaY);\n\n if (magnitudeY > magnitudeX) {\n // user is perhaps trying to swipe up/down the page\n\n if (\n (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\n (deltaY > 0 && scrollTop === 0)\n ) {\n // set prevent for mobile Chrome refresh\n return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n }\n } else if (magnitudeX > magnitudeY) {\n // user is perhaps trying to swipe left/right across the page\n\n if (\n (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||\n (deltaX > 0 && scrollLeft === 0)\n ) {\n return true;\n }\n }\n\n return true;\n }\n\n function applyTouchMove(differenceX, differenceY) {\n element.scrollTop -= differenceY;\n element.scrollLeft -= differenceX;\n\n updateGeometry(i);\n }\n\n function getTouch(e) {\n if (e.targetTouches) {\n return e.targetTouches[0];\n }\n // Maybe IE pointer\n return e;\n }\n\n function shouldHandle(e) {\n if (e.target === i.scrollbarX || e.target === i.scrollbarY) {\n return false;\n }\n if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\n return false;\n }\n if (e.targetTouches && e.targetTouches.length === 1) {\n return true;\n }\n if (e.pointerType && e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {\n return true;\n }\n return false;\n }\n\n function touchStart(e) {\n if (!shouldHandle(e)) {\n return;\n }\n\n var touch = getTouch(e);\n\n state.startOffset.pageX = touch.pageX;\n state.startOffset.pageY = touch.pageY;\n\n state.startTime = new Date().getTime();\n\n if (state.easingLoop !== null) {\n clearInterval(state.easingLoop);\n }\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n if (!element.contains(target)) {\n return false;\n }\n\n var cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n var style = get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n var maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n var maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function touchMove(e) {\n if (shouldHandle(e)) {\n var touch = getTouch(e);\n\n var currentOffset = { pageX: touch.pageX, pageY: touch.pageY };\n\n var differenceX = currentOffset.pageX - state.startOffset.pageX;\n var differenceY = currentOffset.pageY - state.startOffset.pageY;\n\n if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n return;\n }\n\n applyTouchMove(differenceX, differenceY);\n state.startOffset = currentOffset;\n\n var currentTime = new Date().getTime();\n\n var timeGap = currentTime - state.startTime;\n if (timeGap > 0) {\n state.speed.x = differenceX / timeGap;\n state.speed.y = differenceY / timeGap;\n state.startTime = currentTime;\n }\n\n if (shouldPrevent(differenceX, differenceY)) {\n // Prevent the default behavior if the event is cancelable\n if (e.cancelable) {\n e.preventDefault();\n }\n }\n }\n }\n\n function touchEnd() {\n if (i.settings.swipeEasing) {\n clearInterval(state.easingLoop);\n state.easingLoop = setInterval(function () {\n if (i.isInitialized) {\n clearInterval(state.easingLoop);\n return;\n }\n\n if (!state.speed.x && !state.speed.y) {\n clearInterval(state.easingLoop);\n return;\n }\n\n if (Math.abs(state.speed.x) < 0.01 && Math.abs(state.speed.y) < 0.01) {\n clearInterval(state.easingLoop);\n return;\n }\n\n applyTouchMove(state.speed.x * 30, state.speed.y * 30);\n\n state.speed.x *= 0.8;\n state.speed.y *= 0.8;\n }, 10);\n }\n }\n\n if (env.supportsTouch) {\n i.event.bind(element, 'touchstart', touchStart);\n i.event.bind(element, 'touchmove', touchMove);\n i.event.bind(element, 'touchend', touchEnd);\n } else if (env.supportsIePointer) {\n if (window.PointerEvent) {\n i.event.bind(element, 'pointerdown', touchStart);\n i.event.bind(element, 'pointermove', touchMove);\n i.event.bind(element, 'pointerup', touchEnd);\n } else if (window.MSPointerEvent) {\n i.event.bind(element, 'MSPointerDown', touchStart);\n i.event.bind(element, 'MSPointerMove', touchMove);\n i.event.bind(element, 'MSPointerUp', touchEnd);\n }\n }\n}\n\n/* eslint-disable */\n\nvar defaultSettings = function () { return ({\n handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n maxScrollbarLength: null,\n minScrollbarLength: null,\n scrollingThreshold: 1000,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n suppressScrollX: false,\n suppressScrollY: false,\n swipeEasing: true,\n useBothWheelAxes: false,\n wheelPropagation: true,\n wheelSpeed: 1,\n}); };\n\nvar handlers = {\n 'click-rail': clickRail,\n 'drag-thumb': setupScrollHandlers,\n keyboard: keyboard,\n wheel: wheel,\n touch: touch,\n};\n\nvar PerfectScrollbar = function PerfectScrollbar(element, userSettings) {\n var this$1 = this;\n if ( userSettings === void 0 ) userSettings = {};\n\n if (typeof element === 'string') {\n element = document.querySelector(element);\n }\n\n if (!element || !element.nodeName) {\n throw new Error('no element is specified to initialize PerfectScrollbar');\n }\n\n this.element = element;\n\n element.classList.add(cls.main);\n\n this.settings = defaultSettings();\n for (var key in userSettings) {\n this.settings[key] = userSettings[key];\n }\n\n this.containerWidth = null;\n this.containerHeight = null;\n this.contentWidth = null;\n this.contentHeight = null;\n\n var focus = function () { return element.classList.add(cls.state.focus); };\n var blur = function () { return element.classList.remove(cls.state.focus); };\n\n this.isRtl = get(element).direction === 'rtl';\n if (this.isRtl === true) {\n element.classList.add(cls.rtl);\n }\n this.isNegativeScroll = (function () {\n var originalScrollLeft = element.scrollLeft;\n var result = null;\n element.scrollLeft = -1;\n result = element.scrollLeft < 0;\n element.scrollLeft = originalScrollLeft;\n return result;\n })();\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? element.scrollWidth - element.clientWidth\n : 0;\n this.event = new EventManager();\n this.ownerDocument = element.ownerDocument || document;\n\n this.scrollbarXRail = div(cls.element.rail('x'));\n element.appendChild(this.scrollbarXRail);\n this.scrollbarX = div(cls.element.thumb('x'));\n this.scrollbarXRail.appendChild(this.scrollbarX);\n this.scrollbarX.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarX, 'focus', focus);\n this.event.bind(this.scrollbarX, 'blur', blur);\n this.scrollbarXActive = null;\n this.scrollbarXWidth = null;\n this.scrollbarXLeft = null;\n var railXStyle = get(this.scrollbarXRail);\n this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\n if (isNaN(this.scrollbarXBottom)) {\n this.isScrollbarXUsingBottom = false;\n this.scrollbarXTop = toInt(railXStyle.top);\n } else {\n this.isScrollbarXUsingBottom = true;\n }\n this.railBorderXWidth = toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n // Set rail to display:block to calculate margins\n set(this.scrollbarXRail, { display: 'block' });\n this.railXMarginWidth = toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\n set(this.scrollbarXRail, { display: '' });\n this.railXWidth = null;\n this.railXRatio = null;\n\n this.scrollbarYRail = div(cls.element.rail('y'));\n element.appendChild(this.scrollbarYRail);\n this.scrollbarY = div(cls.element.thumb('y'));\n this.scrollbarYRail.appendChild(this.scrollbarY);\n this.scrollbarY.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarY, 'focus', focus);\n this.event.bind(this.scrollbarY, 'blur', blur);\n this.scrollbarYActive = null;\n this.scrollbarYHeight = null;\n this.scrollbarYTop = null;\n var railYStyle = get(this.scrollbarYRail);\n this.scrollbarYRight = parseInt(railYStyle.right, 10);\n if (isNaN(this.scrollbarYRight)) {\n this.isScrollbarYUsingRight = false;\n this.scrollbarYLeft = toInt(railYStyle.left);\n } else {\n this.isScrollbarYUsingRight = true;\n }\n this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\n this.railBorderYWidth = toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n set(this.scrollbarYRail, { display: 'block' });\n this.railYMarginHeight = toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\n set(this.scrollbarYRail, { display: '' });\n this.railYHeight = null;\n this.railYRatio = null;\n\n this.reach = {\n x:\n element.scrollLeft <= 0\n ? 'start'\n : element.scrollLeft >= this.contentWidth - this.containerWidth\n ? 'end'\n : null,\n y:\n element.scrollTop <= 0\n ? 'start'\n : element.scrollTop >= this.contentHeight - this.containerHeight\n ? 'end'\n : null,\n };\n\n this.isAlive = true;\n\n this.settings.handlers.forEach(function (handlerName) { return handlers[handlerName](this$1); });\n\n this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\n this.lastScrollLeft = element.scrollLeft; // for onScroll only\n this.event.bind(this.element, 'scroll', function (e) { return this$1.onScroll(e); });\n updateGeometry(this);\n};\n\nPerfectScrollbar.prototype.update = function update () {\n if (!this.isAlive) {\n return;\n }\n\n // Recalcuate negative scrollLeft adjustment\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? this.element.scrollWidth - this.element.clientWidth\n : 0;\n\n // Recalculate rail margins\n set(this.scrollbarXRail, { display: 'block' });\n set(this.scrollbarYRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(get(this.scrollbarXRail).marginLeft) +\n toInt(get(this.scrollbarXRail).marginRight);\n this.railYMarginHeight =\n toInt(get(this.scrollbarYRail).marginTop) +\n toInt(get(this.scrollbarYRail).marginBottom);\n\n // Hide scrollbars not to affect scrollWidth and scrollHeight\n set(this.scrollbarXRail, { display: 'none' });\n set(this.scrollbarYRail, { display: 'none' });\n\n updateGeometry(this);\n\n processScrollDiff(this, 'top', 0, false, true);\n processScrollDiff(this, 'left', 0, false, true);\n\n set(this.scrollbarXRail, { display: '' });\n set(this.scrollbarYRail, { display: '' });\n};\n\nPerfectScrollbar.prototype.onScroll = function onScroll (e) {\n if (!this.isAlive) {\n return;\n }\n\n updateGeometry(this);\n processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\n processScrollDiff(this, 'left', this.element.scrollLeft - this.lastScrollLeft);\n\n this.lastScrollTop = Math.floor(this.element.scrollTop);\n this.lastScrollLeft = this.element.scrollLeft;\n};\n\nPerfectScrollbar.prototype.destroy = function destroy () {\n if (!this.isAlive) {\n return;\n }\n\n this.event.unbindAll();\n remove(this.scrollbarX);\n remove(this.scrollbarY);\n remove(this.scrollbarXRail);\n remove(this.scrollbarYRail);\n this.removePsClasses();\n\n // unset elements\n this.element = null;\n this.scrollbarX = null;\n this.scrollbarY = null;\n this.scrollbarXRail = null;\n this.scrollbarYRail = null;\n\n this.isAlive = false;\n};\n\nPerfectScrollbar.prototype.removePsClasses = function removePsClasses () {\n this.element.className = this.element.className\n .split(' ')\n .filter(function (name) { return !name.match(/^ps([-_].+|)$/); })\n .join(' ');\n};\n\nexport default PerfectScrollbar;\n//# sourceMappingURL=perfect-scrollbar.esm.js.map\n","import Component from './component';\nimport PerfectScrollbar from 'perfect-scrollbar';\n\nif (typeof window !== 'undefined' && !window.PerfectScrollbar) {\n window.PerfectScrollbar = PerfectScrollbar;\n}\n\nclass Sidebar extends Component {\n\n static DEFAULTS = {\n floating: true,\n breakpoint: 1046,\n wheelSpeed: 2,\n wheelPropagation: true,\n minScrollbarLength: 20,\n suppressScrollX: true,\n onInit: null,\n onDestroy: null,\n onShow: null,\n onClose: null\n };\n\n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool && window.Cool.settings && window.Cool.settings.sidebar) {\n $.extend(true, this.opts, Sidebar.DEFAULTS, window.Cool.settings.sidebar, opts);\n } else {\n $.extend(true, this.opts, Sidebar.DEFAULTS, opts);\n }\n\n this.el = el;\n \n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n this.initializeScrollbars();\n this.initializeTabs();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n this.destroyScrollbars();\n this.onDestroy();\n }\n\n buildCache() {\n this.$el = $(this.el);\n this.el = this.$el[0];\n this.$content = this.$el.find('.sidebar-content');\n this.content = this.$content[0];\n this.$toggler = $('.sidebar-left-toggler');\n this.toggler = this.$toggler[0];\n this.isFloating = this.$el.hasClass('sidebar-floating');\n this.isOpen = document.body.classList.contains('sidebar-left-open');\n this.$tabs = this.$el.find('.sidebar-tab');\n this.$tabSelectors = $('[name=\"sidebar-tab-select\"]');\n }\n\n bindEvents() {\n this._toggleHandler = (e) => {\n const toggler = e.target.closest('.sidebar-left-toggler');\n if (toggler) {\n this.handleToggle(e, toggler);\n }\n };\n \n this._mousedownHandler = (e) => {\n if (e.target.matches('.sidebar-content .ps__thumb-y')) {\n const sidebarContent = e.target.closest('.sidebar-content');\n sidebarContent?.classList.add('ps-mousedown-scroll');\n this.mousedownScrollbar = true;\n }\n };\n \n this._mouseupHandler = () => {\n if (this.mousedownScrollbar) {\n document.querySelectorAll('.sidebar-content.ps-mousedown-scroll')\n .forEach(el => el.classList.remove('ps-mousedown-scroll'));\n this.mousedownScrollbar = false;\n }\n };\n\n this._tabSelectHandler = (e) => {\n if (!e.target.matches('[name=\"sidebar-tab-select\"]')) return;\n this.switchTab(e.target.value);\n };\n \n this._collapseClickHandler = (e) => {\n const collapseToggle = e.target.closest('[data-toggle=\"collapse\"]');\n if (!collapseToggle) return;\n\n const breakpoint = collapseToggle.dataset.breakpoint;\n if (breakpoint && window.matchMedia(`(min-width: ${breakpoint}px)`).matches) {\n let linkElement = collapseToggle.nextElementSibling?.querySelector('li a') ||\n collapseToggle.parentElement.nextElementSibling?.querySelector('li a');\n\n if (linkElement) {\n if (e.metaKey || e.ctrlKey) {\n window.open(linkElement.href, '_blank').focus();\n } else {\n window.location.href = linkElement.href;\n }\n }\n } else {\n setTimeout(() => this.scrollbar?.update(), 300);\n }\n };\n \n if (window.ResizeObserver) {\n this.resizeObserver = new ResizeObserver(entries => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n if (window.innerWidth > this.opts.breakpoint) {\n this.removeBackdrop();\n }\n });\n });\n \n this.resizeObserver.observe(document.body);\n \n } else {\n\n let resizeTimeout;\n this._resizeHandler = () => {\n clearTimeout(resizeTimeout);\n \n const now = performance.now();\n if (!this.lastResizeTime || now - this.lastResizeTime > 100) {\n if (window.innerWidth > this.opts.breakpoint) {\n this.removeBackdrop();\n }\n this.lastResizeTime = now;\n } else {\n resizeTimeout = setTimeout(() => {\n if (window.innerWidth > this.opts.breakpoint) {\n this.removeBackdrop();\n }\n }, 16);\n }\n };\n \n window.addEventListener('resize', this._resizeHandler, { passive: true });\n }\n \n document.addEventListener('click', this._toggleHandler);\n document.addEventListener('click', this._tabSelectHandler);\n document.addEventListener('mousedown', this._mousedownHandler);\n document.addEventListener('mouseup', this._mouseupHandler);\n \n if (this.content) {\n this.content.addEventListener('click', this._collapseClickHandler);\n }\n }\n\n unbindEvents() {\n document.removeEventListener('click', this._toggleHandler);\n document.removeEventListener('click', this._tabSelectHandler);\n document.removeEventListener('mousedown', this._mousedownHandler);\n document.removeEventListener('mouseup', this._mouseupHandler);\n \n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n \n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n \n if (this._resizeHandler) {\n window.removeEventListener('resize', this._resizeHandler);\n this._resizeHandler = null;\n }\n \n if (this.content) {\n this.content.removeEventListener('click', this._collapseClickHandler);\n }\n }\n\n initializeScrollbars() {\n if (this.content) {\n this.scrollbar = new PerfectScrollbar(this.content, {\n wheelSpeed: this.opts.wheelSpeed,\n wheelPropagation: this.opts.wheelPropagation,\n minScrollbarLength: this.opts.minScrollbarLength,\n suppressScrollX: this.opts.suppressScrollX,\n });\n }\n }\n\n initializeTabs() {\n this.tabScrollbars = new Map();\n\n this.$tabs.each((index, tab) => {\n const scrollContainer = tab.querySelector('.tab-content');\n if (scrollContainer) {\n const ps = new PerfectScrollbar(scrollContainer, {\n wheelSpeed: this.opts.wheelSpeed,\n wheelPropagation: this.opts.wheelPropagation,\n minScrollbarLength: this.opts.minScrollbarLength,\n suppressScrollX: this.opts.suppressScrollX,\n });\n this.tabScrollbars.set(tab, ps);\n }\n });\n }\n\n destroyScrollbars() {\n if (this.scrollbar) {\n this.scrollbar.destroy();\n this.scrollbar = null;\n }\n \n this.tabScrollbars.forEach(ps => ps.destroy());\n this.tabScrollbars.clear();\n }\n\n toggleWithTransition(action) {\n const html = document.documentElement;\n \n html.classList.add('sidebar-transitioning');\n \n if (action === 'open') {\n document.body.classList.add('sidebar-left-open');\n \n if (this.isFloating && window.innerWidth <= this.opts.breakpoint) {\n this.createBackdrop();\n }\n } else {\n document.body.classList.remove('sidebar-left-open');\n this.removeBackdrop();\n }\n \n setTimeout(() => {\n html.classList.remove('sidebar-transitioning');\n }, 330);\n }\n\n createBackdrop() {\n if (document.querySelector('.sidebar-backdrop')) {\n return;\n }\n \n const backdrop = document.createElement('div');\n backdrop.className = 'sidebar-backdrop';\n backdrop.addEventListener('click', () => {\n this.toggleWithTransition('close');\n \n if (this.toggler) {\n this.toggler.classList.remove('open');\n if (this.toggler.ariaExpanded !== null) {\n this.toggler.ariaExpanded = 'false';\n }\n }\n });\n\n const siteMainEl = document.querySelector('.site-main');\n if (siteMainEl) {\n siteMainEl.appendChild(backdrop);\n \n requestAnimationFrame(() => {\n backdrop.classList.add('show');\n });\n }\n }\n\n removeBackdrop() {\n const backdrop = document.querySelector('.sidebar-backdrop');\n if (backdrop) {\n backdrop.classList.remove('show');\n \n backdrop.addEventListener('transitionend', () => {\n backdrop.remove();\n }, { once: true });\n \n setTimeout(() => {\n backdrop?.remove();\n }, 330);\n }\n }\n\n handleToggle(event, toggler) {\n event.stopPropagation();\n if (!toggler) {\n return;\n }\n \n if (toggler.ariaExpanded !== null) {\n toggler.ariaExpanded = toggler.ariaExpanded !== 'true';\n }\n\n toggler.classList.toggle('open');\n \n const isCurrentlyOpen = document.body.classList.contains('sidebar-left-open');\n this.toggleWithTransition(isCurrentlyOpen ? 'close' : 'open');\n \n if (isCurrentlyOpen) {\n this.onClose();\n } else {\n this.onShow();\n }\n }\n\n switchTab(tabId) {\n const activeTab = document.getElementById(`sidebar-tab-${tabId}`);\n \n if (!activeTab) return;\n\n const sidebarTabs = this.$tabs.toArray();\n \n sidebarTabs.forEach(tab => {\n tab.classList.toggle('active', tab === activeTab);\n \n if (tab !== activeTab) {\n const tabContent = tab.querySelector('.tab-content');\n if (tabContent) {\n if (tab === sidebarTabs[0]) {\n tabContent.style.transform = 'translate3d(100%, 0px, 0px)';\n } else if (tab === sidebarTabs[sidebarTabs.length - 1]) {\n tabContent.style.transform = 'translate3d(-100%, 0px, 0px)';\n } else {\n const isBeforeActive = sidebarTabs.indexOf(tab) < \n sidebarTabs.indexOf(activeTab);\n tabContent.style.transform = `translate3d(${isBeforeActive ? '-100%' : '100%'}, 0px, 0px)`;\n }\n }\n }\n });\n\n const activeTabContent = activeTab.querySelector('.tab-content');\n \n if (activeTabContent) {\n activeTabContent.style.transform = 'none';\n }\n\n this.$tabSelectors.each(function() {\n $(this).toggleClass('active', this.value === tabId);\n });\n }\n\n toggle() {\n const isOpen = document.body.classList.contains('sidebar-left-open');\n this.toggleWithTransition(isOpen ? 'close' : 'open');\n }\n\n open() {\n if (!document.body.classList.contains('sidebar-left-open')) {\n this.toggleWithTransition('open');\n }\n }\n\n close() {\n if (document.body.classList.contains('sidebar-left-open')) {\n this.toggleWithTransition('close');\n }\n }\n}\n\nexport default Sidebar;","class ResizeManager {\n constructor() {\n this.callbacks = new WeakMap();\n this.observer = null;\n this.rafId = null;\n this.windowCallbacks = new Set();\n this.isWindowListening = false;\n }\n\n observe(element, callback) {\n if (!this.observer) {\n this.observer = new ResizeObserver(entries => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n entries.forEach(entry => {\n const callback = this.callbacks.get(entry.target);\n if (callback) {\n callback(entry);\n }\n });\n });\n });\n }\n\n this.callbacks.set(element, callback);\n this.observer.observe(element);\n \n this.windowCallbacks.add(callback);\n \n if (!this.isWindowListening) {\n this.startWindowListening();\n }\n }\n\n unobserve(element) {\n if (this.observer) {\n this.observer.unobserve(element);\n const callback = this.callbacks.get(element);\n if (callback) {\n this.windowCallbacks.delete(callback);\n }\n this.callbacks.delete(element);\n \n if (this.windowCallbacks.size === 0) {\n this.stopWindowListening();\n }\n }\n }\n\n startWindowListening() {\n this.isWindowListening = true;\n window.addEventListener('resize', this.handleWindowResize, { passive: true });\n }\n\n stopWindowListening() {\n this.isWindowListening = false;\n window.removeEventListener('resize', this.handleWindowResize);\n }\n\n handleWindowResize = () => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n this.windowCallbacks.forEach(callback => {\n callback({ target: window, contentRect: { width: window.innerWidth, height: window.innerHeight } });\n });\n });\n }\n\n disconnect() {\n if (this.observer) {\n this.observer.disconnect();\n this.callbacks = new WeakMap();\n }\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.windowCallbacks.clear();\n this.stopWindowListening();\n }\n}\n\nclass ScrollManager {\n constructor() {\n this.callbacks = new Map();\n this.rafId = null;\n this.isListening = false;\n }\n\n add(id, callback) {\n this.callbacks.set(id, callback);\n \n if (!this.isListening) {\n this.startListening();\n }\n }\n\n remove(id) {\n this.callbacks.delete(id);\n \n if (this.callbacks.size === 0) {\n this.stopListening();\n }\n }\n\n startListening() {\n this.isListening = true;\n \n const contentElement = document.querySelector('.site-main .content');\n\n if (contentElement) {\n this.scrollElement = contentElement;\n this.scrollElement.addEventListener('scroll', this.handleScroll, { passive: true });\n } else {\n this.scrollElement = window;\n window.addEventListener('scroll', this.handleScroll, { passive: true });\n }\n }\n\n stopListening() {\n this.isListening = false;\n \n if (this.scrollElement) {\n this.scrollElement.removeEventListener('scroll', this.handleScroll);\n this.scrollElement = null;\n }\n \n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n\n handleScroll = () => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n this.callbacks.forEach(callback => callback());\n });\n }\n}\n\nconst resizeManager = new ResizeManager();\nconst scrollManager = new ScrollManager();\n\nconst debounce = function (func, wait, immediate) {\n\tlet timeout;\n\n\treturn function () {\n\t\tlet context = this;\n\t\tlet args = arguments;\n\t\tlet later = function () {\n\t\t\ttimeout = null;\n\n\t\t\tif (!immediate) {\n\t\t\t\tfunc.apply(context, args);\n\t\t\t}\n\t\t};\n\n\t\tlet callNow = immediate && !timeout;\n\n\t\tclearTimeout(timeout);\n\n\t\ttimeout = setTimeout(later, wait);\n\n\t\tif (callNow) {\n\t\t\tfunc.apply(context, args);\n\t\t}\n\t};\n};\n\nconst touchEvents = function () {\n\tlet result = false;\n\n\tif ('ontouchstart' in window || (window.DocumentTouch && document instanceof DocumentTouch)) {\n\t\tresult = true;\n\t}\n\n\treturn result;\n};\n\nconst generateUUID = function () {\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tlet r = (Math.random() * 16) | 0;\n\t\tlet v = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst shallowProperty = function (key) {\n\treturn function (obj) {\n\t\treturn obj == null ? void 0 : obj[key];\n\t};\n};\n\nconst isArrayLike = function (collection) {\n\tlet length = shallowProperty('length');\n\n\treturn typeof length == 'number' && length >= 0 && length <= Math.pow(2, 53) - 1;\n};\n\nconst optimizeCb = function (func, context, argCount) {\n\tif (context === void 0) {\n\t\treturn func;\n\t}\n\n\tswitch (argCount == null ? 3 : argCount) {\n\t\tcase 1:\n\t\t\treturn function (value) {\n\t\t\t\treturn func.call(context, value);\n\t\t\t};\n\n\t\tcase 3:\n\t\t\treturn function (value, index, collection) {\n\t\t\t\treturn func.call(context, value, index, collection);\n\t\t\t};\n\t\tcase 4:\n\t\t\treturn function (accumulator, value, index, collection) {\n\t\t\t\treturn func.call(context, accumulator, value, index, collection);\n\t\t\t};\n\t}\n\n\treturn function () {\n\t\treturn func.apply(context, arguments);\n\t};\n};\n\nconst escapeHtml = function (html) {\n\tconst text = document.createTextNode(html);\n\tconst p = document.createElement('p');\n\tp.appendChild(text);\n\treturn p.innerHTML;\n};\n\nconst each = function (obj, iteratee, context) {\n\titeratee = optimizeCb(iteratee, context);\n\n\tlet i;\n\tlet length;\n\n\tif (isArrayLike(obj)) {\n\t\tfor (i = 0, length = obj.length; i < length; i++) {\n\t\t\titeratee(obj[i], i, obj);\n\t\t}\n\t} else {\n\t\tlet keys = Object.keys(obj);\n\n\t\tfor (i = 0, length = keys.length; i < length; i++) {\n\t\t\titeratee(obj[keys[i]], keys[i], obj);\n\t\t}\n\t}\n\n\treturn obj;\n};\n\nconst whichTransitionEvent = function () {\n\t let el = document.createElement('text-transition');\n\tlet transEndEventNames = {\n\t\tWebkitTransition: 'webkitTransitionEnd', // Saf 6, Android Browser\n\t\tMozTransition: 'transitionend', // only for FF < 15\n\t\ttransition: 'transitionend', // IE10, Opera, Chrome, FF 15+, Saf 7+\n\t};\n\n\tfor (let t in transEndEventNames) {\n\t\tif (el.style[t] !== undefined) {\n\t\t\treturn transEndEventNames[t];\n\t\t}\n\t}\n}\n\nconst playAnimation = function(el, animationClass) {\n\tconst domEl = (el && el.jquery) ? el[0] : el;\n if (!domEl) return Promise.resolve();\n\n return new Promise((resolve) => {\n const classes = ['animation', animationClass];\n domEl.classList.add(...classes);\n\n function onEnd(event) {\n event.stopPropagation();\n domEl.classList.remove(...classes);\n domEl.removeEventListener('animationend', onEnd);\n resolve();\n }\n\n domEl.addEventListener('animationend', onEnd, { once: true });\n });\n}\n\nconst escapeChar = (chr) => {\n\tconst chars = {\n\t\t'&': '&',\n\t\t'<': '<',\n\t\t'>': '>',\n\t\t'\"': '"',\n\t\t\"'\": ''',\n\t\t'`': '`',\n\t\t'=': '='\n\t};\n return chars[chr];\n};\n\nconst escape = (string) => {\n\tconst invalidChars = /[&<>\"'`=]/g;\n\tconst validChars = /[&<>\"'`=]/;\n if (typeof string !== 'string') {\n if (string === null) {\n return '';\n } else if (!string) {\n return String(string);\n }\n string = String(string);\n }\n if (!validChars.test(string)) {\n return string;\n }\n return string.replace(invalidChars, escapeChar);\n};\n\nexport {\n\tresizeManager,\n\tscrollManager,\n\tdebounce,\n\ttouchEvents,\n\tgenerateUUID,\n\teach,\n\tescapeHtml,\n\twhichTransitionEvent,\n\tplayAnimation,\n\tescape\n};","import Component from './component';\nimport { generateUUID, resizeManager } from './utils';\n\nclass Popover extends Component {\n\n static NAME = 'coolPopover';\n\n static DEFAULTS = {\n container: 'body',\n containerAutoDetect: false,\n trigger: 'focus',\n placement: 'bottom',\n align: 'center',\n offset: null,\n collisionDetection: true,\n title: '',\n content: '',\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${Popover.NAME}`);\n if (!instance) {\n instance = new Popover(this, typeof config === 'object' && config);\n $el.data(`plugin_${Popover.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Popover.NAME];\n $.fn[Popover.NAME] = Popover._jQueryInterface;\n $.fn[Popover.NAME].Constructor = Popover;\n $.fn[Popover.NAME].defaults = Popover.DEFAULTS || {};\n $.fn[Popover.NAME].noConflict = () => {\n $.fn[Popover.NAME] = previousName;\n return Popover._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.popover) {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, window.Cool.settings.popover, opts);\n } else {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.el = el;\n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n if (this.$popover) {\n this.$popover.remove();\n this.$popover = null;\n }\n this.$el.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n if (this.$popover) {\n this.setPosition();\n }\n this.onUpdate();\n }\n\n buildCache() {\n this.$el = $(this.el);\n this.$container = this.$el.data('container') ? $(this.$el.data('container')) : $(this.opts.container);\n this.containerAutoDetect = this.$el.data('containerAutoDetect')\n ? this.$el.data('containerAutoDetect')\n : this.opts.containerAutoDetect;\n this.id = 'popover-' + generateUUID();\n this.trigger = this.$el.data('trigger') ? this.$el.data('trigger') : this.opts.trigger;\n this.placement = this.$el.data('placement') ? this.$el.data('placement') : this.opts.placement;\n this.align = this.$el.data('align') ? this.$el.data('align') : this.opts.align;\n this.title = this.$el.data('title') ? this.$el.data('title') : this.opts.title;\n this.content = this.$el.data('content') ? this.$el.data('content') : this.opts.content;\n this.offset = this.$el.data('offset') ? this.$el.data('offset') : this.opts.offset;\n this.collisionDetection = this.$el.data('collisionDetection') !== false ? this.$el.data('collisionDetection') : this.opts.collisionDetection;\n\n if (this.containerAutoDetect) {\n this.$container = this.$el.offsetParent();\n }\n }\n\n bindEvents() {\n if (this.trigger === 'click') {\n this.$el.on('click' + '.' + this.constructor.NAME, () => {\n if (this.$popover) {\n this.close();\n } else {\n this.show();\n }\n });\n } else if (this.trigger === 'hover') {\n this.$el.on('mouseenter' + '.' + this.constructor.NAME, () => {\n clearTimeout(this.hoverTimeout);\n this.show();\n });\n\n this.$el.on('mouseleave' + '.' + this.constructor.NAME, () => {\n this.hoverTimeout = setTimeout(() => {\n if (!this.popupHasFocus) {\n this.close();\n }\n }, 100);\n });\n } else if (this.trigger === 'focus') {\n this.$el.on('focusin' + '.' + this.constructor.NAME, () => {\n this.show();\n });\n\n this.$el.on('focusout' + '.' + this.constructor.NAME, () => {\n this.close();\n });\n }\n\n if (window.ResizeObserver) {\n this._resizeCallback = () => {\n if (this.$popover && this.$popover.hasClass('show')) {\n requestAnimationFrame(() => {\n this.setPosition();\n });\n }\n };\n \n resizeManager.observe(this.el, this._resizeCallback);\n }\n }\n\n unbindEvents() {\n this.$el.off('.' + this.constructor.NAME);\n \n if (this._resizeCallback) {\n resizeManager.unobserve(this.el);\n this._resizeCallback = null;\n }\n }\n\n buildPopover() {\n let content;\n\n if (typeof this.content === 'function') {\n content = this.content();\n } else {\n content = this.content;\n }\n\n this.$popover = $(`\n <div class=\"popover\" role=\"tooltip\" id=\"${this.id}\">\n <h3 class=\"popover-header\">${this.title}</h3>\n <div class=\"popover-body\">${content}</div>\n </div>\n `);\n\n this.$container.append(this.$popover);\n \n this.$container.find('#' + this.id).on('mouseenter', () => {\n this.popupHasFocus = true;\n if (this.trigger === 'hover' && this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n }\n });\n\n this.$container.find('#' + this.id).on('mouseleave', () => {\n this.popupHasFocus = false;\n if (this.trigger === 'hover') {\n this.hoverTimeout = setTimeout(() => {\n this.close();\n }, 100);\n }\n });\n }\n\n setPosition(placement) {\n if (typeof placement === 'undefined' || placement === null) {\n placement = this.placement;\n }\n\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n \n let popoverWidth = this.$popover.outerWidth(true);\n let popoverHeight = this.$popover.outerHeight(true);\n let triggerWidth = this.$el.outerWidth(true);\n let triggerHeight = this.$el.outerHeight(true);\n \n let triggerPosX, triggerPosY;\n\n const containerOffset = this.$container.offset() || { left: 0, top: 0 };\n const triggerOffset = this.$el.offset();\n\n triggerPosX = triggerOffset.left - containerOffset.left;\n triggerPosY = triggerOffset.top - containerOffset.top;\n\n let popoverPosX = 0;\n let popoverPosY = 0;\n let offsetX = 0;\n let offsetY = 0;\n\n if (this.offset) {\n const offsets = this.offset.split(',');\n offsetX = parseInt(offsets[0], 10) || 0;\n offsetY = parseInt(offsets[1], 10) || 0;\n }\n\n const computedStyle = getComputedStyle(this.$popover[0]);\n const spacing = parseInt(computedStyle.getPropertyValue('--cool-popover-spacer')) || 8;\n\n const calculatePosition = (currentPlacement, currentAlign = this.align) => {\n let x = 0, y = 0;\n \n switch (currentPlacement) {\n case 'top':\n x = currentAlign === 'end' \n ? triggerPosX + triggerWidth - popoverWidth \n : currentAlign === 'center'\n ? triggerPosX + (triggerWidth - popoverWidth) / 2\n : triggerPosX;\n y = triggerPosY - popoverHeight - spacing;\n break;\n case 'bottom':\n x = currentAlign === 'end' \n ? triggerPosX + triggerWidth - popoverWidth \n : currentAlign === 'center'\n ? triggerPosX + (triggerWidth - popoverWidth) / 2\n : triggerPosX;\n y = triggerPosY + triggerHeight + spacing;\n break;\n case 'left':\n x = triggerPosX - popoverWidth - spacing;\n y = currentAlign === 'end'\n ? triggerPosY + triggerHeight - popoverHeight\n : currentAlign === 'center'\n ? triggerPosY + (triggerHeight - popoverHeight) / 2\n : triggerPosY;\n break;\n case 'right':\n x = triggerPosX + triggerWidth + spacing;\n y = currentAlign === 'end'\n ? triggerPosY + triggerHeight - popoverHeight\n : currentAlign === 'center'\n ? triggerPosY + (triggerHeight - popoverHeight) / 2\n : triggerPosY;\n break;\n }\n \n return { x: x + offsetX, y: y + offsetY };\n };\n\n let finalPlacement = placement;\n let finalAlign = this.align;\n let position = calculatePosition(placement);\n \n if (this.collisionDetection) {\n const margin = 5;\n \n const checkCollision = (pos) => {\n const collision = {\n top: false,\n bottom: false,\n left: false,\n right: false\n };\n \n const popoverScreenLeft = containerOffset.left + pos.x;\n const popoverScreenTop = containerOffset.top + pos.y;\n const popoverScreenRight = popoverScreenLeft + popoverWidth;\n const popoverScreenBottom = popoverScreenTop + popoverHeight;\n \n collision.top = popoverScreenTop < margin;\n collision.bottom = popoverScreenBottom > viewportHeight - margin;\n collision.left = popoverScreenLeft < margin;\n collision.right = popoverScreenRight > viewportWidth - margin;\n \n return collision;\n };\n \n const collision = checkCollision(position);\n \n if (placement === 'bottom' && collision.bottom && !collision.top) {\n finalPlacement = 'top';\n position = calculatePosition('top', finalAlign);\n } else if (placement === 'top' && collision.top && !collision.bottom) {\n finalPlacement = 'bottom';\n position = calculatePosition('bottom', finalAlign);\n } else if (placement === 'right' && collision.right && !collision.left) {\n finalPlacement = 'left';\n position = calculatePosition('left', finalAlign);\n } else if (placement === 'left' && collision.left && !collision.right) {\n finalPlacement = 'right';\n position = calculatePosition('right', finalAlign);\n }\n \n const newCollision = checkCollision(position);\n \n if ((finalPlacement === 'top' || finalPlacement === 'bottom')) {\n if (finalAlign === 'end' && newCollision.left && !newCollision.right) {\n finalAlign = 'start';\n position = calculatePosition(finalPlacement, finalAlign);\n } else if (finalAlign === 'start' && newCollision.right && !newCollision.left) {\n finalAlign = 'end';\n position = calculatePosition(finalPlacement, finalAlign);\n }\n }\n \n const finalCollision = checkCollision(position);\n\n if (finalCollision.left) {\n position.x += (margin - (containerOffset.left + position.x));\n } else if (finalCollision.right) {\n position.x -= ((containerOffset.left + position.x + popoverWidth) - (viewportWidth - margin));\n }\n \n if (finalCollision.top) {\n position.y += (margin - (containerOffset.top + position.y));\n } else if (finalCollision.bottom) {\n position.y -= ((containerOffset.top + position.y + popoverHeight) - (viewportHeight - margin));\n }\n }\n\n popoverPosX = position.x;\n popoverPosY = position.y;\n\n this.$popover.css({\n transform: `translate3d(${Math.round(popoverPosX)}px, ${Math.round(popoverPosY)}px, 0px)`,\n 'will-change': 'transform'\n });\n\n this.$popover.attr('x-placement', finalPlacement + '-' + finalAlign);\n }\n\n show() {\n if (this.$popover) {\n return;\n }\n\n this.buildPopover();\n this.setPosition();\n\n this.$popover.addClass('show');\n this.$el.attr('data-popover', this.id);\n\n this.onShow();\n }\n\n close() {\n if (!this.$popover) {\n return;\n }\n\n this.$popover.remove();\n this.$el.removeAttr('data-popover');\n this.$popover = null;\n\n this.onClose();\n }\n}\n\nPopover._jQueryInit();\n\nexport default Popover;","import Component from './component';\nimport { debounce, touchEvents, escape, resizeManager, scrollManager } from './utils';\nimport PerfectScrollbar from 'perfect-scrollbar';\n\nif (typeof window !== 'undefined' && !window.PerfectScrollbar) {\n window.PerfectScrollbar = PerfectScrollbar;\n}\n\nclass Select extends Component {\n\n static NAME = 'coolSelect';\n\n static DEFAULTS = {\n name: '',\n type: 'checkbox',\n labelTemplate: null,\n confirmCheck: null,\n confirmUncheck: null,\n setData: null,\n scrollContentHeight: 300,\n useNativeScroll: false,\n contentWidth: null,\n faPro: false,\n items: [],\n showSearch: false,\n showFooter: false,\n searchApi: false,\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n onReset: null,\n onSearch: null,\n onSelect: null,\n buildScroll: null,\n searchPlaceholder: null,\n btnCloseText: null,\n dynamicTitle: false,\n dynamicTitleDefault: '',\n dynamicTitleEmptyDefault: '',\n allowNoneOnRadioSelect: true,\n preventUncheck: false,\n showValidStateIcon: true,\n itemsToExclude: [],\n primaryKeyword: 'id',\n position: 'absolute',\n scrollEl: '.content',\n useChips: false\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${Select.NAME}`);\n if (!instance) {\n instance = new Select(this, typeof config === 'object' && config);\n $el.data(`plugin_${Select.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Select.NAME];\n $.fn[Select.NAME] = Select._jQueryInterface;\n $.fn[Select.NAME].Constructor = Select;\n $.fn[Select.NAME].defaults = Select.DEFAULTS || {};\n $.fn[Select.NAME].noConflict = () => {\n $.fn[Select.NAME] = previousName;\n return Select._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.select) {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, window.Cool.settings.select, opts);\n } else {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.el = el;\n this.useChips = false;\n this.cachedTitle = '';\n this.lastSearchQuery = '';\n this._resizeCallback = null;\n this._scrollCallback = null;\n this.init();\n }\n\n init() {\n this.buildCache();\n this.buildScroll();\n this.bindEvents();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n this.$el.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n this.bindEvents();\n\n let updatePromise = Promise.resolve();\n\n if (this.searchApi && this.searchApi.length) {\n updatePromise = this._performInitialSearch();\n }\n\n return updatePromise.then(() => {\n this.onUpdate();\n });\n }\n\n reset() {\n this.data = {};\n this.data[this.name] = [];\n this.items = [];\n this.$select.find('.select-item').remove();\n this.$selectItems = [];\n this.$selectIconContainer.html(this.selectIconDefault);\n this.$selectHeader.removeClass('select-placeholder');\n\n if (typeof this.dynamicTitle === 'function') {\n this.$selectTitle.text(this.dynamicTitle.call(this));\n } else {\n if (\n this.data[this.name].length == 0 &&\n this.dynamicTitle &&\n this.dynamicTitleDefault &&\n this.dynamicTitleDefault !== 0 &&\n this.$selectTitle.text().trim() == 0 &&\n (this.$selectItems.length > 0 || this.searchApi)\n ) {\n this.$selectTitle.text(this.dynamicTitleDefault);\n }\n\n if (this.$selectItems.length == 0 && !this.searchApi && this.dynamicTitle && this.dynamicTitleEmptyDefault && this.dynamicTitleEmptyDefault !== 0) {\n this.$selectHeader.addClass('select-placeholder');\n this.$selectIconContainer.addClass('d-none');\n this.$selectTitle.text(this.dynamicTitleEmptyDefault);\n }\n }\n\n if (this.showSearch) {\n this.searchData = [];\n this.$searchInput.val('');\n this.searchString = '';\n this.search.call(this);\n }\n }\n\n buildCache() {\n this.$el = $(this.el);\n this.$container = this.$el.parent();\n this.$selectHeader = this.$el.find('.select-header');\n this.$selectTitle = this.$el.find('.select-title');\n this.cachedTitle = this.$selectTitle.text();\n this.$selectIconContainer = this.$selectHeader.find('.select-icon');\n this.$searchIconContainer = this.$el.find('.select-search-icon');\n this.selectIconDefault = this.$selectHeader.find('.select-icon')\n ? this.$selectHeader.find('.select-icon').html()\n : '<i class=\"' + (this.opts.faPro ? 'fal' : 'fas') + 'fa-angle-down icon\"></i>';\n this.name = this.$el.data('name') ? this.$el.data('name') : this.opts.name;\n this.scroll = null;\n this.scrollContentHeight = this.$el.data('scrollContentHeight') ? this.$el.data('scrollContentHeight') : this.opts.scrollContentHeight;\n this.useNativeScroll = this.$el.data('useNativeScroll') ? this.$el.data('useNativeScroll') : this.opts.useNativeScroll;\n this.contentWidth = this.$el.data('contentWidth') ? this.$el.data('contentWidth') : this.opts.contentWidth;\n this.items = this.$el.data('items') ? this.$el.data('items') : this.opts.items;\n this.data = {};\n this.data[this.name] = [];\n this.searchData = [];\n this.searchApi = this.$el.data('searchApi') ? this.$el.data('searchApi') : this.opts.searchApi;\n this.searchRequest = null;\n this.type = this.$el.data('type') ? this.$el.data('type') : this.opts.type;\n this.contentOpen = false;\n this.searchPlaceholder = this.$el.data('search-placeholder') ? this.$el.data('search-placeholder') : this.opts.searchPlaceholder;\n this.btnCloseText = this.$el.data('btn-close-text') ? this.$el.data('btn-close-text') : this.opts.btnCloseText;\n this.labelTemplate = this.opts.labelTemplate;\n this.confirmCheck = this.opts.confirmCheck;\n this.confirmUncheck = this.opts.confirmUncheck;\n this.preventUncheck = this.opts.preventUncheck;\n this.dynamicTitle = this.$el.data('dynamicTitle') ? this.$el.data('dynamicTitle') : this.opts.dynamicTitle;\n this.dynamicTitleDefault = this.$el.data('dynamicTitleDefault') ? this.$el.data('dynamicTitleDefault') : this.opts.dynamicTitleDefault;\n this.dynamicTitleEmptyDefault = this.$el.data('dynamicTitleEmptyDefault') ? this.$el.data('dynamicTitleEmptyDefault') : this.opts.dynamicTitleEmptyDefault;\n this.allowNoneOnRadioSelect = this.$el.data('allowNoneOnRadioSelect') ? this.$el.data('allowNoneOnRadioSelect') : this.opts.allowNoneOnRadioSelect;\n this.showValidStateIcon = this.$el.data('showValidStateIcon') ? this.$el.data('showValidStateIcon') : this.opts.showValidStateIcon;\n this.itemsToExclude = this.$el.data('itemsToExclude') ? this.$el.data('itemsToExclude').replace(/\\s/g, '').split(',') : this.opts.itemsToExclude;\n this.primaryKeyword = this.$el.data('primaryKeyword') ? this.$el.data('primaryKeyword') : this.opts.primaryKeyword;\n this.useChips = this.$el.data('useChips') ? this.$el.data('useChips') : this.opts.useChips;\n\n if (this.useChips) {\n this.showValidStateIcon = false;\n }\n\n this.preventClose = false;\n\n if (this.itemsToExclude.length > 0) {\n this.itemsToExclude = this.itemsToExclude.map(String);\n }\n\n if (this.opts.setData) {\n this.data = this.opts.setData;\n }\n\n if (this.$el.data('setData') && this.$el.data('setData') != '') {\n this.data = this.$el.data('setData');\n }\n\n if (!Array.isArray(this.data[this.name]) && this.data[this.name] !== '' && this.data[this.name].length > 0) {\n const arr = this.data[this.name].toString().trim().split(',');\n\n this.data[this.name] = arr;\n }\n\n if (this.data[this.name].length > 0 && !this.useChips) {\n this.data[this.name] = this.data[this.name].map(String);\n }\n\n if (this.data[this.name].length > 0 && this.itemsToExclude.length > 0) {\n this.data[this.name] = this.data[this.name].filter((item) => {\n if (item[this.primaryKeyword]) {\n return this.itemsToExclude.indexOf(item[this.primaryKeyword].toString()) === -1;\n } else {\n return this.itemsToExclude.indexOf(item.toString()) === -1;\n }\n });\n }\n\n if (this.data && this.useChips) {\n this._renderChips();\n }\n\n if (this.items.length > 0 && this.itemsToExclude.length > 0) {\n this.items = this.items.filter((item) => {\n if (item[this.primaryKeyword]) {\n return this.itemsToExclude.indexOf(item[this.primaryKeyword].toString()) === -1;\n } else {\n return this.itemsToExclude.indexOf(item.toString()) === -1;\n }\n });\n }\n\n if (this.$el.find('.select-search').length) {\n this.showSearch = true;\n } else {\n this.showSearch = this.$el.data('showSearch') ? this.$el.data('showSearch') : this.opts.showSearch;\n }\n\n if (this.$el.find('.select-footer').length) {\n this.showFooter = true;\n } else {\n this.showFooter = this.$el.data('showFooter') ? this.$el.data('showFooter') : this.opts.showFooter;\n }\n\n this.$select = this.$el.find('.select-content');\n\n if (!this.$select.length) {\n let items = this._renderItemList(this.items);\n\n this.$select = $(`\n <div class=\"select-content\">\n\n ${this._renderSearch()}\n\n <div class=\"select-scrollable-content\"></div>\n\n ${this._renderFooter()}\n\n </div>\n `);\n\n this.$el.append(this.$select);\n this.$select.find('.select-scrollable-content').append(items);\n } else {\n const selectItems = this.$select.find('.select-item');\n\n if (selectItems.length > 0 && this.itemsToExclude.length > 0) {\n $.each(selectItems, (i, el) => {\n const val = $(el).find(':input').val();\n\n if (this.itemsToExclude.indexOf(val) > -1) {\n $(el).remove();\n }\n });\n }\n }\n\n if (this.data[this.name].length > 0) {\n const values = this.useChips ? this.data[this.name].map((item) => item[this.primaryKeyword].toString()) : this.data[this.name].map(String);\n\n this.$select.find(':input').each((_, input) => {\n const $input = $(input);\n if (values.includes($input.val())) {\n $input.prop('checked', true);\n if (this.type === 'radio') {\n $input.addClass('checked');\n }\n }\n });\n\n if (this.useChips) {\n this._renderChips();\n } else if (this.type === 'radio' && typeof this.dynamicTitle !== 'function') {\n const $checkedInput = this.$select.find(':input:checked');\n if ($checkedInput.length) {\n this.$selectTitle.text($checkedInput.parent().find('[data-label]').text());\n }\n }\n }\n\n this.$scrollableContent = this.$select.find('.select-scrollable-content') ? this.$select.find('.select-scrollable-content') : false;\n this.$selectItems = this.$select.find('.select-item');\n this.$selectHeader.removeClass('select-placeholder');\n\n if (this.searchApi && this.searchApi.length) {\n this._performInitialSearch();\n }\n\n if (typeof this.dynamicTitle === 'function') {\n this.$selectTitle.text(this.dynamicTitle.call(this));\n } else {\n if (\n this.data[this.name].length == 0 &&\n this.dynamicTitle &&\n this.dynamicTitleDefault &&\n this.dynamicTitleDefault !== 0 &&\n this.$selectTitle.text().trim() == 0 &&\n (this.$selectItems.length > 0 || this.searchApi)\n ) {\n this.$selectTitle.text(this.dynamicTitleDefault);\n }\n\n if (this.$selectItems.length == 0 && !this.searchApi && this.dynamicTitle && this.dynamicTitleEmptyDefault && this.dynamicTitleEmptyDefault !== 0) {\n this.$selectHeader.addClass('select-placeholder');\n this.$selectIconContainer.addClass('d-none');\n this.$selectTitle.text(this.dynamicTitleEmptyDefault);\n }\n }\n\n if (this.showSearch) {\n this.$searchContainer = this.$select.find('.select-search');\n this.$searchInput = this.$select.find('[name=\"select-search\"]');\n this.$clearSearchButton = this.$select.find('[data-clear-search]');\n\n this.$searchInput[0].tabIndex = -1;\n }\n\n if (this.showFooter) {\n this.$footerContainer = this.$select.find('.select-footer');\n this.$closeButton = this.$select.find('[data-select-close]');\n\n if (this.$closeButton.length) {\n this.$closeButton[0].tabIndex = -1;\n }\n }\n\n this.buildSearchData();\n }\n\n _updateScrollbarVisibility() {\n if (this.scroll && this.$scrollableContent[0]) {\n const element = this.$scrollableContent[0];\n const needsScrollbar = element.scrollHeight > element.clientHeight;\n \n if (needsScrollbar) {\n this.scroll.settings.suppressScrollY = false;\n this.$scrollableContent.addClass('ps-show-rail-y');\n } else {\n this.scroll.settings.suppressScrollY = true;\n this.$scrollableContent.removeClass('ps-show-rail-y');\n }\n this.scroll.update();\n }\n }\n\n _performInitialSearch() {\n if (!this.isSearchApiEnabled()) {\n return Promise.resolve();\n }\n\n this._showSpinner();\n\n return new Promise((resolve, reject) => {\n $.ajax({\n method: 'GET',\n url: this.searchApi,\n timeout: 10000,\n success: (data) => {\n let items = data.filter((item) => {\n return this.itemsToExclude.indexOf(item[this.primaryKeyword].toString()) === -1 && item[this.primaryKeyword] != 0;\n });\n\n if (this.useChips && this.data[this.name].length > 0) {\n this.data[this.name].forEach((dataItem) => {\n const matchingItem = items.find((item) => item[this.primaryKeyword].toString() === dataItem[this.primaryKeyword].toString());\n if (matchingItem) {\n dataItem.label = matchingItem.label || matchingItem.name || matchingItem.value;\n }\n });\n\n this.$selectTitle.empty();\n this.data[this.name].forEach((dataItem) => {\n const $chip = $(`\n <span class=\"chip\" data-value=\"${dataItem[this.primaryKeyword]}\">\n <span class=\"chip-title\">${escape(dataItem.label)}</span>\n </span>\n `);\n\n $chip.on('click', (e) => {\n e.stopPropagation();\n const $input = this.$select.find(`input[value=\"${dataItem[this.primaryKeyword]}\"]`);\n $input.prop('checked', false).trigger('change');\n });\n\n this.$selectTitle.append($chip);\n });\n }\n\n let result = this._renderItemList(items);\n this.$scrollableContent.html(result);\n\n if (this.data[this.name].length > 0) {\n this.data[this.name].forEach((value) => {\n const valueId = this.useChips ? value[this.primaryKeyword].toString() : value.toString();\n const $input = this.$scrollableContent.find(`input[value=\"${valueId}\"]`);\n\n if ($input.length) {\n $input.prop('checked', true);\n if (this.type === 'radio') {\n $input.addClass('checked');\n }\n }\n });\n }\n\n this._updateScrollbarVisibility();\n this._hideSpinner();\n\n if (this.useChips && this.data[this.name].length > 0) {\n this._renderChips();\n }\n\n if (this.contentOpen) {\n this._recalculateContentHeight();\n }\n\n resolve();\n },\n error: (xhr, status, error) => {\n this._hideSpinner();\n console.error('Search API error:', status, error);\n this.$scrollableContent.html('<div class=\"p-3 text-danger\">Error loading items</div>');\n resolve();\n },\n });\n });\n }\n\n buildScroll() {\n if (this.$scrollableContent.length > 0) {\n let scrollContentHeight = this.scrollContentHeight;\n\n if (this.showSearch) {\n scrollContentHeight = scrollContentHeight - (this.$searchContainer.outerHeight(true) || 0);\n }\n\n if (this.showFooter) {\n scrollContentHeight = scrollContentHeight - (this.$footerContainer.outerHeight(true) || 0);\n }\n\n const marginTop = parseInt(this.$scrollableContent.css('marginTop'), 10) || 0;\n const marginBottom = parseInt(this.$scrollableContent.css('marginBottom'), 10) || 0;\n const totalMargin = marginTop + marginBottom;\n\n const actualContentHeight = this.$scrollableContent[0].scrollHeight;\n const finalHeight = Math.min(actualContentHeight, scrollContentHeight + totalMargin);\n\n this.$scrollableContent.css({\n 'max-height': finalHeight + 'px'\n });\n\n if (touchEvents()) {\n this.$scrollableContent.css({\n 'overflow-y': 'auto',\n });\n } else {\n if (this.useNativeScroll === false) {\n this.$scrollableContent.addClass('ps-dark');\n this.scroll = new PerfectScrollbar(this.$scrollableContent[0], {\n wheelSpeed: 1,\n wheelPropagation: false,\n minScrollbarLength: 20,\n scrollYMarginOffset: -1,\n suppressScrollY: true,\n suppressScrollX: true\n });\n\n setTimeout(() => {\n this._updateScrollbarVisibility();\n }, 0);\n }\n\n this.$scrollableContent.find('[tabindex=\"0\"]').attr('tabindex', -1);\n }\n }\n }\n\n buildSearchData() {\n this.searchData = [];\n\n let selectLabels = this.$select.find('[data-label]');\n\n $.each(selectLabels, (i, el) => {\n this.searchData.push({\n id: i,\n val: $(el).text().trim(),\n });\n });\n }\n\n bindEvents() {\n let self = this;\n\n this.$selectHeader.on('click' + '.' + this.constructor.NAME, () => {\n if (this.contentOpen) {\n this.close();\n } else if (this.$selectItems.length > 0 || this.searchApi) {\n this.show();\n }\n });\n\n this.$el.on('change' + '.' + this.constructor.NAME, 'input[type=\"checkbox\"]', function () {\n let el = this;\n let val = $(this).val();\n let closeTimeout = 600;\n\n self.preventClose = true;\n\n if (typeof self.confirmCheck === 'function' && el.checked) {\n el.checked = false;\n\n self.confirmCheck((cb) => {\n if (cb == 'confirmed') {\n if (self.useChips) {\n const hasItem = self.data[self.name].find((item) => item[self.primaryKeyword] === val);\n\n if (!hasItem) {\n self.data[self.name].push({ [self.primaryKeyword]: val, label: $(el).parent().find('[data-label]').text() });\n }\n } else if (self.data[self.name].indexOf(val) === -1) {\n self.data[self.name].push(val);\n }\n\n el.checked = true;\n self.onSelect(el);\n }\n\n setTimeout(function () {\n self.preventClose = false;\n }, closeTimeout);\n }, el);\n } else if (el.checked) {\n if (self.useChips) {\n const hasItem = self.data[self.name].find((item) => item[self.primaryKeyword] === val);\n\n if (!hasItem) {\n self.data[self.name].push({ [self.primaryKeyword]: val, label: $(el).parent().find('[data-label]').text() });\n }\n } else if (self.data[self.name].indexOf(val) === -1) {\n self.data[self.name].push(val);\n }\n\n self.onSelect(el);\n\n setTimeout(function () {\n self.preventClose = false;\n }, closeTimeout);\n } else if (typeof self.confirmUncheck === 'function' && !el.checked) {\n el.checked = true;\n\n self.confirmUncheck((cb) => {\n if (cb == 'confirmed') {\n if (self.useChips) {\n self.data[self.name] = self.data[self.name].filter((n) => n[self.primaryKeyword] != val);\n } else {\n self.data[self.name] = self.data[self.name].filter((n) => n != val);\n }\n\n el.checked = false;\n self.onSelect(el);\n }\n\n setTimeout(function () {\n self.preventClose = false;\n }, closeTimeout);\n }, el);\n } else if (!el.checked && !self.preventUncheck) {\n if (self.useChips) {\n self.data[self.name] = self.data[self.name].filter((n) => n[self.primaryKeyword] != val);\n } else {\n self.data[self.name] = self.data[self.name].filter((n) => n != val);\n }\n\n self.onSelect(el);\n\n setTimeout(function () {\n self.preventClose = false;\n }, closeTimeout);\n } else if (!el.checked && self.preventUncheck) {\n el.checked = true;\n\n setTimeout(function () {\n self.preventClose = false;\n }, closeTimeout);\n }\n });\n\n this.$el.on('change' + '.' + this.constructor.NAME, 'input[type=\"radio\"]', function () {\n let val = $(this).val();\n\n if (this.checked) {\n if (self.useChips) {\n self.data[self.name] = [{ [self.primaryKeyword]: val, label: $(this).parent().find('[data-label]').text() }];\n } else {\n self.data[self.name] = [val];\n }\n\n self.data[self.name] = [val];\n self.$select.find('input[type=\"radio\"]').not($(this)).prop('checked', false);\n self.$select.find('input[type=\"radio\"]').not($(this)).removeClass('checked');\n } else {\n self.data[self.name] = [];\n }\n });\n\n this.$el.on('click' + '.' + this.constructor.NAME, 'input[type=\"radio\"]', function () {\n if ($(this).hasClass('checked') && self.allowNoneOnRadioSelect) {\n self.data[self.name] = [];\n $(this).prop('checked', false);\n $(this).removeClass('checked');\n\n if (self.dynamicTitle && typeof self.dynamicTitle !== 'function') {\n self.$selectTitle.text(self.dynamicTitleDefault);\n }\n } else {\n $(this).addClass('checked');\n\n if (self.dynamicTitle && typeof self.dynamicTitle !== 'function') {\n self.$selectTitle.text(escape($(this).parent().find('[data-label]').text()));\n }\n }\n\n if (typeof self.dynamicTitle === 'function') {\n self.$selectTitle.text(self.dynamicTitle.call(this));\n }\n\n self.onSelect(this);\n });\n\n if (this.scroll) {\n this.$scrollableContent.find('.ps__thumb-y').mousedown(function () {\n self.$scrollableContent.addClass('ps-mousedown-scroll');\n });\n\n $(document).mouseup(function () {\n if (self.$scrollableContent.hasClass('ps-mousedown-scroll')) {\n self.$scrollableContent.removeClass('ps-mousedown-scroll');\n }\n });\n }\n\n if (this.showSearch) {\n this.$searchInput.on(\n 'keydown' + '.' + this.constructor.NAME,\n debounce(function () {\n self.searchString = $(this).val().trim();\n self.search.call(self);\n }, 250)\n );\n\n this.$searchInput.on('focusin' + '.' + this.constructor.NAME, function () {\n self.$searchContainer.addClass('focused');\n });\n\n this.$searchInput.on('focusout' + '.' + this.constructor.NAME, function () {\n self.$searchContainer.removeClass('focused');\n });\n\n this.$searchContainer.on('click' + '.' + this.constructor.NAME, '[data-clear-search]', function () {\n if (self.searchString.length) {\n self.$searchInput.val('');\n self.searchString = '';\n self.search.call(self);\n } else {\n return;\n }\n });\n }\n\n if (this.showFooter) {\n this.$closeButton.on('click' + '.' + this.constructor.NAME, () => {\n this.close();\n });\n }\n\n $(document).on('touchstart click', function (e) {\n if (!self.$el.is(e.target) && !self.$el.has(e.target).length && self.contentOpen && !self.preventClose) {\n self.close.call(self);\n }\n });\n\n if (this.opts.position === 'fixed') {\n this._scrollCallback = () => {\n if (!this.$el || !this.$el.hasClass('show')) {\n return;\n }\n\n requestAnimationFrame(() => {\n this.$el.find('.select-content').css({\n top: this.$container.offset().top - $(window).scrollTop(),\n left: this.$container.offset().left - $(window).scrollLeft(),\n width: this.contentWidth ? `var(--cool-select-content-width, ${this.contentWidth}px)` : this.$container.outerWidth()\n });\n });\n };\n\n if (window.ResizeObserver) {\n this._resizeCallback = (entry) => {\n if (!this.$el || !this.$el.hasClass('show')) {\n return;\n }\n\n requestAnimationFrame(() => {\n this.$el.find('.select-content').css({\n top: this.$container.offset().top - $(window).scrollTop(),\n left: this.$container.offset().left - $(window).scrollLeft(),\n width: this.contentWidth ? `var(--cool-select-content-width, ${this.contentWidth}px)` : this.$container.outerWidth()\n });\n });\n };\n \n resizeManager.observe(document.body, this._resizeCallback);\n }\n }\n }\n\n unbindEvents() {\n this.$el.off('.' + this.constructor.NAME);\n $(document).off('touchstart click.' + this.constructor.NAME);\n\n if (this.opts.position === 'fixed') {\n if (this._scrollCallback) {\n scrollManager.remove(`select-${this.name}`);\n this._scrollCallback = null;\n }\n \n if (this._resizeCallback) {\n resizeManager.unobserve(document.body);\n this._resizeCallback = null;\n }\n }\n }\n\n getData(data) {\n if (data) {\n return this.data[data];\n } else {\n return this.data;\n }\n }\n\n setData() {\n let self = this;\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n if (this.showValidStateIcon) {\n this.$selectIconContainer.html(`<i class=\"${faNameSpace} fa-check text-success icon\"></i>`);\n } else {\n this.$selectIconContainer.html(this.selectIconDefault);\n }\n\n if (this.useChips) {\n this.$selectTitle.empty();\n }\n\n if (this.searchApi.length) {\n let searchUrl = this.searchApi;\n let itemCount = this.data[this.name].length;\n let currentCount = 0;\n\n this.data[self.name].forEach(function (value) {\n searchUrl += encodeURIComponent('#' + value);\n currentCount++;\n\n if (currentCount !== itemCount) {\n searchUrl += '+';\n }\n });\n\n $.ajax({\n method: 'GET',\n url: searchUrl,\n }).done((data) => {\n let itemIds = data.map((item) => {\n return item.id.toString();\n });\n\n self.data[self.name] = self.data[self.name].filter(function (value) {\n if (self.useObjects) {\n return itemIds.indexOf(value[self.primaryKeyword].toString()) > -1;\n } else {\n return itemIds.indexOf(value.toString()) > -1;\n }\n });\n\n if (self.data[self.name].length == 0) {\n self.$selectIconContainer.html(self.selectIconDefault);\n }\n\n const items = data.filter(function (item) {\n if (self.useObjects) {\n return self.data[self.name].findIndex((value) => value[self.primaryKeyword] == item.id) > -1 && self.itemsToExclude.indexOf(item.id) === -1 && item.id != 0;\n } else {\n return self.data[self.name].indexOf(item.id) > -1 && self.itemsToExclude.indexOf(item.id) === -1 && item.id != 0;\n }\n });\n\n let result = self._renderItemList(items);\n\n self.$scrollableContent.append(result);\n\n let $inputs = self.$scrollableContent.find(':input');\n\n self._updateScrollbarVisibility();\n\n if (self.$scrollableContent.find(':input[type=\"checkbox\"]').length) {\n self.type = 'checkbox';\n } else if (self.$scrollableContent.find(':input[type=\"radio\"]').length) {\n self.type = 'radio';\n }\n\n if (self.type == 'checkbox') {\n self.data[self.name].forEach(function (value) {\n let valueId = self.useObjects ? value[self.primaryKeyword].toString() : value.toString();\n let $input = $inputs.filter(function () {\n return this.value == valueId;\n });\n\n $input.prop('checked', true);\n\n if (self.useChips) {\n self._renderChips();\n }\n\n self.onSelect($input[0]);\n });\n } else if (self.type == 'radio') {\n const self = this;\n const value = this.data[this.name][0];\n\n let $input = $inputs.filter(function () {\n return this.value == value;\n });\n\n $input.prop('checked', true);\n $input.addClass('checked');\n\n if (self.useChips) {\n self._renderChips();\n } else if (self.dynamicTitle && typeof self.dynamicTitle !== 'function') {\n self.$selectTitle.text($input.parent().find('[data-label]').text());\n }\n\n self.onSelect($input[0]);\n }\n\n if (typeof self.dynamicTitle === 'function') {\n self.$selectTitle.text(self.dynamicTitle.call(this));\n }\n });\n } else {\n let $inputs = this.$scrollableContent.find(':input');\n let inputValues =\n $inputs.length > 0\n ? $inputs\n .map(function () {\n return this.value.toString();\n })\n .get()\n : [];\n\n this.data[this.name] = this.data[this.name].filter(function (value) {\n return inputValues.indexOf(value.toString()) > -1;\n });\n\n if (this.data[this.name].length == 0) {\n this.$selectIconContainer.html(this.selectIconDefault);\n }\n\n if (this.$scrollableContent.find(':input[type=\"checkbox\"]').length) {\n this.type = 'checkbox';\n } else if (this.$scrollableContent.find(':input[type=\"radio\"]').length) {\n this.type = 'radio';\n }\n\n if (this.type == 'checkbox') {\n this.data[this.name].forEach(function (value) {\n let $input = $inputs.filter(function () {\n return this.value == value;\n });\n\n $input.prop('checked', true);\n\n if (self.useChips) {\n self._renderChips();\n }\n\n self.onSelect($input[0]);\n });\n } else if (this.type == 'radio') {\n let $input = $inputs.filter(function () {\n return this.value == this.data[this.name][0];\n });\n\n $input.prop('checked', true);\n $input.addClass('checked');\n\n if (this.useChips) {\n this._renderChips();\n } else if (this.dynamicTitle && typeof this.dynamicTitle !== 'function') {\n this.$selectTitle.text($input.parent().find('[data-label]').text());\n }\n\n this.onSelect($input[0]);\n }\n\n if (typeof this.dynamicTitle === 'function') {\n this.$selectTitle.text(this.dynamicTitle.call(this));\n }\n }\n }\n\n _renderChips() {\n this.$selectTitle.empty();\n\n if (this.data[this.name].length === 0) {\n if (this.dynamicTitle && this.dynamicTitleDefault) {\n this.$selectTitle.text(this.dynamicTitleDefault);\n } else {\n this.$selectTitle.text(this.cachedTitle);\n }\n return;\n }\n\n this.data[this.name].forEach((dataItem) => {\n const value = this.useChips ? dataItem[this.primaryKeyword] : dataItem;\n const $input = this.$select ? this.$select.find(`input[value=\"${value}\"]`) : [];\n const label = $input.length ? $input.parent().find('[data-label]').text() : dataItem.label || dataItem.name || dataItem.value || value;\n\n const $chip = $(`\n <span class=\"chip\" data-value=\"${value}\">\n <span class=\"chip-title\">${escape(label)}</span>\n </span>\n `);\n\n $chip.on('click', (e) => {\n e.stopPropagation();\n\n const $input = this.$select.find(`input[value=\"${value}\"]`);\n\n if ($input.length) {\n $input.prop('checked', false).trigger('change');\n } else {\n if (this.useChips) {\n this.data[this.name] = this.data[this.name].filter((item) => item[this.primaryKeyword].toString() !== value.toString());\n } else {\n this.data[this.name] = this.data[this.name].filter((item) => item.toString() !== value.toString());\n }\n\n if (this.searchApi.length) {\n this.items = this.items.filter((item) => item[this.primaryKeyword].toString() !== value.toString());\n }\n\n this._renderChips();\n\n if (typeof this.opts.onSelect === 'function') {\n this.opts.onSelect.call(this, dataItem, this, false);\n }\n }\n });\n\n this.$selectTitle.append($chip);\n });\n\n if (this.contentOpen) {\n setTimeout(() => {\n this._updateScrollbarVisibility();\n }, 0);\n }\n }\n\n search() {\n let self = this;\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n if (this.searchString.length) {\n if (this.isSearchApiEnabled()) {\n if (this.searchString === this.lastSearchQuery) {\n return;\n }\n\n this.lastSearchQuery = this.searchString;\n this._showSpinner();\n\n if (this.searchRequest !== null) {\n this.searchRequest.abort();\n }\n\n clearTimeout(this._searchDebounceTimer);\n this._searchDebounceTimer = setTimeout(() => {\n this.searchRequest = $.ajax({\n method: 'GET',\n url: this.searchApi + this.searchString,\n }).done(function (data) {\n self.searchRequest = null;\n\n self.$scrollableContent.find('input:not(:checked)').parents('.select-item').not('.static-item').remove();\n\n const items = data.filter(function (item) {\n if (self.useObjects) {\n return self.data[self.name].findIndex((value) => value[self.primaryKeyword] == item.id) === -1 && self.itemsToExclude.indexOf(item.id) === -1 && item.id != 0;\n } else {\n return self.data[self.name].indexOf(item.id) === -1 && self.itemsToExclude.indexOf(item.id) === -1 && item.id != 0;\n }\n });\n\n let result = self._renderItemList(items);\n\n self.$scrollableContent.append(result);\n\n self.$searchIconContainer.html(`<i class=\"${faNameSpace} fa-times icon\"></i>`);\n self.$searchIconContainer.attr('data-clear-search', 'true');\n\n self._updateScrollbarVisibility();\n \n if (self.contentOpen) {\n self._recalculateContentHeight();\n }\n });\n }, 300);\n } else {\n const searchStringLower = this.searchString.toLowerCase();\n let results = this.searchData.filter(function (item) {\n return item.val.toLowerCase().indexOf(searchStringLower) > -1;\n });\n\n this.$selectItems.removeClass('d-none');\n this.$selectItems.removeClass('visible');\n\n results.forEach(function (item) {\n $(self.$selectItems[item.id]).addClass('visible');\n });\n\n this.$selectItems.not('.visible').addClass('d-none');\n this.$searchIconContainer.html(`<i class=\"${faNameSpace} fa-times icon\"></i>`);\n this.$searchIconContainer.attr('data-clear-search', 'true');\n }\n } else {\n this.lastSearchQuery = '';\n if (this.isSearchApiEnabled()) {\n this.$scrollableContent.find('input:not(:checked)').parents('.select-item').not('.static-item').remove();\n this._hideSpinner();\n this.$searchIconContainer.attr('data-clear-search', '');\n this._performInitialSearch();\n } else {\n this.$selectItems.removeClass('d-none');\n this.$selectItems.removeClass('visible');\n this.$searchIconContainer.html(`<i class=\"${faNameSpace} fa-search icon\"></i>`);\n this.$searchIconContainer.attr('data-clear-search', '');\n }\n }\n\n if (this.scroll) {\n this.scroll.update();\n }\n\n this.onUpdate();\n }\n\n _recalculateContentHeight() {\n const $selectContent = this.$el.find('.select-content');\n const headerHeight = this.$selectHeader.outerHeight(true);\n const contentHeight = this.scrollContentHeight;\n const viewportHeight = $(window).height();\n const scrollTop = $(window).scrollTop();\n const minSpaceRequired = 50;\n\n let actualContentHeight = contentHeight;\n let searchHeight = 0;\n let footerHeight = 0;\n \n if (this.$searchContainer && this.$searchContainer.length) {\n searchHeight = this.$searchContainer.outerHeight(true) || 0;\n }\n \n if (this.$footerContainer && this.$footerContainer.length) {\n footerHeight = this.$footerContainer.outerHeight(true) || 0;\n }\n \n if (this.$scrollableContent && this.$scrollableContent.length) {\n const scrollableHeight = this.$scrollableContent[0].scrollHeight;\n const scrollableClientHeight = this.$scrollableContent[0].clientHeight;\n \n actualContentHeight = Math.min(Math.max(scrollableHeight, scrollableClientHeight) + searchHeight + footerHeight, contentHeight);\n }\n\n let shouldOpenUpwards = this.$el.hasClass('select-dropup');\n let selectTop = 0;\n let constrainedHeight = actualContentHeight;\n\n const contentMarginBottom = parseInt($selectContent.css('margin-bottom') || 0, 10);\n const contentMarginTop = parseInt($selectContent.css('margin-top') || 0, 10);\n\n if (this.opts.position === 'fixed') {\n const top = this.$container.offset().top - $(window).scrollTop();\n const spaceBelow = viewportHeight - top - headerHeight - minSpaceRequired;\n const spaceAbove = top - minSpaceRequired;\n \n if (shouldOpenUpwards) {\n constrainedHeight = Math.min(actualContentHeight, spaceAbove);\n selectTop = top - constrainedHeight - contentMarginBottom;\n } else {\n constrainedHeight = Math.min(actualContentHeight, spaceBelow);\n selectTop = top + headerHeight + contentMarginTop;\n }\n } else {\n const containerOffset = this.$container.offset();\n const spaceBelow = viewportHeight - (containerOffset.top - scrollTop) - headerHeight - minSpaceRequired;\n const spaceAbove = containerOffset.top - scrollTop - minSpaceRequired;\n \n if (shouldOpenUpwards) {\n constrainedHeight = Math.min(actualContentHeight, spaceAbove);\n selectTop = -constrainedHeight - contentMarginBottom;\n } else {\n constrainedHeight = Math.min(actualContentHeight, spaceBelow);\n selectTop = headerHeight + contentMarginTop;\n }\n }\n\n const scrollableMaxHeight = constrainedHeight - searchHeight - footerHeight;\n\n $selectContent.css({\n 'height': constrainedHeight + 'px'\n });\n\n if (this.$scrollableContent && this.$scrollableContent.length) {\n this.$scrollableContent.css({\n 'max-height': scrollableMaxHeight + 'px'\n });\n }\n\n if (this.opts.position === 'fixed') {\n $selectContent.css({\n top: selectTop\n });\n } else {\n $selectContent.css({\n top: selectTop\n });\n }\n\n if (this.scroll) {\n setTimeout(() => {\n this._updateScrollbarVisibility();\n }, 0);\n }\n }\n\n show() {\n if (this.$el.hasClass('show')) {\n return;\n }\n\n let top = 0;\n let left = 0;\n\n if (this.opts.position === 'fixed') {\n top = this.$container.offset().top - $(window).scrollTop();\n left = this.$container.offset().left - $(window).scrollLeft();\n }\n\n let $otherSelects = $('.select.show');\n let zindex = 1;\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n if ($otherSelects.length) {\n zindex = parseInt($otherSelects.first().css('z-index'), 10) + 2;\n }\n\n this.$el.addClass('show');\n\n if (!$otherSelects.length) {\n zindex = parseInt(this.$el.css('z-index'), 10) + 1;\n }\n\n const $selectContent = this.$el.find('.select-content');\n const headerHeight = this.$selectHeader.outerHeight(true);\n const contentHeight = this.scrollContentHeight;\n const viewportHeight = $(window).height();\n const scrollTop = $(window).scrollTop();\n const minSpaceRequired = 50;\n\n let actualContentHeight = contentHeight;\n let searchHeight = 0;\n let footerHeight = 0;\n \n if (this.$searchContainer && this.$searchContainer.length) {\n searchHeight = this.$searchContainer.outerHeight(true) || 0;\n }\n \n if (this.$footerContainer && this.$footerContainer.length) {\n footerHeight = this.$footerContainer.outerHeight(true) || 0;\n }\n \n if (this.$scrollableContent && this.$scrollableContent.length) {\n const scrollableHeight = this.$scrollableContent[0].scrollHeight;\n const scrollableClientHeight = this.$scrollableContent[0].clientHeight;\n \n actualContentHeight = Math.min(Math.max(scrollableHeight, scrollableClientHeight) + searchHeight + footerHeight, contentHeight);\n }\n\n let shouldOpenUpwards = false;\n let selectTop = 0;\n let constrainedHeight = actualContentHeight;\n\n const contentMarginBottom = parseInt($selectContent.css('margin-bottom') || 0, 10);\n const contentMarginTop = parseInt($selectContent.css('margin-top') || 0, 10);\n\n if (this.opts.position === 'fixed') {\n const spaceBelow = viewportHeight - top - headerHeight - minSpaceRequired;\n const spaceAbove = top - minSpaceRequired;\n \n shouldOpenUpwards = spaceBelow < actualContentHeight && spaceAbove > spaceBelow;\n \n if (shouldOpenUpwards) {\n constrainedHeight = Math.min(actualContentHeight, spaceAbove);\n selectTop = top - constrainedHeight - contentMarginBottom;\n } else {\n constrainedHeight = Math.min(actualContentHeight, spaceBelow);\n selectTop = top + headerHeight + contentMarginTop;\n }\n } else {\n const containerOffset = this.$container.offset();\n const spaceBelow = viewportHeight - (containerOffset.top - scrollTop) - headerHeight - minSpaceRequired;\n const spaceAbove = containerOffset.top - scrollTop - minSpaceRequired;\n \n shouldOpenUpwards = spaceBelow < actualContentHeight && spaceAbove > spaceBelow;\n \n if (shouldOpenUpwards) {\n constrainedHeight = Math.min(actualContentHeight, spaceAbove);\n selectTop = -constrainedHeight - contentMarginBottom;\n } else {\n constrainedHeight = Math.min(actualContentHeight, spaceBelow);\n selectTop = headerHeight + contentMarginTop;\n }\n }\n\n const scrollableMaxHeight = constrainedHeight - searchHeight - footerHeight;\n\n $selectContent.css({\n 'height': constrainedHeight + 'px'\n });\n\n if (this.$scrollableContent && this.$scrollableContent.length) {\n this.$scrollableContent.css({\n 'max-height': scrollableMaxHeight + 'px'\n });\n }\n\n this.$el.toggleClass('select-dropup', shouldOpenUpwards);\n this.$el.toggleClass('select-dropdown', !shouldOpenUpwards);\n\n const contentRequiredWidth = $selectContent.outerWidth();\n\n $selectContent.css({\n 'z-index': zindex,\n position: this.opts.position === 'fixed' ? 'fixed' : 'absolute'\n });\n\n if (this.opts.position === 'fixed') {\n $selectContent.css({\n top: selectTop,\n left,\n width: this.contentWidth ? `var(--cool-select-content-width, ${this.contentWidth}px)` : this.$container.outerWidth()\n });\n } else {\n $selectContent.css({\n top: selectTop,\n width: this.contentWidth ? `var(--cool-select-content-width, ${this.contentWidth}px)` : contentRequiredWidth > this.$container.outerWidth() ? `var(--cool-select-content-width, auto)` : this.$container.outerWidth()\n });\n }\n\n $selectContent.css({\n 'min-width': this.$container.outerWidth()\n });\n\n if (this.$scrollableContent.length) {\n if (this.$scrollableContent[0].offsetHeight < this.$scrollableContent[0].scrollHeight) {\n this.$scrollableContent[0].scrollTop = 1;\n this.$scrollableContent[0].scrollTop = 0;\n }\n }\n\n if (shouldOpenUpwards) {\n this.$selectIconContainer.html(`<i class=\"${faNameSpace} fa-angle-down icon\"></i>`);\n } else {\n this.$selectIconContainer.html(`<i class=\"${faNameSpace} fa-angle-up icon\"></i>`);\n }\n\n setTimeout(() => {\n this.$el[0].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });\n\n if (this.scroll) {\n this._updateScrollbarVisibility();\n }\n }, 300);\n\n this.contentOpen = true;\n\n if (this.opts.position === 'fixed' && this._scrollCallback) {\n scrollManager.add(`select-${this.name}`, this._scrollCallback);\n }\n\n this.onShow();\n }\n\n close() {\n if (!this.preventClose) {\n let self = this;\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n this.$el.removeClass('show');\n this.$el.removeClass('select-dropup select-dropdown');\n\n setTimeout(() => {\n self.$el.removeAttr('style');\n }, 300);\n\n if (this.data[this.name].length > 0 && this.showValidStateIcon) {\n this.$selectIconContainer.html(`<i class=\"${faNameSpace} fa-check text-success icon\"></i>`);\n } else {\n this.$selectIconContainer.html(this.selectIconDefault);\n }\n\n this.contentOpen = false;\n\n if (this.opts.position === 'fixed' && this._scrollCallback) {\n scrollManager.remove(`select-${this.name}`);\n }\n\n this.onClose();\n }\n }\n\n onSelect(el) {\n const data = $(el).parents('.select-item').data();\n const val = $(el).val();\n\n if (this.searchApi.length && !$.isEmptyObject(data)) {\n if ($(el).length && el.checked) {\n this.items.push(data);\n\n if (this.useChips) {\n const hasItem = this.data[this.name].find((item) => {\n return item[this.primaryKeyword].toString() === val.toString();\n });\n\n if (!hasItem) {\n this.data[this.name].push({\n [this.primaryKeyword]: val,\n label: $(el).parent().find('[data-label]').text(),\n });\n }\n } else if (this.data[this.name].indexOf(val) === -1) {\n this.data[this.name].push(val);\n }\n } else {\n this.items = $.grep(this.items, (item) => {\n return item[this.primaryKeyword].toString() !== val.toString();\n });\n\n if (this.useChips) {\n this.data[this.name] = this.data[this.name].filter((item) => item[this.primaryKeyword].toString() !== val.toString());\n } else {\n this.data[this.name] = this.data[this.name].filter((id) => id.toString() !== val.toString());\n }\n }\n }\n\n if (this.useChips) {\n this._renderChips();\n }\n\n if (typeof this.opts.onSelect === 'function') {\n this.opts.onSelect.call(el, data, this, el.checked);\n }\n }\n\n getItem(key, val) {\n let result = $.grep(this.items, function (item) {\n return item[key] == val;\n })[0];\n\n return result ? result : null;\n }\n\n getSelectedItems(segment) {\n let ids = [];\n let result = [];\n let data = this.data[this.name];\n\n if (!$.isArray(data)) {\n ids.push(data);\n } else {\n ids = data;\n }\n\n if (!this.useChips) {\n ids = ids.map(String);\n } else {\n ids = ids.map((obj) => obj[this.primaryKeyword].toString());\n }\n\n if (this.items.length > 0) {\n result = $.grep(this.items, function (item) {\n return ids.indexOf(item.id.toString()) > -1;\n });\n\n if (segment) {\n result = result\n .map((obj) => {\n return obj[segment];\n })\n .filter((obj) => {\n return obj != null;\n });\n }\n } else {\n result = ids;\n }\n\n return result;\n }\n\n getSelectedItem(segment) {\n return this.getSelectedItems(segment)[0];\n }\n\n _renderItemList(items) {\n if (!items || !items.length) return [];\n\n const checkedItems = this.data[this.name].map((item) => (this.useChips ? item[this.primaryKeyword].toString() : item.toString()));\n\n const fragment = document.createDocumentFragment();\n const resultItems = [];\n\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let label = '';\n\n if (typeof this.labelTemplate === 'function') {\n label = this.labelTemplate(item);\n } else {\n if (item.name) {\n label = item.name;\n } else if (item.label) {\n label = item.label;\n } else if (item.value) {\n label = item.value;\n }\n }\n\n const id = this.useChips ? item[this.primaryKeyword] : item.id;\n const isChecked = checkedItems.indexOf(id.toString()) > -1;\n const $item = $(this._getItemTemplate(item, i, label, isChecked)).data(item);\n resultItems.push($item);\n }\n\n return resultItems;\n }\n\n _getItemTemplate(item, index, label, isChecked) {\n return `\n <div class=\"select-item\">\n <div class=\"select-item-${this.type}\">\n <div class=\"form-check\">\n <input type=\"${this.type}\"\n id=\"select-${this.name}-${item.id}\"\n value=\"${item.id}\"\n tabindex=\"-1\"\n ${isChecked ? 'checked' : ''}>\n <label for=\"select-${this.name}-${item.id}\">\n <span class=\"form-check-icon\">\n <svg viewBox=\"0 0 18 18\">\n <polyline points=\"1.5 6 4.5 9 10.5 1\"></polyline>\n </svg>\n </span>\n <span class=\"form-check-label\"${typeof this.labelTemplate !== 'function' ? ' data-label' : ''}>\n ${typeof this.labelTemplate !== 'function' ? escape(label) : label}\n </span>\n </label>\n </div>\n </div>\n </div>`;\n }\n\n _renderSearch() {\n if (!this.showSearch) {\n return '';\n } else {\n const faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n return `\n\n <div class=\"select-search\">\n\n <div class=\"select-search-input\">\n\n <input type=\"text\" name=\"select-search\" value=\"\" placeholder=\"${this.searchPlaceholder}\" tabindex=\"-1\">\n\n </div>\n\n <div class=\"select-search-icon\">\n\n <i class=\"${faNameSpace} fa-search icon\"></i>\n\n </div>\n\n </div>\n\n `;\n }\n }\n\n _renderFooter() {\n if (!this.showFooter) {\n return '';\n } else {\n return `\n\n <div class=\"select-footer\">\n\n <button class=\"btn btn-block btn-light btn-sm\" type=\"button\" tabindex=\"-1\" data-select-close >\n ${this.btnCloseText}\n </button>\n\n </div>\n\n `;\n }\n }\n\n isSearchApiEnabled() {\n return this.searchApi && this.searchApi.length;\n }\n\n _showSpinner() {\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n this.$searchIconContainer.html(`<i class=\"${faNameSpace} fa-spinner-third fa-spin icon\"></i>`);\n }\n\n _hideSpinner() {\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n this.$searchIconContainer.html(`<i class=\"${faNameSpace} fa-search icon\"></i>`);\n }\n\n selectItem(id) {\n const $input = this.$select.find(`:input[value=\"${id}\"]`);\n\n if ($input.length) {\n if (this.type === 'radio') {\n this.$select.find('input[type=\"radio\"]').prop('checked', false).removeClass('checked');\n if (this.useChips) {\n const label = $input.parent().find('[data-label]').text();\n this.data[this.name] = [\n {\n [this.primaryKeyword]: id,\n label: label,\n },\n ];\n } else {\n this.data[this.name] = [id];\n }\n } else {\n if (this.useChips) {\n const hasItem = this.data[this.name].find((item) => item[this.primaryKeyword].toString() === id.toString());\n if (!hasItem) {\n const label = $input.parent().find('[data-label]').text();\n this.data[this.name].push({\n [this.primaryKeyword]: id,\n label: label,\n });\n }\n } else if (this.data[this.name].indexOf(id) === -1) {\n this.data[this.name].push(id);\n }\n }\n\n $input.prop('checked', true).addClass('checked').trigger('change');\n\n return true;\n }\n\n return false;\n }\n\n clear() {\n const $checkedInputs = this.$select.find(':input:checked');\n\n this.$select.find(':input').prop('checked', false).removeClass('checked');\n this.data[this.name] = [];\n\n if (this.useChips) {\n this._renderChips();\n } else if (this.dynamicTitle && typeof this.dynamicTitle !== 'function') {\n this.$selectTitle.text(this.dynamicTitleDefault || this.cachedTitle);\n }\n\n if (this.showValidStateIcon) {\n this.$selectIconContainer.html(this.selectIconDefault);\n }\n\n $checkedInputs.each((_, input) => {\n const $input = $(input);\n const data = $input.parents('.select-item').data();\n if (typeof this.opts.onSelect === 'function') {\n this.opts.onSelect.call(input, data, this, false);\n }\n });\n }\n}\n\nSelect._jQueryInit();\n\nexport default Select;","import Component from './component';\nimport { touchEvents, generateUUID, playAnimation, resizeManager, scrollManager } from './utils';\nimport PerfectScrollbar from 'perfect-scrollbar';\n\nif (typeof window !== 'undefined' && !window.PerfectScrollbar) {\n window.PerfectScrollbar = PerfectScrollbar;\n}\n\nclass Dropdown extends Component {\n\n static NAME = 'coolDropdown';\n\n static DEFAULTS = {\n animation: true,\n animationIn: 'zoomIn',\n animationOut: 'zoomOut',\n animationSpeed: 'fastest',\n offset: null,\n minWidth: null,\n closeOnItemClick: true,\n positionObserver: true,\n content: false,\n scroll: true,\n scrollContentHeight: 100,\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n onItemClick: null,\n position: 'absolute',\n placement: 'bottom',\n align: 'start'\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${Dropdown.NAME}`);\n if (!instance) {\n instance = new Dropdown(this, typeof config === 'object' && config);\n $el.data(`plugin_${Dropdown.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Dropdown.NAME];\n $.fn[Dropdown.NAME] = Dropdown._jQueryInterface;\n $.fn[Dropdown.NAME].Constructor = Dropdown;\n $.fn[Dropdown.NAME].defaults = Dropdown.DEFAULTS || {};\n $.fn[Dropdown.NAME].noConflict = () => {\n $.fn[Dropdown.NAME] = previousName;\n return Dropdown._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.dropdown) {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, window.Cool.settings.dropdown, opts);\n } else {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.el = el;\n this._resizeCallback = null;\n this._scrollCallback = null;\n\n this.init();\n }\n\n setupResizeHandling() {\n if (window.ResizeObserver) {\n this._resizeCallback = (entry) => {\n if (!this.contentOpen) return;\n \n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n this.setPosition();\n this.onUpdate();\n });\n };\n \n resizeManager.observe(this.$el[0], this._resizeCallback);\n resizeManager.observe(document.body, this._resizeCallback);\n \n if (this.$container.length) {\n resizeManager.observe(this.$container[0], this._resizeCallback);\n }\n \n } else {\n let resizeTimeout;\n this.resizeHandler = () => {\n if (!this.contentOpen) return;\n\n clearTimeout(resizeTimeout);\n \n const now = performance.now();\n if (!this.lastResizeTime || now - this.lastResizeTime > 100) {\n this.setPosition();\n this.onUpdate();\n this.lastResizeTime = now;\n } else {\n resizeTimeout = setTimeout(() => {\n this.setPosition();\n this.onUpdate();\n }, 16);\n }\n };\n \n window.addEventListener('resize', this.resizeHandler, { passive: true });\n }\n }\n\n setupScrollHandling() {\n if (this.position === 'fixed') {\n this._scrollCallback = () => {\n if (!this.contentOpen || !this.$dropdown.hasClass('show')) return;\n \n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n this.setPosition();\n this.onUpdate();\n });\n };\n \n scrollManager.add(`dropdown-${this.id}`, this._scrollCallback);\n \n let $scrollableParent = this.$el.parent();\n this.scrollableParents = [];\n\n while ($scrollableParent.length && $scrollableParent[0] !== document.body) {\n const overflow = $scrollableParent.css('overflow-y');\n if (overflow === 'scroll' || overflow === 'auto') {\n const scrollHandler = () => this._scrollCallback();\n $scrollableParent[0].addEventListener('scroll', scrollHandler, { passive: true });\n this.scrollableParents.push({ element: $scrollableParent[0], handler: scrollHandler });\n }\n $scrollableParent = $scrollableParent.parent();\n }\n }\n }\n\n setupVisibilityDetection() {\n if (!window.IntersectionObserver) return;\n \n this.intersectionObserver = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (!entry.isIntersecting && this.contentOpen) {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n this.setPosition();\n });\n }\n });\n }, {\n threshold: 0.1,\n rootMargin: '50px'\n });\n \n this.intersectionObserver.observe(this.$el[0]);\n }\n\n init() {\n this.buildCache().then(() => {\n this.buildScroll();\n this.setupVisibilityDetection();\n this.bindEvents();\n this.onInit();\n }).catch(() => {\n console.error('Failed to build Dropdown');\n });\n }\n\n destroy() {\n this.unbindEvents();\n\n if (this.scroll && typeof this.scroll.destroy === 'function') {\n this.scroll.destroy();\n this.scroll = null;\n }\n\n if (this.$dropdown) {\n this.$dropdown.remove();\n }\n\n this.$el.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n update() {\n const hasDarkMode = this.$scrollableContent && this.$scrollableContent.hasClass('ps-dark');\n\n if (this.scroll && typeof this.scroll.destroy === 'function') {\n this.scroll.destroy();\n this.scroll = null;\n }\n\n this.unbindEvents();\n this.buildCache().then(() => {\n if (hasDarkMode && this.$scrollableContent) {\n this.$scrollableContent.addClass('ps-dark');\n }\n this.buildScroll();\n this.setupVisibilityDetection();\n this.bindEvents();\n this.onUpdate();\n }).catch(() => {\n console.error('Failed to build Dropdown');\n });\n }\n\n buildCache() {\n return new Promise((resolve, reject) => {\n this.$el = $(this.el);\n this.$el.addClass('dropdown-trigger');\n this.$container = this.$el.parent('.dropdown').length ? this.$el.parent('.dropdown') : this.$el.parentsUntil('.dropdown').parent();\n \n if (!this.$container.length) {\n this.$container = this.$el.parent();\n }\n\n this.id = 'dropdown-' + generateUUID();\n this.animation = this.$el.data('animation') ? this.$el.data('animation') : this.opts.animation;\n this.animationIn = this.$el.data('animationIn') ? this.$el.data('animationIn') : this.opts.animationIn;\n this.animationOut = this.$el.data('animationOut') ? this.$el.data('animationOut') : this.opts.animationOut;\n this.animationSpeed = this.$el.data('animationSpeed') ? this.$el.data('animationSpeed') : this.opts.animationSpeed;\n this.position = this.$el.data('position') ? this.$el.data('position') : this.opts.position;\n this.placement = this.$el.data('placement') ? this.$el.data('placement') : this.opts.placement;\n this.offset = this.$el.data('offset') ? this.$el.data('offset') : this.opts.offset;\n this.minWidth = this.$el.data('minWidth') ? this.$el.data('minWidth') : this.opts.minWidth;\n this.scroll = this.$el.data('scroll') ? this.$el.data('scroll') : this.opts.scroll;\n this.scrollContentHeight = this.$el.data('scrollContentHeight') ? this.$el.data('scrollContentHeight') : this.opts.scrollContentHeight;\n this.positionObserver = this.$el.attr('data-position-observer') ? JSON.parse(this.$el.attr('data-position-observer')) : this.opts.positionObserver;\n this.closeOnItemClick = this.$el.data('closeOnItemClick') ? this.$el.data('closeOnItemClick') : this.opts.closeOnItemClick;\n this.preventClose = this.$el.data('preventClose') ? this.$el.data('preventClose') : false;\n this.content = this.$el.data('content') ? this.$el.data('content') : this.opts.content;\n this.contentOpen = false;\n\n if (this.$container.hasClass('dropup')) {\n this.placement = 'top';\n } else if (this.$container.hasClass('dropright')) {\n this.placement = 'right';\n } else if (this.$container.hasClass('dropbottom')) {\n this.placement = 'bottom';\n } else if (this.$container.hasClass('dropleft')) {\n this.placement = 'left';\n }\n \n const $existingMenu = this.$container.find('.dropdown-menu').first();\n\n if (this.position === 'fixed' && $existingMenu.length) {\n this.$dropdown = $existingMenu.clone(true, true);\n this.$dropdown.attr('id', this.id); \n this.$dropdown.removeClass('show');\n\n this.align = $existingMenu.hasClass('dropdown-menu-right') ? 'end' : 'start';\n \n $('body').append(this.$dropdown);\n \n $existingMenu.remove();\n\n this.$dropdown.find('.dropdown').each((index, nestedContainer) => {\n const $nestedContainer = $(nestedContainer);\n const $nestedTrigger = $nestedContainer.find('[data-toggle=\"dropdown\"]').first();\n const $nestedMenu = $nestedContainer.find('.dropdown-menu').first();\n \n if ($nestedTrigger.length && $nestedMenu.length && !$nestedTrigger.data(`plugin_${this.constructor.NAME}`)) {\n $nestedTrigger[this.constructor.NAME]({\n position: 'absolute',\n closeOnItemClick: false,\n positionObserver: true,\n onShow: function() {\n const parentZIndex = parseInt(this.$dropdown.css('z-index') || 9999, 10);\n $nestedMenu.css('z-index', parentZIndex + 1);\n }.bind(this)\n });\n }\n });\n \n const dropdownEl = this.$dropdown[0];\n \n this.$dropdownItems = this.$dropdown.find('a, button, .dropdown-item').filter(function() {\n return $(this).closest('.dropdown-menu')[0] === dropdownEl;\n });\n\n this.$scrollableContent = this.$dropdown.find('.dropdown-scrollable-content');\n \n this.$dropdown.css({\n 'min-width': this.minWidth ? this.minWidth + 'px' : ''\n });\n\n return resolve();\n \n } else if (typeof this.content === 'function') {\n let menuRight = this.opts.align === 'end' ? ' dropdown-menu-right' : '';\n\n this.$dropdown = $(`\n <div class=\"dropdown-menu${menuRight}\" id=\"${this.id}\">\n ${this.content()}\n </div>\n `);\n\n const positionTypes = {\n fixed: () => $('body').append(this.$dropdown),\n absolute: () => this.$el.after(this.$dropdown)\n };\n\n $.when(positionTypes[this.position]()).then(() => {\n this.$scrollableContent = this.$dropdown.find('.dropdown-scrollable-content') ? this.$dropdown.find('.dropdown-scrollable-content').first() : false;\n this.$dropdown.hasClass('dropdown-menu-right') ? (this.align = 'end') : (this.align = 'start');\n\n const dropdownEl = this.$dropdown[0];\n \n this.$dropdownItems = this.$dropdown.find('a, button, .dropdown-item').filter(function() {\n return $(this).closest('.dropdown-menu')[0] === dropdownEl;\n });\n\n if (this.minWidth) {\n this.$dropdown.css('min-width', this.minWidth + 'px');\n }\n\n return resolve();\n });\n \n } else {\n this.$dropdown = this.$container.find('.dropdown-menu').length ? this.$container.find('.dropdown-menu').first() : false;\n\n if (!this.$dropdown.length) return reject();\n\n this.$dropdown.hasClass('dropdown-menu-right') ? (this.align = 'end') : (this.align = 'start');\n this.$scrollableContent = this.$dropdown.find('.dropdown-scrollable-content').length ? this.$dropdown.find('.dropdown-scrollable-content').first() : false;\n\n const dropdownEl = this.$dropdown[0];\n\n this.$dropdownItems = this.$dropdown.find('a, button, .dropdown-item').filter(function() {\n return $(this).closest('.dropdown-menu')[0] === dropdownEl;\n });\n\n if (this.minWidth) {\n this.$dropdown.css('min-width', this.minWidth + 'px');\n }\n\n return resolve();\n }\n });\n }\n\n buildScroll() {\n if (this.opts.scroll && this.$scrollableContent.length) {\n this.$scrollableContent.css({\n 'max-height': this.scrollContentHeight + 'px'\n });\n\n if (touchEvents()) {\n this.$scrollableContent.css({\n 'overflow-y': 'auto',\n });\n } else {\n this.scroll = new PerfectScrollbar(this.$scrollableContent[0], {\n wheelSpeed: 1,\n wheelPropagation: false,\n minScrollbarLength: 20,\n suppressScrollX: true,\n scrollYMarginOffset: 2\n });\n }\n }\n }\n\n bindEvents() {\n let self = this;\n\n this.$el.on('click' + '.' + this.constructor.NAME, () => {\n if (this.contentOpen) {\n this.close();\n } else {\n this.show();\n }\n });\n\n if (this.position === 'fixed') {\n this.$dropdown.on('click' + '.' + this.constructor.NAME, 'a, button, .dropdown-item', function(e) {\n const $target = $(this);\n \n if ($target.closest('.dropdown-menu')[0] !== self.$dropdown[0]) {\n return;\n }\n \n if (!$target.hasClass('dropdown-trigger') && !$target.data('toggle')) {\n if (self.closeOnItemClick) {\n self.close();\n }\n \n self.onItemClick(this, e);\n }\n });\n } else {\n this.$dropdownItems.on('click' + '.' + this.constructor.NAME, function (e) {\n const $target = $(this);\n \n if (!$target.hasClass('dropdown-trigger') && !$target.data('toggle')) {\n if (self.closeOnItemClick) {\n self.close();\n }\n \n self.onItemClick(this, e);\n }\n });\n }\n\n this._documentClickHandler = (e) => {\n if (!this.contentOpen) return;\n \n const isClickInThisDropdown = this.$el.is(e.target) || \n this.$el.has(e.target).length > 0 ||\n this.$dropdown.is(e.target) || \n this.$dropdown.has(e.target).length > 0;\n\n const isNestedDropdownTrigger = this.$dropdown.find(e.target).closest('[data-toggle=\"dropdown\"]').length > 0;\n\n if (!isClickInThisDropdown && !isNestedDropdownTrigger) {\n this.close();\n }\n };\n\n document.addEventListener('click', this._documentClickHandler, { passive: true });\n document.addEventListener('touchstart', this._documentClickHandler, { passive: true });\n\n this.setupResizeHandling();\n this.setupScrollHandling();\n }\n\n unbindEvents() {\n this.$el.off('.' + this.constructor.NAME);\n\n if (this.$dropdown) {\n this.$dropdown.off('.' + this.constructor.NAME);\n }\n\n if (this.$dropdownItems && this.position !== 'fixed') {\n this.$dropdownItems.off('.' + this.constructor.NAME);\n }\n \n if (this._resizeCallback) {\n resizeManager.unobserve(this.$el[0]);\n resizeManager.unobserve(document.body);\n if (this.$container.length) {\n resizeManager.unobserve(this.$container[0]);\n }\n this._resizeCallback = null;\n }\n \n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n \n if (this._scrollCallback) {\n scrollManager.remove(`dropdown-${this.id}`);\n this._scrollCallback = null;\n }\n\n if (this.scrollableParents) {\n this.scrollableParents.forEach(({ element, handler }) => {\n element.removeEventListener('scroll', handler);\n });\n this.scrollableParents = [];\n }\n \n if (this.resizeHandler) {\n window.removeEventListener('resize', this.resizeHandler);\n this.resizeHandler = null;\n }\n\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n }\n\n if (this._documentClickHandler) {\n document.removeEventListener('click', this._documentClickHandler);\n document.removeEventListener('touchstart', this._documentClickHandler);\n this._documentClickHandler = null;\n }\n }\n\n setPosition(placement) {\n if (typeof placement === 'undefined' || placement === null) {\n placement = this.placement;\n }\n\n const triggerRect = this.$el[0].getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n \n let dropdownWidth = this.$dropdown.outerWidth(true);\n let dropdownHeight = this.$dropdown.outerHeight(true);\n let dropdownTriggerWidth = this.$el.outerWidth(true);\n let dropdownTriggerHeight = this.$el.outerHeight(true);\n \n let dropdownTriggerPosX, dropdownTriggerPosY;\n\n if (this.position === 'fixed') {\n const triggerOffset = this.$el.offset();\n dropdownTriggerPosX = triggerOffset.left;\n dropdownTriggerPosY = triggerOffset.top;\n } else {\n const $offsetParent = this.$dropdown.offsetParent();\n const parentOffset = $offsetParent.offset() || { left: 0, top: 0 };\n const triggerOffset = this.$el.offset();\n\n dropdownTriggerPosX = triggerOffset.left - parentOffset.left;\n dropdownTriggerPosY = triggerOffset.top - parentOffset.top;\n }\n\n let dropdownPosX = 0;\n let dropdownPosY = 0;\n let offsetX = 0;\n let offsetY = 0;\n\n if (this.offset) {\n const offsets = this.offset.split(',');\n offsetX = parseInt(offsets[0], 10) || 0;\n offsetY = parseInt(offsets[1], 10) || 0;\n }\n\n const spacing = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--cool-dropdown-spacer')) || 2;\n\n const calculatePosition = (currentPlacement, currentAlign = this.align) => {\n let x = 0, y = 0;\n \n switch (currentPlacement) {\n case 'top':\n x = currentAlign === 'end' \n ? dropdownTriggerPosX + dropdownTriggerWidth - dropdownWidth \n : dropdownTriggerPosX;\n y = dropdownTriggerPosY - dropdownHeight - spacing;\n break;\n case 'bottom':\n x = currentAlign === 'end' \n ? dropdownTriggerPosX + dropdownTriggerWidth - dropdownWidth \n : dropdownTriggerPosX;\n y = dropdownTriggerPosY + dropdownTriggerHeight + spacing;\n break;\n case 'left':\n x = dropdownTriggerPosX - dropdownWidth - spacing;\n y = dropdownTriggerPosY;\n break;\n case 'right':\n x = dropdownTriggerPosX + dropdownTriggerWidth + spacing;\n y = dropdownTriggerPosY;\n break;\n }\n \n return { x: x + offsetX, y: y + offsetY };\n };\n\n let finalPlacement = placement;\n let finalAlign = this.align;\n let position = calculatePosition(placement);\n \n if (this.positionObserver) {\n const margin = 5;\n \n const checkCollision = (pos, pl, al = this.align) => {\n const collision = {\n top: false,\n bottom: false,\n left: false,\n right: false\n };\n \n if (this.position === 'fixed') {\n collision.top = pos.y < margin;\n collision.bottom = pos.y + dropdownHeight > viewportHeight - margin;\n collision.left = pos.x < margin;\n collision.right = pos.x + dropdownWidth > viewportWidth - margin;\n } else {\n const dropdownLeft = this.position === 'fixed' ? pos.x : triggerRect.left + (pos.x - dropdownTriggerPosX);\n const dropdownTop = this.position === 'fixed' ? pos.y : triggerRect.top + (pos.y - dropdownTriggerPosY);\n const dropdownRight = dropdownLeft + dropdownWidth;\n const dropdownBottom = dropdownTop + dropdownHeight;\n \n collision.top = dropdownTop < margin;\n collision.bottom = dropdownBottom > viewportHeight - margin;\n collision.left = dropdownLeft < margin;\n collision.right = dropdownRight > viewportWidth - margin;\n }\n \n return collision;\n };\n \n const collision = checkCollision(position, placement, this.align);\n\n if (placement === 'bottom' && collision.bottom && !collision.top) {\n finalPlacement = 'top';\n position = calculatePosition('top', finalAlign);\n } else if (placement === 'top' && collision.top && !collision.bottom) {\n finalPlacement = 'bottom';\n position = calculatePosition('bottom', finalAlign);\n } else if (placement === 'right' && collision.right && !collision.left) {\n finalPlacement = 'left';\n position = calculatePosition('left', finalAlign);\n } else if (placement === 'left' && collision.left && !collision.right) {\n finalPlacement = 'right';\n position = calculatePosition('right', finalAlign);\n }\n\n const newCollision = checkCollision(position, finalPlacement, finalAlign);\n\n if ((finalPlacement === 'top' || finalPlacement === 'bottom')) {\n if (finalAlign === 'end' && newCollision.left && !newCollision.right) {\n finalAlign = 'start';\n position = calculatePosition(finalPlacement, finalAlign);\n } else if (finalAlign === 'start' && newCollision.right && !newCollision.left) {\n finalAlign = 'end';\n position = calculatePosition(finalPlacement, finalAlign);\n }\n }\n \n this.$container.removeClass('dropup dropbottom dropleft dropright');\n\n if (finalPlacement === 'top') {\n this.$container.addClass('dropup');\n } else if (finalPlacement === 'left') {\n this.$container.addClass('dropleft');\n } else if (finalPlacement === 'right') {\n this.$container.addClass('dropright');\n } else {\n this.$container.addClass('dropbottom');\n }\n\n this.$dropdown.attr('x-placement', finalPlacement + '-' + finalAlign);\n \n if (this.position === 'fixed') {\n position.x = Math.max(margin, Math.min(position.x, viewportWidth - dropdownWidth - margin));\n position.y = Math.max(margin, Math.min(position.y, viewportHeight - dropdownHeight - margin));\n } else {\n const dropdownScreenLeft = triggerRect.left + (position.x - dropdownTriggerPosX);\n const dropdownScreenTop = triggerRect.top + (position.y - dropdownTriggerPosY);\n \n if (dropdownScreenLeft < margin) {\n position.x += (margin - dropdownScreenLeft);\n } else if (dropdownScreenLeft + dropdownWidth > viewportWidth - margin) {\n position.x -= (dropdownScreenLeft + dropdownWidth - viewportWidth + margin);\n }\n \n if (dropdownScreenTop < margin) {\n position.y += (margin - dropdownScreenTop);\n } else if (dropdownScreenTop + dropdownHeight > viewportHeight - margin) {\n position.y -= (dropdownScreenTop + dropdownHeight - viewportHeight + margin);\n }\n }\n }\n\n dropdownPosX = position.x;\n dropdownPosY = position.y;\n\n if (this.position === 'fixed') {\n this.$dropdown.css({\n position: 'fixed',\n top: Math.round(dropdownPosY) + 'px',\n left: Math.round(dropdownPosX) + 'px',\n right: 'auto',\n bottom: 'auto',\n transform: 'none',\n 'will-change': 'auto',\n 'z-index': 9999\n });\n } else {\n const $container = this.$el.closest('.dropdown, .dropup, .dropleft, .dropright');\n \n if ($container.length) {\n const containerOffset = $container.offset();\n const triggerOffset = this.$el.offset();\n \n let relativeX = triggerOffset.left - containerOffset.left;\n let relativeY = triggerOffset.top - containerOffset.top;\n \n switch (finalPlacement) {\n case 'bottom':\n relativeY += dropdownTriggerHeight + spacing;\n if (finalAlign === 'end') {\n relativeX = relativeX + dropdownTriggerWidth - dropdownWidth;\n }\n break;\n case 'top':\n relativeY -= dropdownHeight + spacing;\n if (finalAlign === 'end') {\n relativeX = relativeX + dropdownTriggerWidth - dropdownWidth;\n }\n break;\n case 'left':\n relativeX -= dropdownWidth + spacing;\n break;\n case 'right':\n relativeX += dropdownTriggerWidth + spacing;\n break;\n }\n \n relativeX += offsetX;\n relativeY += offsetY;\n \n this.$dropdown.css({\n position: 'absolute',\n top: Math.round(relativeY) + 'px',\n left: Math.round(relativeX) + 'px',\n right: 'auto',\n bottom: 'auto',\n transform: 'none',\n 'will-change': 'auto'\n });\n }\n }\n }\n\n show() {\n if (!this.$dropdown || this.$dropdown.hasClass('show')) {\n return;\n }\n\n this.setPosition();\n\n if (this.animation) {\n this.$dropdown.attr('x-placement', this.placement + '-' + this.align);\n this.$dropdown.addClass(this.animationSpeed);\n playAnimation(this.$dropdown, this.animationIn);\n this.$dropdown.addClass('show');\n this.$dropdown.attr('id', this.id);\n this.$el.attr('data-dropdown', this.id);\n } else {\n this.$dropdown.attr('x-placement', this.placement + '-' + this.align);\n this.$dropdown.addClass('show');\n this.$dropdown.attr('id', this.id);\n this.$el.attr('data-dropdown', this.id);\n }\n\n if (this.opts.scroll && this.scroll && this.$scrollableContent.length) {\n this.$scrollableContent[0].offsetHeight;\n \n if (this.animation) {\n const animationDuration = this.$dropdown.css('animation-duration');\n const duration = animationDuration ? parseFloat(animationDuration) * 1000 : 300;\n \n setTimeout(() => {\n if (this.scroll && typeof this.scroll.update === 'function') {\n this.scroll.update();\n }\n }, duration);\n } else {\n\n requestAnimationFrame(() => {\n if (this.scroll && typeof this.scroll.update === 'function') {\n this.scroll.update();\n }\n });\n }\n }\n\n this.contentOpen = true;\n this.onShow();\n }\n\n close() {\n if (!this.$dropdown || this.preventClose) {\n return;\n }\n\n if (this.animation && !this.$dropdown.hasClass('animation')) {\n playAnimation(this.$dropdown, this.animationOut).then(() => {\n this.$dropdown.removeClass('show');\n this.$el.removeAttr('data-dropdown');\n });\n } else {\n this.$dropdown.removeClass('show');\n this.$el.removeAttr('data-dropdown');\n }\n\n this.contentOpen = false;\n this.onClose();\n }\n\n onItemClick(el, e) {\n let onItemClick = this.opts.onItemClick;\n\n if (typeof onItemClick === 'function') {\n onItemClick.call(el, e, this);\n }\n }\n}\n\nDropdown._jQueryInit();\n\nexport default Dropdown;","import Component from './component';\nimport { generateUUID, playAnimation, resizeManager } from './utils';\n\nclass Tooltip extends Component {\n\n static NAME = 'coolTooltip';\n\n static DEFAULTS = {\n container: 'body',\n animation: false,\n animationIn: 'fadeIn',\n animationOut: 'fadeOut',\n animationSpeed: 'fastest',\n placement: 'bottom',\n content: '',\n trigger: 'auto',\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${Tooltip.NAME}`);\n if (!instance) {\n instance = new Tooltip(this, typeof config === 'object' && config);\n $el.data(`plugin_${Tooltip.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Tooltip.NAME];\n $.fn[Tooltip.NAME] = Tooltip._jQueryInterface;\n $.fn[Tooltip.NAME].Constructor = Tooltip;\n $.fn[Tooltip.NAME].defaults = Tooltip.DEFAULTS || {};\n $.fn[Tooltip.NAME].noConflict = () => {\n $.fn[Tooltip.NAME] = previousName;\n return Tooltip._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.tooltip) {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, window.Cool.settings.tooltip, opts);\n } else {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.el = el;\n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n if (this.$tooltip) {\n this.$tooltip.remove();\n this.$tooltip = null;\n }\n this.$el.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n if (this.$tooltip) {\n this.setPosition();\n }\n this.onUpdate();\n }\n\n buildCache() {\n this.$el = $(this.el);\n this.$container = this.$el.data('container') ? $(this.$el.data('container')) : $(this.opts.container);\n this.id = 'tooltip-' + generateUUID();\n this.animation = this.$el.data('animation') ? this.$el.data('animation') : this.opts.animation;\n this.animationIn = this.$el.data('animationIn') ? this.$el.data('animationIn') : this.opts.animationIn;\n this.animationOut = this.$el.data('animationOut') ? this.$el.data('animationOut') : this.opts.animationOut;\n this.animationSpeed = this.$el.data('animationSpeed')\n ? this.$el.data('animationSpeed')\n : this.opts.animationSpeed;\n this.placement = this.$el.data('placement') ? this.$el.data('placement') : this.opts.placement;\n this.placementChanged = false;\n this.content = this.$el.data('content') ? this.$el.data('content') : this.opts.content;\n this.trigger = this.$el.data('trigger') ? this.$el.data('trigger') : this.opts.trigger;\n }\n\n bindEvents() {\n if (this.trigger === 'auto') {\n this.$el.on('mouseenter' + '.' + this.constructor.NAME, () => {\n this.show();\n });\n\n this.$el.on('mouseleave' + '.' + this.constructor.NAME, () => {\n this.close();\n });\n\n this.$el.on('blur' + '.' + this.constructor.NAME, () => {\n this.close();\n });\n\n this.$el.on('click' + '.' + this.constructor.NAME, () => {\n this.close();\n });\n }\n\n if (window.ResizeObserver) {\n this._resizeCallback = () => {\n if (this.$tooltip && this.$tooltip.hasClass('show')) {\n requestAnimationFrame(() => {\n this.setPosition();\n });\n }\n };\n \n resizeManager.observe(this.el, this._resizeCallback);\n }\n }\n\n unbindEvents() {\n this.$el.off('.' + this.constructor.NAME);\n \n if (this._resizeCallback) {\n resizeManager.unobserve(this.el);\n this._resizeCallback = null;\n }\n }\n\n buildTooltip() {\n this.$tooltip = $(`\n <div class=\"tooltip\" role=\"tooltip\" id=\"${this.id}\">\n <div class=\"arrow\"></div>\n <div class=\"tooltip-inner\">${this.content}</div>\n </div>\n `);\n\n this.$container.append(this.$tooltip);\n this.$arrow = this.$tooltip.find('.arrow');\n }\n\n setPosition(placement) {\n if (typeof placement === 'undefined' || placement === null) {\n placement = this.placement;\n }\n\n this.$tooltip.addClass('tooltip-' + placement);\n\n let containerInnerWidth = this.$container.innerWidth();\n let containerInnerHeight = this.$container.innerHeight();\n let tooltipWidth = this.$tooltip.outerWidth(true);\n let tooltipHeight = this.$tooltip.outerHeight(true);\n let tooltipTriggerWidth = this.$el.outerWidth();\n let tooltipTriggerHeight = this.$el.outerHeight();\n let tooltipTriggerPosX = this.$el.offset().left;\n let tooltipTriggerPosY = this.$el.offset().top;\n let arrowWidth = this.$arrow.outerWidth(true);\n let arrowHeight = this.$arrow.outerHeight(true);\n let arrowPos;\n let tooltipPosX;\n let tooltipPosY;\n\n if (placement === 'top') {\n tooltipPosX = Math.round(tooltipTriggerPosX - (tooltipWidth - tooltipTriggerWidth) / 2);\n tooltipPosY = Math.round(tooltipTriggerPosY - tooltipHeight);\n arrowPos = Math.round(tooltipWidth / 2 - arrowWidth / 2);\n\n this.$arrow.css({\n left: arrowPos + 'px',\n });\n } else if (placement === 'right') {\n tooltipPosX = Math.round(tooltipTriggerPosX + tooltipTriggerWidth);\n tooltipPosY = Math.round(tooltipTriggerPosY - (tooltipHeight - tooltipTriggerHeight) / 2);\n arrowPos = Math.round(tooltipHeight / 2 - arrowHeight / 2);\n\n this.$arrow.css({\n top: arrowPos + 'px',\n });\n } else if (placement === 'bottom') {\n tooltipPosX = Math.round(tooltipTriggerPosX - (tooltipWidth - tooltipTriggerWidth) / 2);\n tooltipPosY = Math.round(tooltipTriggerPosY + tooltipTriggerHeight);\n arrowPos = Math.round(tooltipWidth / 2 - arrowWidth / 2);\n\n this.$arrow.css({\n left: arrowPos + 'px',\n });\n } else if (placement === 'left') {\n tooltipPosX = Math.round(tooltipTriggerPosX - tooltipWidth);\n tooltipPosY = Math.round(tooltipTriggerPosY - (tooltipHeight - tooltipTriggerHeight) / 2);\n arrowPos = Math.round(tooltipHeight / 2 - arrowHeight / 2);\n\n this.$arrow.css({\n top: arrowPos + 'px',\n });\n }\n\n this.$tooltip.css({\n position: 'absolute',\n top: '0px',\n left: '0px',\n transform: 'translate3d(' + tooltipPosX + 'px, ' + tooltipPosY + 'px, 0px)',\n 'will-change': 'transform',\n });\n\n let tooltipOverflowCount = 0;\n let tooltipPosition = {\n left: this.$tooltip.position().left,\n top: this.$tooltip.position().top,\n right: containerInnerWidth - (this.$tooltip.position().left + tooltipWidth),\n bottom: containerInnerHeight - (this.$tooltip.position().top + tooltipHeight),\n };\n let tooltipOverflow = {\n left: false,\n top: false,\n right: false,\n bottom: false,\n };\n\n if (tooltipPosition.right < 0) {\n tooltipOverflow.right = true;\n tooltipOverflowCount++;\n }\n\n if (tooltipPosition.left < 0) {\n tooltipOverflow.left = true;\n tooltipOverflowCount++;\n }\n\n if (tooltipPosition.bottom < 0) {\n tooltipOverflow.bottom = true;\n tooltipOverflowCount++;\n }\n\n if (tooltipPosition.top < 0) {\n tooltipOverflow.top = true;\n tooltipOverflowCount++;\n }\n\n if (tooltipOverflowCount > 0) {\n if (!this.placementChanged && tooltipOverflow.left && tooltipPosition.right > tooltipWidth) {\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-' + placement);\n this.$arrow.removeAttr('style');\n this.setPosition('right');\n } else if (!this.placementChanged && tooltipOverflow.top && tooltipPosition.top > tooltipHeight) {\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-' + placement);\n this.$arrow.removeAttr('style');\n this.setPosition('bottom');\n } else if (!this.placementChanged && tooltipOverflow.right && tooltipPosition.left > tooltipWidth) {\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-' + placement);\n this.$arrow.removeAttr('style');\n this.setPosition('left');\n } else if (!this.placementChanged && tooltipOverflow.bottom && tooltipPosition.top > tooltipHeight) {\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-' + placement);\n this.$arrow.removeAttr('style');\n this.setPosition('top');\n } else if (\n !this.placementChanged &&\n (placement !== 'top' || placement !== 'bottom') &&\n (tooltipOverflow.left || tooltipOverflow.right)\n ) {\n if (tooltipPosition.top > tooltipPosition.bottom) {\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-' + placement);\n this.$arrow.removeAttr('style');\n this.setPosition('top');\n } else {\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-' + placement);\n this.$arrow.removeAttr('style');\n this.setPosition('bottom');\n }\n } else {\n this.fixTooltipPosition = true;\n }\n\n if (this.fixTooltipPosition) {\n\n if (tooltipOverflow.left) {\n let overflowAmount = Math.abs(tooltipPosition.left);\n let excludePlacements = ['top', 'bottom'];\n\n if (\n tooltipTriggerPosX >= tooltipPosX + overflowAmount &&\n excludePlacements.indexOf(placement) < 0\n ) {\n tooltipWidth -= overflowAmount;\n tooltipPosX += overflowAmount;\n } else {\n tooltipPosX += overflowAmount;\n arrowPos -= overflowAmount;\n }\n }\n\n if (tooltipOverflow.top) {\n let overflowAmount = Math.abs(tooltipPosition.top);\n\n tooltipPosY += overflowAmount;\n arrowPos -= overflowAmount;\n }\n\n if (tooltipOverflow.right) {\n let overflowAmount = Math.abs(tooltipPosition.right);\n let excludePlacements = ['top', 'bottom'];\n\n if (\n tooltipTriggerPosX <= tooltipPosX - overflowAmount &&\n excludePlacements.indexOf(placement) < 0\n ) {\n tooltipWidth -= overflowAmount;\n } else {\n tooltipPosX -= overflowAmount;\n arrowPos += overflowAmount;\n }\n }\n\n if (tooltipOverflow.bottom) {\n let overflowAmount = Math.abs(tooltipPosition.bottom);\n\n tooltipPosY -= overflowAmount;\n arrowPos += overflowAmount;\n }\n\n if (placement === 'top') {\n this.$arrow.css({\n left: arrowPos + 'px',\n });\n } else if (placement === 'right') {\n this.$arrow.css({\n top: arrowPos + 'px',\n });\n } else if (placement === 'bottom') {\n this.$arrow.css({\n left: arrowPos + 'px',\n });\n } else if (placement === 'left') {\n this.$arrow.css({\n top: arrowPos + 'px',\n });\n }\n\n this.$tooltip.css({\n width: tooltipWidth,\n transform: 'translate3d(' + tooltipPosX + 'px, ' + tooltipPosY + 'px, 0px)',\n });\n\n this.fixTooltipPosition = false;\n }\n }\n }\n\n show() {\n if (this.$tooltip) {\n return;\n }\n\n this.buildTooltip();\n this.setPosition();\n\n if (this.animation) {\n this.$tooltip.addClass(this.animationSpeed);\n playAnimation(this.$tooltip, this.animationIn);\n this.$tooltip.addClass('show');\n this.$tooltip.attr('id', this.id);\n this.$el.attr('data-tooltip', this.id);\n } else {\n this.$tooltip.addClass('show');\n this.$tooltip.attr('id', this.id);\n this.$el.attr('data-tooltip', this.id);\n }\n\n this.onShow();\n }\n\n close() {\n if (!this.$tooltip) {\n return;\n }\n\n if (this.animation && !this.$tooltip.hasClass('animation')) {\n playAnimation(this.$tooltip, this.animationOut).then(() => {\n this.$tooltip.remove();\n this.$el.removeAttr('data-tooltip');\n this.$tooltip = null;\n this.placementChanged = false;\n\n this.onClose();\n });\n } else {\n this.$tooltip.remove();\n this.$el.removeAttr('data-tooltip');\n this.$tooltip = null;\n this.placementChanged = false;\n\n this.onClose();\n }\n }\n}\n\nTooltip._jQueryInit();\n\nexport default Tooltip;","import Component from './component';\n\nclass Collapse extends Component {\n\n static NAME = 'coolCollapse';\n\n static DEFAULTS = {\n target: null,\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${Collapse.NAME}`);\n if (!instance) {\n instance = new Collapse(this, typeof config === 'object' && config);\n $el.data(`plugin_${Collapse.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Collapse.NAME];\n $.fn[Collapse.NAME] = Collapse._jQueryInterface;\n $.fn[Collapse.NAME].Constructor = Collapse;\n $.fn[Collapse.NAME].defaults = Collapse.DEFAULTS || {};\n $.fn[Collapse.NAME].noConflict = () => {\n $.fn[Collapse.NAME] = previousName;\n return Collapse._jQueryInterface;\n };\n }\n \n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.collapse) {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, window.Cool.settings.collapse, opts);\n } else {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.el = el;\n \n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n this.$el.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n this.onUpdate();\n }\n\n buildCache() {\n this.$el = $(this.el);\n this.el = this.$el[0];\n \n const targetSelector = this.$el.data('target') || this.opts.target;\n this.$target = targetSelector ? $(targetSelector) : this.$el.parent().find('.collapse');\n \n this.target = this.$target[0];\n this.breakpoint = this.$el.data('breakpoint');\n this.expanded = this.$el.attr('aria-expanded') === 'true';\n\n if (this.target) {\n this.$container = this.$target.closest('.section-collapse');\n this.container = this.$container[0];\n \n const indicatorSelector = this.$el.data('target') \n ? `[data-collapse-indicator=\"${this.$el.data('target')}\"]`\n : null;\n this.$indicator = indicatorSelector ? $(indicatorSelector) : this.$el.parent().find('[data-collapse-indicator]');\n this.indicator = this.$indicator[0];\n }\n }\n\n bindEvents() {\n this._clickHandler = (e) => {\n if (!this.breakpoint || !window.matchMedia(`(min-width: ${this.breakpoint}px)`).matches) {\n e.preventDefault();\n this.toggle();\n }\n };\n \n this.el.addEventListener('click', this._clickHandler);\n }\n\n unbindEvents() {\n if (this._clickHandler) {\n this.el.removeEventListener('click', this._clickHandler);\n }\n \n this.$el.off('.' + this.constructor.NAME);\n }\n\n toggle() {\n if (this.expanded) {\n this.close();\n } else {\n this.show();\n }\n }\n\n show() {\n if (this.expanded) return;\n\n this.target.classList.add('show');\n \n if (this.container) {\n this.container.classList.add('show');\n }\n\n if (this.indicator) {\n this.indicator.classList.add('show');\n }\n\n this.el.setAttribute('aria-expanded', 'true');\n this.expanded = true;\n \n this.onShow();\n }\n\n close() {\n if (!this.expanded) return;\n\n this.target.classList.remove('show');\n \n if (this.container) {\n this.container.classList.remove('show');\n }\n\n if (this.indicator) {\n this.indicator.classList.remove('show');\n }\n\n this.el.setAttribute('aria-expanded', 'false');\n this.expanded = false;\n \n this.onClose();\n }\n}\n\nCollapse._jQueryInit();\n\nexport default Collapse;","import Component from './component';\nimport { debounce } from './utils';\n\nclass SectionTabs extends Component {\n\n static NAME = 'coolSectionTabs';\n\n static DEFAULTS = {\n onInit: null,\n onUpdate: null,\n onDestroy: null\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${SectionTabs.NAME}`);\n if (!instance) {\n instance = new SectionTabs(this, typeof config === 'object' && config);\n $el.data(`plugin_${SectionTabs.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[SectionTabs.NAME];\n $.fn[SectionTabs.NAME] = SectionTabs._jQueryInterface;\n $.fn[SectionTabs.NAME].Constructor = SectionTabs;\n $.fn[SectionTabs.NAME].defaults = SectionTabs.DEFAULTS || {};\n $.fn[SectionTabs.NAME].noConflict = () => {\n $.fn[SectionTabs.NAME] = previousName;\n return SectionTabs._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.sectionTabs) {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, window.Cool.settings.sectionTabs, opts);\n } else {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.el = el;\n this._tabsCache = new WeakMap();\n this._resizeObserver = null;\n this._isProcessing = false;\n this._rafId = null;\n \n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n \n this._rafId = requestAnimationFrame(() => {\n if (this.dropdownContainer) this.dropdownContainer.classList.add('js-ready');\n this.el.classList.add('js-initialized');\n \n this.checkForChanges();\n this.onInit();\n });\n }\n\n destroy() {\n this.unbindEvents();\n \n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n }\n \n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = null;\n }\n \n this.$el.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n this.onUpdate();\n }\n\n buildCache() {\n this.$el = $(this.el);\n this.el = this.$el[0];\n \n const sectionTabs = this.el.closest('.section-tabs');\n \n this.$dropdownContainer = sectionTabs ? $(sectionTabs).find('.dropdown-container') : this.$el.find('.dropdown-container');\n this.$dropdownList = sectionTabs ? $(sectionTabs).find('.dropdown-list') : this.$el.find('.dropdown-list');\n this.dropdownContainer = this.$dropdownContainer.length ? this.$dropdownContainer[0] : null;\n this.dropdownList = this.$dropdownList.length ? this.$dropdownList[0] : null;\n }\n\n bindEvents() {\n const sectionTabs = this.el.closest('.section-tabs');\n const sectionHeader = sectionTabs ? sectionTabs.closest('.section-header') : null;\n const observeTarget = sectionHeader || sectionTabs || this.el;\n \n if (window.ResizeObserver) {\n this._resizeObserver = new ResizeObserver(entries => {\n if (!this._isProcessing) {\n this._isProcessing = true;\n \n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n }\n \n this._rafId = requestAnimationFrame(() => {\n this.checkForChanges();\n this._isProcessing = false;\n });\n }\n });\n \n this._resizeObserver.observe(observeTarget);\n } else {\n this._resizeHandler = debounce(() => {\n this.checkForChanges();\n }, 50);\n \n window.addEventListener('resize', this._resizeHandler, { passive: true });\n }\n }\n\n unbindEvents() {\n this.$el.off('.' + this.constructor.NAME);\n \n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n }\n \n if (this._resizeHandler) {\n window.removeEventListener('resize', this._resizeHandler);\n }\n }\n\n moveToList(el) {\n const uuid = el.getAttribute('data-uuid');\n const tab = this.el.querySelector(`:scope > .tab-item[data-related-dropdown-item=\"${uuid}\"]`);\n\n if (tab) {\n tab.removeAttribute('data-related-dropdown-item');\n el.remove();\n }\n }\n\n moveToDropdown(el) {\n if (el.hasAttribute('data-related-dropdown-item')) {\n return;\n }\n if (!this.dropdownList) {\n return;\n }\n\n const uuid = crypto.randomUUID();\n const clone = el.cloneNode(true);\n const itemActionEl = clone.querySelector('.tab-item-action');\n\n if (itemActionEl) {\n itemActionEl.classList.add('dropdown-item');\n }\n\n clone.setAttribute('data-uuid', uuid);\n this.dropdownList.appendChild(clone);\n\n el.setAttribute('data-related-dropdown-item', uuid);\n }\n\n getTabDimensions(tab) {\n if (this._tabsCache.has(tab)) {\n const cached = this._tabsCache.get(tab);\n return cached;\n }\n \n const wasInvisible = tab.classList.contains('invisible');\n\n if (wasInvisible) {\n tab.classList.remove('invisible');\n }\n \n const sectionTabs = this.el.closest('.section-tabs');\n const container = sectionTabs || this.el;\n const originalOverflow = container.style.overflow;\n \n container.style.overflow = 'visible';\n container.offsetHeight;\n \n const width = tab.offsetWidth;\n const marginLeft = parseInt(getComputedStyle(tab).marginLeft, 10) || 0;\n const marginRight = parseInt(getComputedStyle(tab).marginRight, 10) || 0;\n const totalWidth = width + marginLeft + marginRight;\n \n container.style.overflow = originalOverflow;\n\n if (wasInvisible) {\n tab.classList.add('invisible');\n }\n \n const dimensions = { width, totalWidth };\n this._tabsCache.set(tab, dimensions);\n \n return dimensions;\n }\n\n availableSpace() {\n const sectionTabs = this.el.closest('.section-tabs');\n const sectionHeader = sectionTabs ? sectionTabs.closest('.section-header') : null;\n let containerWidth, paddingLeft, paddingRight;\n\n if (sectionHeader) {\n const headerStyles = getComputedStyle(sectionHeader);\n const flexDirection = headerStyles.flexDirection;\n \n if (flexDirection === 'column') {\n const container = sectionTabs || this.el;\n const containerStyles = getComputedStyle(container);\n\n containerWidth = container.offsetWidth;\n paddingLeft = parseInt(containerStyles.paddingLeft, 10) || 0;\n paddingRight = parseInt(containerStyles.paddingRight, 10) || 0;\n\n } else {\n\n containerWidth = sectionHeader.offsetWidth;\n paddingLeft = parseInt(headerStyles.paddingLeft, 10) || 0;\n paddingRight = parseInt(headerStyles.paddingRight, 10) || 0;\n \n const sectionSearch = sectionHeader.querySelector('.section-search');\n\n if (sectionSearch) {\n containerWidth -= sectionSearch.offsetWidth;\n const headerGap = parseInt(headerStyles.gap, 10) || 0;\n containerWidth -= headerGap;\n }\n }\n\n } else {\n const container = sectionTabs || this.el;\n const containerStyles = getComputedStyle(container);\n\n containerWidth = container.offsetWidth;\n paddingLeft = parseInt(containerStyles.paddingLeft, 10) || 0;\n paddingRight = parseInt(containerStyles.paddingRight, 10) || 0;\n }\n \n const dropdownWidth = this.dropdownContainer ? (this.dropdownContainer.classList.contains('visible') ? this.dropdownContainer.offsetWidth : 40) : 0;\n const available = containerWidth - paddingLeft - paddingRight - dropdownWidth;\n \n return available;\n }\n\n checkForChanges() {\n if (!this.dropdownList) {\n return;\n }\n\n this._tabsCache = new WeakMap();\n \n const tabs = Array.from(this.el.querySelectorAll(':scope > .tab-item'));\n const dropdownItems = Array.from(this.dropdownList.children);\n const availableSpace = this.availableSpace();\n const gap = parseInt(getComputedStyle(this.el).gap, 10) || 0;\n \n if (window.innerWidth < 768 && availableSpace < 200) {\n tabs.forEach(tab => {\n tab.classList.remove('invisible');\n tab.removeAttribute('data-related-dropdown-item');\n });\n if (this.dropdownContainer) {\n this.dropdownContainer.classList.remove('visible');\n }\n return;\n }\n \n let accumulatedWidth = 0;\n let visibleTabs = [];\n let overflowTabs = [];\n \n for (let i = 0; i < tabs.length; i++) {\n const tab = tabs[i];\n const { totalWidth } = this.getTabDimensions(tab);\n const widthWithGap = accumulatedWidth + totalWidth + (i > 0 ? gap : 0);\n \n if (widthWithGap <= availableSpace) {\n accumulatedWidth = widthWithGap;\n visibleTabs.push(tab);\n \n const relatedDropdownId = tab.getAttribute('data-related-dropdown-item');\n\n if (relatedDropdownId) {\n const dropdownItem = this.dropdownList.querySelector(`[data-uuid=\"${relatedDropdownId}\"]`);\n if (dropdownItem) {\n this.moveToList(dropdownItem);\n }\n }\n } else {\n overflowTabs.push(tab);\n }\n }\n \n overflowTabs.forEach((tab, index) => {\n if (!tab.hasAttribute('data-related-dropdown-item')) {\n this.moveToDropdown(tab);\n }\n });\n \n if (dropdownItems.length > 0 && overflowTabs.length === 0) {\n const remainingSpace = availableSpace - accumulatedWidth;\n \n for (let i = dropdownItems.length - 1; i >= 0; i--) {\n const dropdownItem = dropdownItems[i];\n const uuid = dropdownItem.getAttribute('data-uuid');\n const originalTab = this.el.querySelector(`[data-related-dropdown-item=\"${uuid}\"]`);\n \n if (originalTab) {\n const { totalWidth } = this.getTabDimensions(originalTab);\n const widthWithGap = totalWidth + (accumulatedWidth > 0 ? gap : 0);\n \n if (widthWithGap <= remainingSpace) {\n this.moveToList(dropdownItem);\n visibleTabs.push(originalTab);\n accumulatedWidth += widthWithGap;\n } else {\n break;\n }\n }\n }\n }\n \n tabs.forEach(tab => {\n const shouldBeVisible = visibleTabs.includes(tab);\n if (shouldBeVisible) {\n tab.classList.remove('invisible');\n } else {\n tab.classList.add('invisible');\n }\n });\n \n const hasDropdownItems = this.dropdownList && this.dropdownList.children.length > 0;\n\n if (this.dropdownContainer) {\n this.dropdownContainer.classList.toggle('visible', hasDropdownItems);\n }\n }\n}\n\nSectionTabs._jQueryInit();\n\nexport default SectionTabs;","import Component from './component';\nimport { generateUUID, playAnimation } from './utils';\n\nclass Toast extends Component {\n\n static NAME = 'coolToast';\n\n static DEFAULTS = {\n title: '',\n content: '',\n template: '',\n theme: 'dark',\n placement: 'bottom-center',\n placementX: null,\n placementY: null,\n animation: true,\n animationIn: 'slideInUp',\n animationOut: 'slideOutDown',\n animationSpeed: 'faster',\n offset: null,\n size: null,\n dismiss: 3,\n header: false,\n onInitialize: null,\n onDestroy: null,\n onInit: null,\n onDestroy: null,\n onShow: null,\n onClose: null\n };\n\n static _jQueryInterface(config) {\n const $el = $(this);\n let instance = $el.data(`plugin_${Toast.NAME}`);\n\n if (!instance) {\n instance = new Toast(this, typeof config === 'object' && config);\n $el.data(`plugin_${Toast.NAME}`, instance);\n }\n \n if (typeof config === 'string') instance[config]();\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Toast.NAME];\n $.fn[Toast.NAME] = Toast._jQueryInterface;\n $.fn[Toast.NAME].Constructor = Toast;\n $.fn[Toast.NAME].defaults = Toast.DEFAULTS || {};\n $.fn[Toast.NAME].noConflict = () => {\n $.fn[Toast.NAME] = previousName;\n return Toast._jQueryInterface;\n };\n }\n\n constructor(container, opts) {\n super(); \n \n this.settings = {};\n\n if (window.Cool.settings.toast) {\n $.extend(true, this.settings, $.fn[this.constructor.NAME].defaults, window.Cool.settings.toast, opts);\n } else {\n $.extend(true, this.settings, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.container = container;\n this.$container = $(this.container);\n this.toasts = [];\n this.queue = [];\n this.processingQueue = false;\n this.onInitialize = this.settings.onInitialize;\n this.onDestroy = this.settings.onDestroy;\n this.lastToastContent = null;\n\n this.$container.data(`plugin_${this.constructor.NAME}`, this);\n }\n\n isSimilarToast(toast) {\n if (!this.lastToastContent) return false;\n return this.lastToastContent === toast.content;\n }\n\n addQueue(toast) {\n if (this.isSimilarToast(toast)) {\n this.queue = this.queue.filter((t) => t.content !== toast.content);\n }\n\n this.queue.push(toast);\n this.lastToastContent = toast.content;\n\n if (this.processingQueue) {\n return;\n }\n\n return this.processQueue();\n }\n\n processQueue() {\n if (this.processingQueue) {\n this.queue.shift();\n }\n\n if (!this.queue.length) {\n this.processingQueue = false;\n return;\n }\n\n this.processingQueue = true;\n\n return this.show(this.queue[0]);\n }\n\n init(opts) {\n let settings = {};\n\n $.extend(true, settings, this.settings, opts);\n\n let toast = this.buildToast(settings);\n\n this.addQueue(toast);\n this.onInit(toast);\n\n return toast;\n }\n\n destroy() {\n this.$container.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n buildToast(settings) {\n let toast = {\n uuid: 'toast-' + generateUUID(),\n placement: settings.placement,\n placementX: settings.placementX,\n placementY: settings.placementY,\n offset: settings.offset,\n animation: settings.animation,\n animationIn: settings.animationIn,\n animationOut: settings.animationOut,\n animationSpeed: settings.animationSpeed,\n dismiss: settings.dismiss,\n size: settings.size,\n header: settings.header,\n theme: settings.theme,\n title: settings.title,\n content: settings.content,\n template: settings.template,\n maxBodyHeight: settings.maxBodyHeight,\n onInit: settings.onInit,\n onShow: settings.onShow,\n onClose: settings.onClose,\n };\n\n if (typeof toast.content === 'function') {\n toast.$el = $(toast.template());\n } else {\n toast.$el = $(this._renderTemplate(toast));\n }\n\n toast.$inner = toast.$el.find('.toast-inner');\n toast.$closeBtn = toast.$el.find('[data-toast-close]');\n\n this.toasts.push(toast);\n\n return toast;\n }\n\n bindEvents(toast) {\n let self = this;\n\n toast.$el.on('click', '[data-toast-close]', () => {\n if (toast.$el) {\n self.close(toast);\n }\n });\n\n if (window.ResizeObserver) {\n toast.resizeObserver = new ResizeObserver(entries => {\n if (!toast.$el) return;\n \n if (toast.rafId) {\n cancelAnimationFrame(toast.rafId);\n }\n \n toast.rafId = requestAnimationFrame(() => {\n if (toast.$el) {\n this.setPosition(toast);\n }\n });\n });\n \n toast.resizeObserver.observe(document.body);\n \n } else {\n\n let resizeTimeout;\n toast.resizeHandler = () => {\n if (!toast.$el) return;\n \n clearTimeout(resizeTimeout);\n \n const now = performance.now();\n if (!toast.lastResizeTime || now - toast.lastResizeTime > 100) {\n this.setPosition(toast);\n toast.lastResizeTime = now;\n } else {\n resizeTimeout = setTimeout(() => {\n if (toast.$el) {\n this.setPosition(toast);\n }\n }, 16);\n }\n };\n \n window.addEventListener('resize', toast.resizeHandler, { passive: true });\n }\n }\n\n setPosition(toast, placement, placementY, placementX) {\n if (typeof placementY === 'undefined' || placementY === null) {\n placementY = toast.placementY;\n }\n\n if (typeof placementX === 'undefined' || placementX === null) {\n placementX = toast.placementX;\n }\n\n if (!placementX || !placementY) {\n placement = toast.placement;\n }\n\n if (toast.offset) {\n let offsets = toast.offset.split(',');\n let offsetX = parseInt(offsets[0], 10);\n let offsetY = parseInt(offsets[1], 10);\n }\n\n let toastWidth = toast.$el.outerWidth(true);\n let toastHeight = toast.$el.outerHeight(true);\n let toastPosX;\n let toastPosY;\n\n if (placement) {\n if (placement === 'top-left') {\n toastPosX = 0;\n toastPosY = 0;\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += offsetY;\n } else {\n toastPosX += 30;\n toastPosY += 30;\n }\n } else if (placement === 'top-center') {\n toastPosX = this.$container.width() / 2 - toastWidth / 2;\n toastPosY = 0;\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += offsetY;\n } else {\n toastPosY += 30;\n }\n } else if (placement === 'top-right') {\n toastPosX = this.$container.width() - toastWidth;\n toastPosY = 0;\n\n if (toast.offset) {\n toastPosX += -offsetX;\n toastPosY += offsetY;\n } else {\n toastPosX += -30;\n toastPosY += 30;\n }\n } else if (placement === 'center-left') {\n toastPosX = 0;\n toastPosY = this.$container.height() / 2 - toastHeight / 2;\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += offsetY;\n } else {\n toastPosX += 30;\n }\n } else if (placement === 'center-center') {\n toastPosX = this.$container.width() / 2 - toastWidth / 2;\n toastPosY = this.$container.height() / 2 - toastHeight / 2;\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += offsetY;\n }\n } else if (placement === 'center-right') {\n toastPosX = this.$container.width() - toastWidth;\n toastPosY = this.$container.height() / 2 - toastHeight / 2;\n\n if (toast.offset) {\n toastPosX += -offsetX;\n toastPosY += offsetY;\n } else {\n toastPosX += -30;\n }\n } else if (placement === 'bottom-left') {\n toastPosX = 0;\n toastPosY = this.$container.height() - toastHeight;\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += -offsetY;\n } else {\n toastPosX += 30;\n toastPosY += -30;\n }\n } else if (placement === 'bottom-center') {\n toastPosX = this.$container.width() / 2 - toastWidth / 2;\n toastPosY = this.$container.height() - toastHeight;\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += -offsetY;\n } else {\n toastPosY += -30;\n }\n } else if (placement === 'bottom-right') {\n toastPosX = this.$container.width() - toastWidth;\n toastPosY = this.$container.height() - toastHeight;\n\n if (toast.offset) {\n toastPosX += -offsetX;\n toastPosY += -offsetY;\n } else {\n toastPosX += -30;\n toastPosY += -30;\n }\n }\n } else {\n toastPosX = placementX;\n toastPosY = placementY;\n }\n\n toast.$el.css({\n position: 'absolute',\n top: '0px',\n left: '0px',\n transform: 'translate3d(' + toastPosX + 'px, ' + toastPosY + 'px, 0px)',\n 'will-change': 'transform',\n });\n }\n\n show(toast) {\n this.$container.append(toast.$el);\n this.bindEvents(toast);\n this.setPosition(toast);\n\n if (toast.animation) {\n toast.$el.addClass('show');\n toast.$inner.addClass(toast.animationSpeed);\n playAnimation(toast.$inner, toast.animationIn);\n } else {\n toast.$el.addClass('show');\n }\n\n if (toast.dismiss) {\n setTimeout(() => {\n this.close(toast);\n }, toast.dismiss * 1000);\n }\n\n this.onShow(toast);\n }\n\n close(toast) {\n if (toast.resizeObserver) {\n toast.resizeObserver.disconnect();\n toast.resizeObserver = null;\n }\n \n if (toast.rafId) {\n cancelAnimationFrame(toast.rafId);\n toast.rafId = null;\n }\n \n if (toast.resizeHandler) {\n window.removeEventListener('resize', toast.resizeHandler);\n toast.resizeHandler = null;\n }\n\n if (toast.animation && !toast.$inner.hasClass('animation')) {\n toast.$el.removeClass('show');\n playAnimation(toast.$inner, toast.animationOut).then(() => {\n toast.$el.remove();\n this.lastToastContent = null;\n\n this.toasts = $.grep(this.toasts, function (item) {\n return item.uuid != toast.uuid;\n });\n\n this.processQueue();\n this.onClose(toast);\n });\n } else {\n toast.$el.remove();\n this.lastToastContent = null;\n\n this.toasts = $.grep(this.toasts, function (item) {\n return item.uuid != toast.uuid;\n });\n\n this.processQueue();\n this.onClose(toast);\n }\n }\n\n onInitialize() {\n let onInitialize = this.onInitialize;\n\n if (typeof onInitialize === 'function') {\n onInitialize.call(this.container);\n }\n }\n\n onDestroy() {\n let onDestroy = this.onDestroy;\n\n if (typeof onDestroy === 'function') {\n onDestroy.call(this.container);\n }\n }\n\n onInit(toast) {\n let onInit = toast.onInit;\n\n if (typeof onInit === 'function') {\n onInit.call(toast);\n }\n }\n\n onShow(toast) {\n let onShow = toast.onShow;\n\n if (typeof onShow === 'function') {\n onShow.call(toast);\n }\n }\n\n onClose(toast) {\n let onClose = toast.onClose;\n\n if (typeof onClose === 'function') {\n onClose.call(toast);\n }\n }\n\n _renderTemplate(toast) {\n let content = '';\n let header = '';\n let body = '';\n let bodyCloseBtn = '';\n\n if (typeof toast.content === 'function') {\n content = toast.content();\n } else {\n content = toast.content;\n }\n\n if (toast.header) {\n header = `\n <div class=\"toast-header\">\n\n <span>${toast.title}</span>\n\n <button type=\"button\" data-toast-close>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n </button>\n\n </div>\n `;\n } else {\n bodyCloseBtn = `\n <button type=\"button\" data-toast-close>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n </button>\n `;\n }\n\n body = `\n <div class=\"toast-body\">\n\n <span>${content}</span>\n ${bodyCloseBtn}\n\n </div>\n `;\n\n return `\n <div class=\"toast toast-${toast.size} toast-${toast.theme}\" role=\"alert\" id=\"${toast.uuid}\">\n\n <div class=\"toast-inner\">\n\n ${header}\n ${body}\n\n </div>\n\n </div>\n `;\n }\n}\n\nToast._jQueryInit();\n\nexport default Toast;","import Component from './component';\nimport { escapeHtml, generateUUID, playAnimation } from './utils';\n\nclass Dialog extends Component {\n\n static NAME = 'coolDialog';\n\n static DEFAULTS = {\n title: '',\n template: '',\n body: '',\n footer: true,\n header: true,\n size: '',\n classes: '',\n centered: true,\n backdrop: true,\n preventScroll: true,\n closeBtn: true,\n animation: true,\n animationIn: 'zoomIn',\n animationOut: 'fadeOut',\n animationSpeed: 'fastest',\n maxBodyHeight: null,\n overflowVisible: false,\n onInitialize: null,\n onDestroy: null,\n onInit: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n callbacks: {},\n actions: {}\n };\n\n static _jQueryInterface(config) {\n const $el = $(this);\n let instance = $el.data(`plugin_${Dialog.NAME}`);\n\n if (!instance) {\n instance = new Dialog(this, typeof config === 'object' && config);\n $el.data(`plugin_${Dialog.NAME}`, instance);\n }\n \n if (typeof config === 'string') instance[config]();\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Dialog.NAME];\n $.fn[Dialog.NAME] = Dialog._jQueryInterface;\n $.fn[Dialog.NAME].Constructor = Dialog;\n $.fn[Dialog.NAME].defaults = Dialog.DEFAULTS || {};\n $.fn[Dialog.NAME].noConflict = () => {\n $.fn[Dialog.NAME] = previousName;\n return Dialog._jQueryInterface;\n };\n }\n\n constructor(container, opts) {\n super(); \n \n this.settings = {};\n\n if (window.Cool.settings.dialog) {\n $.extend(true, this.settings, $.fn[this.constructor.NAME].defaults, window.Cool.settings.dialog, opts);\n } else {\n $.extend(true, this.settings, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.container = container;\n this.$container = $(this.container);\n this.dialogs = [];\n this.onInitialize = this.settings.onInitialize;\n this.onDestroy = this.settings.onDestroy;\n\n this.$container.data(`plugin_${this.constructor.NAME}`, this);\n }\n\n init(opts) {\n let settings = {};\n\n $.extend(true, settings, this.settings, opts);\n\n if (opts && opts.actions) settings.actions = opts.actions || {};\n if (opts && opts.callbacks) settings.callbacks = opts.callbacks || {};\n\n if (settings.callbacks && typeof settings.callbacks === 'object') {\n Object.keys(settings.callbacks).forEach(key => { \n if (!settings.actions.hasOwnProperty(key)) {\n if (this.settings.actions && this.settings.actions[key]) {\n settings.actions[key] = $.extend(true, {}, this.settings.actions[key]);\n } else {\n settings.actions[key] = {};\n }\n } else {\n if (typeof settings.actions[key] === 'object' && !settings.actions[key].hasOwnProperty('content')) {\n if (this.settings.actions &&\n this.settings.actions[key] &&\n typeof this.settings.actions[key] === 'object' &&\n this.settings.actions[key].hasOwnProperty('content')) {\n settings.actions[key].content = this.settings.actions[key].content;\n }\n }\n }\n });\n }\n\n const dialog = this.buildDialog(settings);\n\n this.show(dialog);\n this.bindEvents(dialog);\n this.onInit(dialog);\n\n return dialog;\n }\n \n destroy() {\n this.$container.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n buildDialog(settings) {\n const self = this;\n const dialog = {\n uuid: 'dialog-' + generateUUID(),\n title: settings.title,\n template: settings.template,\n body: settings.body,\n footer: settings.footer,\n header: settings.header,\n size: settings.size,\n classes: settings.classes,\n centered: settings.centered,\n backdrop: settings.backdrop,\n preventScroll: settings.preventScroll,\n closeBtn: settings.closeBtn,\n animation: settings.animation,\n animationIn: settings.animationIn,\n animationOut: settings.animationOut,\n animationSpeed: settings.animationSpeed,\n callbacks: settings.callbacks,\n maxBodyHeight: settings.maxBodyHeight,\n overflowVisible: settings.overflowVisible,\n actions: settings.actions,\n actionInProgress: false,\n actionThreshold: 300,\n onInit: settings.onInit,\n onShow: settings.onShow,\n onClose: settings.onClose,\n };\n\n if (dialog.maxBodyHeight == null && dialog.size !== 'full') {\n dialog.maxBodyHeight = window.innerHeight - 200;\n }\n\n if (typeof dialog.template === 'function') {\n dialog.$el = $(dialog.template());\n } else {\n dialog.$el = $(this._renderTemplate(dialog));\n }\n\n dialog.show = function () {\n self.show(dialog);\n };\n\n dialog.close = function () {\n self.close(dialog);\n };\n\n this.dialogs.push(dialog);\n\n return dialog;\n }\n\n bindEvents(dialog) {\n const self = this;\n\n dialog.$el.on(\n 'click',\n '[data-dialog-action], [data-dialog-confirm], [data-dialog-close], [data-dialog-remove]',\n function (e) {\n e.preventDefault();\n\n if (dialog.actionInProgress) {\n e.stopPropagation();\n return;\n }\n\n dialog.actionInProgress = true;\n\n const commonActions = ['confirm', 'close', 'remove'];\n let actionKey = $(this).data('dialogAction');\n\n if (!actionKey) {\n for (const commonAction of commonActions) {\n if ($(this).is(`[data-dialog-${commonAction}]`)) {\n actionKey = commonAction;\n break;\n }\n }\n }\n\n const action = dialog.actions[actionKey] || {};\n dialog.$el.trigger(`dialog.${actionKey}`);\n\n const callback =\n typeof action.callback === 'function'\n ? action.callback\n : typeof dialog.callbacks[actionKey] === 'function'\n ? dialog.callbacks[actionKey]\n : null;\n\n const resetActionFlag = (immediately = false) => {\n if (immediately) {\n dialog.actionInProgress = false;\n } else {\n setTimeout(() => {\n dialog.actionInProgress = false;\n }, dialog.actionThreshold);\n }\n };\n\n if (typeof callback === 'function') {\n try {\n const result = callback.call(self, function () {\n if (commonActions.includes(actionKey)) self.close(dialog);\n resetActionFlag();\n }, dialog);\n\n if (result && typeof result.then === 'function') {\n result.then((promiseResult) => {\n // Check if the promise result is false\n if (promiseResult === false) {\n resetActionFlag();\n }\n })\n .catch((error) => {\n console.error('Dialog action error:', error);\n resetActionFlag();\n });\n } else if (result === false) {\n resetActionFlag();\n } else {\n // Reset flag for any other return value (including undefined)\n // This handles cases where callback returns nothing (form validation fails)\n resetActionFlag();\n }\n } catch (error) {\n console.error('Dialog action error:', error);\n resetActionFlag();\n }\n } else if (commonActions.includes(actionKey)) {\n self.close(dialog);\n resetActionFlag();\n } else {\n resetActionFlag();\n }\n }\n );\n\n if (dialog.maxBodyHeight !== null && dialog.size !== 'full') {\n const updateMaxBodyHeight = () => {\n dialog.maxBodyHeight = window.innerHeight - 200;\n return dialog.maxBodyHeight;\n };\n\n if (window.ResizeObserver) {\n dialog.resizeObserver = new ResizeObserver(entries => {\n if (dialog.rafId) {\n cancelAnimationFrame(dialog.rafId);\n }\n \n dialog.rafId = requestAnimationFrame(() => {\n const newHeight = updateMaxBodyHeight();\n dialog.$el.find('.dialog-body').css('--cool-dialog-body-height', newHeight + 'px');\n });\n });\n \n dialog.resizeObserver.observe(document.body);\n \n } else {\n let resizeTimeout;\n let lastOrientation = window.orientation;\n \n dialog.resizeHandler = () => {\n clearTimeout(resizeTimeout);\n \n const now = performance.now();\n const orientationChanged = window.orientation !== lastOrientation;\n \n if (orientationChanged) {\n lastOrientation = window.orientation;\n }\n\n if (!dialog.lastResizeTime || now - dialog.lastResizeTime > 100 || orientationChanged) {\n const newHeight = updateMaxBodyHeight();\n dialog.$el.find('.dialog-body').css('--cool-dialog-body-height', newHeight + 'px');\n dialog.lastResizeTime = now;\n } else {\n resizeTimeout = setTimeout(() => {\n const newHeight = updateMaxBodyHeight();\n dialog.$el.find('.dialog-body').css('--cool-dialog-body-height', newHeight + 'px');\n }, 16);\n }\n };\n \n window.addEventListener('resize', dialog.resizeHandler, { passive: true });\n window.addEventListener('orientationchange', dialog.resizeHandler, { passive: true });\n }\n }\n }\n\n show(dialog) {\n if (!this.$container.hasClass('has-dialogs')) {\n this.$container.addClass('has-dialogs');\n }\n\n if (dialog.preventScroll && !this.$container.hasClass('dialog-prevent-scroll')) {\n this.$container.addClass('dialog-prevent-scroll');\n }\n\n if (this.dialogs.length > 1) {\n let $prevDialog = $(this.dialogs).eq(-2)[0].$el;\n let zIndex = parseInt($prevDialog.css('z-index'), 10) + 1;\n\n dialog.$el.css('z-index', zIndex);\n\n $prevDialog.css({\n transition: 'opacity 0.3s',\n opacity: 0,\n visibility: 'visible',\n });\n }\n\n if (dialog.backdrop && $('.dialog-backdrop').length < 1) {\n this.$container.append('<div class=\"dialog-backdrop\"></div>');\n\n let checkForBackdrop = setInterval(() => {\n if (this.dialogs.length == 0 && $('.dialog-backdrop').length) {\n $('.dialog-backdrop').remove();\n clearInterval(checkForBackdrop);\n }\n }, 100);\n }\n\n this.$container.append(dialog.$el);\n\n if (dialog.animation) {\n const $dialogContentEl = dialog.$el.find('.dialog-content');\n playAnimation($dialogContentEl, dialog.animationIn);\n }\n\n this.onShow(dialog);\n }\n\n close(dialog) {\n let $prevDialog = null;\n\n if (dialog.resizeObserver) {\n dialog.resizeObserver.disconnect();\n dialog.resizeObserver = null;\n }\n \n if (dialog.rafId) {\n cancelAnimationFrame(dialog.rafId);\n dialog.rafId = null;\n }\n \n if (dialog.resizeHandler) {\n window.removeEventListener('resize', dialog.resizeHandler);\n window.removeEventListener('orientationchange', dialog.resizeHandler);\n dialog.resizeHandler = null;\n }\n\n if (this.dialogs.length > 1) {\n $prevDialog = $(this.dialogs).eq(-2)[0].$el;\n }\n\n if ($('.dialog[data-dialog-backdrop=\"true\"]').length === 0 && $('.dialog-backdrop').length) {\n $('.dialog-backdrop').remove();\n }\n\n if (dialog.animation) {\n playAnimation(dialog.$el.find('.dialog-content'), dialog.animationOut).then(() => {\n dialog.$el.remove();\n\n this.dialogs = $.grep(this.dialogs, function (item) {\n return item.uuid != dialog.uuid;\n });\n\n if (this.dialogs.length == 0) {\n this.$container.removeClass('has-dialogs');\n\n if (this.$container.hasClass('dialog-prevent-scroll')) {\n this.$container.removeClass('dialog-prevent-scroll');\n }\n } else {\n if ($prevDialog) {\n $prevDialog.css('opacity', 1);\n }\n }\n });\n } else {\n dialog.$el.remove();\n\n this.dialogs = $.grep(this.dialogs, function (item) {\n return item.uuid != dialog.uuid;\n });\n\n if (this.dialogs.length == 0) {\n this.$container.removeClass('has-dialogs');\n\n if (this.$container.hasClass('dialog-prevent-scroll')) {\n this.$container.removeClass('dialog-prevent-scroll');\n }\n } else {\n if ($prevDialog) {\n $prevDialog.css('opacity', 1);\n }\n }\n }\n\n this.onClose(dialog);\n }\n\n onInitialize() {\n let onInitialize = this.onInitialize;\n\n if (typeof onInitialize === 'function') {\n onInitialize.call(this.container);\n }\n }\n\n onDestroy() {\n let onDestroy = this.onDestroy;\n\n if (typeof onDestroy === 'function') {\n onDestroy.call(this.container);\n }\n }\n\n onInit(dialog) {\n let onInit = dialog.onInit;\n\n if (typeof onInit === 'function') {\n onInit.call(dialog);\n }\n }\n\n onShow(dialog) {\n let onShow = dialog.onShow;\n\n if (typeof onShow === 'function') {\n onShow.call(dialog);\n }\n }\n\n onClose(dialog) {\n let onClose = dialog.onClose;\n\n if (typeof onClose === 'function') {\n onClose.call(dialog);\n }\n }\n\n _renderFooter(dialog) {\n if (typeof dialog.footer === 'function') {\n\n return dialog.footer();\n\n } else if (dialog.footer !== '' && dialog.footer !== false && dialog.footer !== true) {\n\n return dialog.footer;\n\n } else if (dialog.footer === true) {\n\n if (!dialog.actions || typeof dialog.actions !== 'object') return '';\n\n const actionsArr = Object.entries(dialog.actions)\n .filter(([key, action]) => {\n if (action === false) return false;\n if (typeof action.visible !== 'undefined') return !!action.visible;\n return true;\n })\n .map(([key, action], idx) => ({ key, action, idx }));\n\n actionsArr.sort((a, b) => {\n const hasOnlyCloseAndRemove = actionsArr.length === 2 && \n actionsArr.some(item => item.key === 'close') && \n actionsArr.some(item => item.key === 'remove');\n \n if (hasOnlyCloseAndRemove) {\n if (a.key === 'close') return -1;\n if (b.key === 'close') return 1;\n if (a.key === 'remove') return 1;\n if (b.key === 'remove') return -1;\n }\n\n if (a.key === 'remove') return -1;\n if (b.key === 'remove') return 1;\n if (a.key === 'confirm') return 1;\n if (b.key === 'confirm') return -1;\n \n return a.idx - b.idx;\n });\n\n const btns = actionsArr.map(({ key, action }) => {\n let btnStyle = action.style ? action.style : action.primary ? 'btn-primary' : 'btn-secondary';\n if (key === 'remove') btnStyle = 'btn-remove';\n if (key === 'confirm' && (action.primary === 'undefined' || action.primary !== false)) btnStyle = 'btn-primary';\n let btnContent = action.content || key.charAt(0).toUpperCase() + key.slice(1);\n let btnClasses = action.classes ? ' ' + action.classes : '';\n let btnAttrs = action.attrs ? ' ' + action.attrs : '';\n let isCommonAction = ['confirm', 'close', 'remove'].includes(key);\n return `\n <button type=\"button\" class=\"btn ${btnStyle}${btnClasses}\"${btnAttrs} data-dialog-action=\"${key}\"${isCommonAction ? ` data-dialog-${key}` : ''}>\n ${btnContent}\n </button>\n `;\n });\n\n let footerHtml = '';\n\n if (btns.length > 2) {\n footerHtml = `\n ${btns[0]}\n <div class=\"spacer\"></div>\n ${btns[1]}\n ${btns.slice(2).join('\\n')}\n `;\n } else {\n footerHtml = btns.join('\\n');\n }\n\n return `\n <div class=\"dialog-footer\">\n ${footerHtml}\n </div>\n `;\n }\n\n return '';\n }\n\n _renderHeader(dialog) {\n let headerContent = '';\n const closeBtnHtml = `\n <button type=\"button\" data-dialog-action=\"close\" class=\"dialog-header-close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n </button>\n `;\n\n if (typeof dialog.header === 'function') {\n headerContent = dialog.header();\n } else if (dialog.header !== '' && dialog.header !== false && dialog.header !== true) {\n headerContent = dialog.header;\n } else if (dialog.header === true) {\n headerContent = `\n <div class=\"dialog-header\">\n <span class=\"dialog-title\">\n ${escapeHtml(dialog.title)}\n </span>\n ${closeBtnHtml}\n </div>\n `;\n } else {\n headerContent = `<div class=\"dialog-header\">${closeBtnHtml}</div>`;\n }\n\n return headerContent;\n }\n\n _renderTemplate(dialog) {\n const classes = dialog.classes ? ' ' + dialog.classes : '';\n const centered = dialog.centered ? ' dialog-centered' : '';\n const size = dialog.size ? ' dialog-' + dialog.size : '';\n const overFlowVisible = dialog.overflowVisible ? ' dialog-overflow-visible' : '';\n const uuid = ' data-dialog-uuid=\"' + dialog.uuid + '\"';\n const backdrop = dialog.backdrop ? ' data-dialog-backdrop=\"true\"' : ' data-dialog-backdrop=\"false\"';\n const maxBodyHeight = dialog.maxBodyHeight ? ' style=\"--cool-dialog-body-height: ' + dialog.maxBodyHeight + 'px\"' : '';\n const body = typeof dialog.body === 'function' ? dialog.body() : dialog.body;\n const footer = this._renderFooter(dialog);\n const header = this._renderHeader(dialog);\n\n return `\n <div class=\"dialog${classes}${centered}${size}${overFlowVisible}\"${uuid}${backdrop}>\n\n <div class=\"dialog-container\">\n\n <div class=\"dialog-content\">\n\n ${header}\n\n <div class=\"dialog-body\"${maxBodyHeight}>\n\n ${body}\n\n </div>\n\n ${footer}\n\n </div>\n\n </div>\n\n </div>\n `;\n }\n}\n\nDialog._jQueryInit();\n\nexport default Dialog;","import Section from './section';\nimport Sidebar from './sidebar';\nimport Popover from './popover';\nimport Select from './select';\nimport Dropdown from './dropdown';\nimport Tooltip from './tooltip';\nimport Collapse from './collapse';\nimport SectionTabs from './section-tabs';\nimport Toast from './toast';\nimport Dialog from './dialog';\nimport { resizeManager, scrollManager } from './utils';\n\nwindow.Cool = window.Cool || {};\nwindow.Cool.settings = window.Cool.settings || {};\n\nclass Common {\n static _sidebarInstance = null;\n static _sectionInstance = null;\n\n static refresh() {\n if (this._sectionInstance && this._sectionInstance.refresh) {\n this._sectionInstance.refresh();\n }\n\n Popover.initializeElements('[data-toggle=\"popover\"]', window.Cool.settings.popover);\n Select.initializeElements('[data-toggle=\"select\"]', window.Cool.settings.select);\n Dropdown.initializeElements('[data-toggle=\"dropdown\"]', window.Cool.settings.dropdown);\n Tooltip.initializeElements('[data-toggle=\"tooltip\"]', window.Cool.settings.tooltip);\n Collapse.initializeElements('[data-toggle=\"collapse\"]', window.Cool.settings.collapse);\n SectionTabs.initializeElements('[data-toggle=\"section-tabs\"]', window.Cool.settings.sectionTabs);\n }\n\n static initialize(opts = {}) {\n window.Cool.settings = opts;\n\n if (!this._sectionInstance) {\n this._sectionInstance = new Section(opts.section);\n }\n \n Popover.initializeElements('[data-toggle=\"popover\"]', opts.popover);\n Select.initializeElements('[data-toggle=\"select\"]', opts.select);\n Dropdown.initializeElements('[data-toggle=\"dropdown\"]', opts.dropdown);\n Tooltip.initializeElements('[data-toggle=\"tooltip\"]', opts.tooltip);\n Collapse.initializeElements('[data-toggle=\"collapse\"]', opts.collapse);\n SectionTabs.initializeElements('[data-toggle=\"section-tabs\"]', opts.sectionTabs);\n \n const sidebarLeft = document.querySelector('.sidebar-left');\n\n if (sidebarLeft) {\n this._sidebarInstance = new Sidebar(sidebarLeft, opts.sidebar);\n }\n \n new Toast(document.body, opts.toast);\n new Dialog(document.body, opts.dialog);\n }\n\n static initComponent(selector) {\n if (!selector) return;\n\n const selectors = Array.isArray(selector) ? selector : [selector];\n const instances = [];\n const initQueue = [];\n\n selectors.forEach(child => {\n const container = typeof child === 'string' ? document.querySelector(child) : child;\n if (!container) return;\n\n const elements = container.querySelectorAll('[data-toggle]');\n const allElements = container.hasAttribute('data-toggle') \n ? [container, ...Array.from(elements)] \n : Array.from(elements);\n\n allElements.forEach(el => {\n initQueue.push(el);\n });\n });\n\n const visibleQueue = [];\n const hiddenQueue = [];\n\n initQueue.forEach(el => {\n const rect = el.getBoundingClientRect();\n if (rect.top < window.innerHeight && rect.bottom > 0) {\n visibleQueue.push(el);\n } else {\n hiddenQueue.push(el);\n }\n });\n\n const allQueue = [...visibleQueue, ...hiddenQueue];\n const batchSize = 10;\n let index = 0;\n\n const processBatch = () => {\n const batch = allQueue.slice(index, index + batchSize);\n \n batch.forEach(el => {\n const toggleValue = el.getAttribute('data-toggle');\n let instance = null;\n\n switch (toggleValue) {\n case 'popover':\n instance = Popover.initializeElement(el, window.Cool.settings.popover);\n break;\n case 'select':\n instance = Select.initializeElement(el, window.Cool.settings.select);\n break;\n case 'dropdown':\n instance = Dropdown.initializeElement(el, window.Cool.settings.dropdown);\n break;\n case 'tooltip':\n instance = Tooltip.initializeElement(el, window.Cool.settings.tooltip);\n break;\n case 'collapse':\n instance = Collapse.initializeElement(el, window.Cool.settings.collapse);\n break;\n case 'section-tabs':\n instance = SectionTabs.initializeElement(el, window.Cool.settings.sectionTabs);\n break;\n }\n\n if (instance) instances.push(instance);\n });\n\n index += batchSize;\n\n if (index < allQueue.length) {\n if ('requestIdleCallback' in window) {\n requestIdleCallback(processBatch, { timeout: 50 });\n } else {\n setTimeout(processBatch, 0);\n }\n }\n };\n\n if (visibleQueue.length > 0) {\n processBatch();\n } else if ('requestIdleCallback' in window) {\n requestIdleCallback(processBatch, { timeout: 100 });\n } else {\n processBatch();\n }\n\n return instances;\n }\n \n static destroy() {\n if (this._sidebarInstance) {\n this._sidebarInstance.destroy();\n this._sidebarInstance = null;\n }\n\n if (this._sectionInstance) {\n this._sectionInstance.destroy();\n this._sectionInstance = null;\n }\n }\n\n static observeResize(element, callback) {\n if (!element || typeof callback !== 'function') {\n console.warn('Cool.observeResize requires an element and a callback function');\n return;\n }\n \n return resizeManager.observe(element, callback);\n }\n\n static unobserveResize(element) {\n if (!element) {\n console.warn('Cool.unobserveResize requires an element');\n return;\n }\n \n resizeManager.unobserve(element);\n }\n\n static addScrollListener(id, callback) {\n if (!id || typeof callback !== 'function') {\n console.warn('Cool.addScrollListener requires an id and a callback function');\n return;\n }\n \n scrollManager.add(id, callback);\n }\n\n static removeScrollListener(id) {\n if (!id) {\n console.warn('Cool.removeScrollListener requires an id');\n return;\n }\n \n scrollManager.remove(id);\n }\n\n static getSidebar() {\n return this._sidebarInstance;\n }\n\n static getSection() {\n return this._sectionInstance;\n }\n}\n\nwindow.Cool.initialize = Common.initialize.bind(Common);\nwindow.Cool.initComponent = Common.initComponent.bind(Common);\nwindow.Cool.refresh = Common.refresh.bind(Common);\nwindow.Cool.destroy = Common.destroy.bind(Common);\nwindow.Cool.observeResize = Common.observeResize.bind(Common);\nwindow.Cool.unobserveResize = Common.unobserveResize.bind(Common);\nwindow.Cool.addScrollListener = Common.addScrollListener.bind(Common);\nwindow.Cool.removeScrollListener = Common.removeScrollListener.bind(Common);\nwindow.Cool.getSidebar = Common.getSidebar.bind(Common);\nwindow.Cool.getSection = Common.getSection.bind(Common);\n\nexport default Common;","import Common from './src/common';\nimport Sidebar from './src/sidebar';\nimport Popover from './src/popover.js';\nimport Select from './src/select';\nimport Dropdown from './src/dropdown';\nimport Tooltip from './src/tooltip';\nimport SectionTabs from './src/section-tabs';\nimport Collapse from './src/collapse';\nimport Toast from './src/toast';\nimport Dialog from './src/dialog';\n\nexport default {\n Common,\n Sidebar,\n Popover,\n Select,\n Dropdown,\n Tooltip,\n SectionTabs,\n Collapse,\n Toast,\n Dialog\n}"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_instanceMap","WeakMap","Component","static","initializeElement","selector","options","el","document","querySelector","key","this","NAME","existing","has","get","$","fn","data","instance","set","instances","push","initializeElements","querySelectorAll","forEach","getInstance","map","removeInstance","Object","keys","length","delete","removeData","onInit","opts","call","onUpdate","onDestroy","onShow","onClose","onReset","ResizeManager","constructor","callbacks","observer","rafId","windowCallbacks","Set","isWindowListening","observe","element","callback","ResizeObserver","entries","cancelAnimationFrame","requestAnimationFrame","entry","target","add","startWindowListening","unobserve","size","stopWindowListening","window","addEventListener","handleWindowResize","passive","removeEventListener","contentRect","width","innerWidth","height","innerHeight","disconnect","clear","ScrollManager","Map","isListening","id","startListening","remove","stopListening","contentElement","scrollElement","handleScroll","resizeManager","scrollManager","debounce","func","wait","immediate","timeout","context","args","arguments","clearTimeout","setTimeout","apply","touchEvents","result","navigator","maxTouchPoints","generateUUID","replace","c","r","Math","random","toString","escapeHtml","html","text","createTextNode","p","createElement","appendChild","innerHTML","playAnimation","animationClass","domEl","jquery","Promise","resolve","classes","classList","onEnd","event","stopPropagation","once","escapeChar","chr","escape","string","String","test","deepMerge","sources","source","srcVal","tgtVal","Array","isArray","Section","observeSections","initFormControls","initTableHandlers","initButtonGroups","initTabs","super","DEFAULTS","Cool","settings","section","_eventHandlers","_updateTimeout","_rafId","init","initializeSectionObserver","initializeFormControls","initializeTableHandlers","initializeButtonGroups","initializeTabs","destroy","destroySectionObserver","unbindEvents","_addEventListener","handler","_isUpdating","sectionObserver","MutationObserver","mutations","every","mutation","type","attributeName","oldClasses","oldValue","split","newClasses","from","filter","includes","updateLastVisibleElements","body","attributes","childList","subtree","attributeFilter","attributeOldValue","subtreeFilter","node","contains","nodeName","updates","sections","tables","rows","visibleChildren","getVisibleChildren","lastVisible","table","tbody","visibleRows","getVisibleElements","lastVisibleRow","row","visibleCells","lastVisibleCell","parent","children","isElementVisible","elements","_computedStyle","_styleInvalidated","getComputedStyle","offsetParent","offsetHeight","display","e","formControl","closest","disabled","readOnly","inputGroup","updateFormLabelGroup","formLabelGroup","input","hasValue","value","toggle","matches","blur","tableLink","container","href","dataset","ctrlKey","metaKey","open","location","tableBtn","btn","click","btnGroupToggle","dispatchEvent","Event","bubbles","btnGroup","parentElement","b","checked","tabItem","item","refresh","val","PerfectScrollbar","require","default","Sidebar","floating","breakpoint","wheelSpeed","wheelPropagation","minScrollbarLength","suppressScrollX","_jQueryInterface","config","$el","_jQueryInit","previousName","Constructor","defaults","noConflict","sidebar","buildCache","bindEvents","initializeScrollbars","destroyScrollbars","content","toggler","isFloating","isOpen","tabs","tabSelectors","_toggleHandler","handleToggle","_mousedownHandler","sidebarContent","mousedownScrollbar","_mouseupHandler","_tabSelectHandler","switchTab","_collapseClickHandler","collapseToggle","matchMedia","linkElement","nextElementSibling","focus","scrollbar","update","resizeObserver","_entries","removeBackdrop","resizeTimeout","_resizeHandler","now","performance","lastResizeTime","style","overflowY","tabScrollbars","tab","scrollContainer","ps","toggleWithTransition","action","documentElement","createBackdrop","backdrop","className","ariaExpanded","siteMainEl","isCurrentlyOpen","tabId","activeTab","getElementById","sidebarTabs","tabContent","transform","isBeforeActive","indexOf","activeTabContent","close","Popover","containerAutoDetect","trigger","placement","align","offset","collisionDetection","title","each","popover","popoverEl","setPosition","containerEl","undefined","containerautodetect","collisiondetection","_clickHandler","show","_mouseenterHandler","hoverTimeout","_mouseleaveHandler","popupHasFocus","_focusinHandler","_focusoutHandler","_resizeCallback","buildPopover","setAttribute","viewportWidth","viewportHeight","popoverWidth","offsetWidth","popoverHeight","triggerWidth","triggerHeight","triggerPosX","triggerPosY","containerRect","getBoundingClientRect","containerOffset","left","scrollX","top","scrollY","triggerRect","triggerOffset","popoverPosX","popoverPosY","offsetX","offsetY","offsets","parseInt","computedStyle","spacing","getPropertyValue","calculatePosition","currentPlacement","currentAlign","x","y","finalPlacement","finalAlign","position","margin","checkCollision","pos","collision","bottom","right","popoverScreenLeft","popoverScreenTop","popoverScreenRight","popoverScreenBottom","newCollision","finalCollision","assign","round","willChange","removeAttribute","_itemDataMap","_outerHeight","marginTop","marginBottom","Select","name","labelTemplate","confirmCheck","confirmUncheck","setData","scrollContentHeight","useNativeScroll","contentWidth","faPro","items","showSearch","showFooter","searchApi","onSearch","onSelect","buildScroll","searchPlaceholder","btnCloseText","dynamicTitle","dynamicTitleDefault","dynamicTitleEmptyDefault","allowNoneOnRadioSelect","preventUncheck","showValidStateIcon","itemsToExclude","primaryKeyword","scrollEl","useChips","select","cachedTitle","lastSearchQuery","_scrollCallback","updatePromise","_performInitialSearch","then","reset","selectEl","selectItems","selectIconContainerEl","selectIconDefault","selectHeaderEl","selectTitleEl","textContent","trim","searchData","searchInputEl","searchString","search","searchIconContainerEl","scroll","scrollcontentheight","usenativescroll","contentwidth","JSON","parse","searchapi","searchRequest","contentOpen","preventuncheck","dynamictitle","dynamictitledefault","dynamictitleemptydefault","allowneonradioselect","showvalidstateicon","itemstoexclude","primarykeyword","usechips","preventClose","setdata","arr","_renderChips","showsearch","showfooter","selectItemEls","itemElements","_renderItemList","temp","_renderSearch","_renderFooter","firstElementChild","scrollableEl","values","checkedInput","labelEl","scrollableContentEl","searchContainerEl","clearSearchButtonEl","tabIndex","footerContainerEl","closeButtonEl","buildSearchData","_updateScrollbarVisibility","scrollHeight","clientHeight","suppressScrollY","isSearchApiEnabled","_showSpinner","fetch","response","json","dataItem","matchingItem","find","label","chip","resultElements","valueId","_hideSpinner","_recalculateContentHeight","catch","_error","totalMargin","actualContentHeight","finalHeight","min","maxHeight","scrollYMarginOffset","i","_headerClickHandler","_checkboxChangeHandler","closeTimeout","cb","n","_radioChangeHandler","_radioClickHandler","thumb","_thumbMousedownHandler","_documentMouseupHandler","_searchKeydownHandler","_searchFocusinHandler","_searchFocusoutHandler","_clearSearchHandler","_footerCloseHandler","_documentClickHandler","selectContent","getData","faNameSpace","searchUrl","itemCount","currentCount","encodeURIComponent","itemIds","useObjects","findIndex","inputs","inp","inputValues","targetInput","_searchAbortController","abort","_searchDebounceTimer","AbortController","signal","error","searchStringLower","toLowerCase","results","headerHeight","contentHeight","scrollTop","searchHeight","footerHeight","scrollableHeight","scrollableClientHeight","max","shouldOpenUpwards","selectTop","constrainedHeight","contentMarginBottom","contentMarginTop","spaceBelow","spaceAbove","containerTop","scrollableMaxHeight","otherSelects","zindex","zIndex","contentRequiredWidth","containerWidth","minWidth","scrollIntoView","behavior","block","inline","itemEl","getItem","getSelectedItems","segment","ids","obj","getSelectedItem","checkedItems","isChecked","_getItemTemplate","index","selectItem","checkedInputs","Dropdown","animation","animationIn","animationOut","animationSpeed","closeOnItemClick","positionObserver","onItemClick","dropdown","setupResizeHandling","resizeHandler","setupScrollHandling","dropdownEl","scrollParent","scrollableParents","overflow","setupVisibilityDetection","IntersectionObserver","intersectionObserver","isIntersecting","threshold","rootMargin","hasDarkMode","reject","animationin","animationout","animationspeed","minwidth","hasAttribute","getAttribute","closeonitemclick","preventclose","existingMenu","cloneNode","nestedContainer","nestedTrigger","nestedMenu","parentZIndex","dropdownItems","menuRight","insertAdjacentElement","_triggerClickHandler","_dropdownItemHandler","_itemHandlers","isClickInThisDropdown","isNestedDropdownTrigger","needsMeasure","visibility","dropdownTriggerPosX","dropdownTriggerPosY","dropdownWidth","dropdownHeight","dropdownTriggerWidth","dropdownTriggerHeight","parentRect","scrollLeft","dropdownPosX","dropdownPosY","dropdownLeft","dropdownTop","dropdownRight","dropdownBottom","dropdownScreenLeft","dropdownScreenTop","containerParent","relativeX","relativeY","animationDuration","duration","parseFloat","Tooltip","tooltip","tooltipEl","placementChanged","_blurHandler","buildTooltip","arrowEl","containerInnerWidth","clientWidth","containerInnerHeight","tooltipWidth","tooltipHeight","tooltipTriggerWidth","tooltipTriggerHeight","tooltipTriggerPosX","tooltipTriggerPosY","arrowWidth","arrowHeight","arrowPos","tooltipPosX","tooltipPosY","tooltipOverflowCount","tooltipPosition","offsetLeft","offsetTop","tooltipOverflow","fixTooltipPosition","overflowAmount","abs","Collapse","collapse","targetSelector","expanded","indicatorSelector","indicator","preventDefault","SectionTabs","sectionTabs","_tabsCache","_resizeObserver","_isProcessing","dropdownContainer","checkForChanges","dropdownList","observeTarget","moveToList","uuid","moveToDropdown","crypto","randomUUID","clone","itemActionEl","getTabDimensions","wasInvisible","originalOverflow","totalWidth","marginLeft","marginRight","dimensions","availableSpace","sectionHeader","paddingLeft","paddingRight","headerStyles","flexDirection","containerStyles","sectionSearch","gap","accumulatedWidth","visibleTabs","overflowTabs","widthWithGap","relatedDropdownId","dropdownItem","_index","remainingSpace","originalTab","hasDropdownItems","Toast","icon","template","dismiss","header","maxVisible","onInitialize","onClick","toast","containers","_getContainer","setProperty","_pauseTimers","_resumeTimers","toasts","queue","_cleanupContainer","_updateStack","Date","_dismissTimer","_dismissRemaining","_dismissEnd","_startDismissTimer","ms","_buildToast","_containerEntry","_showToast","toastsCopy","_removeToast","isTop","startsWith","maxBodyHeight","_renderTemplate","innerEl","closeBtn","_closeHandler","uri","processQueue","parentNode","t","nextToast","shift","bodyCloseBtn","iconHtml","trimStart","actionAttr","Dialog","footer","centered","preventScroll","overflowVisible","actions","dialog","dialogs","prototype","hasOwnProperty","buildDialog","self","actionInProgress","actionThreshold","_actionHandler","commonActions","actionKey","dialogAction","commonAction","CustomEvent","resetActionFlag","immediately","promiseResult","updateMaxBodyHeight","newHeight","bodyEl","lastOrientation","orientation","orientationChanged","prevDialogEl","transition","opacity","checkForBackdrop","setInterval","existingBackdrop","clearInterval","dialogContentEl","backdropDialogs","afterRemove","actionsArr","visible","idx","sort","a","some","btns","btnStyle","primary","btnContent","charAt","toUpperCase","slice","attrs","footerHtml","join","_renderHeader","headerContent","closeBtnHtml","overFlowVisible","ThemeSwitcher","theme","storageKey","themeSwitcher","stored","_getStoredTheme","_applyTheme","dataTheme","_mediaQuery","setTheme","_mediaChangeHandler","_currentTheme","_dispatchEvent","getTheme","getResolvedTheme","current","order","nextIndex","_storeTheme","detail","resolvedTheme","localStorage","setItem","Common","_sectionInstance","initialize","sidebarLeft","_sidebarInstance","_toastInstance","initComponent","selectors","initQueue","child","visibleQueue","hiddenQueue","rect","allQueue","processBatch","requestIdleCallback","observeResize","unobserveResize","addScrollListener","removeScrollListener","getSidebar","getSection","getToast","initjQuery","bind","index_esm"],"sources":["../../js/src/component.js","../../js/src/utils.js","../../js/src/section.js","../../js/src/sidebar.js","../../js/src/popover.js","../../js/src/select.js","../../js/src/dropdown.js","../../js/src/tooltip.js","../../js/src/collapse.js","../../js/src/section-tabs.js","../../js/src/toast.js","../../js/src/dialog.js","../../js/src/theme-switcher.js","../../js/src/common.js","../../js/index.esm.js"],"sourcesContent":["const _instanceMap = new WeakMap();\n\nexport function getInstanceMap() {\n return _instanceMap;\n}\n\nexport default class Component {\n\n static instances = [];\n\n static initializeElement(selector, options = {}) {\n const el = typeof selector === 'string' ? document.querySelector(selector) : selector;\n if (!el) return false;\n\n const key = `plugin_${this.NAME}`;\n let existing = _instanceMap.has(el) && _instanceMap.get(el)[key];\n\n if (!existing && typeof $ !== 'undefined' && $.fn) {\n existing = $(el).data(key);\n }\n\n if (!existing) {\n const instance = new this(el, options);\n\n if (!_instanceMap.has(el)) {\n _instanceMap.set(el, {});\n }\n\n _instanceMap.get(el)[key] = instance;\n\n if (typeof $ !== 'undefined' && $.fn) {\n $(el).data(key, instance);\n }\n\n this.instances.push(instance);\n return instance;\n }\n\n return false;\n }\n\n static initializeElements(selector, options = {}) {\n document.querySelectorAll(selector).forEach(el => {\n this.initializeElement(el, options);\n });\n\n return this.instances;\n }\n\n static getInstance(el) {\n const key = `plugin_${this.NAME}`;\n const map = _instanceMap.get(el);\n\n if (map && map[key]) {\n return map[key];\n }\n\n if (typeof $ !== 'undefined' && $.fn && $(el).data(key)) {\n const instance = $(el).data(key);\n\n if (!_instanceMap.has(el)) {\n _instanceMap.set(el, {});\n }\n\n _instanceMap.get(el)[key] = instance;\n\n return instance;\n }\n\n return null;\n }\n\n static removeInstance(el) {\n const key = `plugin_${this.NAME}`;\n const map = _instanceMap.get(el);\n\n if (map) {\n delete map[key];\n\n if (Object.keys(map).length === 0) {\n _instanceMap.delete(el);\n }\n }\n\n if (typeof $ !== 'undefined' && $.fn) {\n $(el).removeData(key);\n }\n }\n\n onInit() {\n let onInit = this.opts.onInit;\n if (typeof onInit === 'function') {\n onInit.call(this);\n }\n }\n\n onUpdate() {\n let onUpdate = this.opts.onUpdate;\n if (typeof onUpdate === 'function') {\n onUpdate.call(this);\n }\n }\n\n onDestroy() {\n let onDestroy = this.opts.onDestroy;\n if (typeof onDestroy === 'function') {\n onDestroy.call(this);\n }\n }\n\n onShow() {\n let onShow = this.opts.onShow;\n\n if (typeof onShow === 'function') {\n onShow.call(this);\n }\n }\n\n onClose() {\n let onClose = this.opts.onClose;\n if (typeof onClose === 'function') {\n onClose.call(this);\n }\n }\n\n onReset() {\n let onReset = this.opts.onReset;\n if (typeof onReset === 'function') {\n onReset.call(this);\n }\n }\n}","class ResizeManager {\n constructor() {\n this.callbacks = new WeakMap();\n this.observer = null;\n this.rafId = null;\n this.windowCallbacks = new Set();\n this.isWindowListening = false;\n }\n\n observe(element, callback) {\n if (!this.observer) {\n this.observer = new ResizeObserver((entries) => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n\n this.rafId = requestAnimationFrame(() => {\n entries.forEach((entry) => {\n const callback = this.callbacks.get(entry.target);\n if (callback) {\n callback(entry);\n }\n });\n });\n });\n }\n\n this.callbacks.set(element, callback);\n this.observer.observe(element);\n\n this.windowCallbacks.add(callback);\n\n if (!this.isWindowListening) {\n this.startWindowListening();\n }\n }\n\n unobserve(element) {\n if (this.observer) {\n this.observer.unobserve(element);\n const callback = this.callbacks.get(element);\n if (callback) {\n this.windowCallbacks.delete(callback);\n }\n this.callbacks.delete(element);\n\n if (this.windowCallbacks.size === 0) {\n this.stopWindowListening();\n }\n }\n }\n\n startWindowListening() {\n this.isWindowListening = true;\n window.addEventListener('resize', this.handleWindowResize, { passive: true });\n }\n\n stopWindowListening() {\n this.isWindowListening = false;\n window.removeEventListener('resize', this.handleWindowResize);\n }\n\n handleWindowResize = () => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n\n this.rafId = requestAnimationFrame(() => {\n this.windowCallbacks.forEach((callback) => {\n callback({ target: window, contentRect: { width: window.innerWidth, height: window.innerHeight } });\n });\n });\n };\n\n disconnect() {\n if (this.observer) {\n this.observer.disconnect();\n this.callbacks = new WeakMap();\n }\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.windowCallbacks.clear();\n this.stopWindowListening();\n }\n}\n\nclass ScrollManager {\n constructor() {\n this.callbacks = new Map();\n this.rafId = null;\n this.isListening = false;\n }\n\n add(id, callback) {\n this.callbacks.set(id, callback);\n\n if (!this.isListening) {\n this.startListening();\n }\n }\n\n remove(id) {\n this.callbacks.delete(id);\n\n if (this.callbacks.size === 0) {\n this.stopListening();\n }\n }\n\n startListening() {\n this.isListening = true;\n\n const contentElement = document.querySelector('.site-main .content');\n\n if (contentElement) {\n this.scrollElement = contentElement;\n this.scrollElement.addEventListener('scroll', this.handleScroll, { passive: true });\n } else {\n this.scrollElement = window;\n window.addEventListener('scroll', this.handleScroll, { passive: true });\n }\n }\n\n stopListening() {\n this.isListening = false;\n\n if (this.scrollElement) {\n this.scrollElement.removeEventListener('scroll', this.handleScroll);\n this.scrollElement = null;\n }\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n\n handleScroll = () => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n\n this.rafId = requestAnimationFrame(() => {\n this.callbacks.forEach((callback) => callback());\n });\n };\n}\n\nconst resizeManager = new ResizeManager();\nconst scrollManager = new ScrollManager();\n\nconst debounce = function (func, wait, immediate) {\n let timeout;\n\n return function () {\n let context = this;\n let args = arguments;\n let later = function () {\n timeout = null;\n\n if (!immediate) {\n func.apply(context, args);\n }\n };\n\n let callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n};\n\nconst touchEvents = function () {\n let result = false;\n\n if ('ontouchstart' in window || navigator.maxTouchPoints > 0) {\n result = true;\n }\n\n return result;\n};\n\nconst generateUUID = function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n let r = (Math.random() * 16) | 0;\n let v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nconst shallowProperty = function (key) {\n return function (obj) {\n return obj == null ? void 0 : obj[key];\n };\n};\n\nconst isArrayLike = function (obj) {\n let length = shallowProperty('length')(obj);\n\n return typeof length == 'number' && length >= 0 && length <= Math.pow(2, 53) - 1;\n};\n\nconst optimizeCb = function (func, context, argCount) {\n if (context === void 0) {\n return func;\n }\n\n switch (argCount == null ? 3 : argCount) {\n case 1:\n return function (value) {\n return func.call(context, value);\n };\n\n case 3:\n return function (value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4:\n return function (accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n\n return function () {\n return func.apply(context, arguments);\n };\n};\n\nconst escapeHtml = function (html) {\n const text = document.createTextNode(html);\n const p = document.createElement('p');\n p.appendChild(text);\n return p.innerHTML;\n};\n\nconst each = function (obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n\n let i;\n let length;\n\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n let keys = Object.keys(obj);\n\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n\n return obj;\n};\n\nconst whichTransitionEvent = function () {\n let el = document.createElement('text-transition');\n let transEndEventNames = {\n WebkitTransition: 'webkitTransitionEnd', // Saf 6, Android Browser\n MozTransition: 'transitionend', // only for FF < 15\n transition: 'transitionend', // IE10, Opera, Chrome, FF 15+, Saf 7+\n };\n\n for (let t in transEndEventNames) {\n if (el.style[t] !== undefined) {\n return transEndEventNames[t];\n }\n }\n};\n\nconst playAnimation = function (el, animationClass) {\n const domEl = el && el.jquery ? el[0] : el;\n if (!domEl) return Promise.resolve();\n\n return new Promise((resolve) => {\n const classes = ['animation', animationClass];\n domEl.classList.add(...classes);\n\n function onEnd(event) {\n event.stopPropagation();\n domEl.classList.remove(...classes);\n domEl.removeEventListener('animationend', onEnd);\n resolve();\n }\n\n domEl.addEventListener('animationend', onEnd, { once: true });\n });\n};\n\nconst escapeChar = (chr) => {\n const chars = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''', //eslint-disable-line\n '`': '`',\n '=': '=',\n };\n return chars[chr];\n};\n\nconst escape = (string) => {\n const invalidChars = /[&<>\"'`=]/g;\n const validChars = /[&<>\"'`=]/;\n if (typeof string !== 'string') {\n if (string === null) {\n return '';\n } else if (!string) {\n return String(string);\n }\n string = String(string);\n }\n if (!validChars.test(string)) {\n return string;\n }\n return string.replace(invalidChars, escapeChar);\n};\n\nfunction deepMerge(target, ...sources) {\n for (const source of sources) {\n if (!source || typeof source !== 'object') continue;\n for (const key of Object.keys(source)) {\n const srcVal = source[key];\n const tgtVal = target[key];\n if (\n srcVal &&\n typeof srcVal === 'object' &&\n !Array.isArray(srcVal) &&\n tgtVal &&\n typeof tgtVal === 'object' &&\n !Array.isArray(tgtVal)\n ) {\n target[key] = deepMerge({}, tgtVal, srcVal);\n } else {\n target[key] = srcVal;\n }\n }\n }\n return target;\n}\n\nexport {\n resizeManager,\n scrollManager,\n debounce,\n touchEvents,\n generateUUID,\n each,\n escapeHtml,\n whichTransitionEvent,\n playAnimation,\n escape,\n deepMerge,\n};\n","import Component from './component';\nimport { deepMerge } from './utils';\n\nclass Section extends Component {\n static NAME = 'coolSection';\n\n static DEFAULTS = {\n observeSections: true,\n initFormControls: true,\n initTableHandlers: true,\n initButtonGroups: true,\n initTabs: true,\n onInit: null,\n onDestroy: null,\n };\n\n constructor(opts) {\n super();\n\n this.opts = deepMerge({}, Section.DEFAULTS, window.Cool?.settings?.section || {}, opts || {});\n\n this._eventHandlers = [];\n this._updateTimeout = null;\n this._rafId = null;\n\n this.init();\n }\n\n init() {\n if (this.opts.observeSections) {\n this.initializeSectionObserver();\n }\n\n if (this.opts.initFormControls) {\n this.initializeFormControls();\n }\n\n if (this.opts.initTableHandlers) {\n this.initializeTableHandlers();\n }\n\n if (this.opts.initButtonGroups) {\n this.initializeButtonGroups();\n }\n\n if (this.opts.initTabs) {\n this.initializeTabs();\n }\n\n this.onInit();\n }\n\n destroy() {\n this.destroySectionObserver();\n this.unbindEvents();\n if (this._updateTimeout) {\n clearTimeout(this._updateTimeout);\n }\n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n }\n this.onDestroy();\n }\n\n _addEventListener(element, event, handler, options) {\n element.addEventListener(event, handler, options);\n this._eventHandlers.push({ element, event, handler, options });\n }\n\n initializeSectionObserver() {\n this._isUpdating = false;\n\n this.sectionObserver = new MutationObserver((mutations) => {\n if (this._isUpdating) return;\n\n const isOwnUpdate = mutations.every((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n const target = mutation.target;\n const oldClasses = mutation.oldValue ? mutation.oldValue.split(' ') : [];\n const newClasses = Array.from(target.classList);\n const addedClasses = newClasses.filter((c) => !oldClasses.includes(c));\n const removedClasses = oldClasses.filter((c) => !newClasses.includes(c));\n const changedClasses = [...addedClasses, ...removedClasses];\n\n return changedClasses.every(\n (c) => c === 'is-last-visible' || c === 'is-last-visible-row' || c === 'is-last-visible-cell'\n );\n }\n return false;\n });\n\n if (isOwnUpdate) return;\n\n if (this._updateTimeout) {\n clearTimeout(this._updateTimeout);\n }\n\n this._updateTimeout = setTimeout(() => {\n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n }\n\n this._rafId = requestAnimationFrame(() => {\n this.updateLastVisibleElements();\n });\n }, 50);\n });\n\n this.sectionObserver.observe(document.body, {\n attributes: true,\n childList: true,\n subtree: true,\n attributeFilter: ['class', 'style', 'hidden'],\n attributeOldValue: true,\n subtreeFilter: (node) => {\n return (\n node.classList &&\n (node.classList.contains('section') ||\n node.classList.contains('select') ||\n node.nodeName === 'TABLE' ||\n node.nodeName === 'TR' ||\n node.nodeName === 'TD' ||\n node.nodeName === 'TH')\n );\n },\n });\n\n this.updateLastVisibleElements();\n }\n\n updateLastVisibleElements() {\n this._isUpdating = true;\n\n const updates = {\n sections: [],\n tables: [],\n rows: [],\n };\n\n document.querySelectorAll('.section').forEach((section) => {\n const visibleChildren = this.getVisibleChildren(section);\n if (visibleChildren.length) {\n updates.sections.push({\n section,\n lastVisible: visibleChildren[visibleChildren.length - 1],\n });\n }\n });\n\n document.querySelectorAll('table').forEach((table) => {\n const tbody = table.querySelector('tbody') || table;\n const visibleRows = this.getVisibleElements(tbody.querySelectorAll('tr'));\n\n if (visibleRows.length) {\n updates.tables.push({\n tbody,\n lastVisibleRow: visibleRows[visibleRows.length - 1],\n });\n }\n });\n\n document.querySelectorAll('table tr').forEach((row) => {\n const visibleCells = this.getVisibleElements(row.querySelectorAll('td, th'));\n\n if (visibleCells.length) {\n updates.rows.push({\n row,\n lastVisibleCell: visibleCells[visibleCells.length - 1],\n });\n }\n });\n\n requestAnimationFrame(() => {\n document.querySelectorAll('.is-last-visible, .is-last-visible-row, .is-last-visible-cell').forEach((el) => {\n el.classList.remove('is-last-visible', 'is-last-visible-row', 'is-last-visible-cell');\n });\n\n updates.sections.forEach(({ lastVisible }) => {\n lastVisible.classList.add('is-last-visible');\n });\n\n updates.tables.forEach(({ lastVisibleRow }) => {\n lastVisibleRow.classList.add('is-last-visible-row');\n });\n\n updates.rows.forEach(({ lastVisibleCell }) => {\n lastVisibleCell.classList.add('is-last-visible-cell');\n });\n\n setTimeout(() => {\n this._isUpdating = false;\n }, 0);\n });\n }\n\n getVisibleChildren(parent) {\n return Array.from(parent.children).filter((el) => this.isElementVisible(el));\n }\n\n getVisibleElements(elements) {\n return Array.from(elements).filter((el) => this.isElementVisible(el));\n }\n\n isElementVisible(el) {\n if (!el._computedStyle || el._styleInvalidated) {\n el._computedStyle = window.getComputedStyle(el);\n el._styleInvalidated = false;\n }\n\n return (\n !el.classList.contains('d-none') &&\n !el.classList.contains('d-md-none') &&\n el.offsetParent !== null &&\n el.offsetHeight > 0 &&\n el._computedStyle.display !== 'none'\n );\n }\n\n destroySectionObserver() {\n if (this.sectionObserver) {\n this.sectionObserver.disconnect();\n this.sectionObserver = null;\n }\n if (this._updateTimeout) {\n clearTimeout(this._updateTimeout);\n this._updateTimeout = null;\n }\n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n this._rafId = null;\n }\n }\n\n initializeFormControls() {\n this._addEventListener(document, 'focusin', (e) => {\n const formControl = e.target.closest('.form-control');\n if (!formControl) return;\n\n if (!formControl.disabled && !formControl.readOnly) {\n const inputGroup = formControl.closest('.input-group');\n inputGroup?.classList.add('input-group-focus');\n }\n });\n\n this._addEventListener(document, 'focusout', (e) => {\n const formControl = e.target.closest('.form-control');\n if (!formControl) return;\n\n if (!formControl.disabled && !formControl.readOnly) {\n const inputGroup = formControl.closest('.input-group');\n inputGroup?.classList.remove('input-group-focus');\n }\n });\n\n const updateFormLabelGroup = (formLabelGroup) => {\n const input = formLabelGroup.querySelector('input, select');\n const hasValue = !!input?.value;\n formLabelGroup.classList.toggle('label-on-top', hasValue);\n };\n\n this._addEventListener(document, 'input', (e) => {\n const formLabelGroup = e.target.closest('.form-label-group');\n if (formLabelGroup) {\n updateFormLabelGroup(formLabelGroup);\n }\n });\n\n this._addEventListener(document, 'change', (e) => {\n const formLabelGroup = e.target.closest('.form-label-group');\n if (formLabelGroup) {\n updateFormLabelGroup(formLabelGroup);\n }\n\n if (e.target.matches('select')) {\n e.target.blur();\n }\n });\n\n document.querySelectorAll('.form-label-group').forEach(updateFormLabelGroup);\n }\n\n initializeTableHandlers() {\n document.querySelectorAll('.table').forEach((table) => {\n if (\n table.querySelector('[data-table-link], [data-table-btn]') &&\n !table.classList.contains('table-hover')\n ) {\n table.classList.add('table-hover');\n }\n });\n\n this._addEventListener(document, 'click', (e) => {\n if (\n e.target.closest(\n '[data-table-link] .table-link-exclude, ' +\n '[data-table-link] input, [data-table-link] button, ' +\n '[data-table-link] a, [data-table-link] label, ' +\n '[data-table-link] .td-col-select'\n )\n ) {\n e.stopPropagation();\n return;\n }\n\n const tableLink = e.target.closest('[data-table-link]');\n if (tableLink) {\n const container = tableLink.closest('table, .table');\n const href = tableLink.dataset.tableLink;\n\n if (container?.classList.contains('bulk-actions-active')) {\n return;\n }\n\n if (e.ctrlKey || e.metaKey) {\n window.open(href, '_blank');\n } else {\n window.location.href = href;\n }\n }\n\n if (\n e.target.closest(\n '[data-table-btn] .table-btn-exclude, ' +\n '[data-table-btn] input, [data-table-btn] button, ' +\n '[data-table-btn] a, [data-table-btn] label, ' +\n '[data-table-btn] .td-col-select'\n )\n ) {\n e.stopPropagation();\n return;\n }\n\n const tableBtn = e.target.closest('[data-table-btn]');\n if (tableBtn) {\n const container = tableBtn.closest('tr, .tr');\n const btn = tableBtn.querySelector('button');\n\n if (!btn || container?.classList.contains('bulk-actions-active')) {\n return;\n }\n\n btn.click();\n }\n });\n }\n\n initializeButtonGroups() {\n this._addEventListener(document, 'click', (e) => {\n const btnGroupToggle = e.target.closest('.btn-group-toggle .btn');\n if (btnGroupToggle && !e.target.matches('input')) {\n const input = btnGroupToggle.querySelector('input');\n if (input) {\n input.click();\n input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n }\n\n if (e.target.matches('.btn-group-toggle .btn > input')) {\n e.stopPropagation();\n }\n });\n\n this._addEventListener(document, 'change', (e) => {\n if (e.target.matches('.btn-group-toggle .btn > input[type=\"radio\"]')) {\n const btn = e.target.parentElement;\n const btnGroup = btn.closest('.btn-group-toggle');\n if (btnGroup) {\n btnGroup.querySelectorAll('.btn').forEach((b) => {\n b.classList.toggle('active', b.querySelector('input')?.checked);\n });\n }\n } else if (e.target.matches('.btn-group-toggle .btn > input[type=\"checkbox\"]')) {\n const btn = e.target.parentElement;\n btn.classList.toggle('active', e.target.checked);\n }\n });\n }\n\n initializeTabs() {\n this._addEventListener(document, 'click', (e) => {\n const tabItem = e.target.closest('.tabs .tab-item');\n if (tabItem) {\n e.stopPropagation();\n const tabs = tabItem.closest('.tabs');\n tabs.querySelectorAll('.tab-item').forEach((item) => item.classList.remove('active'));\n tabItem.classList.add('active');\n }\n });\n }\n\n unbindEvents() {\n this._eventHandlers.forEach(({ element, event, handler, options }) => {\n element.removeEventListener(event, handler, options);\n });\n this._eventHandlers = [];\n }\n\n refresh() {\n document.querySelectorAll('.form-label-group').forEach((formLabelGroup) => {\n const input = formLabelGroup.querySelector('input, select');\n const val = input?.value;\n formLabelGroup.classList.toggle('label-on-top', !!val);\n });\n }\n}\n\nexport default Section;\n","import Component from './component';\nimport { deepMerge } from './utils';\n\nlet PerfectScrollbar = null;\n\ntry {\n PerfectScrollbar = require('perfect-scrollbar');\n if (PerfectScrollbar && PerfectScrollbar.default) {\n PerfectScrollbar = PerfectScrollbar.default;\n }\n} catch (e) {\n // PerfectScrollbar is optional\n}\n\nif (typeof window !== 'undefined' && PerfectScrollbar && !window.PerfectScrollbar) {\n window.PerfectScrollbar = PerfectScrollbar;\n}\n\nclass Sidebar extends Component {\n static NAME = 'coolSidebar';\n\n static DEFAULTS = {\n floating: true,\n breakpoint: 1046,\n wheelSpeed: 2,\n wheelPropagation: true,\n minScrollbarLength: 20,\n suppressScrollX: true,\n onInit: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n };\n\n static _jQueryInterface(config) {\n const $el = $(this);\n let instance = $el.data(`plugin_${Sidebar.NAME}`);\n\n if (!instance) {\n instance = new Sidebar(this, typeof config === 'object' && config);\n $el.data(`plugin_${Sidebar.NAME}`, instance);\n }\n\n if (typeof config === 'string') instance[config]();\n }\n\n static _jQueryInit() {\n if (typeof $ === 'undefined' || !$.fn) return;\n const previousName = $.fn[Sidebar.NAME];\n $.fn[Sidebar.NAME] = Sidebar._jQueryInterface;\n $.fn[Sidebar.NAME].Constructor = Sidebar;\n $.fn[Sidebar.NAME].defaults = Sidebar.DEFAULTS || {};\n $.fn[Sidebar.NAME].noConflict = () => {\n $.fn[Sidebar.NAME] = previousName;\n return Sidebar._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = deepMerge({}, Sidebar.DEFAULTS, window.Cool?.settings?.sidebar || {}, opts || {});\n\n this.el = el;\n if (el && el.jquery) this.el = el[0];\n\n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n this.initializeScrollbars();\n this.initializeTabs();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n this.destroyScrollbars();\n this.onDestroy();\n }\n\n buildCache() {\n this.content = this.el.querySelector('.sidebar-content');\n this.toggler = document.querySelector('.sidebar-left-toggler');\n this.isFloating = this.el.classList.contains('sidebar-floating');\n this.isOpen = document.body.classList.contains('sidebar-left-open');\n this.tabs = Array.from(this.el.querySelectorAll('.sidebar-tab'));\n this.tabSelectors = Array.from(document.querySelectorAll('[name=\"sidebar-tab-select\"]'));\n }\n\n bindEvents() {\n this._toggleHandler = (e) => {\n const toggler = e.target.closest('.sidebar-left-toggler');\n if (toggler) {\n this.handleToggle(e, toggler);\n }\n };\n\n this._mousedownHandler = (e) => {\n if (e.target.matches('.sidebar-content .ps__thumb-y')) {\n const sidebarContent = e.target.closest('.sidebar-content');\n sidebarContent?.classList.add('ps-mousedown-scroll');\n this.mousedownScrollbar = true;\n }\n };\n\n this._mouseupHandler = () => {\n if (this.mousedownScrollbar) {\n document\n .querySelectorAll('.sidebar-content.ps-mousedown-scroll')\n .forEach((el) => el.classList.remove('ps-mousedown-scroll'));\n this.mousedownScrollbar = false;\n }\n };\n\n this._tabSelectHandler = (e) => {\n if (!e.target.matches('[name=\"sidebar-tab-select\"]')) return;\n this.switchTab(e.target.value);\n };\n\n this._collapseClickHandler = (e) => {\n const collapseToggle = e.target.closest('[data-toggle=\"collapse\"]');\n if (!collapseToggle) return;\n\n const breakpoint = collapseToggle.dataset.breakpoint;\n if (breakpoint && window.matchMedia(`(min-width: ${breakpoint}px)`).matches) {\n let linkElement =\n collapseToggle.nextElementSibling?.querySelector('li a') ||\n collapseToggle.parentElement.nextElementSibling?.querySelector('li a');\n\n if (linkElement) {\n if (e.metaKey || e.ctrlKey) {\n window.open(linkElement.href, '_blank').focus();\n } else {\n window.location.href = linkElement.href;\n }\n }\n } else {\n setTimeout(() => this.scrollbar?.update(), 300);\n }\n };\n\n if (window.ResizeObserver) {\n this.resizeObserver = new ResizeObserver((_entries) => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n\n this.rafId = requestAnimationFrame(() => {\n if (window.innerWidth > this.opts.breakpoint) {\n this.removeBackdrop();\n }\n });\n });\n\n this.resizeObserver.observe(document.body);\n } else {\n let resizeTimeout;\n this._resizeHandler = () => {\n clearTimeout(resizeTimeout);\n\n const now = performance.now();\n if (!this.lastResizeTime || now - this.lastResizeTime > 100) {\n if (window.innerWidth > this.opts.breakpoint) {\n this.removeBackdrop();\n }\n this.lastResizeTime = now;\n } else {\n resizeTimeout = setTimeout(() => {\n if (window.innerWidth > this.opts.breakpoint) {\n this.removeBackdrop();\n }\n }, 16);\n }\n };\n\n window.addEventListener('resize', this._resizeHandler, { passive: true });\n }\n\n document.addEventListener('click', this._toggleHandler);\n document.addEventListener('click', this._tabSelectHandler);\n document.addEventListener('mousedown', this._mousedownHandler);\n document.addEventListener('mouseup', this._mouseupHandler);\n\n if (this.content) {\n this.content.addEventListener('click', this._collapseClickHandler);\n }\n }\n\n unbindEvents() {\n document.removeEventListener('click', this._toggleHandler);\n document.removeEventListener('click', this._tabSelectHandler);\n document.removeEventListener('mousedown', this._mousedownHandler);\n document.removeEventListener('mouseup', this._mouseupHandler);\n\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n\n if (this._resizeHandler) {\n window.removeEventListener('resize', this._resizeHandler);\n this._resizeHandler = null;\n }\n\n if (this.content) {\n this.content.removeEventListener('click', this._collapseClickHandler);\n }\n }\n\n initializeScrollbars() {\n if (this.content) {\n if (PerfectScrollbar) {\n this.scrollbar = new PerfectScrollbar(this.content, {\n wheelSpeed: this.opts.wheelSpeed,\n wheelPropagation: this.opts.wheelPropagation,\n minScrollbarLength: this.opts.minScrollbarLength,\n suppressScrollX: this.opts.suppressScrollX,\n });\n } else {\n this.content.style.overflowY = 'auto';\n }\n }\n }\n\n initializeTabs() {\n this.tabScrollbars = new Map();\n\n this.tabs.forEach((tab) => {\n const scrollContainer = tab.querySelector('.tab-content');\n if (scrollContainer) {\n if (PerfectScrollbar) {\n const ps = new PerfectScrollbar(scrollContainer, {\n wheelSpeed: this.opts.wheelSpeed,\n wheelPropagation: this.opts.wheelPropagation,\n minScrollbarLength: this.opts.minScrollbarLength,\n suppressScrollX: this.opts.suppressScrollX,\n });\n this.tabScrollbars.set(tab, ps);\n } else {\n scrollContainer.style.overflowY = 'auto';\n }\n }\n });\n }\n\n destroyScrollbars() {\n if (this.scrollbar) {\n this.scrollbar.destroy();\n this.scrollbar = null;\n }\n\n this.tabScrollbars.forEach((ps) => ps.destroy());\n this.tabScrollbars.clear();\n }\n\n toggleWithTransition(action) {\n const html = document.documentElement;\n\n html.classList.add('sidebar-transitioning');\n\n if (action === 'open') {\n document.body.classList.add('sidebar-left-open');\n\n if (this.isFloating && window.innerWidth <= this.opts.breakpoint) {\n this.createBackdrop();\n }\n } else {\n document.body.classList.remove('sidebar-left-open');\n this.removeBackdrop();\n }\n\n setTimeout(() => {\n html.classList.remove('sidebar-transitioning');\n }, 330);\n }\n\n createBackdrop() {\n if (document.querySelector('.sidebar-backdrop')) {\n return;\n }\n\n const backdrop = document.createElement('div');\n backdrop.className = 'sidebar-backdrop';\n backdrop.addEventListener('click', () => {\n this.toggleWithTransition('close');\n\n if (this.toggler) {\n this.toggler.classList.remove('open');\n if (this.toggler.ariaExpanded !== null) {\n this.toggler.ariaExpanded = 'false';\n }\n }\n });\n\n const siteMainEl = document.querySelector('.site-main');\n if (siteMainEl) {\n siteMainEl.appendChild(backdrop);\n\n requestAnimationFrame(() => {\n backdrop.classList.add('show');\n });\n }\n }\n\n removeBackdrop() {\n const backdrop = document.querySelector('.sidebar-backdrop');\n if (backdrop) {\n backdrop.classList.remove('show');\n\n backdrop.addEventListener(\n 'transitionend',\n () => {\n backdrop.remove();\n },\n { once: true }\n );\n\n setTimeout(() => {\n backdrop?.remove();\n }, 330);\n }\n }\n\n handleToggle(event, toggler) {\n event.stopPropagation();\n if (!toggler) {\n return;\n }\n\n if (toggler.ariaExpanded !== null) {\n toggler.ariaExpanded = toggler.ariaExpanded !== 'true';\n }\n\n toggler.classList.toggle('open');\n\n const isCurrentlyOpen = document.body.classList.contains('sidebar-left-open');\n this.toggleWithTransition(isCurrentlyOpen ? 'close' : 'open');\n\n if (isCurrentlyOpen) {\n this.onClose();\n } else {\n this.onShow();\n }\n }\n\n switchTab(tabId) {\n const activeTab = document.getElementById(`sidebar-tab-${tabId}`);\n\n if (!activeTab) return;\n\n const sidebarTabs = this.tabs;\n\n sidebarTabs.forEach((tab) => {\n tab.classList.toggle('active', tab === activeTab);\n\n if (tab !== activeTab) {\n const tabContent = tab.querySelector('.tab-content');\n if (tabContent) {\n if (tab === sidebarTabs[0]) {\n tabContent.style.transform = 'translate3d(100%, 0px, 0px)';\n } else if (tab === sidebarTabs[sidebarTabs.length - 1]) {\n tabContent.style.transform = 'translate3d(-100%, 0px, 0px)';\n } else {\n const isBeforeActive = sidebarTabs.indexOf(tab) < sidebarTabs.indexOf(activeTab);\n tabContent.style.transform = `translate3d(${isBeforeActive ? '-100%' : '100%'}, 0px, 0px)`;\n }\n }\n }\n });\n\n const activeTabContent = activeTab.querySelector('.tab-content');\n\n if (activeTabContent) {\n activeTabContent.style.transform = 'none';\n }\n\n this.tabSelectors.forEach((selector) => {\n selector.classList.toggle('active', selector.value === tabId);\n });\n }\n\n toggle() {\n const isOpen = document.body.classList.contains('sidebar-left-open');\n this.toggleWithTransition(isOpen ? 'close' : 'open');\n }\n\n open() {\n if (!document.body.classList.contains('sidebar-left-open')) {\n this.toggleWithTransition('open');\n }\n }\n\n close() {\n if (document.body.classList.contains('sidebar-left-open')) {\n this.toggleWithTransition('close');\n }\n }\n}\n\nSidebar._jQueryInit();\n\nexport default Sidebar;\n","import Component from './component';\nimport { deepMerge, generateUUID, resizeManager } from './utils';\n\nclass Popover extends Component {\n static NAME = 'coolPopover';\n\n static DEFAULTS = {\n container: 'body',\n containerAutoDetect: false,\n trigger: 'focus',\n placement: 'bottom',\n align: 'center',\n offset: null,\n collisionDetection: true,\n title: '',\n content: '',\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n };\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $el = $(this);\n let instance = $el.data(`plugin_${Popover.NAME}`);\n if (!instance) {\n instance = new Popover(this, typeof config === 'object' && config);\n $el.data(`plugin_${Popover.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (typeof $ === 'undefined' || !$.fn) return;\n const previousName = $.fn[Popover.NAME];\n $.fn[Popover.NAME] = Popover._jQueryInterface;\n $.fn[Popover.NAME].Constructor = Popover;\n $.fn[Popover.NAME].defaults = Popover.DEFAULTS || {};\n $.fn[Popover.NAME].noConflict = () => {\n $.fn[Popover.NAME] = previousName;\n return Popover._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = deepMerge({}, Popover.DEFAULTS, window.Cool?.settings?.popover || {}, opts || {});\n\n this.el = el;\n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n if (this.popoverEl) {\n this.popoverEl.remove();\n this.popoverEl = null;\n }\n this.constructor.removeInstance(this.el);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n if (this.popoverEl) {\n this.setPosition();\n }\n this.onUpdate();\n }\n\n buildCache() {\n this.containerEl = this.el.dataset.container\n ? document.querySelector(this.el.dataset.container)\n : document.querySelector(this.opts.container);\n this.containerAutoDetect =\n this.el.dataset.containerAutoDetect !== undefined\n ? this.el.dataset.containerAutoDetect\n : this.el.dataset.containerautodetect !== undefined\n ? this.el.dataset.containerautodetect\n : this.opts.containerAutoDetect;\n this.id = 'popover-' + generateUUID();\n this.trigger = this.el.dataset.trigger || this.opts.trigger;\n this.placement = this.el.dataset.placement || this.opts.placement;\n this.align = this.el.dataset.align || this.opts.align;\n this.title = this.el.dataset.title || this.opts.title;\n this.content = this.el.dataset.content || this.opts.content;\n this.offset = this.el.dataset.offset || this.opts.offset;\n this.collisionDetection =\n (this.el.dataset.collisionDetection || this.el.dataset.collisiondetection) !== 'false'\n ? this.el.dataset.collisionDetection ||\n this.el.dataset.collisiondetection ||\n this.opts.collisionDetection\n : false;\n\n if (this.containerAutoDetect) {\n this.containerEl = this.el.offsetParent || document.body;\n }\n }\n\n bindEvents() {\n if (this.trigger === 'click') {\n this._clickHandler = () => {\n if (this.popoverEl) {\n this.close();\n } else {\n this.show();\n }\n };\n this.el.addEventListener('click', this._clickHandler);\n } else if (this.trigger === 'hover') {\n this._mouseenterHandler = () => {\n clearTimeout(this.hoverTimeout);\n this.show();\n };\n this._mouseleaveHandler = () => {\n this.hoverTimeout = setTimeout(() => {\n if (!this.popupHasFocus) {\n this.close();\n }\n }, 100);\n };\n this.el.addEventListener('mouseenter', this._mouseenterHandler);\n this.el.addEventListener('mouseleave', this._mouseleaveHandler);\n } else if (this.trigger === 'focus') {\n this._focusinHandler = () => this.show();\n this._focusoutHandler = () => this.close();\n this.el.addEventListener('focusin', this._focusinHandler);\n this.el.addEventListener('focusout', this._focusoutHandler);\n }\n\n if (window.ResizeObserver) {\n this._resizeCallback = () => {\n if (this.popoverEl && this.popoverEl.classList.contains('show')) {\n requestAnimationFrame(() => {\n this.setPosition();\n });\n }\n };\n\n resizeManager.observe(this.el, this._resizeCallback);\n }\n }\n\n unbindEvents() {\n if (this._clickHandler) this.el.removeEventListener('click', this._clickHandler);\n if (this._mouseenterHandler) this.el.removeEventListener('mouseenter', this._mouseenterHandler);\n if (this._mouseleaveHandler) this.el.removeEventListener('mouseleave', this._mouseleaveHandler);\n if (this._focusinHandler) this.el.removeEventListener('focusin', this._focusinHandler);\n if (this._focusoutHandler) this.el.removeEventListener('focusout', this._focusoutHandler);\n\n if (this._resizeCallback) {\n resizeManager.unobserve(this.el);\n this._resizeCallback = null;\n }\n }\n\n buildPopover() {\n let content;\n\n if (typeof this.content === 'function') {\n content = this.content();\n } else {\n content = this.content;\n }\n\n this.popoverEl = document.createElement('div');\n this.popoverEl.className = 'popover';\n this.popoverEl.setAttribute('role', 'tooltip');\n this.popoverEl.id = this.id;\n this.popoverEl.innerHTML = `\n <h3 class=\"popover-header\">${this.title}</h3>\n <div class=\"popover-body\">${content}</div>\n `;\n\n this.containerEl.appendChild(this.popoverEl);\n\n this.popoverEl.addEventListener('mouseenter', () => {\n this.popupHasFocus = true;\n if (this.trigger === 'hover' && this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n }\n });\n\n this.popoverEl.addEventListener('mouseleave', () => {\n this.popupHasFocus = false;\n if (this.trigger === 'hover') {\n this.hoverTimeout = setTimeout(() => {\n this.close();\n }, 100);\n }\n });\n }\n\n setPosition(placement) {\n if (typeof placement === 'undefined' || placement === null) {\n placement = this.placement;\n }\n\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const popoverWidth = this.popoverEl.offsetWidth;\n const popoverHeight = this.popoverEl.offsetHeight;\n const triggerWidth = this.el.offsetWidth;\n const triggerHeight = this.el.offsetHeight;\n\n let triggerPosX, triggerPosY;\n\n const containerRect = this.containerEl.getBoundingClientRect();\n const containerOffset = { left: containerRect.left + window.scrollX, top: containerRect.top + window.scrollY };\n const triggerRect = this.el.getBoundingClientRect();\n const triggerOffset = { left: triggerRect.left + window.scrollX, top: triggerRect.top + window.scrollY };\n\n triggerPosX = triggerOffset.left - containerOffset.left;\n triggerPosY = triggerOffset.top - containerOffset.top;\n\n let popoverPosX = 0;\n let popoverPosY = 0;\n let offsetX = 0;\n let offsetY = 0;\n\n if (this.offset) {\n const offsets = this.offset.split(',');\n offsetX = parseInt(offsets[0], 10) || 0;\n offsetY = parseInt(offsets[1], 10) || 0;\n }\n\n const computedStyle = getComputedStyle(this.popoverEl);\n const spacing = parseInt(computedStyle.getPropertyValue('--cool-popover-spacer')) || 8;\n\n const calculatePosition = (currentPlacement, currentAlign = this.align) => {\n let x = 0,\n y = 0;\n\n switch (currentPlacement) {\n case 'top':\n x =\n currentAlign === 'end'\n ? triggerPosX + triggerWidth - popoverWidth\n : currentAlign === 'center'\n ? triggerPosX + (triggerWidth - popoverWidth) / 2\n : triggerPosX;\n y = triggerPosY - popoverHeight - spacing;\n break;\n case 'bottom':\n x =\n currentAlign === 'end'\n ? triggerPosX + triggerWidth - popoverWidth\n : currentAlign === 'center'\n ? triggerPosX + (triggerWidth - popoverWidth) / 2\n : triggerPosX;\n y = triggerPosY + triggerHeight + spacing;\n break;\n case 'left':\n x = triggerPosX - popoverWidth - spacing;\n y =\n currentAlign === 'end'\n ? triggerPosY + triggerHeight - popoverHeight\n : currentAlign === 'center'\n ? triggerPosY + (triggerHeight - popoverHeight) / 2\n : triggerPosY;\n break;\n case 'right':\n x = triggerPosX + triggerWidth + spacing;\n y =\n currentAlign === 'end'\n ? triggerPosY + triggerHeight - popoverHeight\n : currentAlign === 'center'\n ? triggerPosY + (triggerHeight - popoverHeight) / 2\n : triggerPosY;\n break;\n }\n\n return { x: x + offsetX, y: y + offsetY };\n };\n\n let finalPlacement = placement;\n let finalAlign = this.align;\n let position = calculatePosition(placement);\n\n if (this.collisionDetection) {\n const margin = 5;\n\n const checkCollision = (pos) => {\n const collision = {\n top: false,\n bottom: false,\n left: false,\n right: false,\n };\n\n const popoverScreenLeft = containerOffset.left + pos.x;\n const popoverScreenTop = containerOffset.top + pos.y;\n const popoverScreenRight = popoverScreenLeft + popoverWidth;\n const popoverScreenBottom = popoverScreenTop + popoverHeight;\n\n collision.top = popoverScreenTop < margin;\n collision.bottom = popoverScreenBottom > viewportHeight - margin;\n collision.left = popoverScreenLeft < margin;\n collision.right = popoverScreenRight > viewportWidth - margin;\n\n return collision;\n };\n\n const collision = checkCollision(position);\n\n if (placement === 'bottom' && collision.bottom && !collision.top) {\n finalPlacement = 'top';\n position = calculatePosition('top', finalAlign);\n } else if (placement === 'top' && collision.top && !collision.bottom) {\n finalPlacement = 'bottom';\n position = calculatePosition('bottom', finalAlign);\n } else if (placement === 'right' && collision.right && !collision.left) {\n finalPlacement = 'left';\n position = calculatePosition('left', finalAlign);\n } else if (placement === 'left' && collision.left && !collision.right) {\n finalPlacement = 'right';\n position = calculatePosition('right', finalAlign);\n }\n\n const newCollision = checkCollision(position);\n\n if (finalPlacement === 'top' || finalPlacement === 'bottom') {\n if (finalAlign === 'end' && newCollision.left && !newCollision.right) {\n finalAlign = 'start';\n position = calculatePosition(finalPlacement, finalAlign);\n } else if (finalAlign === 'start' && newCollision.right && !newCollision.left) {\n finalAlign = 'end';\n position = calculatePosition(finalPlacement, finalAlign);\n }\n }\n\n const finalCollision = checkCollision(position);\n\n if (finalCollision.left) {\n position.x += margin - (containerOffset.left + position.x);\n } else if (finalCollision.right) {\n position.x -= containerOffset.left + position.x + popoverWidth - (viewportWidth - margin);\n }\n\n if (finalCollision.top) {\n position.y += margin - (containerOffset.top + position.y);\n } else if (finalCollision.bottom) {\n position.y -= containerOffset.top + position.y + popoverHeight - (viewportHeight - margin);\n }\n }\n\n popoverPosX = position.x;\n popoverPosY = position.y;\n\n Object.assign(this.popoverEl.style, {\n transform: `translate3d(${Math.round(popoverPosX)}px, ${Math.round(popoverPosY)}px, 0px)`,\n willChange: 'transform',\n });\n\n this.popoverEl.setAttribute('x-placement', finalPlacement + '-' + finalAlign);\n }\n\n show() {\n if (this.popoverEl) {\n return;\n }\n\n this.buildPopover();\n this.setPosition();\n\n this.popoverEl.classList.add('show');\n this.el.setAttribute('data-popover', this.id);\n\n this.onShow();\n }\n\n close() {\n if (!this.popoverEl) {\n return;\n }\n\n this.popoverEl.remove();\n this.el.removeAttribute('data-popover');\n this.popoverEl = null;\n\n this.onClose();\n }\n}\n\nPopover._jQueryInit();\n\nexport default Popover;\n","import Component from './component';\nimport { deepMerge, debounce, touchEvents, escape, resizeManager, scrollManager } from './utils';\n\nlet PerfectScrollbar = null;\n\ntry {\n PerfectScrollbar = require('perfect-scrollbar');\n if (PerfectScrollbar && PerfectScrollbar.default) {\n PerfectScrollbar = PerfectScrollbar.default;\n }\n} catch (e) {\n // PerfectScrollbar is optional\n}\n\nif (typeof window !== 'undefined' && PerfectScrollbar && !window.PerfectScrollbar) {\n window.PerfectScrollbar = PerfectScrollbar;\n}\n\nconst _itemDataMap = new WeakMap();\n\nfunction _outerHeight(el) {\n if (!el) return 0;\n const style = getComputedStyle(el);\n return el.offsetHeight + parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n}\n\nclass Select extends Component {\n static NAME = 'coolSelect';\n\n static DEFAULTS = {\n name: '',\n type: 'checkbox',\n labelTemplate: null,\n confirmCheck: null,\n confirmUncheck: null,\n setData: null,\n scrollContentHeight: 300,\n useNativeScroll: false,\n contentWidth: null,\n faPro: false,\n items: [],\n showSearch: false,\n showFooter: false,\n searchApi: false,\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n onReset: null,\n onSearch: null,\n onSelect: null,\n buildScroll: null,\n searchPlaceholder: null,\n btnCloseText: null,\n dynamicTitle: false,\n dynamicTitleDefault: '',\n dynamicTitleEmptyDefault: '',\n allowNoneOnRadioSelect: true,\n preventUncheck: false,\n showValidStateIcon: true,\n itemsToExclude: [],\n primaryKeyword: 'id',\n position: 'absolute',\n scrollEl: '.content',\n useChips: false,\n };\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $el = $(this);\n let instance = $el.data(`plugin_${Select.NAME}`);\n if (!instance) {\n instance = new Select(this, typeof config === 'object' && config);\n $el.data(`plugin_${Select.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (typeof $ === 'undefined' || !$.fn) return;\n const previousName = $.fn[Select.NAME];\n $.fn[Select.NAME] = Select._jQueryInterface;\n $.fn[Select.NAME].Constructor = Select;\n $.fn[Select.NAME].defaults = Select.DEFAULTS || {};\n $.fn[Select.NAME].noConflict = () => {\n $.fn[Select.NAME] = previousName;\n return Select._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = deepMerge({}, Select.DEFAULTS, window.Cool?.settings?.select || {}, opts || {});\n\n this.el = el;\n this.useChips = false;\n this.cachedTitle = '';\n this.lastSearchQuery = '';\n this._resizeCallback = null;\n this._scrollCallback = null;\n this.init();\n }\n\n init() {\n this.buildCache();\n this.buildScroll();\n this.bindEvents();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n this.constructor.removeInstance(this.el);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n this.bindEvents();\n\n let updatePromise = Promise.resolve();\n\n if (this.searchApi && this.searchApi.length) {\n updatePromise = this._performInitialSearch();\n }\n\n return updatePromise.then(() => {\n this.onUpdate();\n });\n }\n\n reset() {\n this.data = {};\n this.data[this.name] = [];\n this.items = [];\n this.selectEl.querySelectorAll('.select-item').forEach((el) => el.remove());\n this.selectItems = [];\n if (this.selectIconContainerEl) this.selectIconContainerEl.innerHTML = this.selectIconDefault;\n this.selectHeaderEl.classList.remove('select-placeholder');\n\n if (typeof this.dynamicTitle === 'function') {\n this.selectTitleEl.textContent = this.dynamicTitle.call(this);\n } else {\n if (\n this.data[this.name].length == 0 &&\n this.dynamicTitle &&\n this.dynamicTitleDefault &&\n this.dynamicTitleDefault !== 0 &&\n this.selectTitleEl.textContent.trim() == 0 &&\n (this.selectItems.length > 0 || this.searchApi)\n ) {\n this.selectTitleEl.textContent = this.dynamicTitleDefault;\n }\n\n if (\n this.selectItems.length == 0 &&\n !this.searchApi &&\n this.dynamicTitle &&\n this.dynamicTitleEmptyDefault &&\n this.dynamicTitleEmptyDefault !== 0\n ) {\n this.selectHeaderEl.classList.add('select-placeholder');\n if (this.selectIconContainerEl) this.selectIconContainerEl.classList.add('d-none');\n this.selectTitleEl.textContent = this.dynamicTitleEmptyDefault;\n }\n }\n\n if (this.showSearch) {\n this.searchData = [];\n this.searchInputEl.value = '';\n this.searchString = '';\n this.search.call(this);\n }\n }\n\n buildCache() {\n this.containerEl = this.el.parentElement;\n this.selectHeaderEl = this.el.querySelector('.select-header');\n this.selectTitleEl = this.el.querySelector('.select-title');\n this.cachedTitle = this.selectTitleEl ? this.selectTitleEl.textContent : '';\n this.selectIconContainerEl = this.selectHeaderEl ? this.selectHeaderEl.querySelector('.select-icon') : null;\n this.searchIconContainerEl = this.el.querySelector('.select-search-icon');\n this.selectIconDefault = this.selectIconContainerEl\n ? this.selectIconContainerEl.innerHTML\n : '<i class=\"' + (this.opts.faPro ? 'fal' : 'fas') + 'fa-angle-down icon\"></i>';\n this.name = this.el.dataset.name || this.opts.name;\n this.scroll = null;\n this.scrollContentHeight =\n this.el.dataset.scrollContentHeight || this.el.dataset.scrollcontentheight || this.opts.scrollContentHeight;\n this.useNativeScroll =\n this.el.dataset.useNativeScroll || this.el.dataset.usenativescroll || this.opts.useNativeScroll;\n this.contentWidth = this.el.dataset.contentWidth || this.el.dataset.contentwidth || this.opts.contentWidth;\n this.items = this.el.dataset.items ? JSON.parse(this.el.dataset.items) : this.opts.items;\n this.data = {};\n this.data[this.name] = [];\n this.searchData = [];\n this.searchApi = this.el.dataset.searchApi || this.el.dataset.searchapi || this.opts.searchApi;\n this.searchRequest = null;\n this.type = this.el.dataset.type || this.opts.type;\n this.contentOpen = this.el.classList.contains('show');\n this.searchPlaceholder = this.el.dataset.searchPlaceholder || this.opts.searchPlaceholder;\n this.btnCloseText = this.el.dataset.btnCloseText || this.opts.btnCloseText;\n this.labelTemplate = this.opts.labelTemplate;\n this.confirmCheck = this.opts.confirmCheck;\n this.confirmUncheck = this.opts.confirmUncheck;\n this.preventUncheck =\n this.el.dataset.preventUncheck || this.el.dataset.preventuncheck || this.opts.preventUncheck;\n this.dynamicTitle = this.el.dataset.dynamicTitle || this.el.dataset.dynamictitle || this.opts.dynamicTitle;\n this.dynamicTitleDefault =\n this.el.dataset.dynamicTitleDefault || this.el.dataset.dynamictitledefault || this.opts.dynamicTitleDefault;\n this.dynamicTitleEmptyDefault =\n this.el.dataset.dynamicTitleEmptyDefault ||\n this.el.dataset.dynamictitleemptydefault ||\n this.opts.dynamicTitleEmptyDefault;\n this.allowNoneOnRadioSelect =\n this.el.dataset.allowNoneOnRadioSelect ||\n this.el.dataset.allowneonradioselect ||\n this.opts.allowNoneOnRadioSelect;\n this.showValidStateIcon =\n this.el.dataset.showValidStateIcon || this.el.dataset.showvalidstateicon || this.opts.showValidStateIcon;\n this.itemsToExclude =\n this.el.dataset.itemsToExclude || this.el.dataset.itemstoexclude\n ? (this.el.dataset.itemsToExclude || this.el.dataset.itemstoexclude).replace(/\\s/g, '').split(',')\n : this.opts.itemsToExclude;\n this.primaryKeyword =\n this.el.dataset.primaryKeyword || this.el.dataset.primarykeyword || this.opts.primaryKeyword;\n this.useChips = this.el.dataset.useChips || this.el.dataset.usechips || this.opts.useChips;\n this.position = this.el.dataset.position || this.opts.position;\n\n if (this.useChips) {\n this.showValidStateIcon = false;\n }\n\n this.preventClose = false;\n\n if (this.itemsToExclude.length > 0) {\n this.itemsToExclude = this.itemsToExclude.map(String);\n }\n\n if (this.opts.setData) {\n this.data = this.opts.setData;\n }\n\n if (\n (this.el.dataset.setData || this.el.dataset.setdata) &&\n (this.el.dataset.setData || this.el.dataset.setdata) != ''\n ) {\n try {\n this.data = JSON.parse(this.el.dataset.setData || this.el.dataset.setdata);\n } catch (e) {\n this.data = this.el.dataset.setData || this.el.dataset.setdata;\n }\n }\n\n if (!Array.isArray(this.data[this.name]) && this.data[this.name] !== '' && this.data[this.name].length > 0) {\n const arr = this.data[this.name].toString().trim().split(',');\n this.data[this.name] = arr;\n }\n\n if (this.data[this.name].length > 0 && !this.useChips) {\n this.data[this.name] = this.data[this.name].map(String);\n }\n\n if (this.data[this.name].length > 0 && this.itemsToExclude.length > 0) {\n this.data[this.name] = this.data[this.name].filter((item) => {\n if (item[this.primaryKeyword]) {\n return this.itemsToExclude.indexOf(item[this.primaryKeyword].toString()) === -1;\n } else {\n return this.itemsToExclude.indexOf(item.toString()) === -1;\n }\n });\n }\n\n if (this.data && this.useChips) {\n this._renderChips();\n }\n\n if (this.items.length > 0 && this.itemsToExclude.length > 0) {\n this.items = this.items.filter((item) => {\n if (item[this.primaryKeyword]) {\n return this.itemsToExclude.indexOf(item[this.primaryKeyword].toString()) === -1;\n } else {\n return this.itemsToExclude.indexOf(item.toString()) === -1;\n }\n });\n }\n\n if (this.el.querySelector('.select-search')) {\n this.showSearch = true;\n } else {\n this.showSearch = this.el.dataset.showSearch || this.el.dataset.showsearch || this.opts.showSearch;\n }\n\n if (this.el.querySelector('.select-footer')) {\n this.showFooter = true;\n } else {\n this.showFooter = this.el.dataset.showFooter || this.el.dataset.showfooter || this.opts.showFooter;\n }\n\n this.selectEl = this.el.querySelector('.select-content');\n\n if (!this.selectEl) {\n let itemElements = this._renderItemList(this.items);\n\n const temp = document.createElement('div');\n temp.innerHTML = `\n <div class=\"select-content\">\n ${this._renderSearch()}\n <div class=\"select-scrollable-content\"></div>\n ${this._renderFooter()}\n </div>\n `;\n this.selectEl = temp.firstElementChild;\n this.el.appendChild(this.selectEl);\n\n const scrollableEl = this.selectEl.querySelector('.select-scrollable-content');\n itemElements.forEach((el) => scrollableEl.appendChild(el));\n } else {\n const selectItemEls = this.selectEl.querySelectorAll('.select-item');\n\n if (selectItemEls.length > 0 && this.itemsToExclude.length > 0) {\n selectItemEls.forEach((el) => {\n const input = el.querySelector('input');\n if (input && this.itemsToExclude.indexOf(input.value) > -1) {\n el.remove();\n }\n });\n }\n }\n\n if (this.data[this.name].length > 0) {\n const values = this.useChips\n ? this.data[this.name].map((item) => item[this.primaryKeyword].toString())\n : this.data[this.name].map(String);\n\n this.selectEl.querySelectorAll('input').forEach((input) => {\n if (values.includes(input.value)) {\n input.checked = true;\n if (this.type === 'radio') {\n input.classList.add('checked');\n }\n }\n });\n\n if (this.useChips) {\n this._renderChips();\n } else if (this.type === 'radio' && typeof this.dynamicTitle !== 'function') {\n const checkedInput = this.selectEl.querySelector('input:checked');\n if (checkedInput) {\n const labelEl = checkedInput.parentElement.querySelector('[data-label]');\n if (labelEl) this.selectTitleEl.textContent = labelEl.textContent;\n }\n }\n }\n\n this.scrollableContentEl = this.selectEl.querySelector('.select-scrollable-content') || null;\n this.selectItems = Array.from(this.selectEl.querySelectorAll('.select-item'));\n this.selectHeaderEl.classList.remove('select-placeholder');\n\n if (this.searchApi && this.searchApi.length) {\n this._performInitialSearch();\n }\n\n if (typeof this.dynamicTitle === 'function') {\n this.selectTitleEl.textContent = this.dynamicTitle.call(this);\n } else {\n if (\n this.data[this.name].length == 0 &&\n this.dynamicTitle &&\n this.dynamicTitleDefault &&\n this.dynamicTitleDefault !== 0 &&\n this.selectTitleEl.textContent.trim() == 0 &&\n (this.selectItems.length > 0 || this.searchApi)\n ) {\n this.selectTitleEl.textContent = this.dynamicTitleDefault;\n }\n\n if (\n this.selectItems.length == 0 &&\n !this.searchApi &&\n this.dynamicTitle &&\n this.dynamicTitleEmptyDefault &&\n this.dynamicTitleEmptyDefault !== 0\n ) {\n this.selectHeaderEl.classList.add('select-placeholder');\n if (this.selectIconContainerEl) this.selectIconContainerEl.classList.add('d-none');\n this.selectTitleEl.textContent = this.dynamicTitleEmptyDefault;\n }\n }\n\n if (this.showSearch) {\n this.searchContainerEl = this.selectEl.querySelector('.select-search');\n this.searchInputEl = this.selectEl.querySelector('[name=\"select-search\"]');\n this.clearSearchButtonEl = this.selectEl.querySelector('[data-clear-search]');\n\n if (this.searchInputEl) this.searchInputEl.tabIndex = -1;\n }\n\n if (this.showFooter) {\n this.footerContainerEl = this.selectEl.querySelector('.select-footer');\n this.closeButtonEl = this.selectEl.querySelector('[data-select-close]');\n\n if (this.closeButtonEl) this.closeButtonEl.tabIndex = -1;\n }\n\n this.buildSearchData();\n }\n\n _updateScrollbarVisibility() {\n if (this.scroll && this.scrollableContentEl) {\n const element = this.scrollableContentEl;\n const needsScrollbar = element.scrollHeight > element.clientHeight;\n\n if (needsScrollbar) {\n this.scroll.settings.suppressScrollY = false;\n this.scrollableContentEl.classList.add('ps-show-rail-y');\n } else {\n this.scroll.settings.suppressScrollY = true;\n this.scrollableContentEl.classList.remove('ps-show-rail-y');\n }\n this.scroll.update();\n }\n }\n\n _performInitialSearch() {\n if (!this.isSearchApiEnabled()) {\n return Promise.resolve();\n }\n\n this._showSpinner();\n\n return fetch(this.searchApi)\n .then((response) => response.json())\n .then((data) => {\n let items = data.filter((item) => {\n return (\n this.itemsToExclude.indexOf(item[this.primaryKeyword].toString()) === -1 &&\n item[this.primaryKeyword] != 0\n );\n });\n\n if (this.useChips && this.data[this.name].length > 0) {\n this.data[this.name].forEach((dataItem) => {\n const matchingItem = items.find(\n (item) => item[this.primaryKeyword].toString() === dataItem[this.primaryKeyword].toString()\n );\n if (matchingItem) {\n dataItem.label = matchingItem.label || matchingItem.name || matchingItem.value;\n }\n });\n\n this.selectTitleEl.innerHTML = '';\n this.data[this.name].forEach((dataItem) => {\n const chip = document.createElement('span');\n chip.className = 'chip';\n chip.dataset.value = dataItem[this.primaryKeyword];\n chip.innerHTML = `<span class=\"chip-title\">${escape(dataItem.label)}</span>`;\n\n chip.addEventListener('click', (e) => {\n e.stopPropagation();\n const input = this.selectEl.querySelector(\n `input[value=\"${dataItem[this.primaryKeyword]}\"]`\n );\n if (input) {\n input.checked = false;\n input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n });\n\n this.selectTitleEl.appendChild(chip);\n });\n }\n\n let resultElements = this._renderItemList(items);\n this.scrollableContentEl.innerHTML = '';\n resultElements.forEach((el) => this.scrollableContentEl.appendChild(el));\n\n if (this.data[this.name].length > 0) {\n this.data[this.name].forEach((value) => {\n const valueId = this.useChips ? value[this.primaryKeyword].toString() : value.toString();\n const input = this.scrollableContentEl.querySelector(`input[value=\"${valueId}\"]`);\n\n if (input) {\n input.checked = true;\n if (this.type === 'radio') {\n input.classList.add('checked');\n }\n }\n });\n }\n\n this._updateScrollbarVisibility();\n this._hideSpinner();\n\n if (this.useChips && this.data[this.name].length > 0) {\n this._renderChips();\n }\n\n if (this.contentOpen) {\n this._recalculateContentHeight();\n }\n })\n .catch((_error) => {\n this._hideSpinner();\n this.scrollableContentEl.innerHTML = '<div class=\"p-3 text-danger\">Error loading items</div>';\n });\n }\n\n buildScroll() {\n if (this.scrollableContentEl) {\n let scrollContentHeight = this.scrollContentHeight;\n\n if (this.showSearch && this.searchContainerEl) {\n scrollContentHeight = scrollContentHeight - (_outerHeight(this.searchContainerEl) || 0);\n }\n\n if (this.showFooter && this.footerContainerEl) {\n scrollContentHeight = scrollContentHeight - (_outerHeight(this.footerContainerEl) || 0);\n }\n\n const marginTop = parseInt(getComputedStyle(this.scrollableContentEl).marginTop, 10) || 0;\n const marginBottom = parseInt(getComputedStyle(this.scrollableContentEl).marginBottom, 10) || 0;\n const totalMargin = marginTop + marginBottom;\n\n const actualContentHeight = this.scrollableContentEl.scrollHeight;\n const finalHeight = Math.min(actualContentHeight, scrollContentHeight + totalMargin);\n\n this.scrollableContentEl.style.maxHeight = finalHeight + 'px';\n\n if (touchEvents()) {\n this.scrollableContentEl.style.overflowY = 'auto';\n } else {\n if (this.useNativeScroll === false && PerfectScrollbar) {\n this.scrollableContentEl.classList.add('ps-dark');\n this.scroll = new PerfectScrollbar(this.scrollableContentEl, {\n wheelSpeed: 1,\n wheelPropagation: false,\n minScrollbarLength: 20,\n scrollYMarginOffset: -1,\n suppressScrollY: true,\n suppressScrollX: true,\n });\n\n setTimeout(() => {\n this._updateScrollbarVisibility();\n }, 0);\n } else {\n this.scrollableContentEl.style.overflowY = 'auto';\n }\n\n this.scrollableContentEl.querySelectorAll('[tabindex=\"0\"]').forEach((el) => {\n el.tabIndex = -1;\n });\n }\n }\n }\n\n buildSearchData() {\n this.searchData = [];\n\n const selectLabels = this.selectEl.querySelectorAll('[data-label]');\n\n selectLabels.forEach((el, i) => {\n this.searchData.push({\n id: i,\n val: el.textContent.trim(),\n });\n });\n }\n\n bindEvents() {\n this._headerClickHandler = () => {\n if (this.contentOpen) {\n this.close();\n } else if (this.selectItems.length > 0 || this.searchApi) {\n this.show();\n }\n };\n\n this.selectHeaderEl.addEventListener('click', this._headerClickHandler);\n\n this._checkboxChangeHandler = (e) => {\n if (!e.target.matches('input[type=\"checkbox\"]')) return;\n const el = e.target;\n const val = el.value;\n const closeTimeout = 600;\n\n this.preventClose = true;\n\n if (typeof this.confirmCheck === 'function' && el.checked) {\n el.checked = false;\n\n this.confirmCheck((cb) => {\n if (cb == 'confirmed') {\n if (this.useChips) {\n const hasItem = this.data[this.name].find((item) => item[this.primaryKeyword] === val);\n if (!hasItem) {\n const labelEl = el.parentElement.querySelector('[data-label]');\n this.data[this.name].push({\n [this.primaryKeyword]: val,\n label: labelEl ? labelEl.textContent : val,\n });\n }\n } else if (this.data[this.name].indexOf(val) === -1) {\n this.data[this.name].push(val);\n }\n el.checked = true;\n this.onSelect(el);\n }\n setTimeout(() => {\n this.preventClose = false;\n }, closeTimeout);\n }, el);\n } else if (el.checked) {\n if (this.useChips) {\n const hasItem = this.data[this.name].find((item) => item[this.primaryKeyword] === val);\n if (!hasItem) {\n const labelEl = el.parentElement.querySelector('[data-label]');\n this.data[this.name].push({\n [this.primaryKeyword]: val,\n label: labelEl ? labelEl.textContent : val,\n });\n }\n } else if (this.data[this.name].indexOf(val) === -1) {\n this.data[this.name].push(val);\n }\n this.onSelect(el);\n setTimeout(() => {\n this.preventClose = false;\n }, closeTimeout);\n } else if (typeof this.confirmUncheck === 'function' && !el.checked) {\n el.checked = true;\n this.confirmUncheck((cb) => {\n if (cb == 'confirmed') {\n if (this.useChips) {\n this.data[this.name] = this.data[this.name].filter((n) => n[this.primaryKeyword] != val);\n } else {\n this.data[this.name] = this.data[this.name].filter((n) => n != val);\n }\n el.checked = false;\n this.onSelect(el);\n }\n setTimeout(() => {\n this.preventClose = false;\n }, closeTimeout);\n }, el);\n } else if (!el.checked && !this.preventUncheck) {\n if (this.useChips) {\n this.data[this.name] = this.data[this.name].filter((n) => n[this.primaryKeyword] != val);\n } else {\n this.data[this.name] = this.data[this.name].filter((n) => n != val);\n }\n this.onSelect(el);\n setTimeout(() => {\n this.preventClose = false;\n }, closeTimeout);\n } else if (!el.checked && this.preventUncheck) {\n el.checked = true;\n setTimeout(() => {\n this.preventClose = false;\n }, closeTimeout);\n }\n };\n\n this.el.addEventListener('change', this._checkboxChangeHandler);\n\n this._radioChangeHandler = (e) => {\n if (!e.target.matches('input[type=\"radio\"]')) return;\n const el = e.target;\n const val = el.value;\n\n if (el.checked) {\n if (this.useChips) {\n const labelEl = el.parentElement.querySelector('[data-label]');\n this.data[this.name] = [{ [this.primaryKeyword]: val, label: labelEl ? labelEl.textContent : val }];\n } else {\n this.data[this.name] = [val];\n }\n\n this.data[this.name] = [val];\n this.selectEl.querySelectorAll('input[type=\"radio\"]').forEach((input) => {\n if (input !== el) {\n input.checked = false;\n input.classList.remove('checked');\n }\n });\n } else {\n this.data[this.name] = [];\n }\n };\n\n this.el.addEventListener('change', this._radioChangeHandler);\n\n this._radioClickHandler = (e) => {\n if (!e.target.matches('input[type=\"radio\"]')) return;\n const el = e.target;\n\n if (el.classList.contains('checked') && this.allowNoneOnRadioSelect && !this.preventUncheck) {\n this.data[this.name] = [];\n el.checked = false;\n el.classList.remove('checked');\n\n if (this.dynamicTitle && typeof this.dynamicTitle !== 'function') {\n this.selectTitleEl.textContent = this.dynamicTitleDefault;\n }\n } else {\n el.classList.add('checked');\n\n if (this.dynamicTitle && typeof this.dynamicTitle !== 'function') {\n const labelEl = el.parentElement.querySelector('[data-label]');\n this.selectTitleEl.textContent = escape(labelEl ? labelEl.textContent : '');\n }\n }\n\n if (typeof this.dynamicTitle === 'function') {\n this.selectTitleEl.textContent = this.dynamicTitle.call(el);\n }\n\n this.onSelect(el);\n };\n\n this.el.addEventListener('click', this._radioClickHandler);\n\n if (this.scroll) {\n const thumb = this.scrollableContentEl ? this.scrollableContentEl.querySelector('.ps__thumb-y') : null;\n if (thumb) {\n this._thumbMousedownHandler = () => {\n this.scrollableContentEl.classList.add('ps-mousedown-scroll');\n };\n thumb.addEventListener('mousedown', this._thumbMousedownHandler);\n }\n\n this._documentMouseupHandler = () => {\n if (this.scrollableContentEl && this.scrollableContentEl.classList.contains('ps-mousedown-scroll')) {\n this.scrollableContentEl.classList.remove('ps-mousedown-scroll');\n }\n };\n document.addEventListener('mouseup', this._documentMouseupHandler);\n }\n\n if (this.showSearch) {\n this._searchKeydownHandler = debounce(() => {\n this.searchString = this.searchInputEl.value.trim();\n this.search.call(this);\n }, 250);\n\n this.searchInputEl.addEventListener('keydown', this._searchKeydownHandler);\n\n this._searchFocusinHandler = () => {\n this.searchContainerEl.classList.add('focused');\n };\n this.searchInputEl.addEventListener('focusin', this._searchFocusinHandler);\n\n this._searchFocusoutHandler = () => {\n this.searchContainerEl.classList.remove('focused');\n };\n this.searchInputEl.addEventListener('focusout', this._searchFocusoutHandler);\n\n this._clearSearchHandler = (e) => {\n const btn = e.target.closest('[data-clear-search]');\n if (!btn) return;\n if (this.searchString.length) {\n this.searchInputEl.value = '';\n this.searchString = '';\n this.search.call(this);\n }\n };\n this.searchContainerEl.addEventListener('click', this._clearSearchHandler);\n }\n\n if (this.showFooter && this.closeButtonEl) {\n this._footerCloseHandler = () => {\n this.close();\n };\n this.closeButtonEl.addEventListener('click', this._footerCloseHandler);\n }\n\n this._documentClickHandler = (e) => {\n if (!this.el.contains(e.target) && this.contentOpen && !this.preventClose) {\n this.close.call(this);\n }\n };\n\n document.addEventListener('touchstart', this._documentClickHandler);\n document.addEventListener('click', this._documentClickHandler);\n\n if (this.position === 'fixed') {\n this._scrollCallback = () => {\n if (!this.el || !this.el.classList.contains('show')) {\n return;\n }\n\n requestAnimationFrame(() => {\n const selectContent = this.el.querySelector('.select-content');\n const containerRect = this.containerEl.getBoundingClientRect();\n if (selectContent) {\n Object.assign(selectContent.style, {\n top: containerRect.top + 'px',\n left: containerRect.left + 'px',\n width: this.contentWidth\n ? `var(--cool-select-content-width, ${this.contentWidth}px)`\n : this.containerEl.offsetWidth + 'px',\n });\n }\n });\n };\n\n if (window.ResizeObserver) {\n this._resizeCallback = () => {\n if (!this.el || !this.el.classList.contains('show')) {\n return;\n }\n\n requestAnimationFrame(() => {\n const selectContent = this.el.querySelector('.select-content');\n const containerRect = this.containerEl.getBoundingClientRect();\n if (selectContent) {\n Object.assign(selectContent.style, {\n top: containerRect.top + 'px',\n left: containerRect.left + 'px',\n width: this.contentWidth\n ? `var(--cool-select-content-width, ${this.contentWidth}px)`\n : this.containerEl.offsetWidth + 'px',\n });\n }\n });\n };\n\n resizeManager.observe(document.body, this._resizeCallback);\n }\n }\n }\n\n unbindEvents() {\n if (this._headerClickHandler) {\n this.selectHeaderEl.removeEventListener('click', this._headerClickHandler);\n this._headerClickHandler = null;\n }\n\n if (this._checkboxChangeHandler) {\n this.el.removeEventListener('change', this._checkboxChangeHandler);\n this._checkboxChangeHandler = null;\n }\n\n if (this._radioChangeHandler) {\n this.el.removeEventListener('change', this._radioChangeHandler);\n this._radioChangeHandler = null;\n }\n\n if (this._radioClickHandler) {\n this.el.removeEventListener('click', this._radioClickHandler);\n this._radioClickHandler = null;\n }\n\n if (this._thumbMousedownHandler) {\n const thumb = this.scrollableContentEl ? this.scrollableContentEl.querySelector('.ps__thumb-y') : null;\n if (thumb) thumb.removeEventListener('mousedown', this._thumbMousedownHandler);\n this._thumbMousedownHandler = null;\n }\n\n if (this._documentMouseupHandler) {\n document.removeEventListener('mouseup', this._documentMouseupHandler);\n this._documentMouseupHandler = null;\n }\n\n if (this._searchKeydownHandler) {\n this.searchInputEl.removeEventListener('keydown', this._searchKeydownHandler);\n this._searchKeydownHandler = null;\n }\n\n if (this._searchFocusinHandler) {\n this.searchInputEl.removeEventListener('focusin', this._searchFocusinHandler);\n this._searchFocusinHandler = null;\n }\n\n if (this._searchFocusoutHandler) {\n this.searchInputEl.removeEventListener('focusout', this._searchFocusoutHandler);\n this._searchFocusoutHandler = null;\n }\n\n if (this._clearSearchHandler && this.searchContainerEl) {\n this.searchContainerEl.removeEventListener('click', this._clearSearchHandler);\n this._clearSearchHandler = null;\n }\n\n if (this._footerCloseHandler && this.closeButtonEl) {\n this.closeButtonEl.removeEventListener('click', this._footerCloseHandler);\n this._footerCloseHandler = null;\n }\n\n if (this._documentClickHandler) {\n document.removeEventListener('touchstart', this._documentClickHandler);\n document.removeEventListener('click', this._documentClickHandler);\n this._documentClickHandler = null;\n }\n\n if (this.position === 'fixed') {\n if (this._scrollCallback) {\n scrollManager.remove(`select-${this.name}`);\n this._scrollCallback = null;\n }\n\n if (this._resizeCallback) {\n resizeManager.unobserve(document.body);\n this._resizeCallback = null;\n }\n }\n }\n\n getData(data) {\n if (data) {\n return this.data[data];\n } else {\n return this.data;\n }\n }\n\n setData() {\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n if (this.showValidStateIcon) {\n if (this.selectIconContainerEl)\n this.selectIconContainerEl.innerHTML = `<i class=\"${faNameSpace} fa-check text-success icon\"></i>`;\n } else {\n if (this.selectIconContainerEl) this.selectIconContainerEl.innerHTML = this.selectIconDefault;\n }\n\n if (this.useChips) {\n this.selectTitleEl.innerHTML = '';\n }\n\n if (this.searchApi.length) {\n let searchUrl = this.searchApi;\n let itemCount = this.data[this.name].length;\n let currentCount = 0;\n\n this.data[this.name].forEach((value) => {\n searchUrl += encodeURIComponent('#' + value);\n currentCount++;\n if (currentCount !== itemCount) {\n searchUrl += '+';\n }\n });\n\n fetch(searchUrl)\n .then((response) => response.json())\n .then((data) => {\n let itemIds = data.map((item) => item.id.toString());\n\n this.data[this.name] = this.data[this.name].filter((value) => {\n if (this.useObjects) {\n return itemIds.indexOf(value[this.primaryKeyword].toString()) > -1;\n } else {\n return itemIds.indexOf(value.toString()) > -1;\n }\n });\n\n if (this.data[this.name].length == 0) {\n if (this.selectIconContainerEl) this.selectIconContainerEl.innerHTML = this.selectIconDefault;\n }\n\n const items = data.filter((item) => {\n if (this.useObjects) {\n return (\n this.data[this.name].findIndex((value) => value[this.primaryKeyword] == item.id) > -1 &&\n this.itemsToExclude.indexOf(item.id) === -1 &&\n item.id != 0\n );\n } else {\n return (\n this.data[this.name].indexOf(item.id) > -1 &&\n this.itemsToExclude.indexOf(item.id) === -1 &&\n item.id != 0\n );\n }\n });\n\n let resultElements = this._renderItemList(items);\n resultElements.forEach((el) => this.scrollableContentEl.appendChild(el));\n\n let inputs = Array.from(this.scrollableContentEl.querySelectorAll('input'));\n\n this._updateScrollbarVisibility();\n\n if (this.scrollableContentEl.querySelector('input[type=\"checkbox\"]')) {\n this.type = 'checkbox';\n } else if (this.scrollableContentEl.querySelector('input[type=\"radio\"]')) {\n this.type = 'radio';\n }\n\n if (this.type == 'checkbox') {\n this.data[this.name].forEach((value) => {\n let valueId = this.useObjects ? value[this.primaryKeyword].toString() : value.toString();\n let input = inputs.find((inp) => inp.value == valueId);\n\n if (input) {\n input.checked = true;\n if (this.useChips) {\n this._renderChips();\n }\n this.onSelect(input);\n }\n });\n } else if (this.type == 'radio') {\n const value = this.data[this.name][0];\n let input = inputs.find((inp) => inp.value == value);\n\n if (input) {\n input.checked = true;\n input.classList.add('checked');\n\n if (this.useChips) {\n this._renderChips();\n } else if (this.dynamicTitle && typeof this.dynamicTitle !== 'function') {\n const labelEl = input.parentElement.querySelector('[data-label]');\n if (labelEl) this.selectTitleEl.textContent = labelEl.textContent;\n }\n this.onSelect(input);\n }\n }\n\n if (typeof this.dynamicTitle === 'function') {\n this.selectTitleEl.textContent = this.dynamicTitle.call(this);\n }\n });\n } else {\n let inputs = Array.from(this.scrollableContentEl.querySelectorAll('input'));\n let inputValues = inputs.map((inp) => inp.value.toString());\n\n this.data[this.name] = this.data[this.name].filter((value) => {\n return inputValues.indexOf(value.toString()) > -1;\n });\n\n if (this.data[this.name].length == 0) {\n if (this.selectIconContainerEl) this.selectIconContainerEl.innerHTML = this.selectIconDefault;\n }\n\n if (this.scrollableContentEl.querySelector('input[type=\"checkbox\"]')) {\n this.type = 'checkbox';\n } else if (this.scrollableContentEl.querySelector('input[type=\"radio\"]')) {\n this.type = 'radio';\n }\n\n if (this.type == 'checkbox') {\n this.data[this.name].forEach((value) => {\n let input = inputs.find((inp) => inp.value == value);\n if (input) {\n input.checked = true;\n if (this.useChips) {\n this._renderChips();\n }\n this.onSelect(input);\n }\n });\n } else if (this.type == 'radio') {\n let input = inputs.find((inp) => inp.value == this.data[this.name][0]);\n\n if (input) {\n input.checked = true;\n input.classList.add('checked');\n\n if (this.useChips) {\n this._renderChips();\n } else if (this.dynamicTitle && typeof this.dynamicTitle !== 'function') {\n const labelEl = input.parentElement.querySelector('[data-label]');\n if (labelEl) this.selectTitleEl.textContent = labelEl.textContent;\n }\n this.onSelect(input);\n }\n }\n\n if (typeof this.dynamicTitle === 'function') {\n this.selectTitleEl.textContent = this.dynamicTitle.call(this);\n }\n }\n }\n\n _renderChips() {\n this.selectTitleEl.innerHTML = '';\n\n if (this.data[this.name].length === 0) {\n if (this.dynamicTitle && this.dynamicTitleDefault) {\n this.selectTitleEl.textContent = this.dynamicTitleDefault;\n } else {\n this.selectTitleEl.textContent = this.cachedTitle;\n }\n return;\n }\n\n this.data[this.name].forEach((dataItem) => {\n const value = this.useChips ? dataItem[this.primaryKeyword] : dataItem;\n const input = this.selectEl ? this.selectEl.querySelector(`input[value=\"${value}\"]`) : null;\n const labelEl = input ? input.parentElement.querySelector('[data-label]') : null;\n const label = labelEl ? labelEl.textContent : dataItem.label || dataItem.name || dataItem.value || value;\n\n const chip = document.createElement('span');\n chip.className = 'chip';\n chip.dataset.value = value;\n chip.innerHTML = `<span class=\"chip-title\">${escape(label)}</span>`;\n\n chip.addEventListener('click', (e) => {\n e.stopPropagation();\n\n const targetInput = this.selectEl.querySelector(`input[value=\"${value}\"]`);\n\n if (targetInput) {\n targetInput.checked = false;\n targetInput.dispatchEvent(new Event('change', { bubbles: true }));\n } else {\n if (this.useChips) {\n this.data[this.name] = this.data[this.name].filter(\n (item) => item[this.primaryKeyword].toString() !== value.toString()\n );\n } else {\n this.data[this.name] = this.data[this.name].filter(\n (item) => item.toString() !== value.toString()\n );\n }\n\n if (this.searchApi.length) {\n this.items = this.items.filter(\n (item) => item[this.primaryKeyword].toString() !== value.toString()\n );\n }\n\n this._renderChips();\n\n if (typeof this.opts.onSelect === 'function') {\n this.opts.onSelect.call(this, dataItem, this, false);\n }\n }\n });\n\n this.selectTitleEl.appendChild(chip);\n });\n\n if (this.contentOpen) {\n setTimeout(() => {\n this._updateScrollbarVisibility();\n }, 0);\n }\n }\n\n search() {\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n if (this.searchString.length) {\n if (this.isSearchApiEnabled()) {\n if (this.searchString === this.lastSearchQuery) {\n return;\n }\n\n this.lastSearchQuery = this.searchString;\n this._showSpinner();\n\n if (this._searchAbortController) {\n this._searchAbortController.abort();\n }\n\n clearTimeout(this._searchDebounceTimer);\n this._searchDebounceTimer = setTimeout(() => {\n this._searchAbortController = new AbortController();\n\n fetch(this.searchApi + this.searchString, { signal: this._searchAbortController.signal })\n .then((response) => response.json())\n .then((data) => {\n this._searchAbortController = null;\n\n // Remove unchecked items (not static)\n this.scrollableContentEl.querySelectorAll('input:not(:checked)').forEach((input) => {\n const item = input.closest('.select-item');\n if (item && !item.classList.contains('static-item')) {\n item.remove();\n }\n });\n\n const items = data.filter((item) => {\n if (this.useObjects) {\n return (\n this.data[this.name].findIndex(\n (value) => value[this.primaryKeyword] == item.id\n ) === -1 &&\n this.itemsToExclude.indexOf(item.id) === -1 &&\n item.id != 0\n );\n } else {\n return (\n this.data[this.name].indexOf(item.id) === -1 &&\n this.itemsToExclude.indexOf(item.id) === -1 &&\n item.id != 0\n );\n }\n });\n\n let resultElements = this._renderItemList(items);\n resultElements.forEach((el) => this.scrollableContentEl.appendChild(el));\n\n this.searchIconContainerEl.innerHTML = `<i class=\"${faNameSpace} fa-times icon\"></i>`;\n this.searchIconContainerEl.setAttribute('data-clear-search', 'true');\n\n this._updateScrollbarVisibility();\n\n if (this.contentOpen) {\n this._recalculateContentHeight();\n }\n })\n .catch((error) => {\n if (error.name !== 'AbortError') {\n this._hideSpinner();\n }\n });\n }, 300);\n } else {\n const searchStringLower = this.searchString.toLowerCase();\n let results = this.searchData.filter((item) => {\n return item.val.toLowerCase().indexOf(searchStringLower) > -1;\n });\n\n this.selectItems.forEach((el) => {\n el.classList.remove('d-none');\n el.classList.remove('visible');\n });\n\n results.forEach((item) => {\n if (this.selectItems[item.id]) {\n this.selectItems[item.id].classList.add('visible');\n }\n });\n\n this.selectItems\n .filter((el) => !el.classList.contains('visible'))\n .forEach((el) => el.classList.add('d-none'));\n this.searchIconContainerEl.innerHTML = `<i class=\"${faNameSpace} fa-times icon\"></i>`;\n this.searchIconContainerEl.setAttribute('data-clear-search', 'true');\n }\n } else {\n this.lastSearchQuery = '';\n if (this.isSearchApiEnabled()) {\n this.scrollableContentEl.querySelectorAll('input:not(:checked)').forEach((input) => {\n const item = input.closest('.select-item');\n if (item && !item.classList.contains('static-item')) {\n item.remove();\n }\n });\n this._hideSpinner();\n this.searchIconContainerEl.setAttribute('data-clear-search', '');\n this._performInitialSearch();\n } else {\n this.selectItems.forEach((el) => {\n el.classList.remove('d-none');\n el.classList.remove('visible');\n });\n this.searchIconContainerEl.innerHTML = `<i class=\"${faNameSpace} fa-search icon\"></i>`;\n this.searchIconContainerEl.setAttribute('data-clear-search', '');\n }\n }\n\n if (this.scroll) {\n this.scroll.update();\n }\n\n this.onUpdate();\n }\n\n _recalculateContentHeight() {\n const selectContent = this.el.querySelector('.select-content');\n const headerHeight = _outerHeight(this.selectHeaderEl);\n const contentHeight = this.scrollContentHeight;\n const viewportHeight = window.innerHeight;\n const scrollTop = window.scrollY;\n const minSpaceRequired = 50;\n\n let actualContentHeight = contentHeight;\n let searchHeight = 0;\n let footerHeight = 0;\n\n if (this.searchContainerEl) {\n searchHeight = _outerHeight(this.searchContainerEl) || 0;\n }\n\n if (this.footerContainerEl) {\n footerHeight = _outerHeight(this.footerContainerEl) || 0;\n }\n\n if (this.scrollableContentEl) {\n const scrollableHeight = this.scrollableContentEl.scrollHeight;\n const scrollableClientHeight = this.scrollableContentEl.clientHeight;\n\n actualContentHeight = Math.min(\n Math.max(scrollableHeight, scrollableClientHeight) + searchHeight + footerHeight,\n contentHeight\n );\n }\n\n let shouldOpenUpwards = this.el.classList.contains('select-dropup');\n let selectTop = 0;\n let constrainedHeight = actualContentHeight;\n\n const contentMarginBottom = parseInt(getComputedStyle(selectContent).marginBottom || 0, 10);\n const contentMarginTop = parseInt(getComputedStyle(selectContent).marginTop || 0, 10);\n\n if (this.position === 'fixed') {\n const containerRect = this.containerEl.getBoundingClientRect();\n const top = containerRect.top;\n const spaceBelow = viewportHeight - top - headerHeight - minSpaceRequired;\n const spaceAbove = top - minSpaceRequired;\n\n if (shouldOpenUpwards) {\n constrainedHeight = Math.min(actualContentHeight, spaceAbove);\n selectTop = top - constrainedHeight - contentMarginBottom;\n } else {\n constrainedHeight = Math.min(actualContentHeight, spaceBelow);\n selectTop = top + headerHeight + contentMarginTop;\n }\n } else {\n const containerRect = this.containerEl.getBoundingClientRect();\n const containerTop = containerRect.top + scrollTop;\n const spaceBelow = viewportHeight - (containerTop - scrollTop) - headerHeight - minSpaceRequired;\n const spaceAbove = containerTop - scrollTop - minSpaceRequired;\n\n if (shouldOpenUpwards) {\n constrainedHeight = Math.min(actualContentHeight, spaceAbove);\n selectTop = -constrainedHeight - contentMarginBottom;\n } else {\n constrainedHeight = Math.min(actualContentHeight, spaceBelow);\n selectTop = headerHeight + contentMarginTop;\n }\n }\n\n const scrollableMaxHeight = constrainedHeight - searchHeight - footerHeight;\n\n selectContent.style.height = constrainedHeight + 'px';\n\n if (this.scrollableContentEl) {\n this.scrollableContentEl.style.maxHeight = scrollableMaxHeight + 'px';\n }\n\n selectContent.style.top = selectTop + 'px';\n\n if (this.scroll) {\n setTimeout(() => {\n this._updateScrollbarVisibility();\n }, 0);\n }\n }\n\n show() {\n if (this.el.classList.contains('show')) {\n return;\n }\n\n let top = 0;\n let left = 0;\n\n if (this.position === 'fixed') {\n const containerRect = this.containerEl.getBoundingClientRect();\n top = containerRect.top;\n left = containerRect.left;\n }\n\n const otherSelects = document.querySelectorAll('.select.show');\n let zindex = 1;\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n if (otherSelects.length) {\n zindex = parseInt(getComputedStyle(otherSelects[0]).zIndex, 10) + 2;\n }\n\n this.el.classList.add('show');\n\n if (!otherSelects.length) {\n zindex = parseInt(getComputedStyle(this.el).zIndex, 10) + 1;\n }\n\n const selectContent = this.el.querySelector('.select-content');\n const headerHeight = _outerHeight(this.selectHeaderEl);\n const contentHeight = this.scrollContentHeight;\n const viewportHeight = window.innerHeight;\n const scrollTop = window.scrollY;\n const minSpaceRequired = 50;\n\n let actualContentHeight = contentHeight;\n let searchHeight = 0;\n let footerHeight = 0;\n\n if (this.searchContainerEl) {\n searchHeight = _outerHeight(this.searchContainerEl) || 0;\n }\n\n if (this.footerContainerEl) {\n footerHeight = _outerHeight(this.footerContainerEl) || 0;\n }\n\n if (this.scrollableContentEl) {\n const scrollableHeight = this.scrollableContentEl.scrollHeight;\n const scrollableClientHeight = this.scrollableContentEl.clientHeight;\n\n actualContentHeight = Math.min(\n Math.max(scrollableHeight, scrollableClientHeight) + searchHeight + footerHeight,\n contentHeight\n );\n }\n\n let shouldOpenUpwards = false;\n let selectTop = 0;\n let constrainedHeight = actualContentHeight;\n\n const contentMarginBottom = parseInt(getComputedStyle(selectContent).marginBottom || 0, 10);\n const contentMarginTop = parseInt(getComputedStyle(selectContent).marginTop || 0, 10);\n\n if (this.position === 'fixed') {\n const spaceBelow = viewportHeight - top - headerHeight - minSpaceRequired;\n const spaceAbove = top - minSpaceRequired;\n\n shouldOpenUpwards = spaceBelow < actualContentHeight && spaceAbove > spaceBelow;\n\n if (shouldOpenUpwards) {\n constrainedHeight = Math.min(actualContentHeight, spaceAbove);\n selectTop = top - constrainedHeight - contentMarginBottom;\n } else {\n constrainedHeight = Math.min(actualContentHeight, spaceBelow);\n selectTop = top + headerHeight + contentMarginTop;\n }\n } else {\n const containerRect = this.containerEl.getBoundingClientRect();\n const containerTop = containerRect.top + scrollTop;\n const spaceBelow = viewportHeight - (containerTop - scrollTop) - headerHeight - minSpaceRequired;\n const spaceAbove = containerTop - scrollTop - minSpaceRequired;\n\n shouldOpenUpwards = spaceBelow < actualContentHeight && spaceAbove > spaceBelow;\n\n if (shouldOpenUpwards) {\n constrainedHeight = Math.min(actualContentHeight, spaceAbove);\n selectTop = -constrainedHeight - contentMarginBottom;\n } else {\n constrainedHeight = Math.min(actualContentHeight, spaceBelow);\n selectTop = headerHeight + contentMarginTop;\n }\n }\n\n const scrollableMaxHeight = constrainedHeight - searchHeight - footerHeight;\n\n selectContent.style.height = constrainedHeight + 'px';\n\n if (this.scrollableContentEl) {\n this.scrollableContentEl.style.maxHeight = scrollableMaxHeight + 'px';\n }\n\n this.el.classList.toggle('select-dropup', shouldOpenUpwards);\n this.el.classList.toggle('select-dropdown', !shouldOpenUpwards);\n\n const contentRequiredWidth = selectContent.offsetWidth;\n\n Object.assign(selectContent.style, {\n zIndex: zindex,\n position: this.position === 'fixed' ? 'fixed' : 'absolute',\n });\n\n const containerWidth = this.containerEl.offsetWidth;\n\n if (this.position === 'fixed') {\n Object.assign(selectContent.style, {\n top: selectTop + 'px',\n left: left + 'px',\n width: this.contentWidth\n ? `var(--cool-select-content-width, ${this.contentWidth}px)`\n : containerWidth + 'px',\n });\n } else {\n Object.assign(selectContent.style, {\n top: selectTop + 'px',\n width: this.contentWidth\n ? `var(--cool-select-content-width, ${this.contentWidth}px)`\n : contentRequiredWidth > containerWidth\n ? 'var(--cool-select-content-width, auto)'\n : containerWidth + 'px',\n });\n }\n\n selectContent.style.minWidth = containerWidth + 'px';\n\n if (this.scrollableContentEl) {\n if (this.scrollableContentEl.offsetHeight < this.scrollableContentEl.scrollHeight) {\n this.scrollableContentEl.scrollTop = 1;\n this.scrollableContentEl.scrollTop = 0;\n }\n }\n\n if (shouldOpenUpwards) {\n if (this.selectIconContainerEl)\n this.selectIconContainerEl.innerHTML = `<i class=\"${faNameSpace} fa-angle-down icon\"></i>`;\n } else {\n if (this.selectIconContainerEl)\n this.selectIconContainerEl.innerHTML = `<i class=\"${faNameSpace} fa-angle-up icon\"></i>`;\n }\n\n setTimeout(() => {\n this.el.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });\n\n if (this.scroll) {\n this._updateScrollbarVisibility();\n }\n }, 300);\n\n this.contentOpen = true;\n\n if (this.position === 'fixed' && this._scrollCallback) {\n scrollManager.add(`select-${this.name}`, this._scrollCallback);\n }\n\n this.onShow();\n }\n\n close() {\n if (!this.preventClose) {\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n this.el.classList.remove('show');\n this.el.classList.remove('select-dropup', 'select-dropdown');\n\n setTimeout(() => {\n this.el.removeAttribute('style');\n }, 300);\n\n if (this.data[this.name].length > 0 && this.showValidStateIcon) {\n if (this.selectIconContainerEl)\n this.selectIconContainerEl.innerHTML = `<i class=\"${faNameSpace} fa-check text-success icon\"></i>`;\n } else {\n if (this.selectIconContainerEl) this.selectIconContainerEl.innerHTML = this.selectIconDefault;\n }\n\n this.contentOpen = false;\n\n if (this.position === 'fixed' && this._scrollCallback) {\n scrollManager.remove(`select-${this.name}`);\n }\n\n this.onClose();\n }\n }\n\n onSelect(el) {\n const itemEl = el.closest('.select-item');\n const data = itemEl ? _itemDataMap.get(itemEl) || {} : {};\n const val = el.value;\n\n if (this.searchApi.length && Object.keys(data).length > 0) {\n if (el.checked) {\n this.items.push(data);\n\n if (this.useChips) {\n const hasItem = this.data[this.name].find((item) => {\n return item[this.primaryKeyword].toString() === val.toString();\n });\n\n if (!hasItem) {\n const labelEl = el.parentElement.querySelector('[data-label]');\n this.data[this.name].push({\n [this.primaryKeyword]: val,\n label: labelEl ? labelEl.textContent : val,\n });\n }\n } else if (this.data[this.name].indexOf(val) === -1) {\n this.data[this.name].push(val);\n }\n } else {\n this.items = this.items.filter((item) => {\n return item[this.primaryKeyword].toString() !== val.toString();\n });\n\n if (this.useChips) {\n this.data[this.name] = this.data[this.name].filter(\n (item) => item[this.primaryKeyword].toString() !== val.toString()\n );\n } else {\n this.data[this.name] = this.data[this.name].filter((id) => id.toString() !== val.toString());\n }\n }\n }\n\n if (this.useChips) {\n this._renderChips();\n }\n\n if (typeof this.opts.onSelect === 'function') {\n this.opts.onSelect.call(el, data, this, el.checked);\n }\n }\n\n getItem(key, val) {\n let result = this.items.filter((item) => item[key] == val)[0];\n return result ? result : null;\n }\n\n getSelectedItems(segment) {\n let ids = [];\n let result = [];\n let data = this.data[this.name];\n\n if (!Array.isArray(data)) {\n ids.push(data);\n } else {\n ids = data;\n }\n\n if (!this.useChips) {\n ids = ids.map(String);\n } else {\n ids = ids.map((obj) => obj[this.primaryKeyword].toString());\n }\n\n if (this.items.length > 0) {\n result = this.items.filter((item) => {\n return ids.indexOf(item.id.toString()) > -1;\n });\n\n if (segment) {\n result = result.map((obj) => obj[segment]).filter((obj) => obj != null);\n }\n } else {\n result = ids;\n }\n\n return result;\n }\n\n getSelectedItem(segment) {\n return this.getSelectedItems(segment)[0];\n }\n\n _renderItemList(items) {\n if (!items || !items.length) return [];\n\n const checkedItems = this.data[this.name].map((item) =>\n this.useChips ? item[this.primaryKeyword].toString() : item.toString()\n );\n const resultElements = [];\n\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let label = '';\n\n if (typeof this.labelTemplate === 'function') {\n label = this.labelTemplate(item);\n } else {\n if (item.name) {\n label = item.name;\n } else if (item.label) {\n label = item.label;\n } else if (item.value) {\n label = item.value;\n }\n }\n\n const id = this.useChips ? item[this.primaryKeyword] : item.id;\n const isChecked = checkedItems.indexOf(id.toString()) > -1;\n\n const temp = document.createElement('div');\n temp.innerHTML = this._getItemTemplate(item, i, label, isChecked).trim();\n const el = temp.firstElementChild;\n\n _itemDataMap.set(el, item);\n resultElements.push(el);\n }\n\n return resultElements;\n }\n\n _getItemTemplate(item, index, label, isChecked) {\n return `\n <div class=\"select-item\">\n <div class=\"select-item-${this.type}\">\n <div class=\"form-check\">\n <input type=\"${this.type}\"\n id=\"select-${this.name}-${item.id}\"\n value=\"${item.id}\"\n tabindex=\"-1\"\n ${isChecked ? 'checked' : ''}>\n <label for=\"select-${this.name}-${item.id}\">\n <span class=\"form-check-icon\">\n <svg viewBox=\"0 0 18 18\">\n <polyline points=\"1.5 6 4.5 9 10.5 1\"></polyline>\n </svg>\n </span>\n <span class=\"form-check-label\"${typeof this.labelTemplate !== 'function' ? ' data-label' : ''}>\n ${typeof this.labelTemplate !== 'function' ? escape(label) : label}\n </span>\n </label>\n </div>\n </div>\n </div>`;\n }\n\n _renderSearch() {\n if (!this.showSearch) {\n return '';\n } else {\n const faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n return `\n\n <div class=\"select-search\">\n\n <div class=\"select-search-input\">\n\n <input type=\"text\" name=\"select-search\" value=\"\" placeholder=\"${this.searchPlaceholder}\" tabindex=\"-1\">\n\n </div>\n\n <div class=\"select-search-icon\">\n\n <i class=\"${faNameSpace} fa-search icon\"></i>\n\n </div>\n\n </div>\n\n `;\n }\n }\n\n _renderFooter() {\n if (!this.showFooter) {\n return '';\n } else {\n return `\n\n <div class=\"select-footer\">\n\n <button class=\"btn btn-block btn-light btn-sm\" type=\"button\" tabindex=\"-1\" data-select-close >\n ${this.btnCloseText}\n </button>\n\n </div>\n\n `;\n }\n }\n\n isSearchApiEnabled() {\n return this.searchApi && this.searchApi.length;\n }\n\n _showSpinner() {\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n this.searchIconContainerEl.innerHTML = `<i class=\"${faNameSpace} fa-spinner-third fa-spin icon\"></i>`;\n }\n\n _hideSpinner() {\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n this.searchIconContainerEl.innerHTML = `<i class=\"${faNameSpace} fa-search icon\"></i>`;\n }\n\n selectItem(id) {\n const input = this.selectEl.querySelector(`input[value=\"${id}\"]`);\n\n if (input) {\n if (this.type === 'radio') {\n this.selectEl.querySelectorAll('input[type=\"radio\"]').forEach((inp) => {\n inp.checked = false;\n inp.classList.remove('checked');\n });\n if (this.useChips) {\n const labelEl = input.parentElement.querySelector('[data-label]');\n this.data[this.name] = [\n {\n [this.primaryKeyword]: id,\n label: labelEl ? labelEl.textContent : id,\n },\n ];\n } else {\n this.data[this.name] = [id];\n }\n } else {\n if (this.useChips) {\n const hasItem = this.data[this.name].find(\n (item) => item[this.primaryKeyword].toString() === id.toString()\n );\n if (!hasItem) {\n const labelEl = input.parentElement.querySelector('[data-label]');\n this.data[this.name].push({\n [this.primaryKeyword]: id,\n label: labelEl ? labelEl.textContent : id,\n });\n }\n } else if (this.data[this.name].indexOf(id) === -1) {\n this.data[this.name].push(id);\n }\n }\n\n input.checked = true;\n input.classList.add('checked');\n input.dispatchEvent(new Event('change', { bubbles: true }));\n\n return true;\n }\n\n return false;\n }\n\n clear() {\n const checkedInputs = Array.from(this.selectEl.querySelectorAll('input:checked'));\n\n this.selectEl.querySelectorAll('input').forEach((inp) => {\n inp.checked = false;\n inp.classList.remove('checked');\n });\n this.data[this.name] = [];\n\n if (this.useChips) {\n this._renderChips();\n } else if (this.dynamicTitle && typeof this.dynamicTitle !== 'function') {\n this.selectTitleEl.textContent = this.dynamicTitleDefault || this.cachedTitle;\n }\n\n if (this.showValidStateIcon) {\n if (this.selectIconContainerEl) this.selectIconContainerEl.innerHTML = this.selectIconDefault;\n }\n\n checkedInputs.forEach((input) => {\n const itemEl = input.closest('.select-item');\n const data = itemEl ? _itemDataMap.get(itemEl) || {} : {};\n if (typeof this.opts.onSelect === 'function') {\n this.opts.onSelect.call(input, data, this, false);\n }\n });\n }\n}\n\nSelect._jQueryInit();\n\nexport default Select;\n","import Component from './component';\nimport { deepMerge, touchEvents, generateUUID, playAnimation, resizeManager, scrollManager } from './utils';\n\nlet PerfectScrollbar = null;\n\ntry {\n PerfectScrollbar = require('perfect-scrollbar');\n if (PerfectScrollbar && PerfectScrollbar.default) {\n PerfectScrollbar = PerfectScrollbar.default;\n }\n} catch (e) {\n // PerfectScrollbar is optional\n}\n\nif (typeof window !== 'undefined' && PerfectScrollbar && !window.PerfectScrollbar) {\n window.PerfectScrollbar = PerfectScrollbar;\n}\n\nclass Dropdown extends Component {\n static NAME = 'coolDropdown';\n\n static DEFAULTS = {\n animation: true,\n animationIn: 'zoomIn',\n animationOut: 'zoomOut',\n animationSpeed: 'fastest',\n offset: null,\n minWidth: null,\n closeOnItemClick: true,\n positionObserver: true,\n content: false,\n scroll: true,\n scrollContentHeight: 100,\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n onItemClick: null,\n position: 'absolute',\n placement: 'bottom',\n align: 'start',\n };\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $el = $(this);\n let instance = $el.data(`plugin_${Dropdown.NAME}`);\n if (!instance) {\n instance = new Dropdown(this, typeof config === 'object' && config);\n $el.data(`plugin_${Dropdown.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (typeof $ === 'undefined' || !$.fn) return;\n const previousName = $.fn[Dropdown.NAME];\n $.fn[Dropdown.NAME] = Dropdown._jQueryInterface;\n $.fn[Dropdown.NAME].Constructor = Dropdown;\n $.fn[Dropdown.NAME].defaults = Dropdown.DEFAULTS || {};\n $.fn[Dropdown.NAME].noConflict = () => {\n $.fn[Dropdown.NAME] = previousName;\n return Dropdown._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = deepMerge({}, Dropdown.DEFAULTS, window.Cool?.settings?.dropdown || {}, opts || {});\n\n this.el = el;\n this._resizeCallback = null;\n this._scrollCallback = null;\n\n this.init();\n }\n\n setupResizeHandling() {\n if (window.ResizeObserver) {\n this._resizeCallback = () => {\n if (!this.contentOpen) return;\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n\n this.rafId = requestAnimationFrame(() => {\n this.setPosition();\n this.onUpdate();\n });\n };\n\n resizeManager.observe(this.el, this._resizeCallback);\n resizeManager.observe(document.body, this._resizeCallback);\n\n if (this.containerEl) {\n resizeManager.observe(this.containerEl, this._resizeCallback);\n }\n } else {\n let resizeTimeout;\n this.resizeHandler = () => {\n if (!this.contentOpen) return;\n\n clearTimeout(resizeTimeout);\n\n const now = performance.now();\n if (!this.lastResizeTime || now - this.lastResizeTime > 100) {\n this.setPosition();\n this.onUpdate();\n this.lastResizeTime = now;\n } else {\n resizeTimeout = setTimeout(() => {\n this.setPosition();\n this.onUpdate();\n }, 16);\n }\n };\n\n window.addEventListener('resize', this.resizeHandler, { passive: true });\n }\n }\n\n setupScrollHandling() {\n if (this.position === 'fixed') {\n this._scrollCallback = () => {\n if (!this.contentOpen || !this.dropdownEl.classList.contains('show')) return;\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n\n this.rafId = requestAnimationFrame(() => {\n this.setPosition();\n this.onUpdate();\n });\n };\n\n scrollManager.add(`dropdown-${this.id}`, this._scrollCallback);\n\n let scrollParent = this.el.parentElement;\n this.scrollableParents = [];\n\n while (scrollParent && scrollParent !== document.body) {\n const overflow = getComputedStyle(scrollParent).overflowY;\n if (overflow === 'scroll' || overflow === 'auto') {\n const handler = () => this._scrollCallback();\n scrollParent.addEventListener('scroll', handler, { passive: true });\n this.scrollableParents.push({ element: scrollParent, handler });\n }\n scrollParent = scrollParent.parentElement;\n }\n }\n }\n\n setupVisibilityDetection() {\n if (!window.IntersectionObserver) return;\n\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (!entry.isIntersecting && this.contentOpen) {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n\n this.rafId = requestAnimationFrame(() => {\n this.setPosition();\n });\n }\n });\n },\n {\n threshold: 0.1,\n rootMargin: '50px',\n }\n );\n\n this.intersectionObserver.observe(this.el);\n }\n\n init() {\n this.buildCache()\n .then(() => {\n this.buildScroll();\n this.setupVisibilityDetection();\n this.bindEvents();\n this.onInit();\n })\n .catch(() => {});\n }\n\n destroy() {\n this.unbindEvents();\n\n if (this.scroll && typeof this.scroll.destroy === 'function') {\n this.scroll.destroy();\n this.scroll = null;\n }\n\n if (this.dropdownEl) {\n this.dropdownEl.remove();\n }\n\n this.constructor.removeInstance(this.el);\n this.onDestroy();\n }\n\n update() {\n const hasDarkMode = this.scrollableContentEl && this.scrollableContentEl.classList.contains('ps-dark');\n\n if (this.scroll && typeof this.scroll.destroy === 'function') {\n this.scroll.destroy();\n this.scroll = null;\n }\n\n this.unbindEvents();\n this.buildCache()\n .then(() => {\n if (hasDarkMode && this.scrollableContentEl) {\n this.scrollableContentEl.classList.add('ps-dark');\n }\n this.buildScroll();\n this.setupVisibilityDetection();\n this.bindEvents();\n this.onUpdate();\n })\n .catch(() => {});\n }\n\n buildCache() {\n return new Promise((resolve, reject) => {\n this.el.classList.add('dropdown-trigger');\n\n this.containerEl = this.el.closest('.dropdown') || this.el.parentElement;\n\n this.id = 'dropdown-' + generateUUID();\n this.animation = this.el.dataset.animation || this.opts.animation;\n this.animationIn = this.el.dataset.animationIn || this.el.dataset.animationin || this.opts.animationIn;\n this.animationOut = this.el.dataset.animationOut || this.el.dataset.animationout || this.opts.animationOut;\n this.animationSpeed =\n this.el.dataset.animationSpeed || this.el.dataset.animationspeed || this.opts.animationSpeed;\n this.position = this.el.dataset.position || this.opts.position;\n this.placement = this.el.dataset.placement || this.opts.placement;\n this.align = this.el.dataset.align || this.opts.align;\n this.offset = this.el.dataset.offset || this.opts.offset;\n this.minWidth = this.el.dataset.minWidth || this.el.dataset.minwidth || this.opts.minWidth;\n this.scroll = this.el.dataset.scroll || this.opts.scroll;\n this.scrollContentHeight = this.el.dataset.scrollContentHeight || this.opts.scrollContentHeight;\n this.positionObserver = this.el.hasAttribute('data-position-observer')\n ? JSON.parse(this.el.getAttribute('data-position-observer'))\n : this.opts.positionObserver;\n this.closeOnItemClick =\n this.el.dataset.closeOnItemClick || this.el.dataset.closeonitemclick || this.opts.closeOnItemClick;\n this.preventClose = this.el.dataset.preventClose || this.el.dataset.preventclose || false;\n this.content = this.el.dataset.content || this.opts.content;\n this.contentOpen = false;\n\n if (this.containerEl.classList.contains('dropup')) {\n this.placement = 'top';\n } else if (this.containerEl.classList.contains('dropright')) {\n this.placement = 'right';\n } else if (this.containerEl.classList.contains('dropbottom')) {\n this.placement = 'bottom';\n } else if (this.containerEl.classList.contains('dropleft')) {\n this.placement = 'left';\n }\n\n const existingMenu = this.containerEl.querySelector('.dropdown-menu');\n\n if (this.position === 'fixed' && existingMenu) {\n this.dropdownEl = existingMenu.cloneNode(true);\n this.dropdownEl.id = this.id;\n this.dropdownEl.classList.remove('show');\n\n this.align = existingMenu.classList.contains('dropdown-menu-right') ? 'end' : this.align;\n\n document.body.appendChild(this.dropdownEl);\n existingMenu.remove();\n\n // Initialize nested dropdowns\n const nestedContainers = this.dropdownEl.querySelectorAll('.dropdown');\n nestedContainers.forEach((nestedContainer) => {\n const nestedTrigger = nestedContainer.querySelector('[data-toggle=\"dropdown\"]');\n const nestedMenu = nestedContainer.querySelector('.dropdown-menu');\n\n if (nestedTrigger && nestedMenu && !Dropdown.getInstance(nestedTrigger)) {\n new Dropdown(nestedTrigger, {\n position: 'absolute',\n closeOnItemClick: false,\n positionObserver: true,\n onShow: () => {\n const parentZIndex = parseInt(getComputedStyle(this.dropdownEl).zIndex || 9999, 10);\n nestedMenu.style.zIndex = parentZIndex + 1;\n },\n });\n }\n });\n\n this.dropdownItems = Array.from(this.dropdownEl.querySelectorAll('a, button, .dropdown-item')).filter(\n (item) => {\n return item.closest('.dropdown-menu') === this.dropdownEl;\n }\n );\n\n this.scrollableContentEl = this.dropdownEl.querySelector('.dropdown-scrollable-content');\n\n if (this.minWidth) {\n this.dropdownEl.style.minWidth = this.minWidth + 'px';\n }\n\n return resolve();\n } else if (typeof this.content === 'function') {\n let menuRight = this.opts.align === 'end' ? ' dropdown-menu-right' : '';\n\n const temp = document.createElement('div');\n temp.innerHTML = `<div class=\"dropdown-menu${menuRight}\" id=\"${this.id}\">${this.content()}</div>`;\n this.dropdownEl = temp.firstElementChild;\n\n if (this.position === 'fixed') {\n document.body.appendChild(this.dropdownEl);\n } else {\n this.el.insertAdjacentElement('afterend', this.dropdownEl);\n }\n\n this.scrollableContentEl = this.dropdownEl.querySelector('.dropdown-scrollable-content') || null;\n this.align = this.dropdownEl.classList.contains('dropdown-menu-right') ? 'end' : this.align;\n\n this.dropdownItems = Array.from(this.dropdownEl.querySelectorAll('a, button, .dropdown-item')).filter(\n (item) => {\n return item.closest('.dropdown-menu') === this.dropdownEl;\n }\n );\n\n if (this.minWidth) {\n this.dropdownEl.style.minWidth = this.minWidth + 'px';\n }\n\n return resolve();\n } else {\n this.dropdownEl = this.containerEl.querySelector('.dropdown-menu') || null;\n\n if (!this.dropdownEl) return reject();\n\n this.align = this.dropdownEl.classList.contains('dropdown-menu-right') ? 'end' : this.align;\n this.scrollableContentEl = this.dropdownEl.querySelector('.dropdown-scrollable-content') || null;\n\n this.dropdownItems = Array.from(this.dropdownEl.querySelectorAll('a, button, .dropdown-item')).filter(\n (item) => {\n return item.closest('.dropdown-menu') === this.dropdownEl;\n }\n );\n\n if (this.minWidth) {\n this.dropdownEl.style.minWidth = this.minWidth + 'px';\n }\n\n return resolve();\n }\n });\n }\n\n buildScroll() {\n if (this.opts.scroll && this.scrollableContentEl) {\n this.scrollableContentEl.style.maxHeight = this.scrollContentHeight + 'px';\n\n if (touchEvents()) {\n this.scrollableContentEl.style.overflowY = 'auto';\n } else if (PerfectScrollbar) {\n this.scroll = new PerfectScrollbar(this.scrollableContentEl, {\n wheelSpeed: 1,\n wheelPropagation: false,\n minScrollbarLength: 20,\n suppressScrollX: true,\n scrollYMarginOffset: 2,\n });\n } else {\n this.scrollableContentEl.style.overflowY = 'auto';\n }\n }\n }\n\n bindEvents() {\n this._triggerClickHandler = () => {\n if (this.contentOpen) {\n this.close();\n } else {\n this.show();\n }\n };\n\n this.el.addEventListener('click', this._triggerClickHandler);\n\n if (this.position === 'fixed') {\n this._dropdownItemHandler = (e) => {\n const target = e.target.closest('a, button, .dropdown-item');\n if (!target) return;\n if (target.closest('.dropdown-menu') !== this.dropdownEl) return;\n\n if (!target.classList.contains('dropdown-trigger') && !target.dataset.toggle) {\n if (this.closeOnItemClick) {\n this.close();\n }\n this.onItemClick(target, e);\n }\n };\n this.dropdownEl.addEventListener('click', this._dropdownItemHandler);\n } else {\n this._itemHandlers = [];\n this.dropdownItems.forEach((item) => {\n const handler = (e) => {\n if (!item.classList.contains('dropdown-trigger') && !item.dataset.toggle) {\n if (this.closeOnItemClick) {\n this.close();\n }\n this.onItemClick(item, e);\n }\n };\n item.addEventListener('click', handler);\n this._itemHandlers.push({ el: item, handler });\n });\n }\n\n this._documentClickHandler = (e) => {\n if (!this.contentOpen) return;\n\n const isClickInThisDropdown =\n this.el === e.target ||\n this.el.contains(e.target) ||\n this.dropdownEl === e.target ||\n this.dropdownEl.contains(e.target);\n\n const isNestedDropdownTrigger =\n this.dropdownEl.contains(e.target) && e.target.closest('[data-toggle=\"dropdown\"]');\n\n if (!isClickInThisDropdown && !isNestedDropdownTrigger) {\n this.close();\n }\n };\n\n document.addEventListener('click', this._documentClickHandler, { passive: true });\n document.addEventListener('touchstart', this._documentClickHandler, { passive: true });\n\n this.setupResizeHandling();\n this.setupScrollHandling();\n }\n\n unbindEvents() {\n if (this._triggerClickHandler) {\n this.el.removeEventListener('click', this._triggerClickHandler);\n this._triggerClickHandler = null;\n }\n\n if (this._dropdownItemHandler && this.dropdownEl) {\n this.dropdownEl.removeEventListener('click', this._dropdownItemHandler);\n this._dropdownItemHandler = null;\n }\n\n if (this._itemHandlers) {\n this._itemHandlers.forEach(({ el, handler }) => {\n el.removeEventListener('click', handler);\n });\n this._itemHandlers = null;\n }\n\n if (this._resizeCallback) {\n resizeManager.unobserve(this.el);\n resizeManager.unobserve(document.body);\n if (this.containerEl) {\n resizeManager.unobserve(this.containerEl);\n }\n this._resizeCallback = null;\n }\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n\n if (this._scrollCallback) {\n scrollManager.remove(`dropdown-${this.id}`);\n this._scrollCallback = null;\n }\n\n if (this.scrollableParents) {\n this.scrollableParents.forEach(({ element, handler }) => {\n element.removeEventListener('scroll', handler);\n });\n this.scrollableParents = [];\n }\n\n if (this.resizeHandler) {\n window.removeEventListener('resize', this.resizeHandler);\n this.resizeHandler = null;\n }\n\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n }\n\n if (this._documentClickHandler) {\n document.removeEventListener('click', this._documentClickHandler);\n document.removeEventListener('touchstart', this._documentClickHandler);\n this._documentClickHandler = null;\n }\n }\n\n setPosition(placement) {\n if (typeof placement === 'undefined' || placement === null) {\n placement = this.placement;\n }\n\n const triggerRect = this.el.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Temporarily make visible for measurement if hidden (display:none returns 0 for offsetWidth/Height)\n const needsMeasure = !this.dropdownEl.classList.contains('show') && this.dropdownEl.offsetWidth === 0;\n\n if (needsMeasure) {\n this.dropdownEl.style.display = 'block';\n this.dropdownEl.style.visibility = 'hidden';\n }\n\n let dropdownWidth = this.dropdownEl.offsetWidth;\n let dropdownHeight = this.dropdownEl.offsetHeight;\n let dropdownTriggerWidth = this.el.offsetWidth;\n let dropdownTriggerHeight = this.el.offsetHeight;\n\n let dropdownTriggerPosX, dropdownTriggerPosY;\n\n if (this.position === 'fixed') {\n dropdownTriggerPosX = triggerRect.left + window.scrollX;\n dropdownTriggerPosY = triggerRect.top + window.scrollY;\n } else {\n const offsetParent = this.dropdownEl.offsetParent || document.body;\n const parentRect = offsetParent.getBoundingClientRect();\n\n dropdownTriggerPosX = triggerRect.left - parentRect.left + offsetParent.scrollLeft;\n dropdownTriggerPosY = triggerRect.top - parentRect.top + offsetParent.scrollTop;\n }\n\n let dropdownPosX = 0;\n let dropdownPosY = 0;\n let offsetX = 0;\n let offsetY = 0;\n\n if (this.offset) {\n const offsets = this.offset.split(',');\n offsetX = parseInt(offsets[0], 10) || 0;\n offsetY = parseInt(offsets[1], 10) || 0;\n }\n\n const spacing =\n parseInt(getComputedStyle(document.documentElement).getPropertyValue('--cool-dropdown-spacer')) || 2;\n\n const calculatePosition = (currentPlacement, currentAlign = this.align) => {\n let x = 0,\n y = 0;\n\n switch (currentPlacement) {\n case 'top':\n x =\n currentAlign === 'end'\n ? dropdownTriggerPosX + dropdownTriggerWidth - dropdownWidth\n : dropdownTriggerPosX;\n y = dropdownTriggerPosY - dropdownHeight - spacing;\n break;\n case 'bottom':\n x =\n currentAlign === 'end'\n ? dropdownTriggerPosX + dropdownTriggerWidth - dropdownWidth\n : dropdownTriggerPosX;\n y = dropdownTriggerPosY + dropdownTriggerHeight + spacing;\n break;\n case 'left':\n x = dropdownTriggerPosX - dropdownWidth - spacing;\n y = dropdownTriggerPosY;\n break;\n case 'right':\n x = dropdownTriggerPosX + dropdownTriggerWidth + spacing;\n y = dropdownTriggerPosY;\n break;\n }\n\n return { x: x + offsetX, y: y + offsetY };\n };\n\n let finalPlacement = placement;\n let finalAlign = this.align;\n let position = calculatePosition(placement);\n\n if (this.positionObserver) {\n const margin = 5;\n\n const checkCollision = (pos) => {\n const collision = {\n top: false,\n bottom: false,\n left: false,\n right: false,\n };\n\n if (this.position === 'fixed') {\n collision.top = pos.y < margin;\n collision.bottom = pos.y + dropdownHeight > viewportHeight - margin;\n collision.left = pos.x < margin;\n collision.right = pos.x + dropdownWidth > viewportWidth - margin;\n } else {\n const dropdownLeft = triggerRect.left + (pos.x - dropdownTriggerPosX);\n const dropdownTop = triggerRect.top + (pos.y - dropdownTriggerPosY);\n const dropdownRight = dropdownLeft + dropdownWidth;\n const dropdownBottom = dropdownTop + dropdownHeight;\n\n collision.top = dropdownTop < margin;\n collision.bottom = dropdownBottom > viewportHeight - margin;\n collision.left = dropdownLeft < margin;\n collision.right = dropdownRight > viewportWidth - margin;\n }\n\n return collision;\n };\n\n const collision = checkCollision(position);\n\n if (placement === 'bottom' && collision.bottom && !collision.top) {\n finalPlacement = 'top';\n position = calculatePosition('top', finalAlign);\n } else if (placement === 'top' && collision.top && !collision.bottom) {\n finalPlacement = 'bottom';\n position = calculatePosition('bottom', finalAlign);\n } else if (placement === 'right' && collision.right && !collision.left) {\n finalPlacement = 'left';\n position = calculatePosition('left', finalAlign);\n } else if (placement === 'left' && collision.left && !collision.right) {\n finalPlacement = 'right';\n position = calculatePosition('right', finalAlign);\n }\n\n const newCollision = checkCollision(position);\n\n if (finalPlacement === 'top' || finalPlacement === 'bottom') {\n if (finalAlign === 'end' && newCollision.left && !newCollision.right) {\n finalAlign = 'start';\n position = calculatePosition(finalPlacement, finalAlign);\n } else if (finalAlign === 'start' && newCollision.right && !newCollision.left) {\n finalAlign = 'end';\n position = calculatePosition(finalPlacement, finalAlign);\n }\n }\n\n this.containerEl.classList.remove('dropup', 'dropbottom', 'dropleft', 'dropright');\n\n if (finalPlacement === 'top') {\n this.containerEl.classList.add('dropup');\n } else if (finalPlacement === 'left') {\n this.containerEl.classList.add('dropleft');\n } else if (finalPlacement === 'right') {\n this.containerEl.classList.add('dropright');\n } else {\n this.containerEl.classList.add('dropbottom');\n }\n\n this.dropdownEl.setAttribute('x-placement', finalPlacement + '-' + finalAlign);\n\n if (this.position === 'fixed') {\n position.x = Math.max(margin, Math.min(position.x, viewportWidth - dropdownWidth - margin));\n position.y = Math.max(margin, Math.min(position.y, viewportHeight - dropdownHeight - margin));\n } else {\n const dropdownScreenLeft = triggerRect.left + (position.x - dropdownTriggerPosX);\n const dropdownScreenTop = triggerRect.top + (position.y - dropdownTriggerPosY);\n\n if (dropdownScreenLeft < margin) {\n position.x += margin - dropdownScreenLeft;\n } else if (dropdownScreenLeft + dropdownWidth > viewportWidth - margin) {\n position.x -= dropdownScreenLeft + dropdownWidth - viewportWidth + margin;\n }\n\n if (dropdownScreenTop < margin) {\n position.y += margin - dropdownScreenTop;\n } else if (dropdownScreenTop + dropdownHeight > viewportHeight - margin) {\n position.y -= dropdownScreenTop + dropdownHeight - viewportHeight + margin;\n }\n }\n }\n\n dropdownPosX = position.x;\n dropdownPosY = position.y;\n\n if (needsMeasure) {\n this.dropdownEl.style.display = '';\n this.dropdownEl.style.visibility = '';\n }\n\n if (this.position === 'fixed') {\n Object.assign(this.dropdownEl.style, {\n position: 'fixed',\n top: Math.round(dropdownPosY) + 'px',\n left: Math.round(dropdownPosX) + 'px',\n right: 'auto',\n bottom: 'auto',\n transform: 'none',\n willChange: 'auto',\n zIndex: '9999',\n });\n } else {\n const containerParent = this.el.closest('.dropdown, .dropup, .dropleft, .dropright');\n\n if (containerParent) {\n const containerRect = containerParent.getBoundingClientRect();\n\n let relativeX = triggerRect.left - containerRect.left;\n let relativeY = triggerRect.top - containerRect.top;\n\n switch (finalPlacement) {\n case 'bottom':\n relativeY += dropdownTriggerHeight + spacing;\n if (finalAlign === 'end') {\n relativeX = relativeX + dropdownTriggerWidth - dropdownWidth;\n }\n break;\n case 'top':\n relativeY -= dropdownHeight + spacing;\n if (finalAlign === 'end') {\n relativeX = relativeX + dropdownTriggerWidth - dropdownWidth;\n }\n break;\n case 'left':\n relativeX -= dropdownWidth + spacing;\n break;\n case 'right':\n relativeX += dropdownTriggerWidth + spacing;\n break;\n }\n\n relativeX += offsetX;\n relativeY += offsetY;\n\n Object.assign(this.dropdownEl.style, {\n position: 'absolute',\n top: Math.round(relativeY) + 'px',\n left: Math.round(relativeX) + 'px',\n right: 'auto',\n bottom: 'auto',\n transform: 'none',\n willChange: 'auto',\n });\n }\n }\n }\n\n show() {\n if (!this.dropdownEl || this.dropdownEl.classList.contains('show')) {\n return;\n }\n\n this.setPosition();\n\n if (this.animation) {\n this.dropdownEl.setAttribute('x-placement', this.placement + '-' + this.align);\n this.dropdownEl.classList.add(this.animationSpeed);\n playAnimation(this.dropdownEl, this.animationIn);\n this.dropdownEl.classList.add('show');\n this.dropdownEl.id = this.id;\n this.el.setAttribute('data-dropdown', this.id);\n } else {\n this.dropdownEl.setAttribute('x-placement', this.placement + '-' + this.align);\n this.dropdownEl.classList.add('show');\n this.dropdownEl.id = this.id;\n this.el.setAttribute('data-dropdown', this.id);\n }\n\n if (this.opts.scroll && this.scroll && this.scrollableContentEl) {\n this.scrollableContentEl.offsetHeight;\n\n if (this.animation) {\n const animationDuration = getComputedStyle(this.dropdownEl).animationDuration;\n const duration = animationDuration ? parseFloat(animationDuration) * 1000 : 300;\n\n setTimeout(() => {\n if (this.scroll && typeof this.scroll.update === 'function') {\n this.scroll.update();\n }\n }, duration);\n } else {\n requestAnimationFrame(() => {\n if (this.scroll && typeof this.scroll.update === 'function') {\n this.scroll.update();\n }\n });\n }\n }\n\n this.contentOpen = true;\n this.onShow();\n }\n\n close() {\n if (!this.dropdownEl || this.preventClose) {\n return;\n }\n\n if (this.animation && !this.dropdownEl.classList.contains('animation')) {\n playAnimation(this.dropdownEl, this.animationOut).then(() => {\n this.dropdownEl.classList.remove('show');\n this.el.removeAttribute('data-dropdown');\n });\n } else {\n this.dropdownEl.classList.remove('show');\n this.el.removeAttribute('data-dropdown');\n }\n\n this.contentOpen = false;\n this.onClose();\n }\n\n onItemClick(el, e) {\n let onItemClick = this.opts.onItemClick;\n\n if (typeof onItemClick === 'function') {\n onItemClick.call(el, e, this);\n }\n }\n}\n\nDropdown._jQueryInit();\n\nexport default Dropdown;\n","import Component from './component';\nimport { deepMerge, generateUUID, playAnimation, resizeManager } from './utils';\n\nclass Tooltip extends Component {\n static NAME = 'coolTooltip';\n\n static DEFAULTS = {\n container: 'body',\n animation: false,\n animationIn: 'fadeIn',\n animationOut: 'fadeOut',\n animationSpeed: 'fastest',\n placement: 'bottom',\n content: '',\n trigger: 'auto',\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n };\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $el = $(this);\n let instance = $el.data(`plugin_${Tooltip.NAME}`);\n if (!instance) {\n instance = new Tooltip(this, typeof config === 'object' && config);\n $el.data(`plugin_${Tooltip.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (typeof $ === 'undefined' || !$.fn) return;\n const previousName = $.fn[Tooltip.NAME];\n $.fn[Tooltip.NAME] = Tooltip._jQueryInterface;\n $.fn[Tooltip.NAME].Constructor = Tooltip;\n $.fn[Tooltip.NAME].defaults = Tooltip.DEFAULTS || {};\n $.fn[Tooltip.NAME].noConflict = () => {\n $.fn[Tooltip.NAME] = previousName;\n return Tooltip._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = deepMerge({}, Tooltip.DEFAULTS, window.Cool?.settings?.tooltip || {}, opts || {});\n\n this.el = el;\n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n if (this.tooltipEl) {\n this.tooltipEl.remove();\n this.tooltipEl = null;\n }\n this.constructor.removeInstance(this.el);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n if (this.tooltipEl) {\n this.setPosition();\n }\n this.onUpdate();\n }\n\n buildCache() {\n this.containerEl = this.el.dataset.container\n ? document.querySelector(this.el.dataset.container)\n : document.querySelector(this.opts.container);\n this.id = 'tooltip-' + generateUUID();\n this.animation = this.el.dataset.animation !== undefined ? this.el.dataset.animation : this.opts.animation;\n this.animationIn = this.el.dataset.animationIn || this.el.dataset.animationin || this.opts.animationIn;\n this.animationOut = this.el.dataset.animationOut || this.el.dataset.animationout || this.opts.animationOut;\n this.animationSpeed =\n this.el.dataset.animationSpeed || this.el.dataset.animationspeed || this.opts.animationSpeed;\n this.placement = this.el.dataset.placement || this.opts.placement;\n this.placementChanged = false;\n this.content = this.el.dataset.content || this.opts.content;\n this.trigger = this.el.dataset.trigger || this.opts.trigger;\n }\n\n bindEvents() {\n if (this.trigger === 'auto') {\n this._mouseenterHandler = () => this.show();\n this._mouseleaveHandler = () => this.close();\n this._blurHandler = () => this.close();\n this._clickHandler = () => this.close();\n\n this.el.addEventListener('mouseenter', this._mouseenterHandler);\n this.el.addEventListener('mouseleave', this._mouseleaveHandler);\n this.el.addEventListener('blur', this._blurHandler);\n this.el.addEventListener('click', this._clickHandler);\n }\n\n if (window.ResizeObserver) {\n this._resizeCallback = () => {\n if (this.tooltipEl && this.tooltipEl.classList.contains('show')) {\n requestAnimationFrame(() => {\n this.setPosition();\n });\n }\n };\n\n resizeManager.observe(this.el, this._resizeCallback);\n }\n }\n\n unbindEvents() {\n if (this._mouseenterHandler) {\n this.el.removeEventListener('mouseenter', this._mouseenterHandler);\n this.el.removeEventListener('mouseleave', this._mouseleaveHandler);\n this.el.removeEventListener('blur', this._blurHandler);\n this.el.removeEventListener('click', this._clickHandler);\n }\n\n if (this._resizeCallback) {\n resizeManager.unobserve(this.el);\n this._resizeCallback = null;\n }\n }\n\n buildTooltip() {\n this.tooltipEl = document.createElement('div');\n this.tooltipEl.className = 'tooltip';\n this.tooltipEl.setAttribute('role', 'tooltip');\n this.tooltipEl.id = this.id;\n this.tooltipEl.innerHTML = `\n <div class=\"arrow\"></div>\n <div class=\"tooltip-inner\">${this.content}</div>\n `;\n\n this.containerEl.appendChild(this.tooltipEl);\n this.arrowEl = this.tooltipEl.querySelector('.arrow');\n }\n\n setPosition(placement) {\n if (typeof placement === 'undefined' || placement === null) {\n placement = this.placement;\n }\n\n this.tooltipEl.classList.add('tooltip-' + placement);\n\n const containerInnerWidth = this.containerEl.clientWidth;\n const containerInnerHeight = this.containerEl.clientHeight;\n const tooltipWidth = this.tooltipEl.offsetWidth;\n const tooltipHeight = this.tooltipEl.offsetHeight;\n const triggerRect = this.el.getBoundingClientRect();\n const tooltipTriggerWidth = this.el.offsetWidth;\n const tooltipTriggerHeight = this.el.offsetHeight;\n const tooltipTriggerPosX = triggerRect.left + window.scrollX;\n const tooltipTriggerPosY = triggerRect.top + window.scrollY;\n const arrowWidth = this.arrowEl.offsetWidth;\n const arrowHeight = this.arrowEl.offsetHeight;\n let arrowPos;\n let tooltipPosX;\n let tooltipPosY;\n\n if (placement === 'top') {\n tooltipPosX = Math.round(tooltipTriggerPosX - (tooltipWidth - tooltipTriggerWidth) / 2);\n tooltipPosY = Math.round(tooltipTriggerPosY - tooltipHeight);\n arrowPos = Math.round(tooltipWidth / 2 - arrowWidth / 2);\n this.arrowEl.style.left = arrowPos + 'px';\n } else if (placement === 'right') {\n tooltipPosX = Math.round(tooltipTriggerPosX + tooltipTriggerWidth);\n tooltipPosY = Math.round(tooltipTriggerPosY - (tooltipHeight - tooltipTriggerHeight) / 2);\n arrowPos = Math.round(tooltipHeight / 2 - arrowHeight / 2);\n this.arrowEl.style.top = arrowPos + 'px';\n } else if (placement === 'bottom') {\n tooltipPosX = Math.round(tooltipTriggerPosX - (tooltipWidth - tooltipTriggerWidth) / 2);\n tooltipPosY = Math.round(tooltipTriggerPosY + tooltipTriggerHeight);\n arrowPos = Math.round(tooltipWidth / 2 - arrowWidth / 2);\n this.arrowEl.style.left = arrowPos + 'px';\n } else if (placement === 'left') {\n tooltipPosX = Math.round(tooltipTriggerPosX - tooltipWidth);\n tooltipPosY = Math.round(tooltipTriggerPosY - (tooltipHeight - tooltipTriggerHeight) / 2);\n arrowPos = Math.round(tooltipHeight / 2 - arrowHeight / 2);\n this.arrowEl.style.top = arrowPos + 'px';\n }\n\n Object.assign(this.tooltipEl.style, {\n position: 'absolute',\n top: '0px',\n left: '0px',\n transform: `translate3d(${tooltipPosX}px, ${tooltipPosY}px, 0px)`,\n willChange: 'transform',\n });\n\n let tooltipOverflowCount = 0;\n const tooltipPosition = {\n left: this.tooltipEl.offsetLeft,\n top: this.tooltipEl.offsetTop,\n right: containerInnerWidth - (this.tooltipEl.offsetLeft + tooltipWidth),\n bottom: containerInnerHeight - (this.tooltipEl.offsetTop + tooltipHeight),\n };\n let tooltipOverflow = {\n left: false,\n top: false,\n right: false,\n bottom: false,\n };\n\n if (tooltipPosition.right < 0) {\n tooltipOverflow.right = true;\n tooltipOverflowCount++;\n }\n\n if (tooltipPosition.left < 0) {\n tooltipOverflow.left = true;\n tooltipOverflowCount++;\n }\n\n if (tooltipPosition.bottom < 0) {\n tooltipOverflow.bottom = true;\n tooltipOverflowCount++;\n }\n\n if (tooltipPosition.top < 0) {\n tooltipOverflow.top = true;\n tooltipOverflowCount++;\n }\n\n if (tooltipOverflowCount > 0) {\n if (!this.placementChanged && tooltipOverflow.left && tooltipPosition.right > tooltipWidth) {\n this.placementChanged = true;\n this.tooltipEl.classList.remove('tooltip-' + placement);\n this.arrowEl.removeAttribute('style');\n this.setPosition('right');\n } else if (!this.placementChanged && tooltipOverflow.top && tooltipPosition.top > tooltipHeight) {\n this.placementChanged = true;\n this.tooltipEl.classList.remove('tooltip-' + placement);\n this.arrowEl.removeAttribute('style');\n this.setPosition('bottom');\n } else if (!this.placementChanged && tooltipOverflow.right && tooltipPosition.left > tooltipWidth) {\n this.placementChanged = true;\n this.tooltipEl.classList.remove('tooltip-' + placement);\n this.arrowEl.removeAttribute('style');\n this.setPosition('left');\n } else if (!this.placementChanged && tooltipOverflow.bottom && tooltipPosition.top > tooltipHeight) {\n this.placementChanged = true;\n this.tooltipEl.classList.remove('tooltip-' + placement);\n this.arrowEl.removeAttribute('style');\n this.setPosition('top');\n } else if (\n !this.placementChanged &&\n (placement !== 'top' || placement !== 'bottom') &&\n (tooltipOverflow.left || tooltipOverflow.right)\n ) {\n if (tooltipPosition.top > tooltipPosition.bottom) {\n this.placementChanged = true;\n this.tooltipEl.classList.remove('tooltip-' + placement);\n this.arrowEl.removeAttribute('style');\n this.setPosition('top');\n } else {\n this.placementChanged = true;\n this.tooltipEl.classList.remove('tooltip-' + placement);\n this.arrowEl.removeAttribute('style');\n this.setPosition('bottom');\n }\n } else {\n this.fixTooltipPosition = true;\n }\n\n if (this.fixTooltipPosition) {\n if (tooltipOverflow.left) {\n let overflowAmount = Math.abs(tooltipPosition.left);\n let excludePlacements = ['top', 'bottom'];\n\n if (\n tooltipTriggerPosX >= tooltipPosX + overflowAmount &&\n excludePlacements.indexOf(placement) < 0\n ) {\n tooltipPosX += overflowAmount;\n } else {\n tooltipPosX += overflowAmount;\n arrowPos -= overflowAmount;\n }\n }\n\n if (tooltipOverflow.top) {\n let overflowAmount = Math.abs(tooltipPosition.top);\n tooltipPosY += overflowAmount;\n arrowPos -= overflowAmount;\n }\n\n if (tooltipOverflow.right) {\n let overflowAmount = Math.abs(tooltipPosition.right);\n let excludePlacements = ['top', 'bottom'];\n\n if (\n tooltipTriggerPosX <= tooltipPosX - overflowAmount &&\n excludePlacements.indexOf(placement) < 0\n ) {\n // width reduction not needed with native\n } else {\n tooltipPosX -= overflowAmount;\n arrowPos += overflowAmount;\n }\n }\n\n if (tooltipOverflow.bottom) {\n let overflowAmount = Math.abs(tooltipPosition.bottom);\n tooltipPosY -= overflowAmount;\n arrowPos += overflowAmount;\n }\n\n if (placement === 'top' || placement === 'bottom') {\n this.arrowEl.style.left = arrowPos + 'px';\n } else {\n this.arrowEl.style.top = arrowPos + 'px';\n }\n\n Object.assign(this.tooltipEl.style, {\n width: tooltipWidth + 'px',\n transform: `translate3d(${tooltipPosX}px, ${tooltipPosY}px, 0px)`,\n });\n\n this.fixTooltipPosition = false;\n }\n }\n }\n\n show() {\n if (this.tooltipEl) {\n return;\n }\n\n this.buildTooltip();\n this.setPosition();\n\n if (this.animation) {\n this.tooltipEl.classList.add(this.animationSpeed);\n playAnimation(this.tooltipEl, this.animationIn);\n this.tooltipEl.classList.add('show');\n this.tooltipEl.id = this.id;\n this.el.setAttribute('data-tooltip', this.id);\n } else {\n this.tooltipEl.classList.add('show');\n this.tooltipEl.id = this.id;\n this.el.setAttribute('data-tooltip', this.id);\n }\n\n this.onShow();\n }\n\n close() {\n if (!this.tooltipEl) {\n return;\n }\n\n if (this.animation && !this.tooltipEl.classList.contains('animation')) {\n playAnimation(this.tooltipEl, this.animationOut).then(() => {\n if (this.tooltipEl) {\n this.tooltipEl.remove();\n this.el.removeAttribute('data-tooltip');\n this.tooltipEl = null;\n this.placementChanged = false;\n }\n this.onClose();\n });\n } else {\n this.tooltipEl.remove();\n this.el.removeAttribute('data-tooltip');\n this.tooltipEl = null;\n this.placementChanged = false;\n this.onClose();\n }\n }\n}\n\nTooltip._jQueryInit();\n\nexport default Tooltip;\n","import Component from './component';\nimport { deepMerge } from './utils';\n\nclass Collapse extends Component {\n\n static NAME = 'coolCollapse';\n\n static DEFAULTS = {\n target: null,\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${Collapse.NAME}`);\n if (!instance) {\n instance = new Collapse(this, typeof config === 'object' && config);\n $el.data(`plugin_${Collapse.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (typeof $ === 'undefined' || !$.fn) return;\n const previousName = $.fn[Collapse.NAME];\n $.fn[Collapse.NAME] = Collapse._jQueryInterface;\n $.fn[Collapse.NAME].Constructor = Collapse;\n $.fn[Collapse.NAME].defaults = Collapse.DEFAULTS || {};\n $.fn[Collapse.NAME].noConflict = () => {\n $.fn[Collapse.NAME] = previousName;\n return Collapse._jQueryInterface;\n };\n }\n \n constructor(el, opts) {\n super();\n\n this.opts = deepMerge(\n {},\n Collapse.DEFAULTS,\n window.Cool?.settings?.collapse || {},\n opts || {}\n );\n\n this.el = el;\n \n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n this.constructor.removeInstance(this.el);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n this.onUpdate();\n }\n\n buildCache() {\n const targetSelector = this.el.dataset.target || this.opts.target;\n this.target = targetSelector\n ? document.querySelector(targetSelector)\n : this.el.parentElement?.querySelector('.collapse');\n \n this.breakpoint = this.el.dataset.breakpoint;\n this.expanded = this.el.getAttribute('aria-expanded') === 'true';\n\n if (this.target) {\n this.container = this.target.closest('.section-collapse');\n \n const indicatorSelector = this.el.dataset.target\n ? `[data-collapse-indicator=\"${this.el.dataset.target}\"]`\n : null;\n this.indicator = indicatorSelector\n ? document.querySelector(indicatorSelector)\n : this.el.parentElement?.querySelector('[data-collapse-indicator]');\n }\n }\n\n bindEvents() {\n this._clickHandler = (e) => {\n if (!this.breakpoint || !window.matchMedia(`(min-width: ${this.breakpoint}px)`).matches) {\n e.preventDefault();\n this.toggle();\n }\n };\n \n this.el.addEventListener('click', this._clickHandler);\n }\n\n unbindEvents() {\n if (this._clickHandler) {\n this.el.removeEventListener('click', this._clickHandler);\n }\n }\n\n toggle() {\n if (this.expanded) {\n this.close();\n } else {\n this.show();\n }\n }\n\n show() {\n if (this.expanded) return;\n\n this.target.classList.add('show');\n \n if (this.container) {\n this.container.classList.add('show');\n }\n\n if (this.indicator) {\n this.indicator.classList.add('show');\n }\n\n this.el.setAttribute('aria-expanded', 'true');\n this.expanded = true;\n \n this.onShow();\n }\n\n close() {\n if (!this.expanded) return;\n\n this.target.classList.remove('show');\n \n if (this.container) {\n this.container.classList.remove('show');\n }\n\n if (this.indicator) {\n this.indicator.classList.remove('show');\n }\n\n this.el.setAttribute('aria-expanded', 'false');\n this.expanded = false;\n \n this.onClose();\n }\n}\n\nCollapse._jQueryInit();\n\nexport default Collapse;","import Component from './component';\nimport { deepMerge, debounce } from './utils';\n\nclass SectionTabs extends Component {\n static NAME = 'coolSectionTabs';\n\n static DEFAULTS = {\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n };\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $el = $(this);\n let instance = $el.data(`plugin_${SectionTabs.NAME}`);\n if (!instance) {\n instance = new SectionTabs(this, typeof config === 'object' && config);\n $el.data(`plugin_${SectionTabs.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (typeof $ === 'undefined' || !$.fn) return;\n const previousName = $.fn[SectionTabs.NAME];\n $.fn[SectionTabs.NAME] = SectionTabs._jQueryInterface;\n $.fn[SectionTabs.NAME].Constructor = SectionTabs;\n $.fn[SectionTabs.NAME].defaults = SectionTabs.DEFAULTS || {};\n $.fn[SectionTabs.NAME].noConflict = () => {\n $.fn[SectionTabs.NAME] = previousName;\n return SectionTabs._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = deepMerge({}, SectionTabs.DEFAULTS, window.Cool?.settings?.sectionTabs || {}, opts || {});\n\n this.el = el;\n this._tabsCache = new WeakMap();\n this._resizeObserver = null;\n this._isProcessing = false;\n this._rafId = null;\n\n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n\n this._rafId = requestAnimationFrame(() => {\n if (this.dropdownContainer) this.dropdownContainer.classList.add('js-ready');\n this.el.classList.add('js-initialized');\n\n this.checkForChanges();\n this.onInit();\n });\n }\n\n destroy() {\n this.unbindEvents();\n\n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n }\n\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = null;\n }\n\n this.constructor.removeInstance(this.el);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n this.onUpdate();\n }\n\n buildCache() {\n const sectionTabs = this.el.closest('.section-tabs');\n\n this.dropdownContainer = sectionTabs\n ? sectionTabs.querySelector('.dropdown-container')\n : this.el.querySelector('.dropdown-container');\n this.dropdownList = sectionTabs\n ? sectionTabs.querySelector('.dropdown-list')\n : this.el.querySelector('.dropdown-list');\n }\n\n bindEvents() {\n const sectionTabs = this.el.closest('.section-tabs');\n const sectionHeader = sectionTabs ? sectionTabs.closest('.section-header') : null;\n const observeTarget = sectionHeader || sectionTabs || this.el;\n\n if (window.ResizeObserver) {\n this._resizeObserver = new ResizeObserver((_entries) => {\n if (!this._isProcessing) {\n this._isProcessing = true;\n\n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n }\n\n this._rafId = requestAnimationFrame(() => {\n this.checkForChanges();\n this._isProcessing = false;\n });\n }\n });\n\n this._resizeObserver.observe(observeTarget);\n } else {\n this._resizeHandler = debounce(() => {\n this.checkForChanges();\n }, 50);\n\n window.addEventListener('resize', this._resizeHandler, { passive: true });\n }\n }\n\n unbindEvents() {\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n }\n\n if (this._resizeHandler) {\n window.removeEventListener('resize', this._resizeHandler);\n }\n }\n\n moveToList(el) {\n const uuid = el.getAttribute('data-uuid');\n const tab = this.el.querySelector(`:scope > .tab-item[data-related-dropdown-item=\"${uuid}\"]`);\n\n if (tab) {\n tab.removeAttribute('data-related-dropdown-item');\n el.remove();\n }\n }\n\n moveToDropdown(el) {\n if (el.hasAttribute('data-related-dropdown-item')) {\n return;\n }\n if (!this.dropdownList) {\n return;\n }\n\n const uuid = crypto.randomUUID();\n const clone = el.cloneNode(true);\n const itemActionEl = clone.querySelector('.tab-item-action');\n\n if (itemActionEl) {\n itemActionEl.classList.add('dropdown-item');\n }\n\n clone.setAttribute('data-uuid', uuid);\n this.dropdownList.appendChild(clone);\n\n el.setAttribute('data-related-dropdown-item', uuid);\n }\n\n getTabDimensions(tab) {\n if (this._tabsCache.has(tab)) {\n const cached = this._tabsCache.get(tab);\n return cached;\n }\n\n const wasInvisible = tab.classList.contains('invisible');\n\n if (wasInvisible) {\n tab.classList.remove('invisible');\n }\n\n const sectionTabs = this.el.closest('.section-tabs');\n const container = sectionTabs || this.el;\n const originalOverflow = container.style.overflow;\n\n container.style.overflow = 'visible';\n container.offsetHeight;\n\n const width = tab.offsetWidth;\n const marginLeft = parseInt(getComputedStyle(tab).marginLeft, 10) || 0;\n const marginRight = parseInt(getComputedStyle(tab).marginRight, 10) || 0;\n const totalWidth = width + marginLeft + marginRight;\n\n container.style.overflow = originalOverflow;\n\n if (wasInvisible) {\n tab.classList.add('invisible');\n }\n\n const dimensions = { width, totalWidth };\n this._tabsCache.set(tab, dimensions);\n\n return dimensions;\n }\n\n availableSpace() {\n const sectionTabs = this.el.closest('.section-tabs');\n const sectionHeader = sectionTabs ? sectionTabs.closest('.section-header') : null;\n let containerWidth, paddingLeft, paddingRight;\n\n if (sectionHeader) {\n const headerStyles = getComputedStyle(sectionHeader);\n const flexDirection = headerStyles.flexDirection;\n\n if (flexDirection === 'column') {\n const container = sectionTabs || this.el;\n const containerStyles = getComputedStyle(container);\n\n containerWidth = container.offsetWidth;\n paddingLeft = parseInt(containerStyles.paddingLeft, 10) || 0;\n paddingRight = parseInt(containerStyles.paddingRight, 10) || 0;\n } else {\n containerWidth = sectionHeader.offsetWidth;\n paddingLeft = parseInt(headerStyles.paddingLeft, 10) || 0;\n paddingRight = parseInt(headerStyles.paddingRight, 10) || 0;\n\n const sectionSearch = sectionHeader.querySelector('.section-search');\n\n if (sectionSearch) {\n containerWidth -= sectionSearch.offsetWidth;\n const headerGap = parseInt(headerStyles.gap, 10) || 0;\n containerWidth -= headerGap;\n }\n }\n } else {\n const container = sectionTabs || this.el;\n const containerStyles = getComputedStyle(container);\n\n containerWidth = container.offsetWidth;\n paddingLeft = parseInt(containerStyles.paddingLeft, 10) || 0;\n paddingRight = parseInt(containerStyles.paddingRight, 10) || 0;\n }\n\n const dropdownWidth = this.dropdownContainer\n ? this.dropdownContainer.classList.contains('visible')\n ? this.dropdownContainer.offsetWidth\n : 40\n : 0;\n const available = containerWidth - paddingLeft - paddingRight - dropdownWidth;\n\n return available;\n }\n\n checkForChanges() {\n if (!this.dropdownList) {\n return;\n }\n\n this._tabsCache = new WeakMap();\n\n const tabs = Array.from(this.el.querySelectorAll(':scope > .tab-item'));\n const dropdownItems = Array.from(this.dropdownList.children);\n const availableSpace = this.availableSpace();\n const gap = parseInt(getComputedStyle(this.el).gap, 10) || 0;\n\n if (window.innerWidth < 768 && availableSpace < 200) {\n tabs.forEach((tab) => {\n tab.classList.remove('invisible');\n tab.removeAttribute('data-related-dropdown-item');\n });\n if (this.dropdownContainer) {\n this.dropdownContainer.classList.remove('visible');\n }\n return;\n }\n\n let accumulatedWidth = 0;\n let visibleTabs = [];\n let overflowTabs = [];\n\n for (let i = 0; i < tabs.length; i++) {\n const tab = tabs[i];\n const { totalWidth } = this.getTabDimensions(tab);\n const widthWithGap = accumulatedWidth + totalWidth + (i > 0 ? gap : 0);\n\n if (widthWithGap <= availableSpace) {\n accumulatedWidth = widthWithGap;\n visibleTabs.push(tab);\n\n const relatedDropdownId = tab.getAttribute('data-related-dropdown-item');\n\n if (relatedDropdownId) {\n const dropdownItem = this.dropdownList.querySelector(`[data-uuid=\"${relatedDropdownId}\"]`);\n if (dropdownItem) {\n this.moveToList(dropdownItem);\n }\n }\n } else {\n overflowTabs.push(tab);\n }\n }\n\n overflowTabs.forEach((tab, _index) => {\n if (!tab.hasAttribute('data-related-dropdown-item')) {\n this.moveToDropdown(tab);\n }\n });\n\n if (dropdownItems.length > 0 && overflowTabs.length === 0) {\n const remainingSpace = availableSpace - accumulatedWidth;\n\n for (let i = dropdownItems.length - 1; i >= 0; i--) {\n const dropdownItem = dropdownItems[i];\n const uuid = dropdownItem.getAttribute('data-uuid');\n const originalTab = this.el.querySelector(`[data-related-dropdown-item=\"${uuid}\"]`);\n\n if (originalTab) {\n const { totalWidth } = this.getTabDimensions(originalTab);\n const widthWithGap = totalWidth + (accumulatedWidth > 0 ? gap : 0);\n\n if (widthWithGap <= remainingSpace) {\n this.moveToList(dropdownItem);\n visibleTabs.push(originalTab);\n accumulatedWidth += widthWithGap;\n } else {\n break;\n }\n }\n }\n }\n\n tabs.forEach((tab) => {\n const shouldBeVisible = visibleTabs.includes(tab);\n if (shouldBeVisible) {\n tab.classList.remove('invisible');\n } else {\n tab.classList.add('invisible');\n }\n });\n\n const hasDropdownItems = this.dropdownList && this.dropdownList.children.length > 0;\n\n if (this.dropdownContainer) {\n this.dropdownContainer.classList.toggle('visible', hasDropdownItems);\n }\n }\n}\n\nSectionTabs._jQueryInit();\n\nexport default SectionTabs;\n","import Component from './component';\nimport { deepMerge, generateUUID, playAnimation } from './utils';\n\nclass Toast extends Component {\n static NAME = 'coolToast';\n\n static DEFAULTS = {\n title: '',\n content: '',\n icon: '',\n action: null,\n template: '',\n placement: 'top-right',\n animation: true,\n animationIn: null,\n animationOut: null,\n animationSpeed: 'faster',\n offsetX: null,\n offsetY: null,\n dismiss: 3,\n header: false,\n maxVisible: 3,\n onInitialize: null,\n onDestroy: null,\n onInit: null,\n onShow: null,\n onClose: null,\n onClick: null,\n };\n\n static _jQueryInterface(config) {\n const $el = $(this);\n let instance = $el.data(`plugin_${Toast.NAME}`);\n\n if (!instance) {\n instance = new Toast(this, typeof config === 'object' && config);\n $el.data(`plugin_${Toast.NAME}`, instance);\n }\n\n if (typeof config === 'string') instance[config]();\n }\n\n static _jQueryInit() {\n if (typeof $ === 'undefined' || !$.fn) return;\n const previousName = $.fn[Toast.NAME];\n $.fn[Toast.NAME] = Toast._jQueryInterface;\n $.fn[Toast.NAME].Constructor = Toast;\n $.fn[Toast.NAME].defaults = Toast.DEFAULTS || {};\n $.fn[Toast.NAME].noConflict = () => {\n $.fn[Toast.NAME] = previousName;\n return Toast._jQueryInterface;\n };\n }\n\n constructor(container, opts) {\n super();\n\n this.settings = deepMerge({}, Toast.DEFAULTS, window.Cool?.settings?.toast || {}, opts || {});\n\n this.container = typeof container === 'string' ? document.querySelector(container) : container;\n if (container && container.jquery) this.container = container[0];\n\n // Map of placement → { el, toasts[], queue[] }\n this.containers = new Map();\n this.onInitialize = this.settings.onInitialize;\n this.onDestroy = this.settings.onDestroy;\n }\n\n /**\n * Get or create the .toast-container element for a given placement.\n */\n _getContainer(placement, offsetX, offsetY, maxVisible) {\n if (this.containers.has(placement)) {\n return this.containers.get(placement);\n }\n\n const el = document.createElement('div');\n el.className = 'toast-container';\n el.setAttribute('data-placement', placement);\n\n // Apply offset overrides via CSS custom properties\n if (offsetX != null) {\n el.style.setProperty('--_toast-offset-x', typeof offsetX === 'number' ? `${offsetX}px` : offsetX);\n }\n\n if (offsetY != null) {\n el.style.setProperty('--_toast-offset-y', typeof offsetY === 'number' ? `${offsetY}px` : offsetY);\n }\n\n if (maxVisible != null) {\n el.style.setProperty('--_toast-max-visible', String(maxVisible));\n }\n\n this.container.appendChild(el);\n\n // Hover → pause all dismiss timers in this container\n el.addEventListener('mouseenter', () => {\n this._pauseTimers(entry);\n });\n\n el.addEventListener('mouseleave', () => {\n this._resumeTimers(entry);\n });\n\n const entry = {\n el,\n toasts: [],\n queue: [],\n };\n\n this.containers.set(placement, entry);\n\n return entry;\n }\n\n /**\n * Remove an empty container from the DOM.\n */\n _cleanupContainer(placement) {\n const entry = this.containers.get(placement);\n\n if (entry && entry.toasts.length === 0 && entry.queue.length === 0) {\n entry.el.remove();\n this.containers.delete(placement);\n }\n }\n\n /**\n * Update stacking indices and collapse-height custom properties\n * for all toasts in a given container.\n */\n _updateStack(entry) {\n const toasts = entry.toasts;\n const maxVisible = parseInt(\n entry.el.style.getPropertyValue('--_toast-max-visible') || this.settings.maxVisible,\n 10\n );\n\n // last child in DOM = front-most (index 0)\n for (let i = 0; i < toasts.length; i++) {\n const toast = toasts[i];\n const index = toasts.length - 1 - i; // 0 = newest (last in array)\n\n toast.el.style.setProperty('--_toast-index', String(index));\n\n // Measure height for collapse offset\n const height = toast.el.offsetHeight;\n toast.el.style.setProperty('--_toast-collapse-height', `${height}px`);\n\n // Beyond maxVisible → hidden\n if (index >= maxVisible) {\n toast.el.setAttribute('data-toast-hidden', 'true');\n } else {\n toast.el.removeAttribute('data-toast-hidden');\n }\n }\n }\n\n /**\n * Pause all dismiss timers for toasts in the given container entry.\n */\n _pauseTimers(entry) {\n const now = Date.now();\n\n for (const toast of entry.toasts) {\n if (toast._dismissTimer) {\n clearTimeout(toast._dismissTimer);\n toast._dismissTimer = null;\n toast._dismissRemaining = Math.max(0, (toast._dismissEnd || now) - now);\n }\n }\n }\n\n /**\n * Resume dismiss timers for toasts in the given container entry.\n */\n _resumeTimers(entry) {\n for (const toast of entry.toasts) {\n if (toast._dismissRemaining != null && toast._dismissRemaining > 0) {\n this._startDismissTimer(toast, toast._dismissRemaining);\n }\n\n toast._dismissRemaining = null;\n }\n }\n\n /**\n * Start (or restart) the auto-dismiss timer for a toast.\n */\n _startDismissTimer(toast, ms) {\n toast._dismissEnd = Date.now() + ms;\n toast._dismissTimer = setTimeout(() => {\n toast._dismissTimer = null;\n toast._dismissRemaining = null;\n this.close(toast);\n }, ms);\n }\n\n /**\n * Public API: create and show a toast.\n */\n init(opts) {\n const settings = deepMerge({}, this.settings, opts || {});\n const toast = this._buildToast(settings);\n\n const entry = this._getContainer(toast.placement, settings.offsetX, settings.offsetY, settings.maxVisible);\n\n entry.toasts.push(toast);\n toast._containerEntry = entry;\n\n this._showToast(toast, entry);\n this.onInit(toast);\n\n return toast;\n }\n\n destroy() {\n // Close all toasts in every container\n for (const [, entry] of this.containers) {\n const toastsCopy = [...entry.toasts];\n\n for (const toast of toastsCopy) {\n this._removeToast(toast, entry, false);\n }\n\n entry.queue.length = 0;\n }\n\n // Remove all containers from DOM\n for (const [, entry] of this.containers) {\n entry.el.remove();\n }\n\n this.containers.clear();\n this.onDestroy();\n }\n\n /**\n * Build a toast object from settings — creates the DOM element.\n */\n _buildToast(settings) {\n // Auto-detect animation direction based on placement if not explicitly set\n let animationIn = settings.animationIn;\n let animationOut = settings.animationOut;\n\n if (!animationIn || !animationOut) {\n const isTop = settings.placement.startsWith('top-');\n if (!animationIn) {\n animationIn = isTop ? 'slideInDown' : 'slideInUp';\n }\n if (!animationOut) {\n animationOut = isTop ? 'slideOutUp' : 'slideOutDown';\n }\n }\n\n const toast = {\n uuid: 'toast-' + generateUUID(),\n placement: settings.placement,\n animation: settings.animation,\n animationIn: animationIn,\n animationOut: animationOut,\n animationSpeed: settings.animationSpeed,\n dismiss: settings.dismiss,\n title: settings.title,\n content: settings.content,\n icon: settings.icon,\n action: settings.action,\n template: settings.template,\n maxBodyHeight: settings.maxBodyHeight,\n onInit: settings.onInit,\n onShow: settings.onShow,\n onClose: settings.onClose,\n onClick: settings.onClick,\n _dismissTimer: null,\n _dismissEnd: null,\n _dismissRemaining: null,\n _containerEntry: null,\n };\n\n let html;\n\n if (typeof toast.template === 'function') {\n html = toast.template(toast);\n } else {\n html = this._renderTemplate(toast);\n }\n\n const temp = document.createElement('div');\n temp.innerHTML = html.trim();\n toast.el = temp.firstElementChild;\n toast.innerEl = toast.el.querySelector('.toast-inner');\n toast.closeBtn = toast.el.querySelector('[data-toast-close]');\n\n return toast;\n }\n\n /**\n * Append toast to container and play entry animation.\n */\n _showToast(toast, entry) {\n entry.el.appendChild(toast.el);\n\n // Bind click handler\n toast._closeHandler = (e) => {\n const closeBtn = e.target.closest('[data-toast-close]');\n\n if (closeBtn) {\n e.preventDefault();\n e.stopPropagation();\n this.close(toast);\n return;\n }\n\n if (typeof toast.onClick === 'function') {\n toast.onClick.call(toast, e);\n }\n\n if (toast.action) {\n const href = typeof toast.action === 'object' ? toast.action.uri : toast.action;\n\n if (href) {\n window.location.href = href;\n }\n }\n\n this.close(toast);\n };\n\n toast.el.addEventListener('click', toast._closeHandler);\n\n // Update stack indices after adding\n this._updateStack(entry);\n\n // Force reflow and make visible before animation\n toast.el.offsetHeight; // eslint-disable-line no-unused-expressions\n toast.el.classList.add('show');\n\n // Small delay to ensure 'show' class is applied before animation\n requestAnimationFrame(() => {\n // Animate in\n if (toast.animation) {\n toast.innerEl.classList.add(toast.animationSpeed);\n playAnimation(toast.innerEl, toast.animationIn);\n }\n });\n\n // Auto-dismiss\n if (toast.dismiss) {\n this._startDismissTimer(toast, toast.dismiss * 1000);\n }\n\n this.onShow(toast);\n }\n\n /**\n * Close and remove a toast (with optional animation).\n */\n close(toast) {\n const entry = toast._containerEntry;\n if (!entry) return;\n\n // Clear dismiss timer\n if (toast._dismissTimer) {\n clearTimeout(toast._dismissTimer);\n toast._dismissTimer = null;\n }\n\n if (toast.animation && toast.innerEl && !toast.innerEl.classList.contains('animation')) {\n playAnimation(toast.innerEl, toast.animationOut).then(() => {\n this._removeToast(toast, entry, true);\n });\n } else {\n this._removeToast(toast, entry, true);\n }\n }\n\n /**\n * Remove toast element from DOM, update stack, process queue.\n */\n _removeToast(toast, entry, processQueue) {\n // Remove from DOM\n if (toast.el && toast.el.parentNode) {\n toast.el.remove();\n }\n\n // Remove click handler reference\n if (toast._closeHandler) {\n toast.el.removeEventListener('click', toast._closeHandler);\n toast._closeHandler = null;\n }\n\n // Remove from toasts array\n entry.toasts = entry.toasts.filter((t) => t.uuid !== toast.uuid);\n\n // Update remaining stack\n this._updateStack(entry);\n\n // Process queue — show next queued toast if below maxVisible\n if (processQueue && entry.queue.length > 0) {\n const maxVisible = parseInt(\n entry.el.style.getPropertyValue('--_toast-max-visible') || this.settings.maxVisible,\n 10\n );\n\n if (entry.toasts.length < maxVisible) {\n const nextToast = entry.queue.shift();\n entry.toasts.push(nextToast);\n nextToast._containerEntry = entry;\n this._showToast(nextToast, entry);\n }\n }\n\n // Cleanup empty container\n this._cleanupContainer(toast.placement);\n\n this.onClose(toast);\n }\n\n onInitialize() {\n const onInitialize = this.onInitialize;\n\n if (typeof onInitialize === 'function') {\n onInitialize.call(this.container);\n }\n }\n\n onDestroy() {\n const onDestroy = this.onDestroy;\n\n if (typeof onDestroy === 'function') {\n onDestroy.call(this.container);\n }\n }\n\n onInit(toast) {\n const onInit = toast.onInit;\n\n if (typeof onInit === 'function') {\n onInit.call(toast);\n }\n }\n\n onShow(toast) {\n const onShow = toast.onShow;\n\n if (typeof onShow === 'function') {\n onShow.call(toast);\n }\n }\n\n onClose(toast) {\n const onClose = toast.onClose;\n\n if (typeof onClose === 'function') {\n onClose.call(toast);\n }\n }\n\n _renderTemplate(toast) {\n let content = '';\n let header = '';\n let body = '';\n let bodyCloseBtn = '';\n let iconHtml = '';\n\n if (typeof toast.content === 'function') {\n content = toast.content();\n } else {\n content = toast.content;\n }\n\n if (toast.icon) {\n if (typeof toast.icon === 'string' && toast.icon.trimStart().startsWith('<')) {\n iconHtml = `<div class=\"toast-icon\">${toast.icon}</div>`;\n } else {\n iconHtml = `<div class=\"toast-icon\"><img src=\"${toast.icon}\" alt=\"\"></div>`;\n }\n }\n\n if (iconHtml || toast.title) {\n header = `\n <div class=\"toast-header\">\n ${iconHtml}\n\n <span class=\"mr-auto\">${toast.title}</span>\n\n <button type=\"button\" data-toast-close>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n </button>\n\n </div>\n `;\n } else {\n bodyCloseBtn = `\n <button type=\"button\" data-toast-close>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n </button>\n `;\n }\n\n body = `\n <div class=\"toast-body\"><div>${content}</div>${bodyCloseBtn}</div>\n `;\n\n const actionAttr = toast.action ? ' role=\"button\" style=\"cursor: pointer;\"' : '';\n\n return `\n <div class=\"toast${toast.action ? ' toast-actionable' : ''}\" role=\"alert\" id=\"${toast.uuid}\"${actionAttr}>\n\n <div class=\"toast-inner\">\n\n ${header}\n ${body}\n\n </div>\n\n </div>\n `;\n }\n}\n\nToast._jQueryInit();\n\nexport default Toast;\n","import Component from './component';\nimport { deepMerge, escapeHtml, generateUUID, playAnimation } from './utils';\n\nclass Dialog extends Component {\n static NAME = 'coolDialog';\n\n static DEFAULTS = {\n title: '',\n template: '',\n body: '',\n footer: true,\n header: true,\n size: '',\n classes: '',\n centered: true,\n backdrop: true,\n preventScroll: true,\n closeBtn: true,\n animation: true,\n animationIn: 'zoomIn',\n animationOut: 'fadeOut',\n animationSpeed: 'fastest',\n maxBodyHeight: null,\n overflowVisible: false,\n onInitialize: null,\n onDestroy: null,\n onInit: null,\n onShow: null,\n onClose: null,\n callbacks: {},\n actions: {},\n };\n\n static _jQueryInterface(config) {\n const $el = $(this);\n let instance = $el.data(`plugin_${Dialog.NAME}`);\n\n if (!instance) {\n instance = new Dialog(this, typeof config === 'object' && config);\n $el.data(`plugin_${Dialog.NAME}`, instance);\n }\n\n if (typeof config === 'string') instance[config]();\n }\n\n static _jQueryInit() {\n if (typeof $ === 'undefined' || !$.fn) return;\n const previousName = $.fn[Dialog.NAME];\n $.fn[Dialog.NAME] = Dialog._jQueryInterface;\n $.fn[Dialog.NAME].Constructor = Dialog;\n $.fn[Dialog.NAME].defaults = Dialog.DEFAULTS || {};\n $.fn[Dialog.NAME].noConflict = () => {\n $.fn[Dialog.NAME] = previousName;\n return Dialog._jQueryInterface;\n };\n }\n\n constructor(container, opts) {\n super();\n\n this.settings = deepMerge({}, Dialog.DEFAULTS, window.Cool?.settings?.dialog || {}, opts || {});\n\n this.container = typeof container === 'string' ? document.querySelector(container) : container;\n if (container && container.jquery) this.container = container[0];\n this.dialogs = [];\n this.onInitialize = this.settings.onInitialize;\n this.onDestroy = this.settings.onDestroy;\n }\n\n init(opts) {\n let settings = deepMerge({}, this.settings, opts || {});\n\n if (opts && opts.actions) settings.actions = opts.actions || {};\n if (opts && opts.callbacks) settings.callbacks = opts.callbacks || {};\n\n if (settings.callbacks && typeof settings.callbacks === 'object') {\n Object.keys(settings.callbacks).forEach((key) => {\n if (!Object.prototype.hasOwnProperty.call(settings.actions, key)) {\n if (this.settings.actions && this.settings.actions[key]) {\n settings.actions[key] = deepMerge({}, this.settings.actions[key]);\n } else {\n settings.actions[key] = {};\n }\n } else {\n if (\n typeof settings.actions[key] === 'object' &&\n !Object.prototype.hasOwnProperty.call(settings.actions[key], 'content')\n ) {\n if (\n this.settings.actions &&\n this.settings.actions[key] &&\n typeof this.settings.actions[key] === 'object' &&\n Object.prototype.hasOwnProperty.call(this.settings.actions[key], 'content')\n ) {\n settings.actions[key].content = this.settings.actions[key].content;\n }\n }\n }\n });\n }\n\n const dialog = this.buildDialog(settings);\n\n this.show(dialog);\n this.bindEvents(dialog);\n this.onInit(dialog);\n\n return dialog;\n }\n\n destroy() {\n this.onDestroy();\n }\n\n buildDialog(settings) {\n const self = this;\n const dialog = {\n uuid: 'dialog-' + generateUUID(),\n title: settings.title,\n template: settings.template,\n body: settings.body,\n footer: settings.footer,\n header: settings.header,\n size: settings.size,\n classes: settings.classes,\n centered: settings.centered,\n backdrop: settings.backdrop,\n preventScroll: settings.preventScroll,\n closeBtn: settings.closeBtn,\n animation: settings.animation,\n animationIn: settings.animationIn,\n animationOut: settings.animationOut,\n animationSpeed: settings.animationSpeed,\n callbacks: settings.callbacks,\n maxBodyHeight: settings.maxBodyHeight,\n overflowVisible: settings.overflowVisible,\n actions: settings.actions,\n actionInProgress: false,\n actionThreshold: 300,\n onInit: settings.onInit,\n onShow: settings.onShow,\n onClose: settings.onClose,\n };\n\n if (dialog.maxBodyHeight == null && dialog.size !== 'full') {\n dialog.maxBodyHeight = window.innerHeight - 200;\n }\n\n let html;\n if (typeof dialog.template === 'function') {\n html = dialog.template();\n } else {\n html = this._renderTemplate(dialog);\n }\n\n const temp = document.createElement('div');\n temp.innerHTML = html.trim();\n dialog.el = temp.firstElementChild;\n\n if (typeof $ !== 'undefined' && $.fn) {\n dialog.$el = $(dialog.el);\n }\n\n dialog.show = function () {\n self.show(dialog);\n };\n\n dialog.close = function () {\n self.close(dialog);\n };\n\n this.dialogs.push(dialog);\n\n return dialog;\n }\n\n bindEvents(dialog) {\n const self = this;\n\n dialog._actionHandler = (e) => {\n const target = e.target.closest(\n '[data-dialog-action], [data-dialog-confirm], [data-dialog-close], [data-dialog-remove]'\n );\n if (!target) return;\n\n e.preventDefault();\n\n if (dialog.actionInProgress) {\n e.stopPropagation();\n return;\n }\n\n dialog.actionInProgress = true;\n\n const commonActions = ['confirm', 'close', 'remove'];\n let actionKey = target.dataset.dialogAction;\n\n if (!actionKey) {\n for (const commonAction of commonActions) {\n if (target.hasAttribute(`data-dialog-${commonAction}`)) {\n actionKey = commonAction;\n break;\n }\n }\n }\n\n const action = dialog.actions[actionKey] || {};\n dialog.el.dispatchEvent(new CustomEvent(`dialog.${actionKey}`, { bubbles: true }));\n\n const callback =\n typeof action.callback === 'function'\n ? action.callback\n : typeof dialog.callbacks[actionKey] === 'function'\n ? dialog.callbacks[actionKey]\n : null;\n\n const resetActionFlag = (immediately = false) => {\n if (immediately) {\n dialog.actionInProgress = false;\n } else {\n setTimeout(() => {\n dialog.actionInProgress = false;\n }, dialog.actionThreshold);\n }\n };\n\n if (typeof callback === 'function') {\n try {\n const result = callback.call(\n self,\n function () {\n if (commonActions.includes(actionKey)) self.close(dialog);\n resetActionFlag();\n },\n dialog\n );\n\n if (result && typeof result.then === 'function') {\n result\n .then((promiseResult) => {\n if (promiseResult === false) {\n resetActionFlag();\n }\n })\n .catch(() => {\n resetActionFlag();\n });\n } else if (result === false) {\n resetActionFlag();\n } else {\n resetActionFlag();\n }\n } catch (_error) {\n resetActionFlag();\n }\n } else if (commonActions.includes(actionKey)) {\n self.close(dialog);\n resetActionFlag();\n } else {\n resetActionFlag();\n }\n };\n\n dialog.el.addEventListener('click', dialog._actionHandler);\n\n if (dialog.maxBodyHeight !== null && dialog.size !== 'full') {\n const updateMaxBodyHeight = () => {\n dialog.maxBodyHeight = window.innerHeight - 200;\n return dialog.maxBodyHeight;\n };\n\n if (window.ResizeObserver) {\n dialog.resizeObserver = new ResizeObserver(() => {\n if (dialog.rafId) {\n cancelAnimationFrame(dialog.rafId);\n }\n\n dialog.rafId = requestAnimationFrame(() => {\n const newHeight = updateMaxBodyHeight();\n const bodyEl = dialog.el.querySelector('.dialog-body');\n if (bodyEl) bodyEl.style.setProperty('--cool-dialog-body-height', newHeight + 'px');\n });\n });\n\n dialog.resizeObserver.observe(document.body);\n } else {\n let resizeTimeout;\n let lastOrientation = window.orientation;\n\n dialog.resizeHandler = () => {\n clearTimeout(resizeTimeout);\n\n const now = performance.now();\n const orientationChanged = window.orientation !== lastOrientation;\n\n if (orientationChanged) {\n lastOrientation = window.orientation;\n }\n\n if (!dialog.lastResizeTime || now - dialog.lastResizeTime > 100 || orientationChanged) {\n const newHeight = updateMaxBodyHeight();\n const bodyEl = dialog.el.querySelector('.dialog-body');\n if (bodyEl) bodyEl.style.setProperty('--cool-dialog-body-height', newHeight + 'px');\n dialog.lastResizeTime = now;\n } else {\n resizeTimeout = setTimeout(() => {\n const newHeight = updateMaxBodyHeight();\n const bodyEl = dialog.el.querySelector('.dialog-body');\n if (bodyEl) bodyEl.style.setProperty('--cool-dialog-body-height', newHeight + 'px');\n }, 16);\n }\n };\n\n window.addEventListener('resize', dialog.resizeHandler, { passive: true });\n window.addEventListener('orientationchange', dialog.resizeHandler, { passive: true });\n }\n }\n }\n\n show(dialog) {\n if (!this.container.classList.contains('has-dialogs')) {\n this.container.classList.add('has-dialogs');\n }\n\n if (dialog.preventScroll && !this.container.classList.contains('dialog-prevent-scroll')) {\n this.container.classList.add('dialog-prevent-scroll');\n }\n\n if (this.dialogs.length > 1) {\n let prevDialogEl = this.dialogs[this.dialogs.length - 2].el;\n let zIndex = parseInt(getComputedStyle(prevDialogEl).zIndex, 10) || 0;\n zIndex += 1;\n\n dialog.el.style.zIndex = zIndex;\n\n Object.assign(prevDialogEl.style, {\n transition: 'opacity 0.3s',\n opacity: '0',\n visibility: 'visible',\n });\n }\n\n if (dialog.backdrop && !this.container.querySelector('.dialog-backdrop')) {\n const backdrop = document.createElement('div');\n backdrop.className = 'dialog-backdrop';\n this.container.appendChild(backdrop);\n\n let checkForBackdrop = setInterval(() => {\n const existingBackdrop = this.container.querySelector('.dialog-backdrop');\n if (this.dialogs.length == 0 && existingBackdrop) {\n existingBackdrop.remove();\n clearInterval(checkForBackdrop);\n }\n }, 100);\n }\n\n this.container.appendChild(dialog.el);\n\n if (dialog.animation) {\n const dialogContentEl = dialog.el.querySelector('.dialog-content');\n playAnimation(dialogContentEl, dialog.animationIn);\n }\n\n this.onShow(dialog);\n }\n\n close(dialog) {\n let prevDialogEl = null;\n\n if (dialog.resizeObserver) {\n dialog.resizeObserver.disconnect();\n dialog.resizeObserver = null;\n }\n\n if (dialog.rafId) {\n cancelAnimationFrame(dialog.rafId);\n dialog.rafId = null;\n }\n\n if (dialog.resizeHandler) {\n window.removeEventListener('resize', dialog.resizeHandler);\n window.removeEventListener('orientationchange', dialog.resizeHandler);\n dialog.resizeHandler = null;\n }\n\n if (dialog._actionHandler) {\n dialog.el.removeEventListener('click', dialog._actionHandler);\n dialog._actionHandler = null;\n }\n\n if (this.dialogs.length > 1) {\n prevDialogEl = this.dialogs[this.dialogs.length - 2].el;\n }\n\n const backdropDialogs = this.container.querySelectorAll('.dialog[data-dialog-backdrop=\"true\"]');\n const backdrop = this.container.querySelector('.dialog-backdrop');\n if (backdropDialogs.length === 0 && backdrop) {\n backdrop.remove();\n }\n\n const afterRemove = () => {\n dialog.el.remove();\n\n this.dialogs = this.dialogs.filter((item) => item.uuid !== dialog.uuid);\n\n if (this.dialogs.length == 0) {\n this.container.classList.remove('has-dialogs');\n this.container.classList.remove('dialog-prevent-scroll');\n } else {\n if (prevDialogEl) {\n prevDialogEl.style.opacity = '1';\n }\n }\n };\n\n if (dialog.animation) {\n const dialogContentEl = dialog.el.querySelector('.dialog-content');\n playAnimation(dialogContentEl, dialog.animationOut).then(() => {\n afterRemove();\n });\n } else {\n afterRemove();\n }\n\n this.onClose(dialog);\n }\n\n onInitialize() {\n let onInitialize = this.onInitialize;\n\n if (typeof onInitialize === 'function') {\n onInitialize.call(this.container);\n }\n }\n\n onDestroy() {\n let onDestroy = this.onDestroy;\n\n if (typeof onDestroy === 'function') {\n onDestroy.call(this.container);\n }\n }\n\n onInit(dialog) {\n let onInit = dialog.onInit;\n\n if (typeof onInit === 'function') {\n onInit.call(dialog);\n }\n }\n\n onShow(dialog) {\n let onShow = dialog.onShow;\n\n if (typeof onShow === 'function') {\n onShow.call(dialog);\n }\n }\n\n onClose(dialog) {\n let onClose = dialog.onClose;\n\n if (typeof onClose === 'function') {\n onClose.call(dialog);\n }\n }\n\n _renderFooter(dialog) {\n if (typeof dialog.footer === 'function') {\n return dialog.footer();\n } else if (dialog.footer !== '' && dialog.footer !== false && dialog.footer !== true) {\n return dialog.footer;\n } else if (dialog.footer === true) {\n if (!dialog.actions || typeof dialog.actions !== 'object') return '';\n\n const actionsArr = Object.entries(dialog.actions)\n .filter(([, action]) => {\n if (action === false) return false;\n if (typeof action.visible !== 'undefined') return !!action.visible;\n return true;\n })\n .map(([key, action], idx) => ({ key, action, idx }));\n\n actionsArr.sort((a, b) => {\n const hasOnlyCloseAndRemove =\n actionsArr.length === 2 &&\n actionsArr.some((item) => item.key === 'close') &&\n actionsArr.some((item) => item.key === 'remove');\n\n if (hasOnlyCloseAndRemove) {\n if (a.key === 'close') return -1;\n if (b.key === 'close') return 1;\n if (a.key === 'remove') return 1;\n if (b.key === 'remove') return -1;\n }\n\n if (a.key === 'remove') return -1;\n if (b.key === 'remove') return 1;\n if (a.key === 'confirm') return 1;\n if (b.key === 'confirm') return -1;\n\n return a.idx - b.idx;\n });\n\n const btns = actionsArr.map(({ key, action }) => {\n let btnStyle = action.style ? action.style : action.primary ? 'btn-primary' : 'btn-secondary';\n if (key === 'remove') btnStyle = 'btn-remove';\n if (key === 'confirm' && (action.primary === 'undefined' || action.primary !== false))\n btnStyle = 'btn-primary';\n let btnContent = action.content || key.charAt(0).toUpperCase() + key.slice(1);\n let btnClasses = action.classes ? ' ' + action.classes : '';\n let btnAttrs = action.attrs ? ' ' + action.attrs : '';\n let isCommonAction = ['confirm', 'close', 'remove'].includes(key);\n return `\n <button type=\"button\" class=\"btn ${btnStyle}${btnClasses}\"${btnAttrs} data-dialog-action=\"${key}\"${isCommonAction ? ` data-dialog-${key}` : ''}>\n ${btnContent}\n </button>\n `;\n });\n\n let footerHtml = '';\n\n if (btns.length > 2) {\n footerHtml = `\n ${btns[0]}\n <div class=\"spacer\"></div>\n ${btns[1]}\n ${btns.slice(2).join('\\n')}\n `;\n } else {\n footerHtml = btns.join('\\n');\n }\n\n return `\n <div class=\"dialog-footer\">\n ${footerHtml}\n </div>\n `;\n }\n\n return '';\n }\n\n _renderHeader(dialog) {\n let headerContent = '';\n const closeBtnHtml = `\n <button type=\"button\" data-dialog-action=\"close\" class=\"dialog-header-close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n </button>\n `;\n\n if (typeof dialog.header === 'function') {\n headerContent = dialog.header();\n } else if (dialog.header !== '' && dialog.header !== false && dialog.header !== true) {\n headerContent = dialog.header;\n } else if (dialog.header === true) {\n headerContent = `\n <div class=\"dialog-header\">\n <span class=\"dialog-title\">\n ${escapeHtml(dialog.title)}\n </span>\n ${closeBtnHtml}\n </div>\n `;\n } else {\n headerContent = `<div class=\"dialog-header\">${closeBtnHtml}</div>`;\n }\n\n return headerContent;\n }\n\n _renderTemplate(dialog) {\n const classes = dialog.classes ? ' ' + dialog.classes : '';\n const centered = dialog.centered ? ' dialog-centered' : '';\n const size = dialog.size ? ' dialog-' + dialog.size : '';\n const overFlowVisible = dialog.overflowVisible ? ' dialog-overflow-visible' : '';\n const uuid = ' data-dialog-uuid=\"' + dialog.uuid + '\"';\n const backdrop = dialog.backdrop ? ' data-dialog-backdrop=\"true\"' : ' data-dialog-backdrop=\"false\"';\n const maxBodyHeight = dialog.maxBodyHeight\n ? ' style=\"--cool-dialog-body-height: ' + dialog.maxBodyHeight + 'px\"'\n : '';\n const body = typeof dialog.body === 'function' ? dialog.body() : dialog.body;\n const footer = this._renderFooter(dialog);\n const header = this._renderHeader(dialog);\n\n return `\n <div class=\"dialog${classes}${centered}${size}${overFlowVisible}\"${uuid}${backdrop}>\n\n <div class=\"dialog-container\">\n\n <div class=\"dialog-content\">\n\n ${header}\n\n <div class=\"dialog-body\"${maxBodyHeight}>\n\n ${body}\n\n </div>\n\n ${footer}\n\n </div>\n\n </div>\n\n </div>\n `;\n }\n}\n\nDialog._jQueryInit();\n\nexport default Dialog;\n","import Component from './component';\nimport { deepMerge } from './utils';\n\nclass ThemeSwitcher extends Component {\n static NAME = 'coolThemeSwitcher';\n\n static DEFAULTS = {\n theme: 'auto',\n storageKey: 'cool-theme',\n target: null,\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n };\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $el = $(this);\n let instance = $el.data(`plugin_${ThemeSwitcher.NAME}`);\n if (!instance) {\n instance = new ThemeSwitcher(this, typeof config === 'object' && config);\n $el.data(`plugin_${ThemeSwitcher.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (typeof $ === 'undefined' || !$.fn) return;\n const previousName = $.fn[ThemeSwitcher.NAME];\n $.fn[ThemeSwitcher.NAME] = ThemeSwitcher._jQueryInterface;\n $.fn[ThemeSwitcher.NAME].Constructor = ThemeSwitcher;\n $.fn[ThemeSwitcher.NAME].defaults = ThemeSwitcher.DEFAULTS || {};\n $.fn[ThemeSwitcher.NAME].noConflict = () => {\n $.fn[ThemeSwitcher.NAME] = previousName;\n return ThemeSwitcher._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = deepMerge({}, ThemeSwitcher.DEFAULTS, window.Cool?.settings?.themeSwitcher || {}, opts || {});\n\n this.el = el;\n\n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n\n const stored = this._getStoredTheme();\n\n if (stored) {\n this._applyTheme(stored);\n } else {\n const dataTheme = this.el.dataset.theme;\n\n if (dataTheme && ['light', 'dark', 'auto'].includes(dataTheme)) {\n this._applyTheme(dataTheme);\n } else {\n this._applyTheme(this.opts.theme);\n }\n }\n\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n this.constructor.removeInstance(this.el);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n this.onUpdate();\n }\n\n buildCache() {\n this.target = this.opts.target\n ? typeof this.opts.target === 'string'\n ? document.querySelector(this.opts.target)\n : this.opts.target\n : document.documentElement;\n\n this._mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n }\n\n bindEvents() {\n this._clickHandler = (e) => {\n e.preventDefault();\n\n const dataTheme = this.el.dataset.theme;\n\n if (dataTheme && ['light', 'dark', 'auto'].includes(dataTheme)) {\n this.setTheme(dataTheme);\n } else {\n this.toggle();\n }\n };\n\n this._mediaChangeHandler = () => {\n if (this._currentTheme === 'auto') {\n this._dispatchEvent();\n }\n };\n\n this.el.addEventListener('click', this._clickHandler);\n this._mediaQuery.addEventListener('change', this._mediaChangeHandler);\n }\n\n unbindEvents() {\n if (this._clickHandler) {\n this.el.removeEventListener('click', this._clickHandler);\n }\n\n if (this._mediaChangeHandler && this._mediaQuery) {\n this._mediaQuery.removeEventListener('change', this._mediaChangeHandler);\n }\n }\n\n /**\n * Set the theme to 'light', 'dark', or 'auto'.\n * - 'dark' → adds .dark to target\n * - 'light' → adds .light to target\n * - 'auto' → removes both classes, lets prefers-color-scheme decide\n */\n setTheme(theme) {\n if (!['light', 'dark', 'auto'].includes(theme)) return;\n\n this._applyTheme(theme);\n }\n\n /**\n * Returns the stored theme string: 'light', 'dark', or 'auto'.\n */\n getTheme() {\n return this._currentTheme || 'auto';\n }\n\n /**\n * Returns the actual resolved theme ('light' or 'dark')\n * accounting for auto mode via matchMedia.\n */\n getResolvedTheme() {\n if (this._currentTheme === 'dark') return 'dark';\n if (this._currentTheme === 'light') return 'light';\n\n return this._mediaQuery.matches ? 'dark' : 'light';\n }\n\n /**\n * Cycle through themes: light → dark → auto → light\n */\n toggle() {\n const current = this.getTheme();\n const order = ['light', 'dark', 'auto'];\n const nextIndex = (order.indexOf(current) + 1) % order.length;\n\n this.setTheme(order[nextIndex]);\n }\n\n // -----------------------------------------------------------------------\n // Private\n // -----------------------------------------------------------------------\n\n _applyTheme(theme) {\n this._currentTheme = theme;\n\n this.target.classList.remove('dark', 'light');\n\n if (theme === 'dark') {\n this.target.classList.add('dark');\n } else if (theme === 'light') {\n this.target.classList.add('light');\n }\n\n this.el.setAttribute('data-active-theme', theme);\n this._storeTheme(theme);\n this._dispatchEvent();\n }\n\n _dispatchEvent() {\n const event = new CustomEvent('cool.theme.change', {\n bubbles: true,\n detail: {\n theme: this.getTheme(),\n resolvedTheme: this.getResolvedTheme(),\n },\n });\n\n this.target.dispatchEvent(event);\n }\n\n _getStoredTheme() {\n try {\n return localStorage.getItem(this.opts.storageKey);\n } catch {\n return null;\n }\n }\n\n _storeTheme(theme) {\n try {\n localStorage.setItem(this.opts.storageKey, theme);\n } catch {\n // Storage not available\n }\n }\n}\n\nThemeSwitcher._jQueryInit();\n\nexport default ThemeSwitcher;\n","import Section from './section';\nimport Sidebar from './sidebar';\nimport Popover from './popover';\nimport Select from './select';\nimport Dropdown from './dropdown';\nimport Tooltip from './tooltip';\nimport Collapse from './collapse';\nimport SectionTabs from './section-tabs';\nimport Toast from './toast';\nimport Dialog from './dialog';\nimport ThemeSwitcher from './theme-switcher';\nimport { resizeManager, scrollManager } from './utils';\n\nwindow.Cool = window.Cool || {};\nwindow.Cool.settings = window.Cool.settings || {};\n\nclass Common {\n static _sidebarInstance = null;\n static _sectionInstance = null;\n static _toastInstance = null;\n\n static refresh() {\n if (this._sectionInstance && this._sectionInstance.refresh) {\n this._sectionInstance.refresh();\n }\n\n Popover.initializeElements('[data-toggle=\"popover\"]', window.Cool.settings.popover);\n Select.initializeElements('[data-toggle=\"select\"]', window.Cool.settings.select);\n Dropdown.initializeElements('[data-toggle=\"dropdown\"]', window.Cool.settings.dropdown);\n Tooltip.initializeElements('[data-toggle=\"tooltip\"]', window.Cool.settings.tooltip);\n Collapse.initializeElements('[data-toggle=\"collapse\"]', window.Cool.settings.collapse);\n SectionTabs.initializeElements('[data-toggle=\"section-tabs\"]', window.Cool.settings.sectionTabs);\n ThemeSwitcher.initializeElements('[data-toggle=\"theme-switcher\"]', window.Cool.settings.themeSwitcher);\n }\n\n static initialize(opts = {}) {\n window.Cool.settings = opts;\n\n if (!this._sectionInstance) {\n this._sectionInstance = new Section(opts.section);\n }\n\n Popover.initializeElements('[data-toggle=\"popover\"]', opts.popover);\n Select.initializeElements('[data-toggle=\"select\"]', opts.select);\n Dropdown.initializeElements('[data-toggle=\"dropdown\"]', opts.dropdown);\n Tooltip.initializeElements('[data-toggle=\"tooltip\"]', opts.tooltip);\n Collapse.initializeElements('[data-toggle=\"collapse\"]', opts.collapse);\n SectionTabs.initializeElements('[data-toggle=\"section-tabs\"]', opts.sectionTabs);\n ThemeSwitcher.initializeElements('[data-toggle=\"theme-switcher\"]', opts.themeSwitcher);\n\n const sidebarLeft = document.querySelector('.sidebar-left');\n\n if (sidebarLeft) {\n this._sidebarInstance =\n Sidebar.initializeElement(sidebarLeft, opts.sidebar) || Sidebar.getInstance(sidebarLeft);\n }\n\n this._toastInstance = Toast.initializeElement(document.body, opts.toast) || Toast.getInstance(document.body);\n window.Cool.toast = this._toastInstance;\n Dialog.initializeElement(document.body, opts.dialog);\n }\n\n static initComponent(selector) {\n if (!selector) return;\n\n const selectors = Array.isArray(selector) ? selector : [selector];\n const instances = [];\n const initQueue = [];\n\n selectors.forEach((child) => {\n const container = typeof child === 'string' ? document.querySelector(child) : child;\n if (!container) return;\n\n const elements = container.querySelectorAll('[data-toggle]');\n const allElements = container.hasAttribute('data-toggle')\n ? [container, ...Array.from(elements)]\n : Array.from(elements);\n\n allElements.forEach((el) => {\n initQueue.push(el);\n });\n });\n\n const visibleQueue = [];\n const hiddenQueue = [];\n\n initQueue.forEach((el) => {\n const rect = el.getBoundingClientRect();\n if (rect.top < window.innerHeight && rect.bottom > 0) {\n visibleQueue.push(el);\n } else {\n hiddenQueue.push(el);\n }\n });\n\n const allQueue = [...visibleQueue, ...hiddenQueue];\n const batchSize = 10;\n let index = 0;\n\n const processBatch = () => {\n const batch = allQueue.slice(index, index + batchSize);\n\n batch.forEach((el) => {\n const toggleValue = el.getAttribute('data-toggle');\n let instance = null;\n\n switch (toggleValue) {\n case 'popover':\n instance = Popover.initializeElement(el, window.Cool.settings.popover);\n break;\n case 'select':\n instance = Select.initializeElement(el, window.Cool.settings.select);\n break;\n case 'dropdown':\n instance = Dropdown.initializeElement(el, window.Cool.settings.dropdown);\n break;\n case 'tooltip':\n instance = Tooltip.initializeElement(el, window.Cool.settings.tooltip);\n break;\n case 'collapse':\n instance = Collapse.initializeElement(el, window.Cool.settings.collapse);\n break;\n case 'section-tabs':\n instance = SectionTabs.initializeElement(el, window.Cool.settings.sectionTabs);\n break;\n case 'theme-switcher':\n instance = ThemeSwitcher.initializeElement(el, window.Cool.settings.themeSwitcher);\n break;\n }\n\n if (instance) instances.push(instance);\n });\n\n index += batchSize;\n\n if (index < allQueue.length) {\n if ('requestIdleCallback' in window) {\n requestIdleCallback(processBatch, { timeout: 50 });\n } else {\n setTimeout(processBatch, 0);\n }\n }\n };\n\n if (visibleQueue.length > 0) {\n processBatch();\n } else if ('requestIdleCallback' in window) {\n requestIdleCallback(processBatch, { timeout: 100 });\n } else {\n processBatch();\n }\n\n return instances;\n }\n\n static destroy() {\n if (this._sidebarInstance) {\n this._sidebarInstance.destroy();\n this._sidebarInstance = null;\n }\n\n if (this._sectionInstance) {\n this._sectionInstance.destroy();\n this._sectionInstance = null;\n }\n }\n\n static observeResize(element, callback) {\n if (!element || typeof callback !== 'function') {\n return;\n }\n\n return resizeManager.observe(element, callback);\n }\n\n static unobserveResize(element) {\n if (!element) {\n return;\n }\n\n resizeManager.unobserve(element);\n }\n\n static addScrollListener(id, callback) {\n if (!id || typeof callback !== 'function') {\n return;\n }\n\n scrollManager.add(id, callback);\n }\n\n static removeScrollListener(id) {\n if (!id) {\n return;\n }\n\n scrollManager.remove(id);\n }\n\n static getSidebar() {\n return this._sidebarInstance;\n }\n\n static getSection() {\n return this._sectionInstance;\n }\n\n static getToast() {\n return this._toastInstance;\n }\n\n static initjQuery() {\n Popover._jQueryInit();\n Select._jQueryInit();\n Dropdown._jQueryInit();\n Tooltip._jQueryInit();\n Collapse._jQueryInit();\n SectionTabs._jQueryInit();\n Toast._jQueryInit();\n Dialog._jQueryInit();\n Sidebar._jQueryInit();\n ThemeSwitcher._jQueryInit();\n }\n}\n\nwindow.Cool.initialize = Common.initialize.bind(Common);\nwindow.Cool.initComponent = Common.initComponent.bind(Common);\nwindow.Cool.refresh = Common.refresh.bind(Common);\nwindow.Cool.destroy = Common.destroy.bind(Common);\nwindow.Cool.observeResize = Common.observeResize.bind(Common);\nwindow.Cool.unobserveResize = Common.unobserveResize.bind(Common);\nwindow.Cool.addScrollListener = Common.addScrollListener.bind(Common);\nwindow.Cool.removeScrollListener = Common.removeScrollListener.bind(Common);\nwindow.Cool.getSidebar = Common.getSidebar.bind(Common);\nwindow.Cool.getSection = Common.getSection.bind(Common);\nwindow.Cool.getToast = Common.getToast.bind(Common);\nwindow.Cool.initjQuery = Common.initjQuery.bind(Common);\n\nexport default Common;\n","import Common from './src/common';\nimport Sidebar from './src/sidebar';\nimport Popover from './src/popover.js';\nimport Select from './src/select';\nimport Dropdown from './src/dropdown';\nimport Tooltip from './src/tooltip';\nimport SectionTabs from './src/section-tabs';\nimport Collapse from './src/collapse';\nimport Toast from './src/toast';\nimport Dialog from './src/dialog';\nimport ThemeSwitcher from './src/theme-switcher';\n\nexport {\n Common,\n Sidebar,\n Popover,\n Select,\n Dropdown,\n Tooltip,\n SectionTabs,\n Collapse,\n Toast,\n Dialog,\n ThemeSwitcher,\n initjQuery,\n};\n\nfunction initjQuery() {\n Popover._jQueryInit();\n Select._jQueryInit();\n Dropdown._jQueryInit();\n Tooltip._jQueryInit();\n SectionTabs._jQueryInit();\n Collapse._jQueryInit();\n Toast._jQueryInit();\n Dialog._jQueryInit();\n Sidebar._jQueryInit();\n ThemeSwitcher._jQueryInit();\n}\n\nexport default {\n Common,\n Sidebar,\n Popover,\n Select,\n Dropdown,\n Tooltip,\n SectionTabs,\n Collapse,\n Toast,\n Dialog,\n ThemeSwitcher,\n initjQuery,\n};\n"],"mappings":"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","ignoreList":[]}
|