@finqu/cool 1.2.29 → 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.
Files changed (221) hide show
  1. package/README.md +694 -1
  2. package/dist/css/cool.css +26902 -14322
  3. package/dist/css/cool.css.map +1 -154
  4. package/dist/css/cool.min.css +2 -7
  5. package/dist/css/cool.min.css.map +1 -1
  6. package/dist/js/cool.bundle.js +16191 -5588
  7. package/dist/js/cool.bundle.js.map +1 -1
  8. package/dist/js/cool.bundle.min.js +13 -8
  9. package/dist/js/cool.bundle.min.js.map +1 -1
  10. package/dist/js/cool.esm.js +4722 -4812
  11. package/dist/js/cool.esm.js.map +1 -1
  12. package/dist/js/cool.esm.min.js +4 -9
  13. package/dist/js/cool.esm.min.js.map +1 -1
  14. package/dist/js/cool.js +5143 -5240
  15. package/dist/js/cool.js.map +1 -1
  16. package/dist/js/cool.min.js +4 -9
  17. package/dist/js/cool.min.js.map +1 -1
  18. package/package.json +125 -60
  19. package/scss/LISENCE +1 -1
  20. package/scss/_badge.scss +134 -102
  21. package/scss/_button-group.scss +80 -129
  22. package/scss/_buttons.scss +257 -201
  23. package/scss/_dark.scss +637 -0
  24. package/scss/_dialog.scss +314 -123
  25. package/scss/_dropdown.scss +165 -233
  26. package/scss/_forms.scss +555 -200
  27. package/scss/_frame.scss +945 -624
  28. package/scss/_grid.scss +215 -35
  29. package/scss/_input-group.scss +326 -285
  30. package/scss/_list-group.scss +127 -82
  31. package/scss/_media.scss +439 -0
  32. package/scss/_navbar.scss +116 -284
  33. package/scss/_notification.scss +111 -9
  34. package/scss/_pagination.scss +82 -88
  35. package/scss/_popover.scss +61 -167
  36. package/scss/_reboot.scss +306 -284
  37. package/scss/_root.scss +848 -15
  38. package/scss/_section.scss +735 -977
  39. package/scss/_select.scss +559 -187
  40. package/scss/_tables.scss +471 -595
  41. package/scss/_tabs.scss +50 -178
  42. package/scss/_toast.scss +242 -147
  43. package/scss/_tooltip.scss +130 -101
  44. package/scss/_typography.scss +166 -0
  45. package/scss/_variables.scss +1154 -748
  46. package/scss/cool.scss +64 -32
  47. package/scss/utilities/_align.scss +51 -41
  48. package/scss/utilities/_animation.scss +165 -0
  49. package/scss/utilities/_background.scss +72 -14
  50. package/scss/utilities/_borders.scss +205 -146
  51. package/scss/utilities/_collapse.scss +20 -25
  52. package/scss/utilities/_cursor.scss +160 -22
  53. package/scss/utilities/_display.scss +116 -16
  54. package/scss/utilities/_embed.scss +89 -78
  55. package/scss/utilities/_fill.scss +79 -0
  56. package/scss/utilities/_filters.scss +233 -0
  57. package/scss/utilities/_flex.scss +216 -52
  58. package/scss/utilities/_grid.scss +136 -0
  59. package/scss/utilities/_opacity.scss +131 -0
  60. package/scss/utilities/_overflow.scss +242 -6
  61. package/scss/utilities/_perfect-scrollbar.scss +147 -141
  62. package/scss/utilities/_pointer-events.scss +125 -0
  63. package/scss/utilities/_position.scss +130 -30
  64. package/scss/utilities/_screen-readers.scss +95 -0
  65. package/scss/utilities/_shadows.scss +195 -0
  66. package/scss/utilities/_sizing.scss +288 -32
  67. package/scss/utilities/_spacing.scss +168 -92
  68. package/scss/utilities/_stroke.scss +124 -0
  69. package/scss/utilities/_text.scss +420 -99
  70. package/scss/utilities/_transform.scss +232 -0
  71. package/scss/utilities/_transitions.scss +147 -0
  72. package/scss/utilities/_user-select.scss +89 -10
  73. package/scss/utilities/_visibility.scss +62 -6
  74. package/scss/utilities/_z-index.scss +169 -0
  75. package/.babelrc.js +0 -20
  76. package/.browserslistrc +0 -13
  77. package/build/.eslintrc.json +0 -10
  78. package/build/banner.js +0 -14
  79. package/build/build-plugins.js +0 -92
  80. package/build/rollup.config.js +0 -46
  81. package/dist/css/cool-grid.css +0 -4390
  82. package/dist/css/cool-grid.css.map +0 -30
  83. package/dist/css/cool-grid.min.css +0 -7
  84. package/dist/css/cool-grid.min.css.map +0 -1
  85. package/dist/css/cool-reboot.css +0 -286
  86. package/dist/css/cool-reboot.css.map +0 -62
  87. package/dist/css/cool-reboot.min.css +0 -7
  88. package/dist/css/cool-reboot.min.css.map +0 -1
  89. package/html/index.html +0 -2703
  90. package/js/dist/collapse.js +0 -5535
  91. package/js/dist/collapse.js.map +0 -1
  92. package/js/dist/common.js +0 -21996
  93. package/js/dist/common.js.map +0 -1
  94. package/js/dist/cooldropdown.js +0 -467
  95. package/js/dist/cooldropdown.js.map +0 -1
  96. package/js/dist/coolpopover.js +0 -391
  97. package/js/dist/coolpopover.js.map +0 -1
  98. package/js/dist/coolsectiontabs.js +0 -256
  99. package/js/dist/coolsectiontabs.js.map +0 -1
  100. package/js/dist/coolselect.js +0 -796
  101. package/js/dist/coolselect.js.map +0 -1
  102. package/js/dist/cooltooltip.js +0 -360
  103. package/js/dist/cooltooltip.js.map +0 -1
  104. package/js/dist/coolui.js +0 -73
  105. package/js/dist/coolui.js.map +0 -1
  106. package/js/dist/dropdown.js +0 -27421
  107. package/js/dist/dropdown.js.map +0 -1
  108. package/js/dist/popover.js +0 -9472
  109. package/js/dist/popover.js.map +0 -1
  110. package/js/dist/sectiontabs.js +0 -4483
  111. package/js/dist/sectiontabs.js.map +0 -1
  112. package/js/dist/select.js +0 -37080
  113. package/js/dist/select.js.map +0 -1
  114. package/js/dist/tooltip.js +0 -8786
  115. package/js/dist/tooltip.js.map +0 -1
  116. package/js/index.esm.js +0 -21
  117. package/js/index.umd.js +0 -21
  118. package/js/src/abstract-ui-component.js +0 -81
  119. package/js/src/collapse.js +0 -286
  120. package/js/src/common.js +0 -296
  121. package/js/src/dialog.js +0 -579
  122. package/js/src/dropdown.js +0 -525
  123. package/js/src/popover.js +0 -632
  124. package/js/src/section-tabs.js +0 -215
  125. package/js/src/select.js +0 -1342
  126. package/js/src/toast.js +0 -581
  127. package/js/src/tooltip.js +0 -591
  128. package/js/src/util/animate-css.js +0 -22
  129. package/js/src/util/index.js +0 -122
  130. package/js/src/util/perfect-scrollbar.js +0 -1316
  131. package/less/alert.less +0 -345
  132. package/less/badge.less +0 -38
  133. package/less/bootstrap-noconflict.less +0 -23
  134. package/less/bootstrap.less +0 -23
  135. package/less/button-group.less +0 -153
  136. package/less/buttons.less +0 -287
  137. package/less/dialog-noconflict.less +0 -174
  138. package/less/dialog.less +0 -203
  139. package/less/dropdown.less +0 -209
  140. package/less/forms.less +0 -770
  141. package/less/images.less +0 -242
  142. package/less/input-group.less +0 -163
  143. package/less/list-group.less +0 -73
  144. package/less/mixins/aspect-ratio.less +0 -23
  145. package/less/mixins/border-radius.less +0 -24
  146. package/less/mixins/box-shadow.less +0 -4
  147. package/less/mixins/buttons.less +0 -17
  148. package/less/mixins/caret.less +0 -51
  149. package/less/mixins/clearfix.less +0 -10
  150. package/less/mixins/gradients.less +0 -34
  151. package/less/mixins/nav-divider.less +0 -7
  152. package/less/mixins/object-fit.less +0 -13
  153. package/less/mixins/reset-text.less +0 -16
  154. package/less/mixins.less +0 -11
  155. package/less/package.json +0 -11
  156. package/less/pagination.less +0 -69
  157. package/less/popover.less +0 -143
  158. package/less/project.sublime-workspace +0 -774
  159. package/less/reboot.less +0 -235
  160. package/less/section.less +0 -793
  161. package/less/select.less +0 -150
  162. package/less/tables.less +0 -737
  163. package/less/tabs.less +0 -162
  164. package/less/tooltip.less +0 -87
  165. package/less/type.less +0 -71
  166. package/less/utilities/align.less +0 -27
  167. package/less/utilities/animate.less +0 -3512
  168. package/less/utilities/background.less +0 -70
  169. package/less/utilities/borders.less +0 -16
  170. package/less/utilities/color.less +0 -70
  171. package/less/utilities/cursor.less +0 -8
  172. package/less/utilities/display.less +0 -38
  173. package/less/utilities/embed.less +0 -61
  174. package/less/utilities/flex.less +0 -76
  175. package/less/utilities/jquery-ui.less +0 -116
  176. package/less/utilities/lazyload.less +0 -29
  177. package/less/utilities/overflow.less +0 -11
  178. package/less/utilities/pace.less +0 -25
  179. package/less/utilities/placeholder.less +0 -60
  180. package/less/utilities/position.less +0 -42
  181. package/less/utilities/scrollbar.less +0 -152
  182. package/less/utilities/spacing.less +0 -197
  183. package/less/utilities/text.less +0 -68
  184. package/less/utilities/transform.less +0 -7
  185. package/less/utilities.less +0 -21
  186. package/less/variables.less +0 -343
  187. package/scss/_alert.scss +0 -102
  188. package/scss/_custom-forms.scss +0 -444
  189. package/scss/_functions.scss +0 -124
  190. package/scss/_images.scss +0 -361
  191. package/scss/_mixins.scss +0 -34
  192. package/scss/_type.scss +0 -129
  193. package/scss/_utilities.scss +0 -23
  194. package/scss/cool-grid.scss +0 -29
  195. package/scss/cool-reboot.scss +0 -11
  196. package/scss/mixins/_alert-variant.scss +0 -20
  197. package/scss/mixins/_aspect-ratio.scss +0 -29
  198. package/scss/mixins/_background-variant.scss +0 -25
  199. package/scss/mixins/_badge-variant.scss +0 -36
  200. package/scss/mixins/_breakpoints.scss +0 -102
  201. package/scss/mixins/_buttons.scss +0 -104
  202. package/scss/mixins/_caret.scss +0 -80
  203. package/scss/mixins/_clearfix.scss +0 -10
  204. package/scss/mixins/_float.scss +0 -14
  205. package/scss/mixins/_forms.scss +0 -67
  206. package/scss/mixins/_gradients.scss +0 -40
  207. package/scss/mixins/_grid-framework.scss +0 -72
  208. package/scss/mixins/_grid.scss +0 -60
  209. package/scss/mixins/_nav-divider.scss +0 -9
  210. package/scss/mixins/_notification-variant.scss +0 -7
  211. package/scss/mixins/_object-fit.scss +0 -16
  212. package/scss/mixins/_reset-text.scss +0 -19
  213. package/scss/mixins/_text-emphasis.scss +0 -21
  214. package/scss/mixins/_text-hide.scss +0 -10
  215. package/scss/mixins/_text-truncate.scss +0 -81
  216. package/scss/mixins/_visibility.scss +0 -7
  217. package/scss/project.sublime-workspace +0 -491
  218. package/scss/utilities/_animate.scss +0 -3512
  219. package/scss/utilities/_clearfix.scss +0 -6
  220. package/scss/utilities/_lazyload.scss +0 -31
  221. package/scss/utilities/_placeholder.scss +0 -77
@@ -1 +1 @@
1
- {"version":3,"sources":["../../js/src/util/perfect-scrollbar.js","../../js/src/util/animate-css.js","../../js/src/common.js","../../js/src/util/index.js","../../js/src/abstract-ui-component.js","../../js/src/popover.js","../../js/src/select.js","../../js/src/dropdown.js","../../js/src/tooltip.js","../../js/src/section-tabs.js","../../js/src/collapse.js","../../js/src/toast.js","../../js/src/dialog.js","../../js/index.umd.js"],"names":["get","element","getComputedStyle","set","obj","key","val","style","div","className","document","createElement","elMatches","Element","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","query","Error","call","remove","parentNode","removeChild","queryChildren","selector","Array","filter","children","child","cls","main","thumb","x","rail","consuming","state","focus","clicking","active","scrolling","scrollingClassTimeout","y","addScrollingClass","i","classList","contains","clearTimeout","add","removeScrollingClass","setTimeout","isAlive","settings","scrollingThreshold","EventElement","this","handlers","prototypeAccessors","isEmpty","configurable","bind","eventName","handler","push","addEventListener","unbind","target","this$1","removeEventListener","unbindAll","name","Object","keys","every","length","defineProperties","EventManager","eventElements","createEvent","window","CustomEvent","evt","initCustomEvent","undefined","eventElement","ee","splice","indexOf","forEach","e","once","onceHandler","processScrollDiff","axis","diff","useScrollingClass","forceFireReachEvent","fields","ref","contentHeight","containerHeight","scrollTop","up","down","reach","dispatchEvent","setScrollingClassInstantly","processScrollDiff$1","toInt","parseInt","env","isWebKit","documentElement","supportsTouch","DocumentTouch","supportsIePointer","navigator","msMaxTouchPoints","isChrome","test","userAgent","updateGeometry","roundedScrollTop","Math","floor","containerWidth","clientWidth","clientHeight","contentWidth","scrollWidth","scrollHeight","scrollbarXRail","el","appendChild","scrollbarYRail","suppressScrollX","scrollXMarginOffset","scrollbarXActive","railXWidth","railXMarginWidth","railXRatio","scrollbarXWidth","getThumbSize","scrollbarXLeft","negativeScrollAdjustment","scrollLeft","suppressScrollY","scrollYMarginOffset","scrollbarYActive","railYHeight","railYMarginHeight","railYRatio","scrollbarYHeight","scrollbarYTop","xRailOffset","width","isRtl","left","isScrollbarXUsingBottom","bottom","scrollbarXBottom","top","scrollbarXTop","yRailOffset","height","isScrollbarYUsingRight","right","scrollbarYRight","scrollbarYOuterWidth","scrollbarYLeft","scrollbarX","railBorderXWidth","scrollbarY","railBorderYWidth","updateCss","thumbSize","minScrollbarLength","max","maxScrollbarLength","min","bindMouseScrollHandler","pageY","startingScrollTop","startingMousePageY","scrollBy","mouseMoveHandler","stopPropagation","preventDefault","mouseUpHandler","event","ownerDocument","click-rail","direction","pageYOffset","getBoundingClientRect","pageX","pageXOffset","drag-thumb","keyboard","isDefaultPrevented","defaultPrevented","activeElement","tagName","contentDocument","shadowRoot","deltaX","deltaY","which","metaKey","altKey","shiftKey","wheelPropagation","shouldPreventDefault","wheel","mousewheelHandler","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","getDeltaFromEvent","querySelector","cursor","overflow","overflowX","overflowY","join","match","maxScrollTop","maxScrollLeft","shouldBeConsumedByChild","shouldPrevent","useBothWheelAxes","wheelSpeed","isTop","isBottom","offsetHeight","isLeft","isRight","offsetWidth","abs","ctrlKey","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","PerfectScrollbar","userSettings","nodeName","result","originalScrollLeft","blur","isNegativeScroll","setAttribute","railXStyle","isNaN","borderLeftWidth","borderRightWidth","display","marginLeft","marginRight","railYStyle","styles","paddingLeft","paddingRight","outerWidth","borderTopWidth","borderBottomWidth","marginTop","marginBottom","handlerName","lastScrollTop","lastScrollLeft","onScroll","update","destroy","removePsClasses","split","$","fn","extend","animateCss","animationName","callback","animationEnd","addClass","one","removeClass","on","Cool","Common","refresh","each","formLabelGroup","find","initialize","opts","coolPopover","popover","coolSelect","select","coolDropdown","dropdown","coolTooltip","tooltip","coolCollapse","collapse","coolSectionTabs","sectionTabs","coolToast","toast","coolDialog","dialog","hasClass","not","attr","$inputGroup","closest","$container","parents","href","data","open","location","btn","click","trigger","parent","is","toggleClass","mousedown","mouseup","$sidebarLeftContent","sidebarLeftScroll","matchMedia","a","next","first","$sidebarTabs","scrollContainer","$tab","css","transform","last","debounce","func","wait","immediate","timeout","context","args","arguments","callNow","apply","touchEvents","special","destroyed","AbstractUIComponent","onInit","onUpdate","onDestroy","onShow","onClose","onReset","log","_console","debug","console","NAME","DATA_KEY","Popover","_this","_AbstractUIComponent","defaults","init","buildCache","bindEvents","unbindEvents","$el","removeData","container","containerAutoDetect","id","generateUUID","animation","animationIn","animationOut","animationSpeed","placement","placementChanged","title","content","offsetParent","_this2","$popover","close","show","popupHasFocus","setPosition","off","replace","c","r","random","toString","buildPopover","_this3","append","$arrow","arrowPos","popoverPosX","popoverPosY","containerInnerWidth","innerWidth","containerInnerHeight","innerHeight","popoverWidth","popoverHeight","outerHeight","popoverTriggerWidth","popoverTriggerHeight","popoverTriggerPosX","position","popoverTriggerPosY","arrowWidth","arrowHeight","round","will-change","popoverOverflowCount","popoverPosition","popoverOverflow","removeAttr","fixPopoverPosition","overflowAmount","_this4","_jQueryInterface","config","TypeError","JQUERY_NO_CONFLICT","Constructor","noConflict","Select","then","buildScroll","setData","reset","items","$select","$selectItems","$selectIconContainer","html","selectIconDefault","$selectHeader","dynamicTitle","dynamicTitleDefault","$selectTitle","text","trim","searchApi","dynamicTitleEmptyDefault","showSearch","searchData","$searchInput","searchString","search","Promise","primaryResolve","primaryReject","self","faPro","scrollContentHeight","searchRequest","type","contentOpen","searchPlaceholder","btnCloseText","labelTemplate","confirmCheck","confirmUncheck","preventUncheck","allowNoneOnRadioSelect","showValidStateIcon","itemsToExclude","primaryKeyword","preventClose","map","String","isArray","arr","item","showFooter","secondaryResolve","secondaryReject","selectItems","_renderItemList","_renderSearch","_renderFooter","$scrollableContent","$searchContainer","$searchIconContainer","$clearSearchButton","tabIndex","$footerContainer","$closeButton","buildSearchData","max-height","overflow-y","scroll","resolve","reject","selectLabels","_this5","checked","cb","onSelect","n","prop","has","getData","faNameSpace","searchUrl","itemCount","currentCount","value","encodeURIComponent","ajax","method","url","done","itemIds","when","$inputs","$input","inputValues","abort","results","toLocaleLowerCase","_this6","$otherSelects","zindex","z-index","scrollIntoView","behavior","block","inline","isEmptyObject","grep","appendItems","_this7","itemsArr","domItems","prepend","deselectItems","array","_this8","getItem","getSelectedItems","segment","ids","getSelectedItem","label","onSearch","Dropdown","offset","minWidth","positionObserver","JSON","parse","closeOnItemClick","$dropdown","align","$dropdownItem","menuRight","after","onItemClick","str","dropdownWidth","dropdownHeight","dropdownTriggerWidth","dropdownTriggerHeight","dropdownTriggerPosX","dropdownTriggerPosY","dropdownPosX","dropdownPosY","offsetX","offsetY","offsets","$containingParent","index","toLowerCase","containingBoundingRect","containerBoundingRect","maxTop","maxLeft","maxRight","maxBottom","Tooltip","$tooltip","buildTooltip","tooltipPosX","tooltipPosY","tooltipWidth","tooltipHeight","tooltipTriggerWidth","tooltipTriggerHeight","tooltipTriggerPosX","tooltipTriggerPosY","tooltipOverflowCount","tooltipPosition","tooltipOverflow","fixTooltipPosition","SectionTabs","checkForChanges","$dropdownContainer","$dropdownList","tabsCount","tabs","_name","moveToList","insertBefore","moveToDropdown","$itemActionEl","appendTo","overflowStatus","dropdownItems","moveableTabs","usedSpace","freeSpace","Collapse","$target","breakpoint","expanded","transitionendEvent","whichTransitionEvent","targetHeight","$indicator","transEndEventNames","WebkitTransition","MozTransition","transition","t","Toast","toasts","queue","processingQueue","onInitialize","addQueue","processQueue","shift","buildToast","uuid","placementX","placementY","dismiss","size","header","theme","template","maxBodyHeight","_renderTemplate","$inner","$closeBtn","toastPosX","toastPosY","toastWidth","toastHeight","body","bodyCloseBtn","_$$fn$NAME$defaults","Dialog","dialogs","buildDialog","footer","classes","centered","backdrop","preventScroll","closeBtn","callbacks","overflowVisible","actions","confirm","$prevDialog","eq","zIndex","opacity","visibility","checkForBackdrop","btnCancel","btnRemove","btnConfirm","visible","primary","attrs","overFlowVisible","_$$fn$NAME$defaults$1"],"mappings":"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","sourcesContent":["/*!\n * perfect-scrollbar v1.4.0\n * (c) 2018 Hyunje Jun\n * @license MIT\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 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 var this$1 = this;\n\n for (var name in this$1.handlers) {\n this$1.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 } else {\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(name, false, false, undefined);\n return evt;\n }\n}\n\nvar processScrollDiff = function(\n i,\n axis,\n diff,\n useScrollingClass,\n forceFireReachEvent\n) {\n if ( useScrollingClass === void 0 ) useScrollingClass = true;\n if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n var fields;\n if (axis === 'top') {\n fields = [\n 'contentHeight',\n 'containerHeight',\n 'scrollTop',\n 'y',\n 'up',\n 'down' ];\n } else if (axis === 'left') {\n fields = [\n 'contentWidth',\n 'containerWidth',\n 'scrollLeft',\n 'x',\n 'left',\n '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 (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\nvar updateGeometry = function(i) {\n var element = i.element;\n var roundedScrollTop = Math.floor(element.scrollTop);\n\n i.containerWidth = element.clientWidth;\n i.containerHeight = element.clientHeight;\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 );\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 );\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(\n i,\n toInt(i.railXWidth * i.containerWidth / i.contentWidth)\n );\n i.scrollbarXLeft = toInt(\n (i.negativeScrollAdjustment + element.scrollLeft) *\n (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 *\n (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 = 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 +\n element.scrollLeft +\n i.containerWidth -\n 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 } 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\nvar clickRail = function(i) {\n i.event.bind(i.scrollbarY, 'mousedown', function (e) { return e.stopPropagation(); });\n i.event.bind(i.scrollbarYRail, 'mousedown', function (e) {\n var positionTop =\n e.pageY -\n window.pageYOffset -\n 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 -\n window.pageXOffset -\n 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 dragThumb = function(i) {\n bindMouseScrollHandler(i, [\n 'containerWidth',\n 'contentWidth',\n 'pageX',\n 'railXWidth',\n 'scrollbarX',\n 'scrollbarXWidth',\n 'scrollLeft',\n 'x',\n 'scrollbarXRail' ]);\n bindMouseScrollHandler(i, [\n 'containerHeight',\n 'contentHeight',\n 'pageY',\n 'railYHeight',\n 'scrollbarY',\n 'scrollbarYHeight',\n 'scrollTop',\n 'y',\n 'scrollbarYRail' ]);\n};\n\nfunction bindMouseScrollHandler(\n i,\n ref\n) {\n var containerHeight = ref[0];\n var contentHeight = ref[1];\n var pageY = ref[2];\n var railYHeight = ref[3];\n var scrollbarY = ref[4];\n var scrollbarYHeight = ref[5];\n var scrollTop = ref[6];\n var y = ref[7];\n var scrollbarYRail = ref[8];\n\n var element = i.element;\n\n var startingScrollTop = null;\n var startingMousePageY = null;\n var scrollBy = null;\n\n function mouseMoveHandler(e) {\n element[scrollTop] =\n startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\n addScrollingClass(i, y);\n updateGeometry(i);\n\n e.stopPropagation();\n e.preventDefault();\n }\n\n function mouseUpHandler() {\n removeScrollingClass(i, y);\n i[scrollbarYRail].classList.remove(cls.state.clicking);\n i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n }\n\n i.event.bind(i[scrollbarY], 'mousedown', function (e) {\n startingScrollTop = element[scrollTop];\n startingMousePageY = e[pageY];\n scrollBy =\n (i[contentHeight] - i[containerHeight]) /\n (i[railYHeight] - i[scrollbarYHeight]);\n\n i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\n\n i[scrollbarYRail].classList.add(cls.state.clicking);\n\n e.stopPropagation();\n e.preventDefault();\n });\n}\n\nvar keyboard = function(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 (\n (e.isDefaultPrevented && e.isDefaultPrevented()) ||\n e.defaultPrevented\n ) {\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\nvar wheel = function(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 =\n roundedScrollTop + element.offsetHeight === element.scrollHeight;\n var isLeft = element.scrollLeft === 0;\n var isRight =\n 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 var overflow = [style.overflow, style.overflowX, style.overflowY].join(\n ''\n );\n\n // if scrollable\n if (overflow.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 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\nvar touch = function(i) {\n if (!env.supportsTouch && !env.supportsIePointer) {\n return;\n }\n\n var element = i.element;\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 var startOffset = {};\n var startTime = 0;\n var speed = {};\n var easingLoop = null;\n\n function getTouch(e) {\n if (e.targetTouches) {\n return e.targetTouches[0];\n } else {\n // Maybe IE pointer\n return e;\n }\n }\n\n function shouldHandle(e) {\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 (\n e.pointerType &&\n e.pointerType !== 'mouse' &&\n e.pointerType !== e.MSPOINTER_TYPE_MOUSE\n ) {\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 startOffset.pageX = touch.pageX;\n startOffset.pageY = touch.pageY;\n\n startTime = new Date().getTime();\n\n if (easingLoop !== null) {\n clearInterval(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 var overflow = [style.overflow, style.overflowX, style.overflowY].join(\n ''\n );\n\n // if scrollable\n if (overflow.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 var maxScrollLeft = cursor.scrollLeft - 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 - startOffset.pageX;\n var differenceY = currentOffset.pageY - startOffset.pageY;\n\n if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n return;\n }\n\n applyTouchMove(differenceX, differenceY);\n startOffset = currentOffset;\n\n var currentTime = new Date().getTime();\n\n var timeGap = currentTime - startTime;\n if (timeGap > 0) {\n speed.x = differenceX / timeGap;\n speed.y = differenceY / timeGap;\n startTime = currentTime;\n }\n\n if (shouldPrevent(differenceX, differenceY)) {\n e.preventDefault();\n }\n }\n }\n function touchEnd() {\n if (i.settings.swipeEasing) {\n clearInterval(easingLoop);\n easingLoop = setInterval(function() {\n if (i.isInitialized) {\n clearInterval(easingLoop);\n return;\n }\n\n if (!speed.x && !speed.y) {\n clearInterval(easingLoop);\n return;\n }\n\n if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {\n clearInterval(easingLoop);\n return;\n }\n\n applyTouchMove(speed.x * 30, speed.y * 30);\n\n speed.x *= 0.8;\n 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\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': dragThumb,\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$1.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 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 =\n toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n // Set rail to display:block to calculate margins\n set(this.scrollbarXRail, { display: 'block' });\n this.railXMarginWidth =\n 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 =\n toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n set(this.scrollbarYRail, { display: 'block' });\n this.railYMarginHeight =\n 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(\n this,\n 'left',\n this.element.scrollLeft - this.lastScrollLeft\n );\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;","import 'jquery';\n\n$.fn.extend({\n animateCss: function (animationName, callback) {\n\n var el = this;\n var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';\n\n el.addClass('animated ' + animationName).one(animationEnd, function(e) {\n\n $(this).removeClass('animated ' + animationName);\n\n if (callback) {\n callback();\n }\n\n }).children().on(animationEnd, function(e) {\n\n e.stopPropagation();\n });\n }\n});","import 'jquery';\nimport PerfectScrollbar from './util/perfect-scrollbar';\nimport './util/animate-css';\n\nwindow.Cool = window.Cool || {};\nwindow.Cool.settings = window.Cool.settings || {};\n\nclass Common {\n\n static refresh() {\n $('.form-label-group').each(function(i, formLabelGroup) {\n const $formLabelGroup = $(formLabelGroup);\n const val = $formLabelGroup.find('input, select').val();\n\n if (val) {\n $(formLabelGroup).addClass('label-on-top');\n } else {\n $(formLabelGroup).removeClass('label-on-top');\n }\n });\n }\n\n\tstatic initialize(opts) {\n\n // There's an error if opts is not defined\n opts = opts || {};\n\n // Save settings for later use\n window.Cool.settings = opts;\n\n // Init plugins\n $('[data-toggle=\"popover\"]').coolPopover(opts.popover);\n $('[data-toggle=\"select\"]').coolSelect(opts.select);\n $('[data-toggle=\"dropdown\"]').coolDropdown(opts.dropdown);\n $('[data-toggle=\"tooltip\"]').coolTooltip(opts.tooltip);\n $('[data-toggle=\"collapse\"]').coolCollapse(opts.collapse);\n $('[data-toggle=\"section-tabs\"]').coolSectionTabs(opts.sectionTabs);\n $('body').coolToast(opts.toast);\n $('body').coolDialog(opts.dialog);\n\n // Dom ready\n\t\t$('html').addClass('dom-ready');\n\n // Input group focus in\n\t\t$(document).on('focus', '.form-control', function () {\n\n if (!$(this).hasClass('disabled') && $(this).not(':disabled') && !$(this).attr('readonly')) {\n\n let $inputGroup = $(this).closest('.input-group');\n\n if (!$inputGroup.hasClass('input-group-focus')) {\n $inputGroup.addClass('input-group-focus');\n }\n }\n });\n\n // Input group focus out\n $(document).on('blur', '.form-control', function () {\n\n if (!$(this).hasClass('disabled') && $(this).not(':disabled') && !$(this).attr('readonly')) {\n\n let $inputGroup = $(this).closest('.input-group');\n\n if ($inputGroup.hasClass('input-group-focus')) {\n $inputGroup.removeClass('input-group-focus');\n }\n }\n });\n\n $(document).on('blur input change', '.form-label-group', function() {\n const $formLabelGroup = $(this);\n const val = $formLabelGroup.find('input, select').val();\n\n if (val) {\n $(this).addClass('label-on-top');\n } else {\n $(this).removeClass('label-on-top');\n }\n });\n\n $('.form-label-group').each(function(i, formLabelGroup) {\n const $formLabelGroup = $(formLabelGroup);\n const val = $formLabelGroup.find('input, select').val();\n\n if (val) {\n $(formLabelGroup).addClass('label-on-top');\n } else {\n $(formLabelGroup).removeClass('label-on-top');\n }\n });\n\n // Table actions\n $.each($('.table'), function() {\n\n if ($(this).find('[data-table-link], [data-table-btn]').length && !$(this).hasClass('table-hover')) {\n $(this).addClass('table-hover');\n }\n });\n\n $(document).on('click', '[data-table-link] .table-link-exclude, [data-table-link] input, [data-table-link] button, [data-table-link] a, [data-table-link] label, [data-table-link] .td-col-select', function(e) {\n e.stopPropagation();\n });\n\n $(document).on('click', '[data-table-link]', function(e) {\n const $container = $(this).parents('table, .table');\n const href = $(this).data('tableLink');\n\n if ($container.hasClass('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 $(document).on('click', '[data-table-btn] .table-btn-exclude, [data-table-btn] input, [data-table-btn] button, [data-table-btn] a, [data-table-btn] label, [data-table-btn] .td-col-select', function(e) {\n e.stopPropagation();\n });\n\n $(document).on('click', '[data-table-btn]', function(e) {\n const $container = $(this).parents('table, .table');\n let btn = $(this).data('tableButton');\n\n if (!btn) {\n btn = $container.find('button')[0];\n\n if (!btn) {\n return;\n }\n }\n\n if ($container.hasClass('bulk-actions-active')) {\n return;\n }\n\n $(btn).click();\n });\n\n // button toggle\n $(document).on('click', '.btn-group-toggle .btn > input', function(e) {\n e.stopPropagation();\n });\n\n $(document).on('click', '.btn-group-toggle .btn', function() {\n $(this).find('input').trigger('click');\n $(this).parent().find('input').trigger('change');\n });\n\n $(document).on('change', '.btn-group-toggle .btn > input', function() {\n if ($(this).is(':checked')) {\n $(this).parent().addClass('active');\n } else {\n $(this).parent().removeClass('active');\n }\n });\n\n // Force select element unfocus after change\n $('select').on('change', function() {\n $(this).blur();\n });\n\n // Tabs\n $('.tab-toggler').on('click', function(e) {\n\n e.stopPropagation();\n\n $(this).parent().toggleClass('open');\n });\n\n $(document).on('click', function() {\n\n $('.tabs-container').removeClass('open');\n });\n\n // Sidebar togglers\n $('.sidebar-left-toggler').on('click', function(e) {\n\n e.stopPropagation();\n\n $(this).toggleClass('open');\n $('body').toggleClass('sidebar-left-open');\n });\n\n $('.sidebar-right-toggler').on('click', function(e) {\n\n e.stopPropagation();\n\n $(this).toggleClass('open');\n $('body').toggleClass('sidebar-right-open');\n });\n\n // Sidebar scroll\n $('.sidebar-content .ps__thumb-y').mousedown(function() {\n $(this).parent().parent().addClass('ps-mousedown-scroll');\n });\n\n $(document).mouseup(function() {\n\n if ($('.sidebar-content').hasClass('ps-mousedown-scroll')) {\n $('.sidebar-content').removeClass('ps-mousedown-scroll');\n }\n });\n\n // Sidebar left scroll\n let $sidebarLeft = $('.sidebar-left');\n let $sidebarLeftContent = $sidebarLeft.find('.sidebar-content');\n\n if ($sidebarLeftContent.length) {\n let sidebarLeftScroll = new PerfectScrollbar($sidebarLeftContent[0], {\n wheelSpeed: 2,\n wheelPropagation: true,\n minScrollbarLength: 20,\n suppressScrollX: true\n });\n\n $sidebarLeftContent.find('[data-toggle=\"collapse\"]').on('click', function(e) {\n if ($(this).data('breakpoint') && window.matchMedia(`(min-width: ${$(this).data('breakpoint')}px)`).matches) {\n const a = $(this).next().find('li').first().children('a').first();\n\n if (a) {\n window.location.href = a.attr('href');\n }\n } else {\n setTimeout(() => {\n sidebarLeftScroll.update();\n }, 300);\n }\n });\n }\n\n // Sidebar tabs\n let $sidebarTabs = $(document).find('.sidebar-tab');\n\n if ($sidebarTabs.length) {\n\n $.each($sidebarTabs, function(i, el) {\n\n let scrollContainer = $(el).find('.tab-content');\n\n const sidebarTabsScroll = new PerfectScrollbar(scrollContainer[0], {\n wheelSpeed: 2,\n wheelPropagation: true,\n minScrollbarLength: 20,\n suppressScrollX: true\n });\n });\n\n $('[name=\"sidebar-tab-select\"]').on('click', function() {\n\n let val = $(this).val();\n let $tab = $('#sidebar-tab-'+val);\n\n $sidebarTabs.not($tab).removeClass('active');\n $tab.addClass('active');\n\n $('[name=\"sidebar-tab-select\"]').not($(this)).removeClass('active');\n $(this).addClass('active');\n\n if ($tab[0] == $sidebarTabs.first()[0]) {\n\n $sidebarTabs.not($tab).find('.tab-content').css({\n 'transform': 'translate3d(100%, 0px, 0px)'\n });\n\n } else if ($tab[0] == $sidebarTabs.last()[0]) {\n\n $sidebarTabs.not($tab).find('.tab-content').css({\n 'transform': 'translate3d(-100%, 0px, 0px)'\n });\n\n } else {\n\n $sidebarTabs.first().not($tab).find('.tab-content').css({\n 'transform': 'translate3d(-100%, 0px, 0px)'\n });\n\n $sidebarTabs.last().not($tab).find('.tab-content').css({\n 'transform': 'translate3d(100%, 0px, 0px)'\n });\n }\n\n $tab.find('.tab-content').css({\n 'transform': 'none'\n });\n });\n }\n\t}\n}\n\nwindow.Cool.initialize = Common.initialize;\nwindow.Cool.refresh = Common.refresh;\n\nexport default Common;","import 'jquery';\n\nconst debounce = function (func, wait, immediate) {\n\n\tlet timeout;\n\n\treturn function() {\n\n\t\tlet context = this;\n\t\tlet args = arguments;\n\t\tlet later = function() {\n\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 shallowProperty = function(key) {\n\n\treturn function(obj) {\n\n\t\treturn obj == null ? void 0 : obj[key];\n\t};\n};\n\nconst isArrayLike = function(collection) {\n\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\n if (context === void 0) {\n \treturn func;\n\t}\n\n\tswitch (argCount == null ? 3 : argCount) {\n\n\t\tcase 1: return function(value) {\n\t\t\treturn func.call(context, value);\n\t\t};\n\n\t\tcase 3: return function(value, index, collection) {\n\t\t\treturn func.call(context, value, index, collection);\n\t\t};\n\t\tcase 4: return function(accumulator, value, index, collection) {\n\t\t\treturn func.call(context, accumulator, value, index, collection);\n\t\t};\n\t}\n\n return function() {\n\t\treturn func.apply(context, arguments);\n };\n};\n\nconst each = function(obj, iteratee, context) {\n\n\titeratee = optimizeCb(iteratee, context);\n\n\tlet i;\n\tlet length;\n\n\tif (isArrayLike(obj)) {\n\n\t\tfor (i = 0, length = obj.length; i < length; i++) {\n\t\t\titeratee(obj[i], i, obj);\n\t\t}\n\n\t} else {\n\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 touchEvents = function () {\n\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\n$.event.special.destroyed = {\n\n\tremove: function(obj) {\n\n\t\tif (obj.handler) {\n\t\t\tobj.handler();\n\t\t}\n\t}\n}\n\nexport {\n\tdebounce,\n\ttouchEvents,\n\teach\n}","export default class AbstractUIComponent {\n\n\t// Init callback\n onInit() {\n\n let onInit = this.opts.onInit;\n\n if (typeof onInit === 'function') {\n\n onInit.call(this);\n }\n }\n\n // Update callback\n onUpdate() {\n\n let onUpdate = this.opts.onUpdate;\n\n if (typeof onUpdate === 'function') {\n\n onUpdate.call(this);\n }\n }\n\n // Destroy callback\n onDestroy() {\n\n let onDestroy = this.opts.onDestroy;\n\n if (typeof onDestroy === 'function') {\n\n onDestroy.call(this);\n }\n }\n\n // Show callback\n onShow() {\n\n let onShow = this.opts.onShow;\n\n if (typeof onShow === 'function') {\n\n onShow.call(this);\n }\n }\n\n // Close callback\n onClose() {\n\n let onClose = this.opts.onClose;\n\n if (typeof onClose === 'function') {\n\n onClose.call(this);\n }\n }\n\n // Reset callback\n onReset() {\n\n let onReset = this.opts.onReset;\n\n if (typeof onReset === 'function') {\n\n onReset.call(this);\n }\n }\n\n // Debug log\n log(...args) {\n\n \tif (this.debug) {\n\n if (typeof this.debug === 'function') {\n this.debug(...args);\n } else {\n \t \tconsole.log(...args);\n }\n \t}\n }\n}","import 'jquery';\nimport { debounce } from './util/index';\nimport AbstractUIComponent from './abstract-ui-component';\n\nconst NAME = 'coolPopover';\nconst DATA_KEY = 'plugin_coolPopover';\n\nclass Popover extends AbstractUIComponent {\n\n constructor(el, opts) {\n\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.popover) {\n\n $.extend(true, this.opts, $.fn[NAME].defaults, window.Cool.settings.popover, opts);\n\n } else {\n\n $.extend(true, this.opts, $.fn[NAME].defaults, opts);\n }\n\n this.el = el;\n this.debug = this.opts.debug;\n this.init();\n }\n\n // Init plugin\n init() {\n\n this.buildCache();\n this.bindEvents();\n this.onInit();\n }\n\n // Remove plugin instance completely\n destroy() {\n\n this.unbindEvents();\n this.$el.removeData(DATA_KEY);\n this.onDestroy();\n }\n\n // Update plugin data\n update() {\n\n this.buildCache();\n this.onUpdate();\n }\n\n // Cache DOM nodes for performance\n buildCache() {\n\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') ? this.$el.data('containerAutoDetect') : this.opts.containerAutoDetect;\n this.id = 'popover-'+this.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.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.placementChanged = false;\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\n if (this.containerAutoDetect) {\n this.$container = this.$el.offsetParent();\n }\n }\n\n // Bind events that trigger methods\n bindEvents() {\n\n if (this.trigger === 'click') {\n\n this.$el.on('click'+'.'+NAME, () => {\n\n if (this.$popover) {\n this.close();\n } else {\n this.show();\n }\n });\n\n } else if (this.trigger === 'hover') {\n\n this.$el.on('mouseenter'+'.'+NAME, () => {\n\n this.show();\n });\n\n this.$el.on('mouseleave'+'.'+NAME, debounce(() => {\n if (!this.popupHasFocus) {\n this.close();\n }\n }, 500));\n\n } else if (this.trigger === 'focus') {\n\n this.$el.on('focusin'+'.'+NAME, () => {\n\n this.show();\n });\n\n this.$el.on('focusout'+'.'+NAME, () => {\n\n this.close();\n });\n }\n\n $(window).on('resize', debounce(() => {\n\n if (this.$popover) {\n this.setPosition();\n this.onUpdate();\n }\n }, 250));\n }\n\n // Unbind events that trigger methods\n unbindEvents() {\n\n this.$el.off('.'+NAME);\n }\n\n // Generate UUID\n generateUUID() {\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n let r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n // Build popover\n buildPopover() {\n\n let content;\n\n \tif (typeof this.content === 'function') {\n \t\tcontent = this.content();\n \t} else {\n content = this.content;\n }\n\n \tthis.$popover = $(`\n \t\t<div class=\"popover\" role=\"tooltip\" id=\"${this.id}\">\n\n\t\t\t <div class=\"arrow\"></div>\n\n\t\t\t <h3 class=\"popover-header\">${this.title}</h3>\n\n\t\t\t <div class=\"popover-body\">${content}</div>\n\n\t\t\t</div>\n \t`);\n\n this.$container.append(this.$popover);\n\n this.$container.find('#'+this.id).on('mouseenter', () => {\n this.popupHasFocus = true;\n });\n\n this.$container.find('#'+this.id).on('mouseleave', () => {\n this.popupHasFocus = false;\n this.close();\n });\n\n this.$arrow = this.$popover.find('.arrow') ? this.$popover.find('.arrow') : false;\n\n this.log(this.$el);\n this.log(this.$container);\n this.log(this.$popover);\n this.log(this.$arrow);\n this.log('Id: '+this.id);\n this.log('Trigger: '+this.trigger);\n this.log('Placement: '+this.placement);\n this.log('Animation: '+this.animation);\n this.log('Animation in: '+this.animationIn);\n this.log('Animation out: '+this.animationOut);\n this.log('Animation speed: '+this.animationSpeed);\n this.log('Title: '+this.title);\n this.log('Content: '+this.content);\n }\n\n // Set positions\n setPosition(placement) {\n\n if (typeof placement === 'undefined' || placement === null) {\n placement = this.placement;\n }\n\n this.$popover.addClass('popover-'+placement);\n\n let containerInnerWidth = this.$container.innerWidth();\n let containerInnerHeight = this.$container.innerHeight();\n let popoverWidth = this.$popover.outerWidth(true);\n let popoverHeight = this.$popover.outerHeight(true);\n let popoverTriggerWidth = this.$el.outerWidth();\n let popoverTriggerHeight = this.$el.outerHeight();\n let popoverTriggerPosX = this.$el.position().left;\n let popoverTriggerPosY = this.$el.position().top;\n let arrowWidth = this.$arrow.outerWidth(true);\n let arrowHeight = this.$arrow.outerHeight(true);\n let arrowPos;\n let popoverPosX;\n let popoverPosY;\n\n if (placement === 'top') {\n\n popoverPosX = Math.round(popoverTriggerPosX - (popoverWidth - popoverTriggerWidth) / 2);\n popoverPosY = Math.round(popoverTriggerPosY - popoverHeight);\n arrowPos = Math.round(popoverWidth / 2 - arrowWidth / 2);\n\n this.$arrow.css({\n left: arrowPos+'px'\n });\n\n } else if (placement === 'right') {\n\n popoverPosX = Math.round(popoverTriggerPosX + popoverTriggerWidth);\n popoverPosY = Math.round(popoverTriggerPosY - (popoverHeight - popoverTriggerHeight) / 2);\n arrowPos = Math.round(popoverHeight / 2 - arrowHeight / 2);\n\n this.$arrow.css({\n top: arrowPos+'px'\n });\n\n } else if (placement === 'bottom') {\n\n popoverPosX = Math.round(popoverTriggerPosX - (popoverWidth - popoverTriggerWidth) / 2);\n popoverPosY = Math.round(popoverTriggerPosY + popoverTriggerHeight);\n arrowPos = Math.round(popoverWidth / 2 - arrowWidth / 2);\n\n this.$arrow.css({\n left: arrowPos+'px'\n });\n\n } else if (placement === 'left') {\n\n popoverPosX = Math.round(popoverTriggerPosX - popoverWidth);\n popoverPosY = Math.round(popoverTriggerPosY - (popoverHeight - popoverTriggerHeight) / 2);\n arrowPos = Math.round(popoverHeight / 2 - arrowHeight / 2);\n\n this.$arrow.css({\n top: arrowPos+'px'\n });\n }\n\n this.$popover.css({\n position: 'absolute',\n top: '0px',\n left: '0px',\n transform: 'translate3d('+popoverPosX+'px, '+popoverPosY+'px, 0px)',\n 'will-change': 'transform'\n });\n\n // Correct placement if popover goes outside of container\n let popoverOverflowCount = 0;\n let popoverPosition = {\n left: this.$popover.position().left,\n top: this.$popover.position().top,\n right: containerInnerWidth - (this.$popover.position().left + popoverWidth),\n bottom: containerInnerHeight - (this.$popover.position().top + popoverHeight),\n };\n let popoverOverflow = {\n left: false,\n top: false,\n right: false,\n bottom: false\n };\n\n if (popoverPosition.right < 0) {\n\n popoverOverflow.right = true;\n popoverOverflowCount++;\n\n this.log('Popover overflowing from right');\n }\n\n if (popoverPosition.left < 0) {\n\n popoverOverflow.left = true;\n popoverOverflowCount++;\n\n this.log('Popover overflowing from left');\n }\n\n if (popoverPosition.bottom < 0) {\n\n popoverOverflow.bottom = true;\n popoverOverflowCount++;\n\n this.log('Popover overflowing from bottom');\n }\n\n if (popoverPosition.top < 0) {\n\n popoverOverflow.top = true;\n popoverOverflowCount++;\n\n this.log('Popover overflowing from top');\n }\n\n if (popoverOverflowCount > 0) {\n\n if (!this.placementChanged && popoverOverflow.left && popoverPosition.right > popoverWidth) {\n\n this.log('Changing popover placement to right');\n\n this.placementChanged = true;\n this.$popover.removeClass('popover-'+placement);\n this.$arrow.removeAttr('style');\n this.setPosition('right');\n\n } else if (!this.placementChanged && popoverOverflow.top && popoverPosition.top > popoverHeight) {\n\n this.log('Changing popover placement to bottom');\n\n this.placementChanged = true;\n this.$popover.removeClass('popover-'+placement);\n this.$arrow.removeAttr('style');\n this.setPosition('bottom');\n\n } else if (!this.placementChanged && popoverOverflow.right && popoverPosition.left > popoverWidth) {\n\n this.log('Changing popover placement to left');\n\n this.placementChanged = true;\n this.$popover.removeClass('popover-'+placement);\n this.$arrow.removeAttr('style');\n this.setPosition('left');\n\n } else if (!this.placementChanged && popoverOverflow.bottom && popoverPosition.top > popoverHeight) {\n\n this.log('Changing popover placement to top');\n\n this.placementChanged = true;\n this.$popover.removeClass('popover-'+placement);\n this.$arrow.removeAttr('style');\n this.setPosition('top');\n\n } else if (!this.placementChanged && (placement !== 'top' || placement !== 'bottom') && (popoverOverflow.left || popoverOverflow.right)) {\n\n if (popoverPosition.top > popoverPosition.bottom) {\n\n this.log('Changing popover placement to top');\n\n this.placementChanged = true;\n this.$popover.removeClass('popover-'+placement);\n this.$arrow.removeAttr('style');\n this.setPosition('top');\n\n } else {\n\n this.log('Changing popover placement to bottom');\n\n this.placementChanged = true;\n this.$popover.removeClass('popover-'+placement);\n this.$arrow.removeAttr('style');\n this.setPosition('bottom');\n }\n\n } else {\n\n this.fixPopoverPosition = true;\n }\n\n if (this.fixPopoverPosition) {\n\n this.log('Adjusting popover size or position in order to popover fit in the container');\n\n if (popoverOverflow.left) {\n\n this.log('Popover overflowing from left');\n\n let overflowAmount = Math.abs(popoverPosition.left);\n let excludePlacements = ['top', 'bottom'];\n\n if ((popoverTriggerPosX >= popoverPosX + overflowAmount) && excludePlacements.indexOf(placement) < 0) {\n\n this.log('Popover adjusting width');\n\n popoverWidth -= overflowAmount;\n popoverPosX += overflowAmount;\n\n } else {\n\n this.log('Popover adjusting position x');\n\n popoverPosX += overflowAmount;\n arrowPos -= overflowAmount;\n }\n }\n\n if (popoverOverflow.top) {\n\n this.log('Popover overflowing from top');\n\n let overflowAmount = Math.abs(popoverPosition.top);\n\n this.log('Popover adjusting position y');\n\n popoverPosY += overflowAmount;\n arrowPos -= overflowAmount;\n }\n\n if (popoverOverflow.right) {\n\n this.log('Popover overflowing from right');\n\n let overflowAmount = Math.abs(popoverPosition.right);\n let excludePlacements = ['top', 'bottom'];\n\n if ((popoverTriggerPosX <= popoverPosX - overflowAmount) && excludePlacements.indexOf(placement) < 0) {\n\n this.log('Popover adjusting width');\n\n popoverWidth -= overflowAmount;\n\n } else {\n\n this.log('Popover adjusting position x');\n\n popoverPosX -= overflowAmount;\n arrowPos += overflowAmount;\n }\n }\n\n if (popoverOverflow.bottom) {\n\n this.log('Popover overflowing from bottom');\n\n let overflowAmount = Math.abs(popoverPosition.bottom);\n\n this.log('Popover adjusting position y');\n\n popoverPosY -= overflowAmount;\n arrowPos += overflowAmount;\n }\n\n if (placement === 'top') {\n\n this.$arrow.css({\n left: arrowPos+'px'\n });\n\n } else if (placement === 'right') {\n\n this.$arrow.css({\n top: arrowPos+'px'\n });\n\n } else if (placement === 'bottom') {\n\n this.$arrow.css({\n left: arrowPos+'px'\n });\n\n } else if (placement === 'left') {\n\n this.$arrow.css({\n top: arrowPos+'px'\n });\n }\n\n this.$popover.css({\n width: popoverWidth,\n transform: 'translate3d('+popoverPosX+'px, '+popoverPosY+'px, 0px)'\n });\n\n this.fixPopoverPosition = false;\n\n this.log('Popover placement changed: '+this.placementChanged);\n this.log('Popover container inner width: '+containerInnerWidth+'px');\n this.log('Popover container inner height: '+containerInnerHeight+'px');\n this.log('Popover trigger width: '+popoverTriggerWidth+'px');\n this.log('Popover trigger height: '+popoverTriggerHeight+'px');\n this.log('popover trigger position x: '+popoverTriggerPosX+'px');\n this.log('Popover trigger position Y: '+popoverTriggerPosY+'px');\n this.log('Popover width: '+popoverWidth+'px');\n this.log('Popover height: '+popoverHeight+'px');\n this.log('Popover position x: '+popoverPosX+'px');\n this.log('Popover position y: '+popoverPosY+'px');\n this.log('Popover position left: '+popoverPosition.left+'px');\n this.log('Popover position top: '+popoverPosition.top+'px');\n this.log('Popover position right: '+popoverPosition.right+'px');\n this.log('Popover position bottom: '+popoverPosition.bottom+'px');\n }\n\n } else {\n\n this.log('Popover placement changed: '+this.placementChanged);\n this.log('Popover container inner width: '+containerInnerWidth+'px');\n this.log('Popover container inner height: '+containerInnerHeight+'px');\n this.log('Popover trigger width: '+popoverTriggerWidth+'px');\n this.log('Popover trigger height: '+popoverTriggerHeight+'px');\n this.log('popover trigger position x: '+popoverTriggerPosX+'px');\n this.log('Popover trigger position Y: '+popoverTriggerPosY+'px');\n this.log('Popover width: '+popoverWidth+'px');\n this.log('Popover height: '+popoverHeight+'px');\n this.log('Popover position x: '+popoverPosX+'px');\n this.log('Popover position y: '+popoverPosY+'px');\n this.log('Popover position left: '+popoverPosition.left+'px');\n this.log('Popover position top: '+popoverPosition.top+'px');\n this.log('Popover position right: '+popoverPosition.right+'px');\n this.log('Popover position bottom: '+popoverPosition.bottom+'px');\n }\n }\n\n // Show\n show() {\n\n if (this.$popover) {\n return;\n }\n\n this.buildPopover();\n this.setPosition();\n\n if (this.animation) {\n\n this.$popover.addClass(this.animationSpeed);\n this.$popover.animateCss(this.animationIn);\n this.$popover.addClass('show');\n this.$popover.attr('id', this.id);\n this.$el.attr('data-popover', this.id);\n\n } else {\n\n this.$popover.addClass('show');\n this.$popover.attr('id', this.id);\n this.$el.attr('data-popover', this.id);\n }\n\n this.onShow();\n }\n\n // Close\n close() {\n\n if (!this.$popover) {\n return;\n }\n\n if (this.animation && !this.$popover.hasClass('animated')) {\n\n this.$popover.animateCss(this.animationOut, () => {\n\n this.$popover.remove();\n this.$el.removeAttr('data-popover');\n this.$popover = null;\n this.placementChanged = false;\n\n this.onClose();\n });\n\n } else {\n\n this.$popover.remove();\n this.$el.removeAttr('data-popover');\n this.$popover = null;\n this.placementChanged = false;\n\n this.onClose();\n }\n }\n\n static _jQueryInterface(config) {\n\n \treturn this.each(function() {\n\n \t\tlet data = $(this).data(DATA_KEY);\n \t\tconst _config = typeof config === 'object' && config;\n\n \t\tif (!data) {\n \t\t\tdata = new Popover(this, _config);\n \t\t\t$(this).data(DATA_KEY, data);\n \t\t}\n\n \t\tif (typeof config === 'string') {\n\n \t\t\tif (typeof data[config] === 'undefined') {\n\t\t \tthrow new TypeError(`No method named \"${config}\"`)\n\t\t }\n\n\t\t data[config]()\n \t\t}\n\t });\n }\n}\n\nif (typeof $ !== 'undefined') {\n\n // jQuery\n const JQUERY_NO_CONFLICT = $.fn[NAME];\n\n $.fn[NAME] = Popover._jQueryInterface;\n $.fn[NAME].Constructor = Popover;\n\n $.fn[NAME].noConflict = () => {\n\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n\n return Popover._jQueryInterface;\n }\n\n $.fn[NAME].defaults = {\n container: '.content-inner',\n containerAutoDetect: false,\n trigger: 'focus',\n placement: 'bottom',\n animation: true,\n animationIn: 'fadeIn',\n animationOut: 'fadeOut',\n animationSpeed: 'fastest',\n title: '',\n content: '',\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n debug: false\n }\n}\n\nexport default Popover;","import 'jquery';\nimport PerfectScrollbar from './util/perfect-scrollbar';\nimport { debounce, touchEvents } from './util/index';\nimport AbstractUIComponent from './abstract-ui-component';\n\nconst NAME = 'coolSelect';\nconst DATA_KEY = 'plugin_coolSelect';\n\nclass Select extends AbstractUIComponent {\n\n constructor(el, opts) {\n\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.select) {\n\n $.extend(true, this.opts, $.fn[NAME].defaults, window.Cool.settings.select, opts);\n\n } else {\n\n $.extend(true, this.opts, $.fn[NAME].defaults, opts);\n }\n\n this.el = el;\n this.debug = this.opts.debug;\n this.init();\n }\n\n // Init plugin\n init() {\n\n this.buildCache().then(() => {\n\n this.buildScroll();\n this.bindEvents();\n\n if (this.data[this.name].length > 0) {\n this.setData();\n }\n\n this.onInit();\n });\n }\n\n // Remove plugin instance completely\n destroy() {\n\n this.unbindEvents();\n this.$el.removeData(DATA_KEY);\n this.onDestroy();\n }\n\n // Update plugin data\n update() {\n\n this.buildCache();\n this.bindEvents();\n this.onUpdate();\n }\n\n // Reset plugin data\n reset() {\n\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 (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.html(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.html(this.dynamicTitleEmptyDefault);\n }\n\n if (this.showSearch) {\n\n this.searchData = [];\n this.$searchInput.val('');\n this.searchString = '';\n this.search.call(this);\n }\n }\n\n // Cache DOM nodes for performance\n buildCache() {\n\n return new Promise((primaryResolve, primaryReject) => {\n\n let self = this;\n\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.$selectIconContainer = this.$selectHeader.find('.select-icon');\n this.selectIconDefault = this.$selectHeader.find('.select-icon') ? this.$selectHeader.find('.select-icon').html() : '<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.scrollContentHeight = this.$el.data('scrollContentHeight') ? this.$el.data('scrollContentHeight') : this.opts.scrollContentHeight;\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.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 // Convert data to be array so filters doesn't fail\n if (!Array.isArray(this.data[this.name]) && this.data[this.name] !== '' && this.data[this.name].length > 0) {\n\n const arr = this.data[this.name].toString().trim().split(',');\n\n this.data[this.name] = arr;\n }\n\n // Convert all values to string format to make filtering more simple\n if (this.data[this.name].length > 0) {\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\n this.data[this.name] = this.data[this.name].filter(function(item) {\n\n if (item[self.primaryKeyword]) {\n\n return self.itemsToExclude.indexOf(item[self.primaryKeyword].toString()) === -1;\n\n } else {\n\n return self.itemsToExclude.indexOf(item.toString()) === -1;\n }\n });\n }\n\n if (this.items.length > 0 && this.itemsToExclude.length > 0) {\n\n this.items = this.items.filter(function(item) {\n\n if (item[self.primaryKeyword]) {\n\n return self.itemsToExclude.indexOf(item[self.primaryKeyword].toString()) === -1;\n\n } else {\n\n return self.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 new Promise((secondaryResolve, secondaryReject) => {\n\n if (!this.$select.length) {\n\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\n secondaryResolve();\n\n } else {\n\n const selectItems = this.$select.find('.select-item');\n\n if (selectItems.length > 0 && this.itemsToExclude.length > 0) {\n\n $.each(selectItems, (i, el) => {\n\n const val = $(el).find(':input').val();\n\n if (self.itemsToExclude.indexOf(val) > -1) {\n $(el).remove();\n }\n });\n }\n\n secondaryResolve();\n }\n\n }).then(() => {\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.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.html(this.dynamicTitleDefault);\n }\n\n if (this.$selectItems.length == 0 && !this.searchApi && this.dynamicTitle && this.dynamicTitleEmptyDefault && this.dynamicTitleEmptyDefault !== 0) {\n\n this.$selectHeader.addClass('select-placeholder');\n this.$selectIconContainer.addClass('d-none');\n this.$selectTitle.html(this.dynamicTitleEmptyDefault);\n }\n\n if (this.showSearch) {\n\n this.$searchContainer = this.$select.find('.select-search');\n this.$searchInput = this.$select.find('[name=\"select-search\"]');\n this.$searchIconContainer = this.$select.find('.select-search-icon');\n this.$clearSearchButton = this.$select.find('[data-clear-search]');\n\n // Prevent tabfocus from breaking select functionality\n this.$searchInput[0].tabIndex = -1;\n }\n\n if (this.showFooter) {\n\n this.$footerContainer = this.$select.find('.select-footer');\n this.$closeButton = this.$select.find('[data-select-close]');\n\n // Prevent tabfocus from breaking select functionality\n this.$closeButton[0].tabIndex = -1;\n }\n\n this.buildSearchData();\n\n this.log(this.$el);\n this.log(this.$select);\n this.log(this.$scrollableContent);\n this.log('Name: '+this.name);\n this.log('Show search: '+this.showSearch);\n this.log('Show footer: '+this.showFooter);\n this.log('Scroll content height: '+this.scrollContentHeight+'px');\n this.log(this.items);\n this.log(this.searchData);\n\n primaryResolve();\n })\n });\n }\n\n // Build scroll\n buildScroll() {\n\n if (this.$scrollableContent.length > 0) {\n\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 this.$scrollableContent.css({\n 'max-height': (scrollContentHeight - parseInt(this.$scrollableContent.css('marginTop'), 10) - parseInt(this.$scrollableContent.css('marginBottom'), 10)) +'px'\n });\n\n if (touchEvents()) {\n\n this.$scrollableContent.css({\n 'overflow-y': 'auto'\n });\n\n } else {\n\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 // Prevent tabfocus from breaking select functionality\n this.$scrollableContent.find('[tabindex=\"0\"]').attr('tabindex', -1);\n\n if (this.$scrollableContent[0].offsetHeight < this.$scrollableContent[0].scrollHeight) {\n\n this.$scrollableContent.addClass('ps-show-rail-y');\n this.scroll.settings.suppressScrollY = false;\n }\n }\n }\n }\n\n // Build search data\n buildSearchData() {\n\n return new Promise((resolve, reject) => {\n\n this.searchData = [];\n\n let selectLabels = this.$select.find('[data-label]');\n\n $.each(selectLabels, (i, el) => {\n\n this.searchData.push({\n id: i,\n val: $(el).text().trim()\n });\n });\n\n resolve();\n });\n }\n\n // Bind events that trigger methods\n bindEvents() {\n\n let self = this;\n\n this.$selectHeader.on('click'+'.'+NAME, () => {\n\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'+'.'+NAME, 'input[type=\"checkbox\"]', function() {\n\n let el = this;\n let val = $(this).val();\n let closeTimeout = 600; // ms\n\n self.preventClose = true;\n\n if (typeof self.confirmCheck === 'function' && el.checked) {\n\n el.checked = false;\n\n self.confirmCheck((cb) => {\n\n if (cb == 'confirmed') {\n\n self.data[self.name].indexOf(val) === -1 ? self.data[self.name].push(val) : false;\n el.checked = true;\n self.onSelect(el);\n }\n\n setTimeout(function() {\n self.preventClose = false;\n }, closeTimeout);\n }, el);\n\n } else if (el.checked) {\n\n self.data[self.name].indexOf(val) === -1 ? self.data[self.name].push(val) : false;\n self.onSelect(el);\n\n setTimeout(function() {\n self.preventClose = false;\n }, closeTimeout);\n\n } else if (typeof self.confirmUncheck === 'function' && !el.checked) {\n\n el.checked = true;\n\n self.confirmUncheck((cb) => {\n\n if (cb == 'confirmed') {\n\n self.data[self.name] = self.data[self.name].filter(n => n != val);\n el.checked = false;\n self.onSelect(el);\n }\n\n setTimeout(function() {\n self.preventClose = false;\n }, closeTimeout);\n }, el);\n\n } else if (!el.checked && !self.preventUncheck) {\n\n self.data[self.name] = self.data[self.name].filter(n => n != val);\n self.onSelect(el);\n\n setTimeout(function() {\n self.preventClose = false;\n }, closeTimeout);\n\n } else if (!el.checked && self.preventUncheck) {\n\n el.checked = true;\n\n setTimeout(function() {\n self.preventClose = false;\n }, closeTimeout);\n }\n });\n\n this.$el.on('change'+'.'+NAME, 'input[type=\"radio\"]', function() {\n\n let val = $(this).val();\n\n if (this.checked) {\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\n } else {\n\n self.data[self.name] = [];\n }\n });\n\n this.$el.on('click'+'.'+NAME, 'input[type=\"radio\"]', function() {\n\n if ($(this).hasClass('checked') && self.allowNoneOnRadioSelect) {\n\n self.data[self.name] = [];\n $(this).prop('checked', false);\n $(this).removeClass('checked');\n\n if (self.dynamicTitle) {\n self.$selectTitle.html(self.dynamicTitleDefault);\n }\n\n } else {\n\n $(this).addClass('checked');\n\n if (self.dynamicTitle) {\n self.$selectTitle.html($(this).parent().find('[data-label]').text());\n }\n }\n\n self.onSelect(this);\n });\n\n if (this.scroll) {\n\n this.$scrollableContent.find('.ps__thumb-y').mousedown(function() {\n self.$scrollableContent.addClass('ps-mousedown-scroll');\n });\n\n $(document).mouseup(function() {\n\n if (self.$scrollableContent.hasClass('ps-mousedown-scroll')) {\n self.$scrollableContent.removeClass('ps-mousedown-scroll');\n }\n });\n }\n\n if (this.showSearch) {\n\n this.$searchInput.on('keydown'+'.'+NAME, debounce(function () {\n\n self.searchString = $(this).val().trim();\n self.search.call(self);\n\n }, 250));\n\n this.$searchInput.on('focusin'+'.'+NAME, function () {\n\n self.$searchContainer.addClass('focused');\n });\n\n this.$searchInput.on('focusout'+'.'+NAME, function () {\n\n self.$searchContainer.removeClass('focused');\n });\n\n this.$searchContainer.on('click'+'.'+NAME, '[data-clear-search]', function () {\n\n if (self.searchString.length) {\n\n self.$searchInput.val('');\n self.searchString = '';\n self.search.call(self);\n\n } else {\n\n return;\n }\n });\n }\n\n if (this.showFooter) {\n\n this.$closeButton.on('click'+'.'+NAME, () => {\n\n this.close();\n });\n }\n\n $(document).on('touchstart click', function(e) {\n\n if (!self.$el.is(e.target) && !self.$el.has(e.target).length && self.contentOpen && !self.preventClose) {\n\n self.close.call(self);\n }\n });\n }\n\n // Unbind events that trigger methods\n unbindEvents() {\n\n this.$el.off('.'+NAME);\n }\n\n // Get data\n getData(data) {\n\n if (data) {\n return this.data[data];\n } else {\n return this.data;\n }\n }\n\n // Set data\n setData() {\n\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.searchApi.length) {\n\n let searchUrl = this.searchApi;\n let itemCount = this.data[this.name].length;\n let currentCount = 0;\n\n this.data[this.name].forEach(function(value) {\n\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(function(data) {\n\n let items = data.map(item => {\n\n item.id = item[self.primaryKeyword].toString();\n\n return item;\n });\n\n let itemIds = items.map(item => {\n return item.id.toString()\n });\n\n // Remove value from data if it doesn't exist anymore\n self.data[self.name] = self.data[self.name].filter(function(value) {\n return itemIds.indexOf(value.toString()) > -1;\n });\n\n if (self.data[self.name].length == 0) {\n self.$selectIconContainer.html(self.selectIconDefault);\n }\n\n items = items.filter(function(item) {\n return self.data[self.name].indexOf(item.id) > -1 && self.itemsToExclude.indexOf(item.id) === -1 && item.id != 0;\n });\n\n let result = self._renderItemList(items);\n\n $.when(self.$scrollableContent.append(result)).then(function() {\n\n let $inputs = self.$scrollableContent.find(':input');\n\n if (self.$scrollableContent[0].offsetHeight < self.$scrollableContent[0].scrollHeight) {\n\n self.scroll.update();\n self.scroll.settings.suppressScrollY = false;\n self.$scrollableContent.addClass('ps-show-rail-y');\n\n } else {\n\n self.scroll.update();\n self.scroll.settings.suppressScrollY = true;\n self.$scrollableContent.removeClass('ps-show-rail-y');\n }\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\n self.data[self.name].forEach(function(value) {\n\n let $input = $inputs.filter(function() {\n return this.value == value;\n });\n\n $input.prop('checked', true);\n\n self.onSelect($input[0]);\n });\n\n } else if (self.type == 'radio') {\n\n let $input = $inputs.filter(function() {\n return this.value == self.data[self.name][0];\n });\n\n $input.prop('checked', true);\n $input.addClass('checked');\n\n if (self.dynamicTitle) {\n self.$selectTitle.html($input.parent().find('[data-label]').text());\n }\n\n self.onSelect($input[0]);\n }\n });\n });\n\n } else {\n\n // Remove value from data if it doesn't exist anymore\n let $inputs = this.$scrollableContent.find(':input');\n let inputValues = $inputs.length > 0 ? $inputs.map(function() {\n return this.value.toString();\n }).get() : [];\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\n this.data[this.name].forEach(function(value) {\n\n let $input = $inputs.filter(function() {\n return this.value == value\n });\n\n $input.prop('checked', true);\n\n self.onSelect($input[0]);\n });\n\n } else if (this.type == 'radio') {\n\n let $input = $inputs.filter(function() {\n return this.value == self.data[self.name][0];\n });\n\n $input.prop('checked', true);\n $input.addClass('checked');\n\n if (this.dynamicTitle) {\n this.$selectTitle.html($input.parent().find('[data-label]').text());\n }\n\n this.onSelect($input[0]);\n }\n }\n }\n\n // Search\n search() {\n\n let self = this;\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n if (this.searchString.length) {\n\n if (this.searchApi.length) {\n\n this.$scrollableContent.find('input:not(:checked)').parents('.select-item').not('.static-item').remove();\n\n if (this.searchRequest !== null) {\n this.searchRequest.abort();\n }\n\n this.searchRequest = $.ajax({\n method: 'GET',\n url: this.searchApi + this.searchString\n }).done(function(data) {\n\n self.searchRequest = null;\n\n let items = data.map(item => {\n\n item.id = item[self.primaryKeyword].toString();\n\n return item;\n });\n\n items = items.filter(function(item) {\n return self.data[self.name].indexOf(item.id) === -1 && self.itemsToExclude.indexOf(item.id) === -1 && item.id != 0;\n });\n\n let result = self._renderItemList(items);\n\n $.when(self.$scrollableContent.append(result)).then(function() {\n\n let faNameSpace = self.opts.faPro ? 'fal' : 'fas';\n\n self.$searchIconContainer.html(`<i class=\"${faNameSpace} fa-times icon\"></i>`);\n self.$searchIconContainer.attr('data-clear-search', 'true');\n\n if (self.$scrollableContent[0].offsetHeight < self.$scrollableContent[0].scrollHeight) {\n\n self.scroll.update();\n self.scroll.settings.suppressScrollY = false;\n self.$scrollableContent.addClass('ps-show-rail-y');\n\n } else {\n\n self.scroll.update();\n self.scroll.settings.suppressScrollY = true;\n self.$scrollableContent.removeClass('ps-show-rail-y');\n }\n });\n });\n\n } else {\n\n let results = this.searchData.filter(function(item) {\n return item.val.toLocaleLowerCase().indexOf(self.searchString.toLocaleLowerCase()) > -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\n } else {\n\n if (this.searchApi.length) {\n\n this.$scrollableContent.find('input:not(:checked)').parents('.select-item').not('.static-item').remove();\n this.$searchIconContainer.html(`<i class=\"${faNameSpace} fa-search icon\"></i>`);\n this.$searchIconContainer.attr('data-clear-search', '');\n\n } else {\n\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 // Show\n show() {\n\n if (this.$el.hasClass('show')) {\n return;\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.css({\n 'max-height': (this.scrollContentHeight + this.$selectHeader.outerHeight(true))+'px'\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 this.$el.css({\n 'z-index': zindex\n });\n\n if (this.scroll && this.$scrollableContent.length) {\n\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 this.$selectIconContainer.html(`<i class=\"${faNameSpace} fa-angle-up icon\"></i>`);\n\n setTimeout(() => {\n this.$el[0].scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'nearest'});\n }, 300);\n\n this.contentOpen = true;\n this.onShow();\n }\n\n // Close\n close() {\n\n if (!this.preventClose) {\n\n let self = this;\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n this.$el.css('max-height', '');\n this.$el.removeClass('show');\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 this.onClose();\n }\n }\n\n // On select\n onSelect(el) {\n\n let self = this;\n let onSelect = this.opts.onSelect;\n let data = $(el).parents('.select-item').data();\n\n if (this.searchApi.length && !$.isEmptyObject(data)) {\n\n if ($(el).length && el.checked) {\n\n this.items.push(data);\n\n } else {\n\n this.items = $.grep(this.items, function(item) { return item[self.primaryKeyword] != data.id });\n }\n }\n\n if (typeof onSelect === 'function') {\n\n onSelect.call(el, data, this);\n }\n }\n\n // Add more items after plugin is already initialized\n appendItems(items, selectItems) {\n\n return new Promise((resolve, reject) => {\n\n let self = this;\n\n if (!$.isArray(items)) {\n\n let itemsArr = [];\n\n itemsArr.push(items);\n items = itemsArr;\n }\n\n items = items.filter(function(item) {\n return self.itemsToExclude.indexOf(item[self.primaryKeyword].toString()) === -1;\n });\n\n items.forEach(item => {\n\n this.items.push(item);\n });\n\n let domItems = this._renderItemList(items);\n\n this.$scrollableContent.prepend(domItems);\n this.$selectItems = this.$select.find('.select-item');\n\n this.buildSearchData().then(() => {\n\n if (this.$selectItems.length > 0) {\n\n if (this.$select.find(':input[type=\"checkbox\"]').length) {\n this.type = 'checkbox';\n } else if (this.$select.find(':input[type=\"radio\"]').length) {\n this.type = 'radio';\n }\n\n if (this.type == 'checkbox') {\n\n items.forEach(item => {\n\n let $input = this.$select.find(':input').filter(function() { return this.value == item.id });\n let val = $input.val().toString();\n\n $input.prop('checked', true);\n\n this.data[this.name].indexOf(val) === -1 ? this.data[this.name].push(val) : false;\n this.onSelect($input[0]);\n });\n\n } else if (this.type == 'radio') {\n\n let item = items[0];\n let $input = this.$select.find(':input').filter(function() { return this.value == item.id });\n let val = $input.val().toString();\n\n $input.prop('checked', true);\n $input.addClass('checked');\n\n this.data[this.name].indexOf(val) === -1 ? this.data[this.name] = [val] : false;\n\n if (this.dynamicTitle) {\n this.$selectTitle.html($input.parent().find('[data-label]').text());\n }\n\n this.$select.find('input[type=\"radio\"]').not($input).prop('checked', false);\n this.$select.find('input[type=\"radio\"]').not($input).removeClass('checked');\n this.onSelect($input[0]);\n }\n }\n\n if (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.html(this.dynamicTitleDefault);\n }\n\n if (this.$selectHeader.attr('style')) {\n this.$selectHeader.removeAttr('style');\n }\n\n if (this.$selectIconContainer.hasClass('d-none')) {\n this.$selectIconContainer.removeClass('d-none');\n }\n\n resolve();\n });\n });\n }\n\n // Deselect items\n deselectItems(array) {\n\n return new Promise((resolve, reject) => {\n\n array.forEach(id => {\n\n let $input = this.$select.find(':input').filter(function() { return this.value == id });\n\n if ($input[0].checked) {\n\n $input.trigger('click');\n }\n });\n\n if (this.data[this.name].length == 0) {\n this.$selectIconContainer.html(this.selectIconDefault);\n }\n });\n }\n\n // Get item\n getItem(key, val) {\n\n let result = $.grep(this.items, function(item) { return item[key] == val })[0];\n\n return result ? result : null;\n }\n\n // Get selected items\n getSelectedItems(segment) {\n\n let ids = [];\n let result = [];\n let data = this.data[this.name];\n\n if (!$.isArray(data)) {\n\n ids.push(data);\n\n } else {\n\n ids = data;\n }\n\n ids = ids.map(String);\n\n if (this.items.length > 0) {\n\n result = $.grep(this.items, function(item) { return ids.indexOf(item.id.toString()) > -1 });\n\n if (segment) {\n\n result = result.map(obj => {\n return obj[segment];\n }).filter(obj => {\n return obj != null;\n });\n }\n\n } else {\n\n result = ids;\n }\n\n return result;\n }\n\n // Get selected item\n getSelectedItem(segment) {\n\n let ids = [];\n let result = [];\n let data = this.data[this.name];\n\n if (!$.isArray(data)) {\n\n ids.push(data);\n\n } else {\n\n ids = data;\n }\n\n ids = ids.map(String);\n\n if (this.items.length > 0) {\n\n result = $.grep(this.items, function(item) { return ids.indexOf(item.id.toString()) > -1 });\n\n if (segment) {\n\n result = result.map(obj => {\n return obj[segment];\n }).filter(obj => {\n return obj != null;\n });\n }\n\n } else {\n\n result = ids;\n }\n\n return result[0] == null ? null : result[0];\n }\n\n _renderItemList(items) {\n\n let result = [];\n\n for (let i = 0; i < items.length; ++i) {\n\n let item = items[i];\n let label = '';\n\n if (typeof this.labelTemplate === 'function') {\n\n label = this.labelTemplate(item);\n\n } else {\n\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 result.push($(`\n\n <div class=\"select-item\">\n\n <div class=\"select-item-${this.type}\">\n\n <div class=\"styled-${this.type}\">\n\n <input type=\"${this.type}\" id=\"select-${this.name}-${items[i].id}\" value=\"${items[i].id}\" tabindex=\"-1\">\n\n <label for=\"select-${this.name}-${items[i].id}\">\n\n <span class=\"radio-inner\">\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\n <span class=\"${this.type}-label\"${typeof this.labelTemplate !== 'function' ? ' data-label' : ''}>\n ${label}\n </span>\n\n </label>\n\n </div>\n\n </div>\n\n </div>\n\n `).data(item));\n }\n\n return result;\n }\n\n _renderSearch() {\n\n if (!this.showSearch) {\n\n return '';\n\n } else {\n\n let 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\n if (!this.showFooter) {\n\n return '';\n\n } else {\n\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 static _jQueryInterface(config) {\n\n return this.each(function() {\n\n let data = $(this).data(DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new Select(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n });\n }\n\n}\n\nif (typeof $ !== 'undefined') {\n\n // jQuery\n const JQUERY_NO_CONFLICT = $.fn[NAME];\n\n $.fn[NAME] = Select._jQueryInterface;\n $.fn[NAME].Constructor = Select;\n\n $.fn[NAME].noConflict = () => {\n\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n\n return Select._jQueryInterface;\n }\n\n $.fn[NAME].defaults = {\n name: '',\n type: 'checkbox',\n labelTemplate: null,\n confirmCheck: null,\n confirmUncheck: null,\n setData: null,\n scrollContentHeight: 100,\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 debug: false,\n dynamicTitle: false,\n dynamicTitleDefault: '',\n dynamicTitleEmptyDefault: '',\n allowNoneOnRadioSelect: true,\n preventUncheck: false,\n showValidStateIcon: true,\n itemsToExclude: [],\n primaryKeyword: 'id'\n }\n}\n\nexport default Select;","import 'jquery';\nimport PerfectScrollbar from './util/perfect-scrollbar';\nimport { debounce, touchEvents } from './util/index';\nimport AbstractUIComponent from './abstract-ui-component';\n\nconst NAME = 'coolDropdown';\nconst DATA_KEY = 'plugin_coolDropdown';\n\nclass Dropdown extends AbstractUIComponent {\n\n constructor(el, opts) {\n\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.dropdown) {\n\n $.extend(true, this.opts, $.fn[NAME].defaults, window.Cool.settings.dropdown, opts);\n\n } else {\n\n $.extend(true, this.opts, $.fn[NAME].defaults, opts);\n }\n\n this.el = el;\n this.debug = this.opts.debug;\n this.init();\n }\n\n // Init plugin\n init() {\n\n $.when(this.buildCache()).then(() => {\n this.buildScroll();\n this.bindEvents();\n this.onInit();\n });\n }\n\n // Remove plugin instance completely\n destroy() {\n\n this.unbindEvents();\n this.$el.removeData(DATA_KEY);\n this.onDestroy();\n }\n\n // Update plugin data\n update() {\n\n this.buildCache();\n this.onUpdate();\n }\n\n // Cache DOM nodes for performance\n buildCache() {\n\n this.$el = $(this.el);\n this.$el.addClass('dropdown-trigger');\n this.$container = this.$el.parent('.dropdown');\n this.id = 'dropdown-'+this.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.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.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 {\n this.placement = 'left';\n }\n\n if (typeof this.content === 'function') {\n\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 $.when(this.$el.after(this.$dropdown)).then(() => {\n\n this.$scrollableContent = this.$dropdown.find('.dropdown-scrollable-content') ? this.$dropdown.find('.dropdown-scrollable-content') : false;\n this.$dropdown.hasClass('dropdown-menu-right') ? this.align = 'end' : this.align = 'start';\n this.$dropdownItem = this.$dropdown.find('.dropdown-item');\n\n if (this.minWidth) {\n this.$dropdown.css('min-width', this.minWidth+'px');\n }\n\n this.log(this.$el);\n this.log(this.$container);\n this.log(this.$dropdown);\n this.log(this.$scrollableContent);\n this.log('Id: '+this.id);\n this.log('Animation: '+this.animation);\n this.log('Animation in: '+this.animationIn);\n this.log('Animation out: '+this.animationOut);\n this.log('Animation speed: '+this.animationSpeed);\n this.log('Offset: '+this.offset);\n this.log('Min width: '+this.minWidth);\n this.log('Content: '+this.content);\n this.log('Scroll: '+this.scroll);\n this.log('Scroll content height: '+this.scrollContentHeight+'px');\n\n return true;\n });\n\n } else {\n\n this.$dropdown = this.$el.next('.dropdown-menu') ? this.$el.next('.dropdown-menu') : false;\n this.$dropdown.hasClass('dropdown-menu-right') ? this.align = 'end' : this.align = 'start';\n this.$scrollableContent = this.$dropdown.find('.dropdown-scrollable-content') ? this.$dropdown.find('.dropdown-scrollable-content') : false;\n this.$dropdownItem = this.$dropdown.find('.dropdown-item');\n\n if (this.minWidth) {\n this.$dropdown.css('min-width', this.minWidth+'px');\n }\n\n this.log(this.$el);\n this.log(this.$container);\n this.log(this.$dropdown);\n this.log(this.$scrollableContent);\n this.log('Id: '+this.id);\n this.log('Animation: '+this.animation);\n this.log('Animation in: '+this.animationIn);\n this.log('Animation out: '+this.animationOut);\n this.log('Animation speed: '+this.animationSpeed);\n this.log('Offset: '+this.offset);\n this.log('Min width: '+this.minWidth);\n this.log('Content: '+this.opts.content);\n this.log('Scroll: '+this.scroll);\n this.log('Scroll content height: '+this.scrollContentHeight+'px');\n\n return true;\n }\n }\n\n // Build scroll\n buildScroll() {\n\n if (this.opts.scroll && this.$scrollableContent.length) {\n\n this.$scrollableContent.css({\n 'max-height': this.scrollContentHeight+'px'\n });\n\n if (touchEvents()) {\n\n this.$scrollableContent.css({\n 'overflow-y': 'auto'\n });\n\n } else {\n\n this.$scrollableContent.css({\n 'overflow-y': 'auto'\n });\n\n this.scroll = new PerfectScrollbar(this.$scrollableContent[0], {\n wheelSpeed: 1,\n wheelPropagation: false,\n minScrollbarLength: 20\n });\n\n this.$scrollableContent.addClass('ps-show-rail-y');\n }\n }\n }\n\n // Bind events that trigger methods\n bindEvents() {\n\n let self = this;\n\n this.$el.on('click'+'.'+NAME, () => {\n\n if (this.contentOpen) {\n this.close();\n } else {\n this.show();\n }\n });\n\n this.$dropdownItem.on('click'+'.'+NAME, function() {\n\n if (self.closeOnItemClick) {\n self.close();\n }\n\n self.onItemClick(this);\n });\n\n $(document).on('touchstart click', (e) => {\n\n if (!this.$el.is(e.target) && !this.$dropdown.is(e.target) && this.$dropdown.has(e.target).length === 0 && this.contentOpen) {\n this.close();\n }\n });\n\n $(window).on('resize', debounce(() => {\n\n this.setPosition();\n this.onUpdate();\n }, 250));\n }\n\n // Unbind events that trigger methods\n unbindEvents() {\n\n this.$el.off('.'+NAME);\n }\n\n // Generate UUID\n generateUUID() {\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n let r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n // Set positions\n setPosition(placement) {\n\n if (typeof str === 'undefined' || str === null) {\n placement = this.placement;\n }\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 let dropdownTriggerPosX = this.$el.position().left;\n let dropdownTriggerPosY = this.$el.position().top;\n let dropdownPosX = 0;\n let dropdownPosY = 0;\n let offsetX = 0;\n let offsetY = 0;\n\n if (placement === 'top') {\n\n if (this.align === 'end') {\n dropdownPosX = dropdownTriggerWidth - dropdownWidth;\n } else {\n dropdownPosX = dropdownTriggerPosX;\n }\n\n dropdownPosY = dropdownTriggerPosY - dropdownHeight;\n\n } else if (placement === 'right') {\n\n dropdownPosX = dropdownTriggerPosX + dropdownTriggerWidth;\n dropdownPosY = dropdownTriggerPosY;\n\n } else if (placement === 'bottom') {\n\n if (this.align === 'end') {\n dropdownPosX = dropdownTriggerWidth - dropdownWidth;\n } else {\n dropdownPosX = dropdownTriggerPosX;\n }\n\n dropdownPosY = dropdownTriggerPosY + dropdownTriggerHeight;\n\n } else if (placement === 'left') {\n\n dropdownPosX = dropdownTriggerPosX - dropdownWidth;\n dropdownPosY = dropdownTriggerPosY;\n }\n\n if (this.offset) {\n\n const offsets = this.offset.split(',');\n\n offsetX = offsets[0];\n offsetY = offsets[1];\n dropdownPosX += parseInt(offsetX, 10);\n dropdownPosY += parseInt(offsetY, 10);\n }\n\n if (this.positionObserver && this.$container.length > 0) {\n\n // this is not set during init so we have to fetch it\n // and let's assume that this containing parent fits and is inside\n // viewport\n let $containingParent = this.$container.parent();\n let index = 0;\n while (\n $containingParent.css('overflow-x') !== 'hidden' && \n $containingParent.css('overflow') !== 'hidden' &&\n ($containingParent.prop('tagName') || '').toLowerCase() !== 'body' &&\n index < 100\n ) {\n $containingParent = $containingParent.parent();\n\n if (!$containingParent.get(0)) {\n return;\n }\n\n ++index;\n }\n\n if (!$containingParent.get(0)) {\n return;\n }\n\n const containingBoundingRect = $containingParent.get(0).getBoundingClientRect();\n const containerBoundingRect = this.$container.get(0).getBoundingClientRect();\n\n if (containingBoundingRect.width < dropdownWidth) {\n this.$dropdown.css('max-width', containingBoundingRect.width);\n dropdownWidth = containingBoundingRect.width;\n } else {\n this.$dropdown.css('max-width', '');\n }\n\n if (containingBoundingRect.height < dropdownHeight) {\n this.$dropdown.css('max-height', containingBoundingRect.height);\n dropdownHeight = containingBoundingRect.height;\n } else {\n this.$dropdown.css('max-height', '');\n }\n\n const maxTop = Math.max(Math.abs(containingBoundingRect.y - containerBoundingRect.y), 0);\n const maxLeft = Math.max(Math.abs(containingBoundingRect.x - containerBoundingRect.x), 0);\n const maxRight = $containingParent.get(0).scrollWidth - (containerBoundingRect.x + containerBoundingRect.width);\n const maxBottom = $containingParent.get(0).scrollHeight - (containerBoundingRect.y + (placement === 'dropbottom' ? containerBoundingRect.height : 0));\n\n if (maxLeft < dropdownWidth && dropdownPosX < dropdownTriggerPosX) {\n dropdownPosX = dropdownTriggerPosX;\n\n // would be on top of the trigger\n if (dropdownTriggerPosY + dropdownTriggerHeight > dropdownPosY) {\n dropdownPosY = dropdownTriggerPosY + dropdownTriggerHeight + (offsetY > 0 ? offsetY : 0);\n }\n }\n\n if (maxRight < dropdownWidth && dropdownPosX + dropdownWidth > dropdownTriggerPosX + dropdownTriggerWidth) {\n dropdownPosX = dropdownTriggerPosX + dropdownTriggerWidth - dropdownWidth;\n\n if (dropdownTriggerPosY + dropdownTriggerHeight > dropdownPosY) {\n dropdownPosY = dropdownTriggerPosY + dropdownTriggerHeight + (offsetY > 0 ? offsetY : 0);\n }\n }\n\n if (dropdownPosY < dropdownTriggerPosY && maxTop < dropdownHeight) {\n dropdownPosY = dropdownTriggerPosY + dropdownTriggerHeight + offsetY;\n }\n\n if (dropdownPosY >= dropdownTriggerPosY && maxBottom < dropdownHeight) {\n if (dropdownPosX >= dropdownTriggerPosX + dropdownTriggerWidth || dropdownTriggerPosX >= dropdownPosX + dropdownWidth) {\n dropdownPosY = dropdownTriggerPosY - (dropdownHeight - maxBottom);\n } else {\n dropdownPosY = dropdownTriggerPosY - dropdownHeight - offsetY\n }\n }\n }\n\n this.$dropdown.css({\n position: 'absolute',\n top: '0px',\n left: '0px',\n transform: 'translate3d('+Math.round(dropdownPosX)+'px, '+Math.round(dropdownPosY)+'px, 0px)',\n 'will-change': 'transform'\n });\n\n this.log('Dropdown trigger width: '+dropdownTriggerWidth+'px');\n this.log('Dropdown trigger height: '+dropdownTriggerHeight+'px');\n this.log('Dropdown trigger position x: '+dropdownTriggerPosX+'px');\n this.log('Dropdown trigger position Y: '+dropdownTriggerPosY+'px');\n this.log('Dropdown width: '+dropdownWidth+'px');\n this.log('Dropdown height: '+dropdownHeight+'px');\n this.log('Dropdown position x: '+dropdownPosX+'px');\n this.log('Dropdown position y: '+dropdownPosY+'px');\n }\n\n // Show\n show() {\n\n if (!this.$dropdown || this.$dropdown.hasClass('show')) {\n return;\n }\n\n this.setPosition();\n\n if (this.animation) {\n\n this.$dropdown.attr('x-placement', this.placement+'-'+this.align);\n this.$dropdown.addClass(this.animationSpeed);\n this.$dropdown.animateCss(this.animationIn);\n this.$dropdown.addClass('show');\n this.$dropdown.attr('id', this.id);\n this.$el.attr('data-dropdown', this.id);\n\n } else {\n\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].scrollTop = 1;\n this.$scrollableContent[0].scrollTop = 0;\n }\n\n this.contentOpen = true;\n this.onShow();\n }\n\n // Close\n close() {\n\n if (!this.$dropdown) {\n return;\n }\n\n if (this.animation && !this.$dropdown.hasClass('animated')) {\n\n this.$dropdown.animateCss(this.animationOut, () => {\n this.$dropdown.removeClass('show');\n this.$el.removeAttr('data-dropdown');\n });\n\n } else {\n\n this.$dropdown.removeClass('show');\n this.$el.removeAttr('data-dropdown');\n }\n\n this.contentOpen = false;\n this.onClose();\n }\n\n // Item callback\n onItemClick(el) {\n\n let onItemClick = this.opts.onItemClick;\n\n if (typeof onItemClick === 'function') {\n\n onItemClick.call(el);\n }\n }\n\n static _jQueryInterface(config) {\n\n return this.each(function() {\n\n let data = $(this).data(DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new Dropdown(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n });\n }\n}\n\nif (typeof $ !== 'undefined') {\n\n // jQuery\n const JQUERY_NO_CONFLICT = $.fn[NAME];\n\n $.fn[NAME] = Dropdown._jQueryInterface;\n $.fn[NAME].Constructor = Dropdown;\n\n $.fn[NAME].noConflict = () => {\n\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n\n return Dropdown._jQueryInterface;\n }\n\n $.fn[NAME].defaults = {\n animation: true,\n animationIn: 'zoomIn',\n animationOut: 'zoomOut',\n animationSpeed: 'fastest',\n offset: null,\n minWidth: null,\n align: 'start',\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 debug: false\n }\n}\n\nexport default Dropdown;","import 'jquery';\nimport { debounce, touchEvents } from './util/index';\nimport AbstractUIComponent from './abstract-ui-component';\n\nconst NAME = 'coolTooltip';\nconst DATA_KEY = 'plugin_coolTooltip';\n\nclass Tooltip extends AbstractUIComponent {\n\n constructor(el, opts) {\n\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.tooltip) {\n\n $.extend(true, this.opts, $.fn[NAME].defaults, window.Cool.settings.tooltip, opts);\n\n } else {\n\n $.extend(true, this.opts, $.fn[NAME].defaults, opts);\n }\n\n this.el = el;\n this.debug = this.opts.debug;\n this.init();\n }\n\n // Init plugin\n init() {\n\n this.buildCache();\n this.bindEvents();\n this.onInit();\n }\n\n // Remove plugin instance completely\n destroy() {\n\n this.unbindEvents();\n this.$el.removeData(DATA_KEY);\n this.onDestroy();\n }\n\n // Update plugin data\n update() {\n\n this.buildCache();\n this.onUpdate();\n }\n\n // Cache DOM nodes for performance\n buildCache() {\n\n this.$el = $(this.el);\n this.$container = this.$el.data('container') ? $(this.$el.data('container')) : $(this.opts.container);\n this.id = 'tooltip-'+this.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.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 // Bind events that trigger methods\n bindEvents() {\n\n if (this.trigger === 'auto') {\n\n this.$el.on('mouseenter'+'.'+NAME, () => {\n\n this.show();\n });\n\n this.$el.on('mouseleave'+'.'+NAME, () => {\n\n this.close();\n });\n\n this.$el.on('blur'+'.'+NAME, () => {\n\n this.close();\n });\n }\n\n this.$el.on('destroyed'+'.'+NAME, () => {\n\n this.close();\n });\n\n $(window).on('resize', debounce(() => {\n\n if (this.$tooltip) {\n this.setPosition();\n this.onUpdate();\n }\n }, 250));\n }\n\n // Unbind events that trigger methods\n unbindEvents() {\n\n this.$el.off('.'+NAME);\n }\n\n // Generate UUID\n generateUUID() {\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n let r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n // Build tooltip\n buildTooltip() {\n\n this.$tooltip = $(`\n\n <div class=\"tooltip\" role=\"tooltip\" id=\"${this.id}\">\n\n <div class=\"arrow\"></div>\n\n <div class=\"tooltip-inner\">${this.content}</div>\n\n </div>\n\n `);\n\n this.$container.append(this.$tooltip);\n this.$arrow = this.$tooltip.find('.arrow');\n\n this.log(this.$el);\n this.log(this.$container);\n this.log(this.$tooltip);\n this.log(this.$arrow);\n this.log('Id: '+this.id);\n this.log('Animation: '+this.animation);\n this.log('Animation in: '+this.animationIn);\n this.log('Animation out: '+this.animationOut);\n this.log('Animation speed: '+this.animationSpeed);\n this.log('Placement: '+this.placement);\n this.log('Content: '+this.content);\n this.log('Trigger: '+this.trigger);\n }\n\n // Set positions\n setPosition(placement) {\n\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\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\n } else if (placement === 'right') {\n\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\n } else if (placement === 'bottom') {\n\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\n } else if (placement === 'left') {\n\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 // Correct placement if tooltip goes outside of container\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\n tooltipOverflow.right = true;\n tooltipOverflowCount++;\n\n this.log('Tooltip overflowing from right');\n }\n\n if (tooltipPosition.left < 0) {\n\n tooltipOverflow.left = true;\n tooltipOverflowCount++;\n\n this.log('Tooltip overflowing from left');\n }\n\n if (tooltipPosition.bottom < 0) {\n\n tooltipOverflow.bottom = true;\n tooltipOverflowCount++;\n\n this.log('Tooltip overflowing from bottom');\n }\n\n if (tooltipPosition.top < 0) {\n\n tooltipOverflow.top = true;\n tooltipOverflowCount++;\n\n this.log('Tooltip overflowing from top');\n }\n\n if (tooltipOverflowCount > 0) {\n\n if (!this.placementChanged && tooltipOverflow.left && tooltipPosition.right > tooltipWidth) {\n\n this.log('Changing tooltip placement to right');\n\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-'+placement);\n this.$arrow.removeAttr('style');\n this.setPosition('right');\n\n } else if (!this.placementChanged && tooltipOverflow.top && tooltipPosition.top > tooltipHeight) {\n\n this.log('Changing tooltip placement to bottom');\n\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-'+placement);\n this.$arrow.removeAttr('style');\n this.setPosition('bottom');\n\n } else if (!this.placementChanged && tooltipOverflow.right && tooltipPosition.left > tooltipWidth) {\n\n this.log('Changing tooltip placement to left');\n\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-'+placement);\n this.$arrow.removeAttr('style');\n this.setPosition('left');\n\n } else if (!this.placementChanged && tooltipOverflow.bottom && tooltipPosition.top > tooltipHeight) {\n\n this.log('Changing tooltip placement to top');\n\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-'+placement);\n this.$arrow.removeAttr('style');\n this.setPosition('top');\n\n } else if (!this.placementChanged && (placement !== 'top' || placement !== 'bottom') && (tooltipOverflow.left || tooltipOverflow.right)) {\n\n if (tooltipPosition.top > tooltipPosition.bottom) {\n\n this.log('Changing tooltip placement to top');\n\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-'+placement);\n this.$arrow.removeAttr('style');\n this.setPosition('top');\n\n } else {\n\n this.log('Changing tooltip placement to bottom');\n\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-'+placement);\n this.$arrow.removeAttr('style');\n this.setPosition('bottom');\n }\n\n } else {\n\n this.fixTooltipPosition = true;\n }\n\n if (this.fixTooltipPosition) {\n\n this.log('Adjusting tooltip size or position in order to tooltip fit in the container');\n\n if (tooltipOverflow.left) {\n\n this.log('Tooltip overflowing from left');\n\n let overflowAmount = Math.abs(tooltipPosition.left);\n let excludePlacements = ['top', 'bottom'];\n\n if ((tooltipTriggerPosX >= tooltipPosX + overflowAmount) && excludePlacements.indexOf(placement) < 0) {\n\n this.log('Tooltip adjusting width');\n\n tooltipWidth -= overflowAmount;\n tooltipPosX += overflowAmount;\n\n } else {\n\n this.log('Tooltip adjusting position x');\n\n tooltipPosX += overflowAmount;\n arrowPos -= overflowAmount;\n }\n }\n\n if (tooltipOverflow.top) {\n\n this.log('Tooltip overflowing from top');\n\n let overflowAmount = Math.abs(tooltipPosition.top);\n\n this.log('Tooltip adjusting position y');\n\n tooltipPosY += overflowAmount;\n arrowPos -= overflowAmount;\n }\n\n if (tooltipOverflow.right) {\n\n this.log('Tooltip overflowing from right');\n\n let overflowAmount = Math.abs(tooltipPosition.right);\n let excludePlacements = ['top', 'bottom'];\n\n if ((tooltipTriggerPosX <= tooltipPosX - overflowAmount) && excludePlacements.indexOf(placement) < 0) {\n\n this.log('Tooltip adjusting width');\n\n tooltipWidth -= overflowAmount;\n\n } else {\n\n this.log('Tooltip adjusting position x');\n\n tooltipPosX -= overflowAmount;\n arrowPos += overflowAmount;\n }\n }\n\n if (tooltipOverflow.bottom) {\n\n this.log('Tooltip overflowing from bottom');\n\n let overflowAmount = Math.abs(tooltipPosition.bottom);\n\n this.log('Tooltip adjusting position y');\n\n tooltipPosY -= overflowAmount;\n arrowPos += overflowAmount;\n }\n\n if (placement === 'top') {\n\n this.$arrow.css({\n left: arrowPos+'px'\n });\n\n } else if (placement === 'right') {\n\n this.$arrow.css({\n top: arrowPos+'px'\n });\n\n } else if (placement === 'bottom') {\n\n this.$arrow.css({\n left: arrowPos+'px'\n });\n\n } else if (placement === 'left') {\n\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 this.log('Tooltip placement changed: '+this.placementChanged);\n this.log('Tooltip container inner width: '+containerInnerWidth+'px');\n this.log('Tooltip container inner height: '+containerInnerHeight+'px');\n this.log('Tooltip trigger width: '+tooltipTriggerWidth+'px');\n this.log('Tooltip trigger height: '+tooltipTriggerHeight+'px');\n this.log('Tooltip trigger position x: '+tooltipTriggerPosX+'px');\n this.log('Tooltip trigger position Y: '+tooltipTriggerPosY+'px');\n this.log('Tooltip width: '+tooltipWidth+'px');\n this.log('Tooltip height: '+tooltipHeight+'px');\n this.log('Tooltip position x: '+tooltipPosX+'px');\n this.log('Tooltip position y: '+tooltipPosY+'px');\n this.log('Tooltip position left: '+tooltipPosition.left+'px');\n this.log('Tooltip position top: '+tooltipPosition.top+'px');\n this.log('Tooltip position right: '+tooltipPosition.right+'px');\n this.log('Tooltip position bottom: '+tooltipPosition.bottom+'px');\n }\n\n } else {\n\n this.log('Tooltip placement changed: '+this.placementChanged);\n this.log('Tooltip container inner width: '+containerInnerWidth+'px');\n this.log('Tooltip container inner height: '+containerInnerHeight+'px');\n this.log('Tooltip trigger width: '+tooltipTriggerWidth+'px');\n this.log('Tooltip trigger height: '+tooltipTriggerHeight+'px');\n this.log('Tooltip trigger position x: '+tooltipTriggerPosX+'px');\n this.log('Tooltip trigger position Y: '+tooltipTriggerPosY+'px');\n this.log('Tooltip width: '+tooltipWidth+'px');\n this.log('Tooltip height: '+tooltipHeight+'px');\n this.log('Tooltip position x: '+tooltipPosX+'px');\n this.log('Tooltip position y: '+tooltipPosY+'px');\n this.log('Tooltip position left: '+tooltipPosition.left+'px');\n this.log('Tooltip position top: '+tooltipPosition.top+'px');\n this.log('Tooltip position right: '+tooltipPosition.right+'px');\n this.log('Tooltip position bottom: '+tooltipPosition.bottom+'px');\n }\n }\n\n // Show\n show() {\n\n if (this.$tooltip) {\n return;\n }\n\n this.buildTooltip();\n this.setPosition();\n\n if (this.animation) {\n\n this.$tooltip.addClass(this.animationSpeed);\n this.$tooltip.animateCss(this.animationIn);\n this.$tooltip.addClass('show');\n this.$tooltip.attr('id', this.id);\n this.$el.attr('data-tooltip', this.id);\n\n } else {\n\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 close() {\n\n if (!this.$tooltip) {\n return;\n }\n\n if (this.animation && !this.$tooltip.hasClass('animated')) {\n\n this.$tooltip.animateCss(this.animationOut, () => {\n\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 } else {\n\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 static _jQueryInterface(config) {\n\n return this.each(function() {\n\n let data = $(this).data(DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new Tooltip(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n });\n }\n}\n\nif (typeof $ !== 'undefined') {\n\n // jQuery\n const JQUERY_NO_CONFLICT = $.fn[NAME];\n\n $.fn[NAME] = Tooltip._jQueryInterface;\n $.fn[NAME].Constructor = Tooltip;\n\n $.fn[NAME].noConflict = () => {\n\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n\n return Tooltip._jQueryInterface;\n }\n\n $.fn[NAME].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 debug: false\n }\n}\n\nexport default Tooltip;","import 'jquery';\nimport { debounce } from './util/index';\nimport AbstractUIComponent from './abstract-ui-component';\n\nconst NAME = 'coolSectionTabs';\nconst DATA_KEY = 'plugin_coolSectionTabs';\n\nclass SectionTabs extends AbstractUIComponent {\n\n constructor(el, opts) {\n\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.sectionTabs) {\n\n $.extend(true, this.opts, $.fn[NAME].defaults, window.Cool.settings.sectionTabs, opts);\n\n } else {\n\n $.extend(true, this.opts, $.fn[NAME].defaults, opts);\n }\n\n this.el = el;\n this.debug = this.opts.debug;\n this.init();\n }\n\n // Init plugin\n init() {\n\n this.buildCache();\n this.bindEvents();\n this.checkForChanges();\n this.onInit();\n }\n\n // Remove plugin instance completely\n destroy() {\n\n this.unbindEvents();\n this.$el.removeData(DATA_KEY);\n this.onDestroy();\n }\n\n // Update plugin data\n update() {\n\n this.buildCache();\n this.onUpdate();\n }\n\n // Cache DOM nodes for performance\n buildCache() {\n\n this.$el = $(this.el);\n this.$dropdownContainer = this.$el.find('.dropdown-container');\n this.$dropdownList = this.$el.find('.dropdown-list');\n this.tabsCount = this.$el.find('> .tab-item').length;\n this.tabs = this.$el.find('> .tab-item:visible');\n\n $.each(this.tabs, function(i, el) {\n $(el).data('width', $(el).outerWidth(true));\n });\n\n this.log(this.$el);\n this.log(this.$dropdownContainer);\n this.log(this.$dropdownList);\n this.log(this.tabsCount);\n }\n\n // Bind events that trigger methods\n bindEvents() {\n\n $(window).on('resize', debounce(() => {\n this.checkForChanges();\n }, 250));\n }\n\n // Unbind events that trigger methods\n unbindEvents() {\n\n this.$el.off('.'+this._name);\n }\n\n // Move to list\n moveToList(el) {\n\n const $el = $(el);\n const $itemActionEl = $el.find('.tab-item-action');\n\n $itemActionEl.removeClass('dropdown-item');\n $el.insertBefore(this.$dropdownContainer);\n\n this.checkForChanges();\n }\n\n // Move to dropdown\n moveToDropdown(el) {\n\n const $el = $(el);\n const $itemActionEl = $el.find('.tab-item-action');\n\n if (!$itemActionEl.hasClass('dropdown-item')) {\n $itemActionEl.addClass('dropdown-item');\n }\n\n $el.appendTo(this.$dropdownList);\n\n this.checkForChanges();\n }\n\n // Overflow status\n overflowStatus() {\n\n if (this.$el[0].offsetWidth < this.$el[0].scrollWidth) {\n return true;\n } else {\n return false;\n }\n }\n\n // CheckForChanges\n checkForChanges() {\n\n let dropdownItems = this.$dropdownList.children();\n let moveableTabs = this.$el.find('> .tab-item').not(this.$dropdownContainer);\n let tabs = this.$el.find('> .tab-item:visible');\n let usedSpace = 0;\n\n $.each(tabs, function(i, el) {\n usedSpace += $(el).outerWidth(true);\n });\n\n let freeSpace = this.$el[0].offsetWidth - usedSpace;\n\n if (dropdownItems.length > 0) {\n\n if (!this.$dropdownContainer.hasClass('visible')) {\n this.$dropdownContainer.addClass('visible');\n }\n\n } else {\n\n if (this.$dropdownContainer.hasClass('visible')) {\n this.$dropdownContainer.removeClass('visible');\n }\n }\n\n if (this.overflowStatus() == true) {\n\n if (moveableTabs.length > 0) {\n this.moveToDropdown(moveableTabs.last());\n }\n\n } else {\n\n if (dropdownItems.length > 0) {\n\n if (freeSpace > dropdownItems.last().data('width')) {\n this.moveToList(dropdownItems.last());\n }\n }\n }\n }\n\n static _jQueryInterface(config) {\n\n return this.each(function() {\n\n let data = $(this).data(DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new SectionTabs(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n });\n }\n}\n\nif (typeof $ !== 'undefined') {\n\n // jQuery\n const JQUERY_NO_CONFLICT = $.fn[NAME];\n\n $.fn[NAME] = SectionTabs._jQueryInterface;\n $.fn[NAME].Constructor = SectionTabs;\n\n $.fn[NAME].noConflict = () => {\n\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n\n return SectionTabs._jQueryInterface;\n }\n\n $.fn[NAME].defaults = {\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n debug: false\n }\n}\n\nexport default SectionTabs;\n","import 'jquery';\nimport { debounce } from './util/index';\nimport AbstractUIComponent from './abstract-ui-component';\n\nconst NAME = 'coolCollapse';\nconst DATA_KEY = 'plugin_coolCollapse';\n\nclass Collapse extends AbstractUIComponent {\n\n constructor(el, opts) {\n\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.collapse) {\n\n $.extend(true, this.opts, $.fn[NAME].defaults, window.Cool.settings.dialog, opts);\n\n } else {\n\n $.extend(true, this.opts, $.fn[NAME].defaults, opts);\n }\n\n this.el = el;\n this.debug = this.opts.debug;\n this.init();\n }\n\n // Init plugin\n init() {\n\n this.buildCache()\n this.bindEvents();\n this.onInit();\n }\n\n // Remove plugin instance completely\n destroy() {\n\n this.unbindEvents();\n this.$el.removeData(DATA_KEY);\n this.onDestroy();\n }\n\n // Update plugin data\n update() {\n\n this.buildCache();\n this.onUpdate();\n }\n\n // Cache DOM nodes for performance\n buildCache() {\n\n this.$el = $(this.el);\n this.$target = this.$el.data('target') ? $(document).find(this.$el.data('target')) : $(document).find(this.opts.target);\n this.breakpoint = this.$el.data('breakpoint');\n this.expanded = this.$el.attr('aria-expanded') == 'true' ? true : false;\n this.transitionendEvent = this.whichTransitionEvent();\n\n if (this.$target.length) {\n\n this.targetHeight = this.$target.height();\n this.$container = this.$target.closest('.section-collapse');\n this.$indicator = $(document).find('[data-collapse-indicator=\"' + this.$el.data('target') + '\"]');\n\n } else {\n\n this.$target = $(this.$el).parent().find('.collapse');\n this.targetHeight = this.$target.height();\n this.$container = this.$target.closest('.section-collapse');\n this.$indicator = $(this.$el).parent().find('[data-collapse-indicator]');\n }\n\n if (this.expanded) {\n this.$target.css('height', 'auto');\n }\n\n this.log(this.$el);\n this.log(this.$target);\n this.log(this.$container);\n this.log(this.$indicator);\n this.log('Expanded: '+this.expanded);\n this.log('Target height: '+this.targetHeight+'px');\n }\n\n // Bind events that trigger methods\n bindEvents() {\n this.$el.on('click'+'.'+this.name, (e) => {\n if (!this.breakpoint || !window.matchMedia(`(min-width: ${this.breakpoint}px)`).matches) {\n if (this.expanded) {\n this.close();\n } else {\n this.show();\n }\n }\n });\n\n $(window).on('resize', debounce(() => {\n if (this.$target.length) {\n this.targetHeight = this.$target.height();\n this.log('Target height: '+this.targetHeight+'px');\n }\n }, 250));\n }\n\n // Unbind events that trigger methods\n unbindEvents() {\n\n this.$el.off('.'+this.name);\n }\n\n // Which transition\n whichTransitionEvent() {\n\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\n if (el.style[t] !== undefined) {\n return transEndEventNames[t];\n }\n }\n }\n\n // Show\n show() {\n\n const self = this;\n\n // Update target height if something is added to dom which causes height to change\n if (this.targetHeight !== this.$target.height()) {\n this.targetHeight = this.$target.height();\n }\n\n this.$target.removeClass('collapse show');\n this.$target.addClass('collapsing');\n\n if (this.$el.is('button')) {\n this.$el.attr('disabled', true);\n }\n\n if (this.$container.length) {\n this.$container.addClass('show');\n }\n\n this.$target.css('height');\n this.$target.css('height', this.targetHeight);\n\n if (this.$indicator.length) {\n this.$indicator.addClass('show');\n }\n\n this.$target.on(this.transitionendEvent, function(e) {\n\n if ($(e.target).is(this)) {\n\n self.$target.removeClass('collapsing');\n\n if (self.$el.is('button')) {\n self.$el.attr('disabled', false);\n }\n\n self.$target.removeAttr('style');\n self.$target.addClass('collapse show');\n self.$el.attr('aria-expanded', true);\n self.$target.css('height', 'auto');\n self.expanded = true;\n\n $(this).off(self.transitionendEvent);\n }\n });\n\n this.onShow();\n }\n\n // Close\n close() {\n\n const self = this;\n\n this.$target.removeClass('collapse show');\n this.$target.addClass('collapsing');\n\n if (this.$el.is('button')) {\n this.$el.attr('disabled', true);\n }\n\n if (this.$container.length) {\n this.$container.removeClass('show');\n }\n\n this.$target.css('height', this.$target.height());\n\n setTimeout(() => {\n this.$target.css('height', 0);\n }, 10);\n\n if (this.$indicator.length && this.$indicator.hasClass('show')) {\n this.$indicator.removeClass('show');\n }\n\n this.$target.on(this.transitionendEvent, function(e) {\n\n if ($(e.target).is(this)) {\n\n self.$target.removeClass('collapsing');\n\n if (self.$el.is('button')) {\n self.$el.attr('disabled', false);\n }\n\n self.$target.removeAttr('style');\n self.$target.addClass('collapse');\n self.$el.attr('aria-expanded', false);\n self.expanded = false;\n\n // Update target height if something is added to dom which causes height to change\n if (self.targetHeight !== self.$target.height()) {\n self.targetHeight = self.$target.height();\n }\n\n $(this).off(self.transitionendEvent);\n }\n });\n\n this.onClose();\n }\n\n static _jQueryInterface(config) {\n\n return this.each(function() {\n\n let data = $(this).data(DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new Collapse(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n });\n }\n}\n\nif (typeof $ !== 'undefined') {\n\n // jQuery\n const JQUERY_NO_CONFLICT = $.fn[NAME];\n\n $.fn[NAME] = Collapse._jQueryInterface;\n $.fn[NAME].Constructor = Collapse;\n\n $.fn[NAME].noConflict = () => {\n\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n\n return Collapse._jQueryInterface;\n }\n\n $.fn[NAME].defaults = {\n target: null,\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n debug: false\n }\n}\n\nexport default Collapse;","import 'jquery';\nimport { debounce } from './util/index';\nimport AbstractUIComponent from './abstract-ui-component';\n\nconst NAME = 'coolToast';\nconst DATA_KEY = 'plugin_coolToast';\n\nclass Toast {\n\n constructor(container, opts) {\n\n this.settings = {};\n\n if (window.Cool.settings.toast) {\n\n $.extend(true, this.settings, $.fn[NAME].defaults, window.Cool.settings.toast, opts);\n\n } else {\n\n $.extend(true, this.settings, $.fn[NAME].defaults, opts);\n }\n\n this.container = container;\n this.$container = $(this.container);\n this.debug = this.settings.debug;\n this.faPro = this.settings.faPro;\n this.toasts = [];\n this.queue = [];\n this.processingQueue = false;\n this.onInitialize = this.settings.onInitialize;\n this.onDestroy = this.settings.onDestroy;\n }\n\n // Add item to queue\n addQueue(toast) {\n\n this.queue.push(toast);\n\n if (this.processingQueue) {\n return;\n }\n\n return this.processQueue();\n }\n\n // Process queue\n processQueue() {\n\n if (this.processingQueue) {\n\n this.queue.shift();\n }\n\n if (!this.queue.length) {\n\n this.processingQueue = false;\n return;\n }\n\n this.processingQueue = true;\n\n return this.show(this.queue[0]);\n }\n\n // Init toast\n init(opts) {\n\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 // Remove plugin instance completely\n destroy() {\n\n this.$container.removeData(DATA_KEY);\n this.onDestroy();\n }\n\n // Build toast\n buildToast(settings) {\n\n let toast = {\n uuid: 'toast-'+this.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\n toast.$el = $(toast.template());\n\n } else {\n\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.log(toast);\n this.toasts.push(toast);\n\n return toast;\n }\n\n // Bind events that trigger methods\n bindEvents(toast) {\n\n let self = this;\n\n toast.$el.on('click', '[data-toast-close]', () => {\n\n if (toast.$el) {\n self.close(toast);\n }\n });\n\n $(window).on('resize', debounce(() => {\n\n if (toast.$el) {\n this.setPosition(toast);\n }\n }, 250));\n }\n\n // Generate UUID\n generateUUID() {\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n let r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n // Set positions\n setPosition(toast, placement, placementY, placementX) {\n\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\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\n if (placement === 'top-left') {\n\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\n } else if (placement === 'top-center') {\n\n toastPosX = (this.$container.width() / 2) - toastWidth / 2;\n toastPosY = 0;\n\n this.log(this.$container.width);\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += offsetY;\n } else {\n toastPosY += 30;\n }\n\n } else if (placement === 'top-right') {\n\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\n } else if (placement === 'center-left') {\n\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\n } else if (placement === 'center-center') {\n\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\n } else if (placement === 'center-right') {\n\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\n } else if (placement === 'bottom-left') {\n\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\n } else if (placement === 'bottom-center') {\n\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\n } else if (placement === 'bottom-right') {\n\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\n } else {\n\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 this.log('Toast width: '+toastWidth+'px');\n this.log('Toast height: '+toastHeight+'px');\n this.log('Toast position Y: '+toastPosX+'px');\n this.log('Toast position x: '+toastPosY+'px');\n }\n\n // Show\n show(toast) {\n\n this.$container.append(toast.$el);\n this.bindEvents(toast);\n this.setPosition(toast);\n\n if (toast.animation) {\n\n toast.$el.addClass('show');\n toast.$inner.addClass(toast.animationSpeed);\n toast.$inner.animateCss(toast.animationIn);\n\n } else {\n\n toast.$el.addClass('show');\n }\n\n if (toast.dismiss) {\n\n setTimeout(() => {\n this.close(toast);\n }, toast.dismiss * 1000);\n }\n\n this.onShow(toast);\n }\n\n // Close\n close(toast) {\n\n if (toast.animation && !toast.$inner.hasClass('animated')) {\n\n toast.$el.removeClass('show');\n toast.$inner.animateCss(toast.animationOut, () => {\n\n toast.$el.remove();\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 } else {\n\n toast.$el.remove();\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 // Initialize callback\n onInitialize() {\n\n let onInitialize = this.onInitialize;\n\n if (typeof onInitialize === 'function') {\n\n onInitialize.call(this.container);\n }\n }\n\n // Destroy callback\n onDestroy() {\n\n let onDestroy = this.onDestroy;\n\n if (typeof onDestroy === 'function') {\n\n onDestroy.call(this.container);\n }\n }\n\n // Init callback\n onInit(toast) {\n\n let onInit = toast.onInit;\n\n if (typeof onInit === 'function') {\n\n onInit.call(toast);\n }\n }\n\n // Show callback\n onShow(toast) {\n\n let onShow = toast.onShow;\n\n if (typeof onShow === 'function') {\n\n onShow.call(toast);\n }\n }\n\n // Close callback\n onClose(toast) {\n\n let onClose = toast.onClose;\n\n if (typeof onClose === 'function') {\n\n onClose.call(toast);\n }\n }\n\n // Debug log\n log(...args) {\n\n if (this.debug) {\n\n if (typeof this.debug === 'function') {\n this.debug(...args);\n } else {\n console.log(...args);\n }\n }\n }\n\n // Render template\n _renderTemplate(toast) {\n\n let faNameSpace = this.faPro ? 'far' : 'fas';\n let content = '';\n let header = '';\n let body = '';\n let bodyCloseBtn = '';\n\n if (typeof toast.content === 'function') {\n\n content = toast.content();\n\n } else {\n\n content = toast.content;\n }\n\n if (toast.header) {\n\n header = `\n <div class=\"toast-header\">\n\n <span>${toast.title}</span>\n\n <button type=\"button\" data-toast-close>\n <i class=\"${faNameSpace} fa-times icon\"></i>\n </button>\n\n </div>\n `;\n\n } else {\n\n bodyCloseBtn = `\n <button type=\"button\" data-toast-close>\n\n <i class=\"${faNameSpace} fa-times icon\"></i>\n\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 static _jQueryInterface(config) {\n\n return this.each(function() {\n\n let data = $(this).data(DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new Toast(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n });\n }\n}\n\nif (typeof $ !== 'undefined') {\n\n // jQuery\n const JQUERY_NO_CONFLICT = $.fn[NAME];\n\n $.fn[NAME] = Toast._jQueryInterface;\n $.fn[NAME].Constructor = Toast;\n\n $.fn[NAME].noConflict = () => {\n\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n\n return Toast._jQueryInterface;\n }\n\n $.fn[NAME].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 faPro: false,\n debug: false,\n onInitialize: null,\n onDestroy: null,\n onInit: null,\n onDestroy: null,\n onShow: null,\n onClose: null\n }\n}\n\nexport default Toast;","import 'jquery';\nimport { debounce, touchEvents } from './util/index';\n\nconst NAME = 'coolDialog';\nconst DATA_KEY = 'plugin_coolDialog';\n\nclass Dialog {\n\n constructor(container, opts) {\n\n this.settings = {};\n\n if (window.Cool.settings.dialog) {\n\n $.extend(true, this.settings, $.fn[NAME].defaults, window.Cool.settings.dialog, opts);\n\n } else {\n\n $.extend(true, this.settings, $.fn[NAME].defaults, opts);\n }\n\n this.container = container;\n this.$container = $(this.container);\n this.debug = this.settings.debug;\n this.faPro = this.settings.faPro;\n this.dialogs = [];\n this.onInitialize = this.settings.onInitialize;\n this.onDestroy = this.settings.onDestroy;\n }\n\n // Init dialog\n init(opts) {\n\n let settings = {};\n\n $.extend(true, settings, this.settings, opts);\n\n let dialog = this.buildDialog(settings);\n\n this.show(dialog);\n this.bindEvents(dialog);\n this.onInit(dialog);\n\n return dialog;\n }\n\n // Remove plugin instance completely\n destroy() {\n\n this.$container.removeData(DATA_KEY);\n this.onDestroy();\n }\n\n // Build dialog\n buildDialog(settings) {\n\n let self = this;\n let dialog = {\n uuid: 'dialog-'+this.generateUUID(),\n title: settings.title,\n template: settings.template,\n body: settings.body,\n footer: settings.footer,\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 onInit: settings.onInit,\n onShow: settings.onShow,\n onClose: settings.onClose\n };\n\n if (dialog.maxBodyHeight == null) {\n\n dialog.maxBodyHeight = window.innerHeight - 200;\n }\n\n if (typeof dialog.template === 'function') {\n\n dialog.$el = $(dialog.template());\n\n } else {\n\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.log(dialog);\n this.dialogs.push(dialog);\n\n return dialog;\n }\n\n // Bind events that trigger methods\n bindEvents(dialog) {\n\n let self = this;\n\n dialog.$el.on('click', '[data-dialog-close]', function (e) {\n\n dialog.$el.trigger('dialog.close');\n\n if (typeof dialog.callbacks.close === 'function') {\n\n dialog.callbacks.close.call(self, function () {\n self.close(dialog)\n }, dialog);\n\n } else {\n\n self.close(dialog);\n }\n });\n\n dialog.$el.on('click', '[data-dialog-remove]', function (e) {\n\n dialog.$el.trigger('dialog.remove');\n\n if (typeof dialog.callbacks.remove === 'function') {\n\n dialog.callbacks.remove.call(self, function () {\n self.close(dialog)\n }, dialog);\n }\n });\n\n dialog.$el.on('click', '[data-dialog-confirm]', debounce(function (e) {\n\n dialog.$el.trigger('dialog.close');\n\n if (typeof dialog.callbacks.confirm === 'function') {\n\n dialog.callbacks.confirm.call(self, function () {\n self.close(dialog)\n }, dialog);\n\n } else {\n\n self.close(dialog);\n }\n }));\n }\n\n // Generate UUID\n generateUUID() {\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n let r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n // Show\n show(dialog) {\n\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\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\n this.$container.append('<div class=\"dialog-backdrop\"></div>');\n\n let checkForBackdrop = setInterval(() => {\n\n if (this.dialogs.length == 0 && $('.dialog-backdrop').length) {\n\n $('.dialog-backdrop').remove();\n clearInterval(checkForBackdrop);\n }\n\n }, 100);\n }\n\n this.$container.append(dialog.$el);\n\n if (dialog.animation) {\n dialog.$el.find('.dialog-content').addClass(dialog.animationSpeed).animateCss(dialog.animationIn);\n }\n\n this.onShow(dialog);\n }\n\n // Close\n close(dialog) {\n\n let $prevDialog = null;\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\n dialog.$el.find('.dialog-content').animateCss(dialog.animationOut, () => {\n\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\n this.$container.removeClass('has-dialogs');\n\n if (this.$container.hasClass('dialog-prevent-scroll')) {\n this.$container.removeClass('dialog-prevent-scroll');\n }\n\n } else {\n\n if ($prevDialog) {\n $prevDialog.css('opacity', 1);\n }\n }\n });\n\n } else {\n\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\n this.$container.removeClass('has-dialogs');\n\n if (this.$container.hasClass('dialog-prevent-scroll')) {\n this.$container.removeClass('dialog-prevent-scroll');\n }\n\n } else {\n\n if ($prevDialog) {\n $prevDialog.css('opacity', 1);\n }\n }\n }\n\n this.onClose(dialog);\n }\n\n // Initialize callback\n onInitialize() {\n\n let onInitialize = this.onInitialize;\n\n if (typeof onInitialize === 'function') {\n\n onInitialize.call(this.container);\n }\n }\n\n // Destroy callback\n onDestroy() {\n\n let onDestroy = this.onDestroy;\n\n if (typeof onDestroy === 'function') {\n\n onDestroy.call(this.container);\n }\n }\n\n // Init callback\n onInit(dialog) {\n\n let onInit = dialog.onInit;\n\n if (typeof onInit === 'function') {\n\n onInit.call(dialog);\n }\n }\n\n // Show callback\n onShow(dialog) {\n\n let onShow = dialog.onShow;\n\n if (typeof onShow === 'function') {\n\n onShow.call(dialog);\n }\n }\n\n // Close callback\n onClose(dialog) {\n\n let onClose = dialog.onClose;\n\n if (typeof onClose === 'function') {\n\n onClose.call(dialog);\n }\n }\n\n // Debug log\n log(...args) {\n\n if (this.debug) {\n\n if (typeof this.debug === 'function') {\n this.debug(...args);\n } else {\n console.log(...args);\n }\n }\n }\n\n // Render footer\n _renderFooter(dialog) {\n\n let footer = '';\n\n if (typeof dialog.footer === 'function') {\n\n footer = dialog.footer();\n\n } else if (dialog.footer !== '' && dialog.footer !== false && dialog.footer !== true) {\n\n footer = dialog.footer;\n\n } else if (dialog.footer === true) {\n\n let btnCancel = '';\n let btnRemove = '';\n let btnConfirm = '';\n let btnStyle = '';\n let btnClasses = '';\n let btnAttrs = '';\n\n if (dialog.actions.close.visible) {\n\n btnStyle = dialog.actions.close.primary ? 'btn-primary' : 'btn-secondary';\n btnClasses = dialog.actions.close.classes ? ' '+dialog.actions.close.classes : '';\n btnAttrs = dialog.actions.close.attrs ? ' '+dialog.actions.close.attrs : '';\n btnCancel = `\n <button type=\"button\" class=\"btn ${btnStyle}${btnClasses}\"${btnAttrs} data-dialog-close>\n ${dialog.actions.close.content}\n </button>\n `;\n }\n\n if (dialog.actions.remove.visible) {\n\n btnStyle = 'btn-remove';\n btnClasses = dialog.actions.remove.classes ? ' '+dialog.actions.remove.classes : '';\n btnAttrs = dialog.actions.remove.attrs ? ' '+dialog.actions.remove.attrs : '';\n btnRemove = `\n <button type=\"button\" class=\"btn ${btnStyle}${btnClasses}\"${btnAttrs} data-dialog-remove>\n ${dialog.actions.remove.content}\n </button>\n `;\n }\n\n if (dialog.actions.confirm.visible) {\n\n btnStyle = dialog.actions.confirm.primary ? 'btn-primary' : 'btn-secondary';\n btnClasses = dialog.actions.confirm.classes ? ' '+dialog.actions.confirm.classes : '';\n btnAttrs = dialog.actions.confirm.attrs ? ' '+dialog.actions.confirm.attrs : '';\n btnConfirm = `\n <button type=\"button\" class=\"btn ${btnStyle}${btnClasses}\"${btnAttrs} data-dialog-confirm>\n ${dialog.actions.confirm.content}\n </button>\n `;\n }\n\n footer = `\n ${btnRemove}\n <div class=\"spacer\"></div>\n ${btnCancel}\n ${btnConfirm}\n `;\n\n } else {\n\n return footer;\n }\n\n if (footer) {\n\n return `\n <div class=\"dialog-footer\">\n ${footer}\n </div>\n `;\n }\n }\n\n // Render template\n _renderTemplate(dialog) {\n\n let faNameSpace = this.faPro ? 'far' : 'fas';\n let classes = dialog.classes ? ' '+dialog.classes : '';\n let centered = dialog.centered ? ' dialog-centered' : '';\n let size = dialog.size ? ' dialog-'+dialog.size : '';\n let overFlowVisible = dialog.overflowVisible ? ' dialog-overflow-visible' : '';\n let uuid = ' data-dialog-uuid=\"'+dialog.uuid+'\"';\n let backdrop = dialog.backdrop ? ' data-dialog-backdrop=\"true\"' : ' data-dialog-backdrop=\"false\"';\n let title = dialog.title;\n let closeBtn = dialog.closeBtn ? `<button type=\"button\" data-dialog-close><i class=\"${faNameSpace} fa-times icon\"></i></button>` : '';\n let maxBodyHeight = dialog.maxBodyHeight ? ' style=\"max-height: '+dialog.maxBodyHeight+'px\"' : '';\n let body = '';\n let footer = this._renderFooter(dialog);\n\n if (typeof dialog.body === 'function') {\n\n body = dialog.body();\n\n } else {\n\n body = dialog.body;\n }\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 <div class=\"dialog-header\">\n\n <span class=\"dialog-title\">\n ${title}\n </span>\n\n ${closeBtn}\n\n </div>\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 static _jQueryInterface(config) {\n\n let data = $(this).data(DATA_KEY);\n const _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new Dialog(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n }\n}\n\nif (typeof $ !== 'undefined') {\n\n // jQuery\n const JQUERY_NO_CONFLICT = $.fn[NAME];\n\n $.fn[NAME] = Dialog._jQueryInterface;\n $.fn[NAME].Constructor = Dialog;\n\n $.fn[NAME].noConflict = () => {\n\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n\n return Dialog._jQueryInterface;\n }\n\n $.fn[NAME].defaults = {\n title: '',\n template: '',\n body: '',\n footer: true,\n size: '', // sm/lg\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 callbacks: {},\n maxBodyHeight: null,\n overflowVisible: false,\n faPro: false,\n debug: true,\n onInitialize: null,\n onDestroy: null,\n onInit: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n actions: {\n close: {\n primary: false,\n visible: true,\n content: 'Close',\n classes: '',\n attrs: ''\n },\n remove: {\n primary: false,\n visible: true,\n content: 'Remove',\n classes: '',\n attrs: ''\n },\n confirm: {\n primary: true,\n visible: true,\n content: 'Confirm',\n classes: '',\n attrs: ''\n }\n }\n }\n}\n\nexport default Dialog;","import Common from './src/common';\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\tCommon,\n\tPopover,\n\tSelect,\n\tDropdown,\n\tTooltip,\n\tSectionTabs,\n\tCollapse,\n\tToast,\n\tDialog\n}"]}
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","debounce","func","wait","immediate","timeout","context","args","arguments","clearTimeout","setTimeout","apply","touchEvents","result","navigator","maxTouchPoints","generateUUID","replace","c","r","Math","random","toString","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","html","documentElement","createBackdrop","backdrop","createElement","className","ariaExpanded","siteMainEl","appendChild","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","innerHTML","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","text","createTextNode","p","escapeHtml","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","jQuery"],"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.umd.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 '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;', //eslint-disable-line\n '`': '&#x60;',\n '=': '&#x3D;',\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 jQuery from 'jquery';\nimport 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\n// Ensure jQuery is available globally for bundle builds\nif (typeof window !== 'undefined') {\n window.jQuery = window.$ = jQuery;\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};\n"],"mappings":"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","ignoreList":[]}