@finqu/cool 1.2.28 → 1.3.0

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 (207) hide show
  1. package/README.md +680 -1
  2. package/dist/css/cool.css +23510 -16076
  3. package/dist/css/cool.css.map +1 -154
  4. package/dist/css/cool.min.css +89 -3
  5. package/dist/css/cool.min.css.map +1 -1
  6. package/dist/js/cool.bundle.js +15397 -3775
  7. package/dist/js/cool.bundle.js.map +1 -1
  8. package/dist/js/cool.bundle.min.js +20 -8
  9. package/dist/js/cool.bundle.min.js.map +1 -1
  10. package/dist/js/cool.esm.js +4281 -3352
  11. package/dist/js/cool.esm.js.map +1 -1
  12. package/dist/js/cool.esm.min.js +9 -8
  13. package/dist/js/cool.esm.min.js.map +1 -1
  14. package/dist/js/cool.js +4283 -3354
  15. package/dist/js/cool.js.map +1 -1
  16. package/dist/js/cool.min.js +9 -8
  17. package/dist/js/cool.min.js.map +1 -1
  18. package/package.json +94 -61
  19. package/.babelrc.js +0 -20
  20. package/.browserslistrc +0 -13
  21. package/build/.eslintrc.json +0 -10
  22. package/build/banner.js +0 -14
  23. package/build/build-plugins.js +0 -92
  24. package/build/rollup.config.js +0 -46
  25. package/dist/css/cool-grid.css +0 -3704
  26. package/dist/css/cool-grid.css.map +0 -30
  27. package/dist/css/cool-grid.min.css +0 -7
  28. package/dist/css/cool-grid.min.css.map +0 -1
  29. package/dist/css/cool-reboot.css +0 -285
  30. package/dist/css/cool-reboot.css.map +0 -62
  31. package/dist/css/cool-reboot.min.css +0 -7
  32. package/dist/css/cool-reboot.min.css.map +0 -1
  33. package/html/dropdown-test.html +0 -200
  34. package/html/index.html +0 -2704
  35. package/js/dist/collapse.js +0 -5290
  36. package/js/dist/collapse.js.map +0 -1
  37. package/js/dist/common.js +0 -22152
  38. package/js/dist/common.js.map +0 -1
  39. package/js/dist/cooldropdown.js +0 -467
  40. package/js/dist/cooldropdown.js.map +0 -1
  41. package/js/dist/coolpopover.js +0 -391
  42. package/js/dist/coolpopover.js.map +0 -1
  43. package/js/dist/coolsectiontabs.js +0 -256
  44. package/js/dist/coolsectiontabs.js.map +0 -1
  45. package/js/dist/coolselect.js +0 -796
  46. package/js/dist/coolselect.js.map +0 -1
  47. package/js/dist/cooltooltip.js +0 -360
  48. package/js/dist/cooltooltip.js.map +0 -1
  49. package/js/dist/coolui.js +0 -73
  50. package/js/dist/coolui.js.map +0 -1
  51. package/js/dist/dropdown.js +0 -27421
  52. package/js/dist/dropdown.js.map +0 -1
  53. package/js/dist/popover.js +0 -9298
  54. package/js/dist/popover.js.map +0 -1
  55. package/js/dist/sectiontabs.js +0 -4483
  56. package/js/dist/sectiontabs.js.map +0 -1
  57. package/js/dist/select.js +0 -37052
  58. package/js/dist/select.js.map +0 -1
  59. package/js/dist/tooltip.js +0 -8786
  60. package/js/dist/tooltip.js.map +0 -1
  61. package/js/index.esm.js +0 -21
  62. package/js/index.umd.js +0 -21
  63. package/js/src/abstract-ui-component.js +0 -81
  64. package/js/src/collapse.js +0 -272
  65. package/js/src/common.js +0 -313
  66. package/js/src/dialog.js +0 -578
  67. package/js/src/dropdown.js +0 -525
  68. package/js/src/popover.js +0 -621
  69. package/js/src/section-tabs.js +0 -215
  70. package/js/src/select.js +0 -1341
  71. package/js/src/toast.js +0 -581
  72. package/js/src/tooltip.js +0 -591
  73. package/js/src/util/animate-css.js +0 -22
  74. package/js/src/util/index.js +0 -122
  75. package/js/src/util/perfect-scrollbar.js +0 -1316
  76. package/less/alert.less +0 -345
  77. package/less/badge.less +0 -38
  78. package/less/bootstrap-noconflict.less +0 -23
  79. package/less/bootstrap.less +0 -23
  80. package/less/button-group.less +0 -153
  81. package/less/buttons.less +0 -287
  82. package/less/dialog-noconflict.less +0 -174
  83. package/less/dialog.less +0 -203
  84. package/less/dropdown.less +0 -209
  85. package/less/forms.less +0 -770
  86. package/less/images.less +0 -242
  87. package/less/input-group.less +0 -163
  88. package/less/list-group.less +0 -73
  89. package/less/mixins/aspect-ratio.less +0 -23
  90. package/less/mixins/border-radius.less +0 -24
  91. package/less/mixins/box-shadow.less +0 -4
  92. package/less/mixins/buttons.less +0 -17
  93. package/less/mixins/caret.less +0 -51
  94. package/less/mixins/clearfix.less +0 -10
  95. package/less/mixins/gradients.less +0 -34
  96. package/less/mixins/nav-divider.less +0 -7
  97. package/less/mixins/object-fit.less +0 -13
  98. package/less/mixins/reset-text.less +0 -16
  99. package/less/mixins.less +0 -11
  100. package/less/package.json +0 -11
  101. package/less/pagination.less +0 -69
  102. package/less/popover.less +0 -143
  103. package/less/project.sublime-workspace +0 -774
  104. package/less/reboot.less +0 -235
  105. package/less/section.less +0 -793
  106. package/less/select.less +0 -150
  107. package/less/tables.less +0 -737
  108. package/less/tabs.less +0 -162
  109. package/less/tooltip.less +0 -87
  110. package/less/type.less +0 -71
  111. package/less/utilities/align.less +0 -27
  112. package/less/utilities/animate.less +0 -3512
  113. package/less/utilities/background.less +0 -70
  114. package/less/utilities/borders.less +0 -16
  115. package/less/utilities/color.less +0 -70
  116. package/less/utilities/cursor.less +0 -8
  117. package/less/utilities/display.less +0 -38
  118. package/less/utilities/embed.less +0 -61
  119. package/less/utilities/flex.less +0 -76
  120. package/less/utilities/jquery-ui.less +0 -116
  121. package/less/utilities/lazyload.less +0 -29
  122. package/less/utilities/overflow.less +0 -11
  123. package/less/utilities/pace.less +0 -25
  124. package/less/utilities/placeholder.less +0 -60
  125. package/less/utilities/position.less +0 -42
  126. package/less/utilities/scrollbar.less +0 -152
  127. package/less/utilities/spacing.less +0 -197
  128. package/less/utilities/text.less +0 -68
  129. package/less/utilities/transform.less +0 -7
  130. package/less/utilities.less +0 -21
  131. package/less/variables.less +0 -343
  132. package/scss/LISENCE +0 -15
  133. package/scss/_alert.scss +0 -106
  134. package/scss/_badge.scss +0 -71
  135. package/scss/_button-group.scss +0 -129
  136. package/scss/_buttons.scss +0 -207
  137. package/scss/_custom-forms.scss +0 -429
  138. package/scss/_dialog.scss +0 -161
  139. package/scss/_dropdown.scss +0 -231
  140. package/scss/_forms.scss +0 -257
  141. package/scss/_frame.scss +0 -548
  142. package/scss/_functions.scss +0 -124
  143. package/scss/_grid.scss +0 -35
  144. package/scss/_images.scss +0 -362
  145. package/scss/_input-group.scss +0 -271
  146. package/scss/_list-group.scss +0 -82
  147. package/scss/_mixins.scss +0 -34
  148. package/scss/_navbar.scss +0 -264
  149. package/scss/_notification.scss +0 -13
  150. package/scss/_pagination.scss +0 -79
  151. package/scss/_popover.scss +0 -165
  152. package/scss/_reboot.scss +0 -283
  153. package/scss/_root.scss +0 -15
  154. package/scss/_section.scss +0 -912
  155. package/scss/_select.scss +0 -175
  156. package/scss/_tables.scss +0 -716
  157. package/scss/_tabs.scss +0 -175
  158. package/scss/_toast.scss +0 -182
  159. package/scss/_tooltip.scss +0 -101
  160. package/scss/_type.scss +0 -121
  161. package/scss/_utilities.scss +0 -23
  162. package/scss/_variables.scss +0 -699
  163. package/scss/cool-grid.scss +0 -29
  164. package/scss/cool-reboot.scss +0 -11
  165. package/scss/cool.scss +0 -37
  166. package/scss/mixins/_alert-variant.scss +0 -25
  167. package/scss/mixins/_aspect-ratio.scss +0 -29
  168. package/scss/mixins/_background-variant.scss +0 -25
  169. package/scss/mixins/_badge-variant.scss +0 -36
  170. package/scss/mixins/_breakpoints.scss +0 -102
  171. package/scss/mixins/_buttons.scss +0 -104
  172. package/scss/mixins/_caret.scss +0 -80
  173. package/scss/mixins/_clearfix.scss +0 -10
  174. package/scss/mixins/_float.scss +0 -14
  175. package/scss/mixins/_forms.scss +0 -67
  176. package/scss/mixins/_gradients.scss +0 -40
  177. package/scss/mixins/_grid-framework.scss +0 -72
  178. package/scss/mixins/_grid.scss +0 -60
  179. package/scss/mixins/_nav-divider.scss +0 -9
  180. package/scss/mixins/_notification-variant.scss +0 -7
  181. package/scss/mixins/_object-fit.scss +0 -16
  182. package/scss/mixins/_reset-text.scss +0 -19
  183. package/scss/mixins/_text-emphasis.scss +0 -21
  184. package/scss/mixins/_text-hide.scss +0 -10
  185. package/scss/mixins/_text-truncate.scss +0 -81
  186. package/scss/mixins/_visibility.scss +0 -7
  187. package/scss/project.sublime-workspace +0 -491
  188. package/scss/utilities/_align.scss +0 -41
  189. package/scss/utilities/_animate.scss +0 -3512
  190. package/scss/utilities/_background.scss +0 -14
  191. package/scss/utilities/_borders.scss +0 -146
  192. package/scss/utilities/_clearfix.scss +0 -6
  193. package/scss/utilities/_collapse.scss +0 -33
  194. package/scss/utilities/_cursor.scss +0 -22
  195. package/scss/utilities/_display.scss +0 -16
  196. package/scss/utilities/_embed.scss +0 -78
  197. package/scss/utilities/_flex.scss +0 -52
  198. package/scss/utilities/_lazyload.scss +0 -31
  199. package/scss/utilities/_overflow.scss +0 -6
  200. package/scss/utilities/_perfect-scrollbar.scss +0 -141
  201. package/scss/utilities/_placeholder.scss +0 -76
  202. package/scss/utilities/_position.scss +0 -30
  203. package/scss/utilities/_sizing.scss +0 -32
  204. package/scss/utilities/_spacing.scss +0 -92
  205. package/scss/utilities/_text.scss +0 -99
  206. package/scss/utilities/_user-select.scss +0 -14
  207. package/scss/utilities/_visibility.scss +0 -10
@@ -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","initialize","opts","coolPopover","popover","coolSelect","select","coolDropdown","dropdown","coolTooltip","tooltip","coolCollapse","collapse","coolSectionTabs","sectionTabs","coolToast","toast","coolDialog","dialog","hasClass","not","attr","$inputGroup","closest","each","formLabelGroup","find","trigger","$container","parents","href","data","linkDisabled","item","is","parent","open","location","$self","btn","btnDisabled","click","toggleClass","mousedown","mouseup","$sidebarLeftContent","sidebarLeftScroll","$sidebarTabs","scrollContainer","$tab","first","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","setPosition","off","replace","c","r","random","toString","buildPopover","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","_this3","_jQueryInterface","config","TypeError","JQUERY_NO_CONFLICT","Constructor","noConflict","Select","then","buildScroll","setData","reset","items","$select","$selectItems","$selectIconContainer","html","selectIconDefault","dynamicTitle","dynamicTitleDefault","$selectTitle","text","trim","searchApi","dynamicTitleEmptyDefault","$selectHeader","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","showFooter","secondaryResolve","secondaryReject","selectItems","_renderItemList","_renderSearch","_renderFooter","$scrollableContent","$searchContainer","$searchIconContainer","$clearSearchButton","tabIndex","$footerContainer","$closeButton","buildSearchData","max-height","overflow-y","scroll","_this4","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","next","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","expanded","targetHeight","$indicator","whichTransitionEvent","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":";;;;;;;;;;KAKA,SAASA,EAAIC,GACX,OAAOC,iBAAiBD,GAG1B,SAASE,EAAIF,EAASG,GACpB,IAAK,IAAIC,KAAOD,EAAK,CACnB,IAAIE,EAAMF,EAAIC,GACK,iBAARC,IACTA,GAAY,MAEdL,EAAQM,MAAMF,GAAOC,EAEvB,OAAOL,EAGT,SAASO,EAAIC,GACX,IAAID,EAAME,SAASC,cAAc,OAEjC,OADAH,EAAIC,UAAYA,EACTD,EAGT,IAAII,EACiB,oBAAZC,UACNA,QAAQC,UAAUC,SACjBF,QAAQC,UAAUE,uBAClBH,QAAQC,UAAUG,oBAClBJ,QAAQC,UAAUI,mBAEtB,SAASH,EAAQd,EAASkB,GACxB,IAAKP,EACH,MAAM,IAAIQ,MAAM,wCAGlB,OAAOR,EAAUS,KAAKpB,EAASkB,GAGjC,SAASG,EAAOrB,GACVA,EAAQqB,OACVrB,EAAQqB,SAEJrB,EAAQsB,YACVtB,EAAQsB,WAAWC,YAAYvB,GAKrC,SAASwB,EAAcxB,EAASyB,GAC9B,OAAOC,MAAMb,UAAUc,OAAOP,KAAKpB,EAAQ4B,SAAU,SAAUC,GAAS,OAAOf,EAAQe,EAAOJ,KAIhG,IAAIK,EAAM,CACRC,KAAM,KACN/B,QAAS,CACPgC,MAAO,SAAUC,GAAK,MAAQ,aAAeA,GAC7CC,KAAM,SAAUD,GAAK,MAAQ,YAAcA,GAC3CE,UAAW,sBAEbC,MAAO,CACLC,MAAO,YACPC,SAAU,eACVC,OAAQ,SAAUN,GAAK,MAAQ,cAAgBA,GAC/CO,UAAW,SAAUP,GAAK,MAAQ,iBAAmBA,KAOrDQ,EAAwB,CAAER,EAAG,KAAMS,EAAG,MAE1C,SAASC,EAAkBC,EAAGX,GAC5B,IAAIY,EAAYD,EAAE5C,QAAQ6C,UACtBrC,EAAYsB,EAAIM,MAAMI,UAAUP,GAEhCY,EAAUC,SAAStC,GACrBuC,aAAaN,EAAsBR,IAEnCY,EAAUG,IAAIxC,GAIlB,SAASyC,EAAqBL,EAAGX,GAC/BQ,EAAsBR,GAAKiB,WACzB,WAAc,OAAON,EAAEO,SAAWP,EAAE5C,QAAQ6C,UAAUxB,OAAOS,EAAIM,MAAMI,UAAUP,KACjFW,EAAEQ,SAASC,oBASf,IAAIC,EAAe,SAAsBtD,GACvCuD,KAAKvD,QAAUA,EACfuD,KAAKC,SAAW,IAGdC,EAAqB,CAAEC,QAAS,CAAEC,cAAc,IAEpDL,EAAazC,UAAU+C,KAAO,SAAeC,EAAWC,GACd,oBAA7BP,KAAKC,SAASK,KACvBN,KAAKC,SAASK,GAAa,IAE7BN,KAAKC,SAASK,GAAWE,KAAKD,GAC9BP,KAAKvD,QAAQgE,iBAAiBH,EAAWC,GAAS,IAGpDR,EAAazC,UAAUoD,OAAS,SAAiBJ,EAAWK,GACxD,IAAIC,EAASZ,KAEfA,KAAKC,SAASK,GAAaN,KAAKC,SAASK,GAAWlC,OAAO,SAAUmC,GACnE,SAAII,GAAUJ,IAAYI,KAG1BC,EAAOnE,QAAQoE,oBAAoBP,EAAWC,GAAS,IAChD,MAIXR,EAAazC,UAAUwD,UAAY,WAGjC,IAAK,IAAIC,KAFMf,KAESC,SAFTD,KAGNU,OAAOK,IAIlBb,EAAmBC,QAAQ3D,IAAM,WAC7B,IAAIoE,EAASZ,KAEf,OAAOgB,OAAOC,KAAKjB,KAAKC,UAAUiB,MAChC,SAAUrE,GAAO,OAAuC,IAAhC+D,EAAOX,SAASpD,GAAKsE,UAIjDH,OAAOI,iBAAkBrB,EAAazC,UAAW4C,GAEjD,IAAImB,EAAe,WACjBrB,KAAKsB,cAAgB,IAwCvB,SAASC,EAAYR,GACnB,GAAkC,mBAAvBS,OAAOC,YAChB,OAAO,IAAIA,YAAYV,GAEvB,IAAIW,EAAMxE,SAASqE,YAAY,eAE/B,OADAG,EAAIC,gBAAgBZ,GAAM,GAAO,OAAOa,GACjCF,EA3CXL,EAAa/D,UAAUuE,aAAe,SAAuBpF,GAC3D,IAAIqF,EAAK9B,KAAKsB,cAAclD,OAAO,SAAU0D,GAAM,OAAOA,EAAGrF,UAAYA,IAAY,GAKrF,OAJKqF,IACHA,EAAK,IAAI/B,EAAatD,GACtBuD,KAAKsB,cAAcd,KAAKsB,IAEnBA,GAGTT,EAAa/D,UAAU+C,KAAO,SAAe5D,EAAS6D,EAAWC,GAC/DP,KAAK6B,aAAapF,GAAS4D,KAAKC,EAAWC,IAG7Cc,EAAa/D,UAAUoD,OAAS,SAAiBjE,EAAS6D,EAAWC,GACnE,IAAIuB,EAAK9B,KAAK6B,aAAapF,GAC3BqF,EAAGpB,OAAOJ,EAAWC,GAEjBuB,EAAG3B,SAELH,KAAKsB,cAAcS,OAAO/B,KAAKsB,cAAcU,QAAQF,GAAK,IAI9DT,EAAa/D,UAAUwD,UAAY,WACjCd,KAAKsB,cAAcW,QAAQ,SAAUC,GAAK,OAAOA,EAAEpB,cACnDd,KAAKsB,cAAgB,IAGvBD,EAAa/D,UAAU6E,KAAO,SAAe1F,EAAS6D,EAAWC,GAC/D,IAAIuB,EAAK9B,KAAK6B,aAAapF,GAK3BqF,EAAGzB,KAAKC,EAJU,SAAd8B,EAAwBV,GAC1BI,EAAGpB,OAAOJ,EAAW8B,GACrB7B,EAAQmB,MAeZ,IAAIW,EAAoB,SACtBhD,EACAiD,EACAC,EACAC,EACAC,GAKA,IAAIC,EACJ,QAJ2B,IAAtBF,IAA+BA,GAAoB,QAC3B,IAAxBC,IAAiCA,GAAsB,GAG/C,QAATH,EACFI,EAAS,CACP,gBACA,kBACA,YACA,IACA,KACA,YACG,CAAA,GAAa,SAATJ,EAST,MAAM,IAAI1E,MAAM,oCARhB8E,EAAS,CACP,eACA,iBACA,aACA,IACA,OACA,UAQN,SACErD,EACAkD,EACAI,EACAH,EACAC,GAEA,IAAIG,EAAgBD,EAAI,GACpBE,EAAkBF,EAAI,GACtBG,EAAYH,EAAI,GAChBxD,EAAIwD,EAAI,GACRI,EAAKJ,EAAI,GACTK,EAAOL,EAAI,QACY,IAAtBH,IAA+BA,GAAoB,QAC3B,IAAxBC,IAAiCA,GAAsB,GAE5D,IAAIhG,EAAU4C,EAAE5C,QAGhB4C,EAAE4D,MAAM9D,GAAK,KAGT1C,EAAQqG,GAAa,IACvBzD,EAAE4D,MAAM9D,GAAK,SAIX1C,EAAQqG,GAAazD,EAAEuD,GAAiBvD,EAAEwD,GAAmB,IAC/DxD,EAAE4D,MAAM9D,GAAK,OAGXoD,IACF9F,EAAQyG,cAAc3B,EAAa,aAAepC,IAE9CoD,EAAO,EACT9F,EAAQyG,cAAc3B,EAAa,aAAewB,IACzCR,EAAO,GAChB9F,EAAQyG,cAAc3B,EAAa,aAAeyB,IAGhDR,GA/KR,SAAoCnD,EAAGX,GACrCU,EAAkBC,EAAGX,GACrBgB,EAAqBL,EAAGX,GA8KpByE,CAA2B9D,EAAGF,IAI9BE,EAAE4D,MAAM9D,KAAOoD,GAAQE,IACzBhG,EAAQyG,cAAc3B,EAAa,MAAQpC,EAAI,UAAaE,EAAE4D,MAAM9D,KAjDtEiE,CAAoB/D,EAAGkD,EAAMG,EAAQF,EAAmBC,IAqD1D,SAASY,EAAM3E,GACb,OAAO4E,SAAS5E,EAAG,KAAO,EAuB5B,IAAI6E,EAAM,CACRC,SACsB,oBAAbtG,UACP,qBAAsBA,SAASuG,gBAAgB1G,MACjD2G,cACoB,oBAAXlC,SACN,iBAAkBA,QAChBA,OAAOmC,eAAiBzG,oBAAoBsE,OAAOmC,eACxDC,kBACuB,oBAAdC,WAA6BA,UAAUC,iBAChDC,SACuB,oBAAdF,WACP,UAAUG,KAAKH,WAAaA,UAAUI,YAGtCC,EAAiB,SAAS7E,GAC5B,IAAI5C,EAAU4C,EAAE5C,QACZ0H,EAAmBC,KAAKC,MAAM5H,EAAQqG,WAE1CzD,EAAEiF,eAAiB7H,EAAQ8H,YAC3BlF,EAAEwD,gBAAkBpG,EAAQ+H,aAC5BnF,EAAEoF,aAAehI,EAAQiI,YACzBrF,EAAEuD,cAAgBnG,EAAQkI,aAErBlI,EAAQ8C,SAASF,EAAEuF,kBAEtB3G,EAAcxB,EAAS8B,EAAI9B,QAAQkC,KAAK,MAAMsD,QAAQ,SAAU4C,GAAM,OAAO/G,EAAO+G,KAEpFpI,EAAQqI,YAAYzF,EAAEuF,iBAEnBnI,EAAQ8C,SAASF,EAAE0F,kBAEtB9G,EAAcxB,EAAS8B,EAAI9B,QAAQkC,KAAK,MAAMsD,QAAQ,SAAU4C,GAAM,OAAO/G,EAAO+G,KAEpFpI,EAAQqI,YAAYzF,EAAE0F,kBAIrB1F,EAAEQ,SAASmF,iBACZ3F,EAAEiF,eAAiBjF,EAAEQ,SAASoF,oBAAsB5F,EAAEoF,cAEtDpF,EAAE6F,kBAAmB,EACrB7F,EAAE8F,WAAa9F,EAAEiF,eAAiBjF,EAAE+F,iBACpC/F,EAAEgG,WAAahG,EAAEiF,eAAiBjF,EAAE8F,WACpC9F,EAAEiG,gBAAkBC,EAClBlG,EACAgE,EAAMhE,EAAE8F,WAAa9F,EAAEiF,eAAiBjF,EAAEoF,eAE5CpF,EAAEmG,eAAiBnC,GAChBhE,EAAEoG,yBAA2BhJ,EAAQiJ,aACnCrG,EAAE8F,WAAa9F,EAAEiG,kBACjBjG,EAAEoF,aAAepF,EAAEiF,kBAGxBjF,EAAE6F,kBAAmB,GAIpB7F,EAAEQ,SAAS8F,iBACZtG,EAAEwD,gBAAkBxD,EAAEQ,SAAS+F,oBAAsBvG,EAAEuD,eAEvDvD,EAAEwG,kBAAmB,EACrBxG,EAAEyG,YAAczG,EAAEwD,gBAAkBxD,EAAE0G,kBACtC1G,EAAE2G,WAAa3G,EAAEwD,gBAAkBxD,EAAEyG,YACrCzG,EAAE4G,iBAAmBV,EACnBlG,EACAgE,EAAMhE,EAAEyG,YAAczG,EAAEwD,gBAAkBxD,EAAEuD,gBAE9CvD,EAAE6G,cAAgB7C,EAChBc,GACG9E,EAAEyG,YAAczG,EAAE4G,mBAClB5G,EAAEuD,cAAgBvD,EAAEwD,mBAGzBxD,EAAEwG,kBAAmB,EAGnBxG,EAAEmG,gBAAkBnG,EAAE8F,WAAa9F,EAAEiG,kBACvCjG,EAAEmG,eAAiBnG,EAAE8F,WAAa9F,EAAEiG,iBAElCjG,EAAE6G,eAAiB7G,EAAEyG,YAAczG,EAAE4G,mBACvC5G,EAAE6G,cAAgB7G,EAAEyG,YAAczG,EAAE4G,kBAiCxC,SAAmBxJ,EAAS4C,GAC1B,IAAI8G,EAAc,CAAEC,MAAO/G,EAAE8F,YACzBhB,EAAmBC,KAAKC,MAAM5H,EAAQqG,WAEtCzD,EAAEgH,MACJF,EAAYG,KACVjH,EAAEoG,yBACFhJ,EAAQiJ,WACRrG,EAAEiF,eACFjF,EAAEoF,aAEJ0B,EAAYG,KAAO7J,EAAQiJ,WAEzBrG,EAAEkH,wBACJJ,EAAYK,OAASnH,EAAEoH,iBAAmBtC,EAE1CgC,EAAYO,IAAMrH,EAAEsH,cAAgBxC,EAEtCxH,EAAI0C,EAAEuF,eAAgBuB,GAEtB,IAAIS,EAAc,CAAEF,IAAKvC,EAAkB0C,OAAQxH,EAAEyG,aACjDzG,EAAEyH,uBACAzH,EAAEgH,MACJO,EAAYG,MACV1H,EAAEoF,cACDpF,EAAEoG,yBAA2BhJ,EAAQiJ,YACtCrG,EAAE2H,gBACF3H,EAAE4H,qBAEJL,EAAYG,MAAQ1H,EAAE2H,gBAAkBvK,EAAQiJ,WAG9CrG,EAAEgH,MACJO,EAAYN,KACVjH,EAAEoG,yBACFhJ,EAAQiJ,WACW,EAAnBrG,EAAEiF,eACFjF,EAAEoF,aACFpF,EAAE6H,eACF7H,EAAE4H,qBAEJL,EAAYN,KAAOjH,EAAE6H,eAAiBzK,EAAQiJ,WAGlD/I,EAAI0C,EAAE0F,eAAgB6B,GAEtBjK,EAAI0C,EAAE8H,WAAY,CAChBb,KAAMjH,EAAEmG,eACRY,MAAO/G,EAAEiG,gBAAkBjG,EAAE+H,mBAE/BzK,EAAI0C,EAAEgI,WAAY,CAChBX,IAAKrH,EAAE6G,cACPW,OAAQxH,EAAE4G,iBAAmB5G,EAAEiI,mBAlFjCC,CAAU9K,EAAS4C,GAEfA,EAAE6F,iBACJzI,EAAQ6C,UAAUG,IAAIlB,EAAIM,MAAMG,OAAO,OAEvCvC,EAAQ6C,UAAUxB,OAAOS,EAAIM,MAAMG,OAAO,MAC1CK,EAAEiG,gBAAkB,EACpBjG,EAAEmG,eAAiB,EACnB/I,EAAQiJ,WAAa,GAEnBrG,EAAEwG,iBACJpJ,EAAQ6C,UAAUG,IAAIlB,EAAIM,MAAMG,OAAO,OAEvCvC,EAAQ6C,UAAUxB,OAAOS,EAAIM,MAAMG,OAAO,MAC1CK,EAAE4G,iBAAmB,EACrB5G,EAAE6G,cAAgB,EAClBzJ,EAAQqG,UAAY,IAIxB,SAASyC,EAAalG,EAAGmI,GAOvB,OANInI,EAAEQ,SAAS4H,qBACbD,EAAYpD,KAAKsD,IAAIF,EAAWnI,EAAEQ,SAAS4H,qBAEzCpI,EAAEQ,SAAS8H,qBACbH,EAAYpD,KAAKwD,IAAIJ,EAAWnI,EAAEQ,SAAS8H,qBAEtCH,EAgHT,SAASK,EACPxI,EACAsD,GAEA,IAAIE,EAAkBF,EAAI,GACtBC,EAAgBD,EAAI,GACpBmF,EAAQnF,EAAI,GACZmD,EAAcnD,EAAI,GAClB0E,EAAa1E,EAAI,GACjBsD,EAAmBtD,EAAI,GACvBG,EAAYH,EAAI,GAChBxD,EAAIwD,EAAI,GACRoC,EAAiBpC,EAAI,GAErBlG,EAAU4C,EAAE5C,QAEZsL,EAAoB,KACpBC,EAAqB,KACrBC,EAAW,KAEf,SAASC,EAAiBhG,GACxBzF,EAAQqG,GACNiF,EAAoBE,GAAY/F,EAAE4F,GAASE,GAC7C5I,EAAkBC,EAAGF,GACrB+E,EAAe7E,GAEf6C,EAAEiG,kBACFjG,EAAEkG,iBAGJ,SAASC,IACP3I,EAAqBL,EAAGF,GACxBE,EAAE0F,GAAgBzF,UAAUxB,OAAOS,EAAIM,MAAME,UAC7CM,EAAEiJ,MAAM5H,OAAOrB,EAAEkJ,cAAe,YAAaL,GAG/C7I,EAAEiJ,MAAMjI,KAAKhB,EAAEgI,GAAa,YAAa,SAAUnF,GACjD6F,EAAoBtL,EAAQqG,GAC5BkF,EAAqB9F,EAAE4F,GACvBG,GACG5I,EAAEuD,GAAiBvD,EAAEwD,KACrBxD,EAAEyG,GAAezG,EAAE4G,IAEtB5G,EAAEiJ,MAAMjI,KAAKhB,EAAEkJ,cAAe,YAAaL,GAC3C7I,EAAEiJ,MAAMnG,KAAK9C,EAAEkJ,cAAe,UAAWF,GAEzChJ,EAAE0F,GAAgBzF,UAAUG,IAAIlB,EAAIM,MAAME,UAE1CmD,EAAEiG,kBACFjG,EAAEkG,mBAIN,IA4gBInI,EAAW,CACbuI,aAvnBc,SAASnJ,GACvBA,EAAEiJ,MAAMjI,KAAKhB,EAAEgI,WAAY,YAAa,SAAUnF,GAAK,OAAOA,EAAEiG,oBAChE9I,EAAEiJ,MAAMjI,KAAKhB,EAAE0F,eAAgB,YAAa,SAAU7C,GACpD,IAIIuG,EAHFvG,EAAE4F,MACFtG,OAAOkH,YACPrJ,EAAE0F,eAAe4D,wBAAwBjC,IACbrH,EAAE6G,cAAgB,GAAK,EAErD7G,EAAE5C,QAAQqG,WAAa2F,EAAYpJ,EAAEwD,gBACrCqB,EAAe7E,GAEf6C,EAAEiG,oBAGJ9I,EAAEiJ,MAAMjI,KAAKhB,EAAE8H,WAAY,YAAa,SAAUjF,GAAK,OAAOA,EAAEiG,oBAChE9I,EAAEiJ,MAAMjI,KAAKhB,EAAEuF,eAAgB,YAAa,SAAU1C,GACpD,IAIIuG,EAHFvG,EAAE0G,MACFpH,OAAOqH,YACPxJ,EAAEuF,eAAe+D,wBAAwBrC,KACZjH,EAAEmG,eAAiB,GAAK,EAEvDnG,EAAE5C,QAAQiJ,YAAc+C,EAAYpJ,EAAEiF,eACtCJ,EAAe7E,GAEf6C,EAAEiG,qBA8lBJW,aA1lBc,SAASzJ,GACvBwI,EAAuBxI,EAAG,CACxB,iBACA,eACA,QACA,aACA,aACA,kBACA,aACA,IACA,mBACFwI,EAAuBxI,EAAG,CACxB,kBACA,gBACA,QACA,cACA,aACA,mBACA,YACA,IACA,oBAukBF0J,SA/gBa,SAAS1J,GACtB,IAAI5C,EAAU4C,EAAE5C,QAkChB4C,EAAEiJ,MAAMjI,KAAKhB,EAAEkJ,cAAe,UAAW,SAAUrG,GACjD,KACGA,EAAE8G,oBAAsB9G,EAAE8G,sBAC3B9G,EAAE+G,oBAnCoC1L,EAAQd,EAAS,WACfc,EAAQ8B,EAAE8H,WAAY,WAAa5J,EAAQ8B,EAAEgI,WAAY,WAuCnG,CAIA,IAvVgBxC,EAuVZqE,EAAgBhM,SAASgM,cACzBhM,SAASgM,cACT7J,EAAEkJ,cAAcW,cACpB,GAAIA,EAAe,CACjB,GAA8B,WAA1BA,EAAcC,QAChBD,EAAgBA,EAAcE,gBAAgBF,mBAG9C,KAAOA,EAAcG,YACnBH,EAAgBA,EAAcG,WAAWH,cAG7C,GAjWF3L,EAFgBsH,EAmWCqE,EAjWL,4BACZ3L,EAAQsH,EAAI,6BACZtH,EAAQsH,EAAI,+BACZtH,EAAQsH,EAAI,4BA+VR,OAIJ,IAAIyE,EAAS,EACTC,EAAS,EAEb,OAAQrH,EAAEsH,OACR,KAAK,GAEDF,EADEpH,EAAEuH,SACMpK,EAAEoF,aACHvC,EAAEwH,QACDrK,EAAEiF,gBAEF,GAEZ,MACF,KAAK,GAEDiF,EADErH,EAAEuH,QACKpK,EAAEuD,cACFV,EAAEwH,OACFrK,EAAEwD,gBAEF,GAEX,MACF,KAAK,GAEDyG,EADEpH,EAAEuH,QACKpK,EAAEoF,aACFvC,EAAEwH,OACFrK,EAAEiF,eAEF,GAEX,MACF,KAAK,GAEDiF,EADErH,EAAEuH,SACMpK,EAAEuD,cACHV,EAAEwH,QACDrK,EAAEwD,iBAEF,GAEZ,MACF,KAAK,GAED0G,EADErH,EAAEyH,SACKtK,EAAEwD,iBAEDxD,EAAEwD,gBAEd,MACF,KAAK,GACH0G,EAASlK,EAAEwD,gBACX,MACF,KAAK,GACH0G,GAAUlK,EAAEwD,gBACZ,MACF,KAAK,GACH0G,EAASlK,EAAEuD,cACX,MACF,KAAK,GACH2G,GAAUlK,EAAEuD,cACZ,MACF,QACE,OAGAvD,EAAEQ,SAASmF,iBAA8B,IAAXsE,GAG9BjK,EAAEQ,SAAS8F,iBAA8B,IAAX4D,IAIlC9M,EAAQqG,WAAayG,EACrB9M,EAAQiJ,YAAc4D,EACtBpF,EAAe7E,GAlIjB,SAA8BiK,EAAQC,GACpC,IAAIzG,EAAYsB,KAAKC,MAAM5H,EAAQqG,WACnC,GAAe,IAAXwG,EAAc,CAChB,IAAKjK,EAAEwG,iBACL,OAAO,EAET,GACiB,IAAd/C,GAAmByG,EAAS,GAC5BzG,GAAazD,EAAEuD,cAAgBvD,EAAEwD,iBAAmB0G,EAAS,EAE9D,OAAQlK,EAAEQ,SAAS+J,iBAIvB,IAAIlE,EAAajJ,EAAQiJ,WACzB,GAAe,IAAX6D,EAAc,CAChB,IAAKlK,EAAE6F,iBACL,OAAO,EAET,GACkB,IAAfQ,GAAoB4D,EAAS,GAC7B5D,GAAcrG,EAAEoF,aAAepF,EAAEiF,gBAAkBgF,EAAS,EAE7D,OAAQjK,EAAEQ,SAAS+J,iBAGvB,OAAO,EA0GHC,CAAqBP,EAAQC,IAC/BrH,EAAEkG,sBAqYN0B,MAhYU,SAASzK,GACnB,IAAI5C,EAAU4C,EAAE5C,QAsGhB,SAASsN,EAAkB7H,GACzB,IAAIS,EAhFN,SAA2BT,GACzB,IAAIoH,EAASpH,EAAEoH,OACXC,GAAU,EAAIrH,EAAEqH,OAoBpB,MAlBsB,oBAAXD,GAA4C,oBAAXC,IAE1CD,GAAU,EAAIpH,EAAE8H,YAAc,EAC9BT,EAASrH,EAAE+H,YAAc,GAGvB/H,EAAEgI,WAA6B,IAAhBhI,EAAEgI,YAEnBZ,GAAU,GACVC,GAAU,IAGRD,GAAWA,GAAUC,GAAWA,IAElCD,EAAS,EACTC,EAASrH,EAAEiI,YAGTjI,EAAEyH,SAEG,EAAEJ,GAASD,GAEb,CAACA,EAAQC,GAsDNa,CAAkBlI,GACxBoH,EAAS3G,EAAI,GACb4G,EAAS5G,EAAI,GAEjB,IAvDF,SAAiChC,EAAQ2I,EAAQC,GAE/C,IAAKhG,EAAIC,UAAY/G,EAAQ4N,cAAc,gBACzC,OAAO,EAGT,IAAK5N,EAAQ8C,SAASoB,GACpB,OAAO,EAKT,IAFA,IAAI2J,EAAS3J,EAEN2J,GAAUA,IAAW7N,GAAS,CACnC,GAAI6N,EAAOhL,UAAUC,SAAShB,EAAI9B,QAAQmC,WACxC,OAAO,EAGT,IAAI7B,EAAQP,EAAI8N,GAMhB,GALe,CAACvN,EAAMwN,SAAUxN,EAAMyN,UAAWzN,EAAM0N,WAAWC,KAChE,IAIWC,MAAM,iBAAkB,CACnC,IAAIC,EAAeN,EAAO3F,aAAe2F,EAAO9F,aAChD,GAAIoG,EAAe,KAEQ,IAArBN,EAAOxH,WAAmByG,EAAS,GACnCe,EAAOxH,YAAc8H,GAAgBrB,EAAS,GAEhD,OAAO,EAGX,IAAIsB,EAAgBP,EAAO5F,YAAc4F,EAAO/F,YAChD,GAAIsG,EAAgB,KAEQ,IAAtBP,EAAO5E,YAAoB4D,EAAS,GACpCgB,EAAO5E,aAAemF,GAAiBvB,EAAS,GAElD,OAAO,EAKbgB,EAASA,EAAOvM,WAGlB,OAAO,EAQH+M,CAAwB5I,EAAEvB,OAAQ2I,EAAQC,GAA9C,CAIA,IAAIwB,GAAgB,EACf1L,EAAEQ,SAASmL,iBAKL3L,EAAEwG,mBAAqBxG,EAAE6F,kBAG9BqE,EACF9M,EAAQqG,WAAayG,EAASlK,EAAEQ,SAASoL,WAEzCxO,EAAQqG,WAAawG,EAASjK,EAAEQ,SAASoL,WAE3CF,GAAgB,GACP1L,EAAE6F,mBAAqB7F,EAAEwG,mBAG9ByD,EACF7M,EAAQiJ,YAAc4D,EAASjK,EAAEQ,SAASoL,WAE1CxO,EAAQiJ,YAAc6D,EAASlK,EAAEQ,SAASoL,WAE5CF,GAAgB,IAnBhBtO,EAAQqG,WAAayG,EAASlK,EAAEQ,SAASoL,WACzCxO,EAAQiJ,YAAc4D,EAASjK,EAAEQ,SAASoL,YAqB5C/G,EAAe7E,IAEf0L,EAAgBA,GAzIlB,SAA8BzB,EAAQC,GACpC,IAAIpF,EAAmBC,KAAKC,MAAM5H,EAAQqG,WACtCoI,EAA8B,IAAtBzO,EAAQqG,UAChBqI,EACFhH,EAAmB1H,EAAQ2O,eAAiB3O,EAAQkI,aAClD0G,EAAgC,IAAvB5O,EAAQiJ,WACjB4F,EACF7O,EAAQiJ,WAAajJ,EAAQ8O,cAAgB9O,EAAQiI,YAWvD,QANIN,KAAKoH,IAAIjC,GAAUnF,KAAKoH,IAAIlC,GAClB4B,GAASC,EAETE,GAAUC,KAGJjM,EAAEQ,SAAS+J,iBAuHEC,CAAqBP,EAAQC,MACxCrH,EAAEuJ,UACtBvJ,EAAEiG,kBACFjG,EAAEkG,mBAIwB,oBAAnB5G,OAAOkK,QAChBrM,EAAEiJ,MAAMjI,KAAK5D,EAAS,QAASsN,GACS,oBAAxBvI,OAAOmK,cACvBtM,EAAEiJ,MAAMjI,KAAK5D,EAAS,aAAcsN,IA2OtC6B,MAvOU,SAASvM,GACnB,GAAKkE,EAAIG,eAAkBH,EAAIK,kBAA/B,CAIA,IAAInH,EAAU4C,EAAE5C,QAuCZoP,EAAc,GACdC,EAAY,EACZC,EAAQ,GACRC,EAAa,KAmJbzI,EAAIG,eACNrE,EAAEiJ,MAAMjI,KAAK5D,EAAS,aAAcwP,GACpC5M,EAAEiJ,MAAMjI,KAAK5D,EAAS,YAAayP,GACnC7M,EAAEiJ,MAAMjI,KAAK5D,EAAS,WAAY0P,IACzB5I,EAAIK,oBACTpC,OAAO4K,cACT/M,EAAEiJ,MAAMjI,KAAK5D,EAAS,cAAewP,GACrC5M,EAAEiJ,MAAMjI,KAAK5D,EAAS,cAAeyP,GACrC7M,EAAEiJ,MAAMjI,KAAK5D,EAAS,YAAa0P,IAC1B3K,OAAO6K,iBAChBhN,EAAEiJ,MAAMjI,KAAK5D,EAAS,gBAAiBwP,GACvC5M,EAAEiJ,MAAMjI,KAAK5D,EAAS,gBAAiByP,GACvC7M,EAAEiJ,MAAMjI,KAAK5D,EAAS,cAAe0P,KAzKzC,SAASG,EAAeC,EAAaC,GACnC/P,EAAQqG,WAAa0J,EACrB/P,EAAQiJ,YAAc6G,EAEtBrI,EAAe7E,GAQjB,SAASoN,EAASvK,GAChB,OAAIA,EAAEwK,cACGxK,EAAEwK,cAAc,GAGhBxK,EAIX,SAASyK,EAAazK,GACpB,QAAIA,EAAE0K,aAAiC,QAAlB1K,EAAE0K,aAAuC,IAAd1K,EAAE2K,WAG9C3K,EAAEwK,eAA4C,IAA3BxK,EAAEwK,cAAcvL,WAIrCe,EAAE0K,aACgB,UAAlB1K,EAAE0K,aACF1K,EAAE0K,cAAgB1K,EAAE4K,uBAOxB,SAASb,EAAW/J,GAClB,GAAKyK,EAAazK,GAAlB,CAIA,IAAI0J,EAAQa,EAASvK,GAErB2J,EAAYjD,MAAQgD,EAAMhD,MAC1BiD,EAAY/D,MAAQ8D,EAAM9D,MAE1BgE,GAAY,IAAIiB,MAAOC,UAEJ,OAAfhB,GACFiB,cAAcjB,IAiDlB,SAASE,EAAUhK,GACjB,GAAIyK,EAAazK,GAAI,CACnB,IAAI0J,EAAQa,EAASvK,GAEjBgL,EAAgB,CAAEtE,MAAOgD,EAAMhD,MAAOd,MAAO8D,EAAM9D,OAEnDyE,EAAcW,EAActE,MAAQiD,EAAYjD,MAChD4D,EAAcU,EAAcpF,MAAQ+D,EAAY/D,MAEpD,GAtDJ,SAAiCnH,EAAQ2I,EAAQC,GAC/C,IAAK9M,EAAQ8C,SAASoB,GACpB,OAAO,EAKT,IAFA,IAAI2J,EAAS3J,EAEN2J,GAAUA,IAAW7N,GAAS,CACnC,GAAI6N,EAAOhL,UAAUC,SAAShB,EAAI9B,QAAQmC,WACxC,OAAO,EAGT,IAAI7B,EAAQP,EAAI8N,GAMhB,GALe,CAACvN,EAAMwN,SAAUxN,EAAMyN,UAAWzN,EAAM0N,WAAWC,KAChE,IAIWC,MAAM,iBAAkB,CACnC,IAAIC,EAAeN,EAAO3F,aAAe2F,EAAO9F,aAChD,GAAIoG,EAAe,KAEQ,IAArBN,EAAOxH,WAAmByG,EAAS,GACnCe,EAAOxH,YAAc8H,GAAgBrB,EAAS,GAEhD,OAAO,EAGX,IAAIsB,EAAgBP,EAAO5E,WAAa4E,EAAO/F,YAC/C,GAAIsG,EAAgB,KAEQ,IAAtBP,EAAO5E,YAAoB4D,EAAS,GACpCgB,EAAO5E,aAAemF,GAAiBvB,EAAS,GAElD,OAAO,EAKbgB,EAASA,EAAOvM,WAGlB,OAAO,EAYD+M,CAAwB5I,EAAEvB,OAAQ4L,EAAaC,GACjD,OAGFF,EAAeC,EAAaC,GAC5BX,EAAcqB,EAEd,IAAIC,GAAc,IAAIJ,MAAOC,UAEzBI,EAAUD,EAAcrB,EACxBsB,EAAU,IACZrB,EAAMrN,EAAI6N,EAAca,EACxBrB,EAAM5M,EAAIqN,EAAcY,EACxBtB,EAAYqB,GAxJlB,SAAuB7D,EAAQC,GAC7B,IAAIzG,EAAYsB,KAAKC,MAAM5H,EAAQqG,WAC/B4C,EAAajJ,EAAQiJ,WACrB2H,EAAajJ,KAAKoH,IAAIlC,GACtBgE,EAAalJ,KAAKoH,IAAIjC,GAE1B,GAAI+D,EAAaD,GAGf,GACG9D,EAAS,GAAKzG,IAAczD,EAAEuD,cAAgBvD,EAAEwD,iBAChD0G,EAAS,GAAmB,IAAdzG,EAGf,OAA0B,IAAnBtB,OAAO+L,SAAiBhE,EAAS,GAAKhG,EAAIQ,cAE9C,GAAIsJ,EAAaC,IAInBhE,EAAS,GAAK5D,IAAerG,EAAEoF,aAAepF,EAAEiF,gBAChDgF,EAAS,GAAoB,IAAf5D,GAEf,OAAO,EAIX,OAAO,EAgIDqF,CAAcwB,EAAaC,IAC7BtK,EAAEkG,kBAIR,SAAS+D,IACH9M,EAAEQ,SAAS2N,cACbP,cAAcjB,GACdA,EAAayB,YAAY,WACnBpO,EAAEqO,cACJT,cAAcjB,GAIXD,EAAMrN,GAAMqN,EAAM5M,EAKnBiF,KAAKoH,IAAIO,EAAMrN,GAAK,KAAQ0F,KAAKoH,IAAIO,EAAM5M,GAAK,IAClD8N,cAAcjB,IAIhBM,EAAyB,GAAVP,EAAMrN,EAAkB,GAAVqN,EAAM5M,GAEnC4M,EAAMrN,GAAK,GACXqN,EAAM5M,GAAK,IAZT8N,cAAcjB,IAaf,QA4CL2B,EAAmB,SAA0BlR,EAASmR,GACxD,IAAIhN,EAASZ,KAOb,QANsB,IAAjB4N,IAA0BA,EAAe,IAEvB,iBAAZnR,IACTA,EAAUS,SAASmN,cAAc5N,KAG9BA,IAAYA,EAAQoR,SACvB,MAAM,IAAIjQ,MAAM,0DAQlB,IAAK,IAAIf,KALTmD,KAAKvD,QAAUA,EAEfA,EAAQ6C,UAAUG,IAAIlB,EAAIC,MAE1BwB,KAAKH,SAvCqC,CAC1CI,SAAU,CAAC,aAAc,aAAc,WAAY,QAAS,SAC5D0H,mBAAoB,KACpBF,mBAAoB,KACpB3H,mBAAoB,IACpBmF,oBAAqB,EACrBW,oBAAqB,EACrBZ,iBAAiB,EACjBW,iBAAiB,EACjB6H,aAAa,EACbxC,kBAAkB,EAClBpB,kBAAkB,EAClBqB,WAAY,GA4BI2C,EACdhN,EAAOf,SAAShD,GAAO+Q,EAAa/Q,GAGtCmD,KAAKsE,eAAiB,KACtBtE,KAAK6C,gBAAkB,KACvB7C,KAAKyE,aAAe,KACpBzE,KAAK4C,cAAgB,KAErB,IAMMkL,EADAC,EALFjP,EAAQ,WAAc,OAAOrC,EAAQ6C,UAAUG,IAAIlB,EAAIM,MAAMC,QAC7DkP,EAAO,WAAc,OAAOvR,EAAQ6C,UAAUxB,OAAOS,EAAIM,MAAMC,QAEnEkB,KAAKqG,MAAmC,QAA3B7J,EAAIC,GAASgM,UAC1BzI,KAAKiO,kBACCF,EAAqBtR,EAAQiJ,WAEjCjJ,EAAQiJ,YAAc,EACtBoI,EAASrR,EAAQiJ,WAAa,EAC9BjJ,EAAQiJ,WAAaqI,EACdD,GAET9N,KAAKyF,yBAA2BzF,KAAKiO,iBACjCxR,EAAQiI,YAAcjI,EAAQ8H,YAC9B,EACJvE,KAAKsI,MAAQ,IAAIjH,EACjBrB,KAAKuI,cAAgB9L,EAAQ8L,eAAiBrL,SAE9C8C,KAAK4E,eAAiB5H,EAAIuB,EAAI9B,QAAQkC,KAAK,MAC3ClC,EAAQqI,YAAY9E,KAAK4E,gBACzB5E,KAAKmH,WAAanK,EAAIuB,EAAI9B,QAAQgC,MAAM,MACxCuB,KAAK4E,eAAeE,YAAY9E,KAAKmH,YACrCnH,KAAKmH,WAAW+G,aAAa,WAAY,GACzClO,KAAKsI,MAAMjI,KAAKL,KAAKmH,WAAY,QAASrI,GAC1CkB,KAAKsI,MAAMjI,KAAKL,KAAKmH,WAAY,OAAQ6G,GACzChO,KAAKkF,iBAAmB,KACxBlF,KAAKsF,gBAAkB,KACvBtF,KAAKwF,eAAiB,KACtB,IAAI2I,EAAa3R,EAAIwD,KAAK4E,gBAC1B5E,KAAKyG,iBAAmBnD,SAAS6K,EAAW3H,OAAQ,IAChD4H,MAAMpO,KAAKyG,mBACbzG,KAAKuG,yBAA0B,EAC/BvG,KAAK2G,cAAgBtD,EAAM8K,EAAWzH,MAEtC1G,KAAKuG,yBAA0B,EAEjCvG,KAAKoH,iBACH/D,EAAM8K,EAAWE,iBAAmBhL,EAAM8K,EAAWG,kBAEvD3R,EAAIqD,KAAK4E,eAAgB,CAAE2J,QAAS,UACpCvO,KAAKoF,iBACH/B,EAAM8K,EAAWK,YAAcnL,EAAM8K,EAAWM,aAClD9R,EAAIqD,KAAK4E,eAAgB,CAAE2J,QAAS,KACpCvO,KAAKmF,WAAa,KAClBnF,KAAKqF,WAAa,KAElBrF,KAAK+E,eAAiB/H,EAAIuB,EAAI9B,QAAQkC,KAAK,MAC3ClC,EAAQqI,YAAY9E,KAAK+E,gBACzB/E,KAAKqH,WAAarK,EAAIuB,EAAI9B,QAAQgC,MAAM,MACxCuB,KAAK+E,eAAeD,YAAY9E,KAAKqH,YACrCrH,KAAKqH,WAAW6G,aAAa,WAAY,GACzClO,KAAKsI,MAAMjI,KAAKL,KAAKqH,WAAY,QAASvI,GAC1CkB,KAAKsI,MAAMjI,KAAKL,KAAKqH,WAAY,OAAQ2G,GACzChO,KAAK6F,iBAAmB,KACxB7F,KAAKiG,iBAAmB,KACxBjG,KAAKkG,cAAgB,KACrB,IAAIwI,EAAalS,EAAIwD,KAAK+E,gBAC1B/E,KAAKgH,gBAAkB1D,SAASoL,EAAW3H,MAAO,IAC9CqH,MAAMpO,KAAKgH,kBACbhH,KAAK8G,wBAAyB,EAC9B9G,KAAKkH,eAAiB7D,EAAMqL,EAAWpI,OAEvCtG,KAAK8G,wBAAyB,EAEhC9G,KAAKiH,qBAAuBjH,KAAKqG,MA74BnC,SAAoB5J,GAClB,IAAIkS,EAASnS,EAAIC,GACjB,OACE4G,EAAMsL,EAAOvI,OACb/C,EAAMsL,EAAOC,aACbvL,EAAMsL,EAAOE,cACbxL,EAAMsL,EAAON,iBACbhL,EAAMsL,EAAOL,kBAs4B0BQ,CAAW9O,KAAKqH,YAAc,KACvErH,KAAKsH,iBACHjE,EAAMqL,EAAWK,gBAAkB1L,EAAMqL,EAAWM,mBACtDrS,EAAIqD,KAAK+E,eAAgB,CAAEwJ,QAAS,UACpCvO,KAAK+F,kBACH1C,EAAMqL,EAAWO,WAAa5L,EAAMqL,EAAWQ,cACjDvS,EAAIqD,KAAK+E,eAAgB,CAAEwJ,QAAS,KACpCvO,KAAK8F,YAAc,KACnB9F,KAAKgG,WAAa,KAElBhG,KAAKiD,MAAQ,CACXvE,EACEjC,EAAQiJ,YAAc,EAClB,QACAjJ,EAAQiJ,YAAc1F,KAAKyE,aAAezE,KAAKsE,eAC7C,MACA,KACRnF,EACE1C,EAAQqG,WAAa,EACjB,QACArG,EAAQqG,WAAa9C,KAAK4C,cAAgB5C,KAAK6C,gBAC7C,MACA,MAGV7C,KAAKJ,SAAU,EAEfI,KAAKH,SAASI,SAASgC,QAAQ,SAAUkN,GAAe,OAAOlP,EAASkP,GAAavO,KAErFZ,KAAKoP,cAAgBhL,KAAKC,MAAM5H,EAAQqG,WACxC9C,KAAKqP,eAAiB5S,EAAQiJ,WAC9B1F,KAAKsI,MAAMjI,KAAKL,KAAKvD,QAAS,SAAU,SAAUyF,GAAK,OAAOtB,EAAO0O,SAASpN,KAC9EgC,EAAelE,OAGjB2N,EAAiBrQ,UAAUiS,OAAS,WAC7BvP,KAAKJ,UAKVI,KAAKyF,yBAA2BzF,KAAKiO,iBACjCjO,KAAKvD,QAAQiI,YAAc1E,KAAKvD,QAAQ8H,YACxC,EAGJ5H,EAAIqD,KAAK4E,eAAgB,CAAE2J,QAAS,UACpC5R,EAAIqD,KAAK+E,eAAgB,CAAEwJ,QAAS,UACpCvO,KAAKoF,iBACH/B,EAAM7G,EAAIwD,KAAK4E,gBAAgB4J,YAC/BnL,EAAM7G,EAAIwD,KAAK4E,gBAAgB6J,aACjCzO,KAAK+F,kBACH1C,EAAM7G,EAAIwD,KAAK+E,gBAAgBkK,WAC/B5L,EAAM7G,EAAIwD,KAAK+E,gBAAgBmK,cAGjCvS,EAAIqD,KAAK4E,eAAgB,CAAE2J,QAAS,SACpC5R,EAAIqD,KAAK+E,eAAgB,CAAEwJ,QAAS,SAEpCrK,EAAelE,MAEfqC,EAAkBrC,KAAM,MAAO,GAAG,GAAO,GACzCqC,EAAkBrC,KAAM,OAAQ,GAAG,GAAO,GAE1CrD,EAAIqD,KAAK4E,eAAgB,CAAE2J,QAAS,KACpC5R,EAAIqD,KAAK+E,eAAgB,CAAEwJ,QAAS,OAGtCZ,EAAiBrQ,UAAUgS,SAAW,SAAmBpN,GAClDlC,KAAKJ,UAIVsE,EAAelE,MACfqC,EAAkBrC,KAAM,MAAOA,KAAKvD,QAAQqG,UAAY9C,KAAKoP,eAC7D/M,EACErC,KACA,OACAA,KAAKvD,QAAQiJ,WAAa1F,KAAKqP,gBAGjCrP,KAAKoP,cAAgBhL,KAAKC,MAAMrE,KAAKvD,QAAQqG,WAC7C9C,KAAKqP,eAAiBrP,KAAKvD,QAAQiJ,aAGrCiI,EAAiBrQ,UAAUkS,QAAU,WAC9BxP,KAAKJ,UAIVI,KAAKsI,MAAMxH,YACXhD,EAAOkC,KAAKmH,YACZrJ,EAAOkC,KAAKqH,YACZvJ,EAAOkC,KAAK4E,gBACZ9G,EAAOkC,KAAK+E,gBACZ/E,KAAKyP,kBAGLzP,KAAKvD,QAAU,KACfuD,KAAKmH,WAAa,KAClBnH,KAAKqH,WAAa,KAClBrH,KAAK4E,eAAiB,KACtB5E,KAAK+E,eAAiB,KAEtB/E,KAAKJ,SAAU,IAGjB+N,EAAiBrQ,UAAUmS,gBAAkB,WAC3CzP,KAAKvD,QAAQQ,UAAY+C,KAAKvD,QAAQQ,UACnCyS,MAAM,KACNtR,OAAO,SAAU2C,GAAQ,OAAQA,EAAK4J,MAAM,mBAC5CD,KAAK,MC9xCViF,EAAEC,GAAGC,OAAO,CACRC,WAAY,SAAUC,EAAeC,GAEjC,IACIC,EAAe,+EADVjQ,KAGNkQ,SAAS,YAAcH,GAAeI,IAAIF,EAAc,SAAS/N,GAEhEyN,EAAE3P,MAAMoQ,YAAY,YAAcL,GAE9BC,GACAA,MAGL3R,WAAWgS,GAAGJ,EAAc,SAAS/N,GAEpCA,EAAEiG,uBCdd3G,OAAO8O,KAAO9O,OAAO8O,MAAQ,GAC7B9O,OAAO8O,KAAKzQ,SAAW2B,OAAO8O,KAAKzQ,UAAY,OAEzC0Q,oCAEEC,WAAP,SAAkBC,GAGXA,EAAOA,GAAQ,GAGfjP,OAAO8O,KAAKzQ,SAAW4Q,EAGvBd,EAAE,2BAA2Be,YAAYD,EAAKE,SAC9ChB,EAAE,0BAA0BiB,WAAWH,EAAKI,QAC5ClB,EAAE,4BAA4BmB,aAAaL,EAAKM,UAChDpB,EAAE,2BAA2BqB,YAAYP,EAAKQ,SAC9CtB,EAAE,4BAA4BuB,aAAaT,EAAKU,UAChDxB,EAAE,gCAAgCyB,gBAAgBX,EAAKY,aACvD1B,EAAE,QAAQ2B,UAAUb,EAAKc,OACzB5B,EAAE,QAAQ6B,WAAWf,EAAKgB,QAGhC9B,EAAE,QAAQO,SAAS,aAGnBP,EAAEzS,UAAUmT,GAAG,QAAS,gBAAiB,WAE/B,IAAKV,EAAE3P,MAAM0R,SAAS,aAAe/B,EAAE3P,MAAM2R,IAAI,eAAiBhC,EAAE3P,MAAM4R,KAAK,YAAa,CAExF,IAAIC,EAAclC,EAAE3P,MAAM8R,QAAQ,gBAE7BD,EAAYH,SAAS,sBACtBG,EAAY3B,SAAS,wBAMjCP,EAAEzS,UAAUmT,GAAG,OAAQ,gBAAiB,WAEpC,IAAKV,EAAE3P,MAAM0R,SAAS,aAAe/B,EAAE3P,MAAM2R,IAAI,eAAiBhC,EAAE3P,MAAM4R,KAAK,YAAa,CAExF,IAAIC,EAAclC,EAAE3P,MAAM8R,QAAQ,gBAE9BD,EAAYH,SAAS,sBACrBG,EAAYzB,YAAY,wBAMpCT,EAAE,qBAAqBoC,KAAK,SAAS1S,EAAG2S,GAEdrC,EAAEqC,GAERC,KAAK,SAAS5B,GAAG,oBAAqB,WAExCV,EAAE3P,MAAMlD,MAGd6S,EAAEqC,GAAgB9B,SAAS,gBAE3BP,EAAEqC,GAAgB5B,YAAY,kBAGnC8B,QAAQ,YAIfvC,EAAEoC,KAAKpC,EAAE,UAAW,WAEZA,EAAE3P,MAAMiS,KAAK,uCAAuC9Q,SAAWwO,EAAE3P,MAAM0R,SAAS,gBAChF/B,EAAE3P,MAAMkQ,SAAS,iBAIzBP,EAAEzS,UAAUmT,GAAG,QAAS,oBAAqB,SAASnO,GAElD,IAAIiQ,EAAaxC,EAAE3P,MAAMoS,QAAQ,iBAC7BC,EAAO1C,EAAE3P,MAAMsS,KAAK,aACpB3R,EAASgP,EAAEzN,EAAEvB,QAEb4R,GAAe,EAEnB5C,EAAEoC,KAHe,CAAC,QAAS,SAAU,IAAK,QAAS,iBAGhC,SAASS,IAEpB7R,EAAO8R,GAAGD,IAAkB,KAARA,GAAe7R,EAAO+R,SAASD,GAAGD,MACtDD,GAAe,KAInBJ,EAAWT,SAAS,yBACpBa,GAAe,GAGf5R,EAAO+Q,SAAS,wBAChBa,GAAe,GAGf5R,EAAO8R,GAAG,kBAAoBF,IAE1BrQ,EAAEuJ,SAAWvJ,EAAEuH,QAEfjI,OAAOmR,KAAKN,EAAM,UAIlB7Q,OAAOoR,SAASP,KAAOA,KASnC1C,EAAEzS,UAAUmT,GAAG,QAAS,mBAAoB,SAASnO,GAEjD,IAAIiQ,EAAaxC,EAAE3P,MAAMoS,QAAQ,iBAC7BS,EAAQlD,EAAE3P,MACV8S,EAAMnD,EAAE3P,MAAMsS,KAAK,eACnB3R,EAASgP,EAAEzN,EAAEvB,QAEboS,GAAc,GAEbD,IAEDA,EAAMD,EAAMZ,KAAK,UAAU,OAO/BtC,EAAEoC,KAZe,CAAC,QAAS,SAAU,IAAK,QAAS,iBAYhC,SAASS,IAEpB7R,EAAO8R,GAAGD,IAAkB,KAARA,GAAe7R,EAAO+R,SAASD,GAAGD,MACtDO,GAAc,KAIlBZ,EAAWT,SAAS,yBACpBqB,GAAc,GAGdpS,EAAO+Q,SAAS,uBAChBqB,GAAc,GAGdpS,EAAO8R,GAAG,kBAAoBM,GAE9BpD,EAAEmD,GAAKE,WASfrD,EAAEzS,UAAUmT,GAAG,QAAS,iCAAkC,SAASnO,GAC/DA,EAAEiG,oBAGNwH,EAAEzS,UAAUmT,GAAG,QAAS,yBAA0B,WAC9CV,EAAE3P,MAAMiS,KAAK,SAASC,QAAQ,SAC9BvC,EAAE3P,MAAM0S,SAAST,KAAK,SAASC,QAAQ,YAG3CvC,EAAEzS,UAAUmT,GAAG,SAAU,iCAAkC,WACnDV,EAAE3P,MAAMyS,GAAG,YACX9C,EAAE3P,MAAM0S,SAASxC,SAAS,UAE1BP,EAAE3P,MAAM0S,SAAStC,YAAY,YAKrCT,EAAE,UAAUU,GAAG,SAAU,WACrBV,EAAE3P,MAAMgO,SAIZ2B,EAAE,gBAAgBU,GAAG,QAAS,SAASnO,GAEnCA,EAAEiG,kBAEFwH,EAAE3P,MAAM0S,SAASO,YAAY,UAGjCtD,EAAEzS,UAAUmT,GAAG,QAAS,WAEpBV,EAAE,mBAAmBS,YAAY,UAIrCT,EAAE,yBAAyBU,GAAG,QAAS,SAASnO,GAE5CA,EAAEiG,kBAEFwH,EAAE3P,MAAMiT,YAAY,QACpBtD,EAAE,QAAQsD,YAAY,uBAG1BtD,EAAE,0BAA0BU,GAAG,QAAS,SAASnO,GAE7CA,EAAEiG,kBAEFwH,EAAE3P,MAAMiT,YAAY,QACpBtD,EAAE,QAAQsD,YAAY,wBAI1BtD,EAAE,iCAAiCuD,UAAU,WACzCvD,EAAE3P,MAAM0S,SAASA,SAASxC,SAAS,yBAGvCP,EAAEzS,UAAUiW,QAAQ,WAEZxD,EAAE,oBAAoB+B,SAAS,wBAC/B/B,EAAE,oBAAoBS,YAAY,yBAK1C,IACIgD,EADezD,EAAE,iBACkBsC,KAAK,oBAE5C,GAAImB,EAAoBjS,OAAQ,CAE5B,IAAIkS,EAAoB,IAAI1F,EAAiByF,EAAoB,GAAI,CACjEnI,WAAY,EACZrB,kBAAkB,EAClBnC,mBAAoB,GACpBzC,iBAAiB,IAGrBoO,EAAoBnB,KAAK,4BAA4B5B,GAAG,QAAS,WAE7D1Q,WAAW,WACP0T,EAAkB9D,UACnB,OAKX,IAAI+D,EAAe3D,EAAEzS,UAAU+U,KAAK,gBAEhCqB,EAAanS,SAEbwO,EAAEoC,KAAKuB,EAAc,SAASjU,EAAGwF,GAE7B,IAAI0O,EAAkB5D,EAAE9K,GAAIoN,KAAK,gBAEP,IAAItE,EAAiB4F,EAAgB,GAAI,CAC/DtI,WAAY,EACZrB,kBAAkB,EAClBnC,mBAAoB,GACpBzC,iBAAiB,MAIzB2K,EAAE,+BAA+BU,GAAG,QAAS,WAEzC,IAAIvT,EAAM6S,EAAE3P,MAAMlD,MACd0W,EAAO7D,EAAE,gBAAgB7S,GAE7BwW,EAAa3B,IAAI6B,GAAMpD,YAAY,UACnCoD,EAAKtD,SAAS,UAEdP,EAAE,+BAA+BgC,IAAIhC,EAAE3P,OAAOoQ,YAAY,UAC1DT,EAAE3P,MAAMkQ,SAAS,UAEbsD,EAAK,IAAMF,EAAaG,QAAQ,GAEhCH,EAAa3B,IAAI6B,GAAMvB,KAAK,gBAAgByB,IAAI,CAC5CC,UAAa,gCAGVH,EAAK,IAAMF,EAAaM,OAAO,GAEtCN,EAAa3B,IAAI6B,GAAMvB,KAAK,gBAAgByB,IAAI,CAC5CC,UAAa,kCAKjBL,EAAaG,QAAQ9B,IAAI6B,GAAMvB,KAAK,gBAAgByB,IAAI,CACpDC,UAAa,iCAGjBL,EAAaM,OAAOjC,IAAI6B,GAAMvB,KAAK,gBAAgByB,IAAI,CACnDC,UAAa,iCAIrBH,EAAKvB,KAAK,gBAAgByB,IAAI,CAC1BC,UAAa,iHAOjCnS,OAAO8O,KAAKE,WAAaD,EAAOC,WCpThC,IAAMqD,EAAW,SAAUC,EAAMC,EAAMC,GAEtC,IAAIC,EAEJ,OAAO,WAEN,IAAIC,EAAUlU,KACVmU,EAAOC,UAUPC,EAAUL,IAAcC,EAE5BzU,aAAayU,GAEbA,EAAUtU,WAbE,WAEXsU,EAAU,KAELD,GACJF,EAAKQ,MAAMJ,EAASC,IAQMJ,GAExBM,GACHP,EAAKQ,MAAMJ,EAASC,KAsEjBI,EAAc,WAEnB,IAAIzG,GAAS,EAMb,OAJK,iBAAkBtM,QAAWA,OAAOmC,eAAiBzG,oBAAoByG,iBAC7EmK,GAAS,GAGHA,GAGR6B,EAAErH,MAAMkM,QAAQC,UAAY,CAE3B3W,OAAQ,SAASlB,GAEZA,EAAI2D,SACP3D,EAAI2D,gBChHcmU,sDAGjBC,OAAA,WAEI,IAAIA,EAAS3U,KAAKyQ,KAAKkE,OAED,mBAAXA,GAEPA,EAAO9W,KAAKmC,SAKpB4U,SAAA,WAEI,IAAIA,EAAW5U,KAAKyQ,KAAKmE,SAED,mBAAbA,GAEPA,EAAS/W,KAAKmC,SAKtB6U,UAAA,WAEI,IAAIA,EAAY7U,KAAKyQ,KAAKoE,UAED,mBAAdA,GAEPA,EAAUhX,KAAKmC,SAKvB8U,OAAA,WAEI,IAAIA,EAAS9U,KAAKyQ,KAAKqE,OAED,mBAAXA,GAEPA,EAAOjX,KAAKmC,SAKpB+U,QAAA,WAEI,IAAIA,EAAU/U,KAAKyQ,KAAKsE,QAED,mBAAZA,GAEPA,EAAQlX,KAAKmC,SAKrBgV,QAAA,WAEI,IAAIA,EAAUhV,KAAKyQ,KAAKuE,QAED,mBAAZA,GAEPA,EAAQnX,KAAKmC,SAKrBiV,IAAA,WAMe,IAAAC,EAJVlV,KAAKmV,QAEwB,mBAAfnV,KAAKmV,MACZnV,KAAKmV,MAALb,MAAAtU,KAAAoU,YAENc,EAAAE,SAAQH,IAARX,MAAAY,EAAAd,kBCxEJiB,EAAO,cACPC,EAAW,qBAEXC,cAEF,SAAAA,EAAY1Q,EAAI4L,GAAM,IAAA+E,EAAA,OAElBA,EAAAC,EAAA5X,KAAAmC,OAAAA,MAEKyQ,KAAO,GAERjP,OAAO8O,KAAKzQ,SAAS8Q,QAErBhB,EAAEE,QAAO,EAAM2F,EAAK/E,KAAMd,EAAEC,GAAGyF,GAAMK,SAAUlU,OAAO8O,KAAKzQ,SAAS8Q,QAASF,GAI7Ed,EAAEE,QAAO,EAAM2F,EAAK/E,KAAMd,EAAEC,GAAGyF,GAAMK,SAAUjF,GAGnD+E,EAAK3Q,GAAKA,EACV2Q,EAAKL,MAAQK,EAAK/E,KAAK0E,MACvBK,EAAKG,OAjBaH,oCAqBtBG,KAAA,WAEI3V,KAAK4V,aACL5V,KAAK6V,aACL7V,KAAK2U,YAITnF,QAAA,WAEIxP,KAAK8V,eACL9V,KAAK+V,IAAIC,WAAWV,GACpBtV,KAAK6U,eAITtF,OAAA,WAEIvP,KAAK4V,aACL5V,KAAK4U,cAITgB,WAAA,WAEI5V,KAAK+V,IAAMpG,EAAE3P,KAAK6E,IAClB7E,KAAKmS,WAAanS,KAAK+V,IAAIzD,KAAK,aAAe3C,EAAE3P,KAAK+V,IAAIzD,KAAK,cAAgB3C,EAAE3P,KAAKyQ,KAAKwF,WAC3FjW,KAAKkW,oBAAsBlW,KAAK+V,IAAIzD,KAAK,uBAAyBtS,KAAK+V,IAAIzD,KAAK,uBAAyBtS,KAAKyQ,KAAKyF,oBACnHlW,KAAKmW,GAAK,WAAWnW,KAAKoW,eAC1BpW,KAAKqW,UAAYrW,KAAK+V,IAAIzD,KAAK,aAAetS,KAAK+V,IAAIzD,KAAK,aAAetS,KAAKyQ,KAAK4F,UACrFrW,KAAKsW,YAActW,KAAK+V,IAAIzD,KAAK,eAAiBtS,KAAK+V,IAAIzD,KAAK,eAAiBtS,KAAKyQ,KAAK6F,YAC3FtW,KAAKuW,aAAevW,KAAK+V,IAAIzD,KAAK,gBAAkBtS,KAAK+V,IAAIzD,KAAK,gBAAkBtS,KAAKyQ,KAAK8F,aAC9FvW,KAAKwW,eAAiBxW,KAAK+V,IAAIzD,KAAK,kBAAoBtS,KAAK+V,IAAIzD,KAAK,kBAAoBtS,KAAKyQ,KAAK+F,eACpGxW,KAAKkS,QAAUlS,KAAK+V,IAAIzD,KAAK,WAAatS,KAAK+V,IAAIzD,KAAK,WAAatS,KAAKyQ,KAAKyB,QAC/ElS,KAAKyW,UAAYzW,KAAK+V,IAAIzD,KAAK,aAAetS,KAAK+V,IAAIzD,KAAK,aAAetS,KAAKyQ,KAAKgG,UACrFzW,KAAK0W,kBAAmB,EACxB1W,KAAK2W,MAAQ3W,KAAK+V,IAAIzD,KAAK,SAAWtS,KAAK+V,IAAIzD,KAAK,SAAWtS,KAAKyQ,KAAKkG,MACzE3W,KAAK4W,QAAU5W,KAAK+V,IAAIzD,KAAK,WAAatS,KAAK+V,IAAIzD,KAAK,WAAatS,KAAKyQ,KAAKmG,QAE3E5W,KAAKkW,sBACLlW,KAAKmS,WAAanS,KAAK+V,IAAIc,mBAKnChB,WAAA,WAAa,IAAAiB,EAAA9W,KAEY,UAAjBA,KAAKkS,QAELlS,KAAK+V,IAAI1F,GAAG,SAAYgF,EAAM,WAEtByB,EAAKC,SACLD,EAAKE,QAELF,EAAKG,SAIW,UAAjBjX,KAAKkS,SAEZlS,KAAK+V,IAAI1F,GAAG,cAAiBgF,EAAM,WAE/ByB,EAAKG,SAGTjX,KAAK+V,IAAI1F,GAAG,cAAiBgF,EAAM,WAE/ByB,EAAKE,WAGe,UAAjBhX,KAAKkS,UAEZlS,KAAK+V,IAAI1F,GAAG,WAAcgF,EAAM,WAE5ByB,EAAKG,SAGTjX,KAAK+V,IAAI1F,GAAG,YAAegF,EAAM,WAE7ByB,EAAKE,WAIbrH,EAAEnO,QAAQ6O,GAAG,SAAUwD,EAAS,WAExBiD,EAAKC,WACLD,EAAKI,cACLJ,EAAKlC,aAEV,SAIPkB,aAAA,WAEI9V,KAAK+V,IAAIoB,IAAI,IAAI9B,MAIrBe,aAAA,WAEI,MAAO,uCAAuCgB,QAAQ,QAAS,SAASC,GACpE,IAAIC,EAAoB,GAAhBlT,KAAKmT,SAAgB,EAC7B,OADyC,KAALF,EAAWC,EAAS,EAAJA,EAAU,GACrDE,SAAS,SAK1BC,aAAA,WAEI,IAAIb,EAGNA,EAD2B,mBAAjB5W,KAAK4W,QACL5W,KAAK4W,UAEC5W,KAAK4W,QAGtB5W,KAAK+W,SAAWpH,EAAC,qDAC0B3P,KAAKmW,GAD/B,qFAKcnW,KAAK2W,MALnB,gDAOaC,EAPb,kCAYd5W,KAAKmS,WAAWuF,OAAO1X,KAAK+W,UAC5B/W,KAAK2X,SAAS3X,KAAK+W,SAAS9E,KAAK,WAAYjS,KAAK+W,SAAS9E,KAAK,UAEhEjS,KAAKiV,IAAIjV,KAAK+V,KACd/V,KAAKiV,IAAIjV,KAAKmS,YACdnS,KAAKiV,IAAIjV,KAAK+W,UACd/W,KAAKiV,IAAIjV,KAAK2X,QACd3X,KAAKiV,IAAI,OAAOjV,KAAKmW,IACrBnW,KAAKiV,IAAI,YAAYjV,KAAKkS,SAC1BlS,KAAKiV,IAAI,cAAcjV,KAAKyW,WAC5BzW,KAAKiV,IAAI,cAAcjV,KAAKqW,WAC5BrW,KAAKiV,IAAI,iBAAiBjV,KAAKsW,aAC/BtW,KAAKiV,IAAI,kBAAkBjV,KAAKuW,cAChCvW,KAAKiV,IAAI,oBAAoBjV,KAAKwW,gBAClCxW,KAAKiV,IAAI,UAAUjV,KAAK2W,OACxB3W,KAAKiV,IAAI,YAAYjV,KAAK4W,YAI9BM,YAAA,SAAYT,GAEiB,oBAAdA,GAA2C,OAAdA,IACpCA,EAAYzW,KAAKyW,WAGrBzW,KAAK+W,SAAS7G,SAAS,WAAWuG,GAElC,IAUImB,EACAC,EACAC,EAZAC,EAAsB/X,KAAKmS,WAAW6F,aACtCC,EAAuBjY,KAAKmS,WAAW+F,cACvCC,EAAenY,KAAK+W,SAASjI,YAAW,GACxCsJ,EAAgBpY,KAAK+W,SAASsB,aAAY,GAC1CC,EAAsBtY,KAAK+V,IAAIjH,aAC/ByJ,EAAuBvY,KAAK+V,IAAIsC,cAChCG,EAAqBxY,KAAK+V,IAAI0C,WAAWnS,KACzCoS,EAAqB1Y,KAAK+V,IAAI0C,WAAW/R,IACzCiS,EAAa3Y,KAAK2X,OAAO7I,YAAW,GACpC8J,EAAc5Y,KAAK2X,OAAOU,aAAY,GAKxB,QAAd5B,GAEAoB,EAAczT,KAAKyU,MAAML,GAAsBL,EAAeG,GAAuB,GACrFR,EAAc1T,KAAKyU,MAAMH,EAAqBN,GAC9CR,EAAWxT,KAAKyU,MAAMV,EAAe,EAAIQ,EAAa,GAEtD3Y,KAAK2X,OAAOjE,IAAI,CACZpN,KAAMsR,EAAS,QAGE,UAAdnB,GAEPoB,EAAczT,KAAKyU,MAAML,EAAqBF,GAC9CR,EAAc1T,KAAKyU,MAAMH,GAAsBN,EAAgBG,GAAwB,GACvFX,EAAWxT,KAAKyU,MAAMT,EAAgB,EAAIQ,EAAc,GAExD5Y,KAAK2X,OAAOjE,IAAI,CACZhN,IAAKkR,EAAS,QAGG,WAAdnB,GAEPoB,EAAczT,KAAKyU,MAAML,GAAsBL,EAAeG,GAAuB,GACrFR,EAAc1T,KAAKyU,MAAMH,EAAqBH,GAC9CX,EAAWxT,KAAKyU,MAAMV,EAAe,EAAIQ,EAAa,GAEtD3Y,KAAK2X,OAAOjE,IAAI,CACZpN,KAAMsR,EAAS,QAGE,SAAdnB,IAEPoB,EAAczT,KAAKyU,MAAML,EAAqBL,GAC9CL,EAAc1T,KAAKyU,MAAMH,GAAsBN,EAAgBG,GAAwB,GACvFX,EAAWxT,KAAKyU,MAAMT,EAAgB,EAAIQ,EAAc,GAExD5Y,KAAK2X,OAAOjE,IAAI,CACZhN,IAAKkR,EAAS,QAItB5X,KAAK+W,SAASrD,IAAI,CACd+E,SAAU,WACV/R,IAAK,MACLJ,KAAM,MACNqN,UAAW,eAAekE,EAAY,OAAOC,EAAY,WACzDgB,cAAe,cAInB,IAAIC,EAAuB,EACvBC,EAAmB,CACnB1S,KAAMtG,KAAK+W,SAAS0B,WAAWnS,KAC/BI,IAAK1G,KAAK+W,SAAS0B,WAAW/R,IAC9BK,MAAOgR,GAAuB/X,KAAK+W,SAAS0B,WAAWnS,KAAO6R,GAC9D3R,OAAQyR,GAAwBjY,KAAK+W,SAAS0B,WAAW/R,IAAM0R,IAE/Da,EAAkB,CAClB3S,MAAM,EACNI,KAAK,EACLK,OAAO,EACPP,QAAQ,GAmCZ,GAhCIwS,EAAgBjS,MAAQ,IAExBkS,EAAgBlS,OAAQ,EACxBgS,IAEA/Y,KAAKiV,IAAI,mCAGT+D,EAAgB1S,KAAO,IAEvB2S,EAAgB3S,MAAO,EACvByS,IAEA/Y,KAAKiV,IAAI,kCAGT+D,EAAgBxS,OAAS,IAEzByS,EAAgBzS,QAAS,EACzBuS,IAEA/Y,KAAKiV,IAAI,oCAGT+D,EAAgBtS,IAAM,IAEtBuS,EAAgBvS,KAAM,EACtBqS,IAEA/Y,KAAKiV,IAAI,iCAGT8D,EAAuB,GAgEvB,IA9DK/Y,KAAK0W,kBAAoBuC,EAAgB3S,MAAQ0S,EAAgBjS,MAAQoR,GAE1EnY,KAAKiV,IAAI,uCAETjV,KAAK0W,kBAAmB,EACxB1W,KAAK+W,SAAS3G,YAAY,WAAWqG,GACrCzW,KAAK2X,OAAOuB,WAAW,SACvBlZ,KAAKkX,YAAY,WAETlX,KAAK0W,kBAAoBuC,EAAgBvS,KAAOsS,EAAgBtS,IAAM0R,GAE9EpY,KAAKiV,IAAI,wCAETjV,KAAK0W,kBAAmB,EACxB1W,KAAK+W,SAAS3G,YAAY,WAAWqG,GACrCzW,KAAK2X,OAAOuB,WAAW,SACvBlZ,KAAKkX,YAAY,YAETlX,KAAK0W,kBAAoBuC,EAAgBlS,OAASiS,EAAgB1S,KAAO6R,GAEjFnY,KAAKiV,IAAI,sCAETjV,KAAK0W,kBAAmB,EACxB1W,KAAK+W,SAAS3G,YAAY,WAAWqG,GACrCzW,KAAK2X,OAAOuB,WAAW,SACvBlZ,KAAKkX,YAAY,UAETlX,KAAK0W,kBAAoBuC,EAAgBzS,QAAUwS,EAAgBtS,IAAM0R,GAEjFpY,KAAKiV,IAAI,qCAETjV,KAAK0W,kBAAmB,EACxB1W,KAAK+W,SAAS3G,YAAY,WAAWqG,GACrCzW,KAAK2X,OAAOuB,WAAW,SACvBlZ,KAAKkX,YAAY,QAETlX,KAAK0W,kBAAmC,QAAdD,GAAqC,WAAdA,IAA4BwC,EAAgB3S,OAAQ2S,EAAgBlS,MAuB7H/G,KAAKmZ,oBAAqB,EArBtBH,EAAgBtS,IAAMsS,EAAgBxS,QAEtCxG,KAAKiV,IAAI,qCAETjV,KAAK0W,kBAAmB,EACxB1W,KAAK+W,SAAS3G,YAAY,WAAWqG,GACrCzW,KAAK2X,OAAOuB,WAAW,SACvBlZ,KAAKkX,YAAY,SAIjBlX,KAAKiV,IAAI,wCAETjV,KAAK0W,kBAAmB,EACxB1W,KAAK+W,SAAS3G,YAAY,WAAWqG,GACrCzW,KAAK2X,OAAOuB,WAAW,SACvBlZ,KAAKkX,YAAY,WAQrBlX,KAAKmZ,mBAAoB,CAIzB,GAFAnZ,KAAKiV,IAAI,+EAELgE,EAAgB3S,KAAM,CAEtBtG,KAAKiV,IAAI,iCAET,IAAImE,EAAiBhV,KAAKoH,IAAIwN,EAAgB1S,MAGzCkS,GAAsBX,EAAcuB,GAFjB,CAAC,MAAO,UAE8CpX,QAAQyU,GAAa,GAE/FzW,KAAKiV,IAAI,2BAETkD,GAAgBiB,EAChBvB,GAAeuB,IAIfpZ,KAAKiV,IAAI,gCAET4C,GAAeuB,EACfxB,GAAYwB,GAIpB,GAAIH,EAAgBvS,IAAK,CAErB1G,KAAKiV,IAAI,gCAET,IAAImE,EAAiBhV,KAAKoH,IAAIwN,EAAgBtS,KAE9C1G,KAAKiV,IAAI,gCAET6C,GAAesB,EACfxB,GAAYwB,EAGhB,GAAIH,EAAgBlS,MAAO,CAEvB/G,KAAKiV,IAAI,kCAET,IAAImE,EAAiBhV,KAAKoH,IAAIwN,EAAgBjS,OAGzCyR,GAAsBX,EAAcuB,GAFjB,CAAC,MAAO,UAE8CpX,QAAQyU,GAAa,GAE/FzW,KAAKiV,IAAI,2BAETkD,GAAgBiB,IAIhBpZ,KAAKiV,IAAI,gCAET4C,GAAeuB,EACfxB,GAAYwB,GAIpB,GAAIH,EAAgBzS,OAAQ,CAExBxG,KAAKiV,IAAI,mCAET,IAAImE,EAAiBhV,KAAKoH,IAAIwN,EAAgBxS,QAE9CxG,KAAKiV,IAAI,gCAET6C,GAAesB,EACfxB,GAAYwB,EAGE,QAAd3C,EAEAzW,KAAK2X,OAAOjE,IAAI,CACZpN,KAAMsR,EAAS,OAGE,UAAdnB,EAEPzW,KAAK2X,OAAOjE,IAAI,CACZhN,IAAKkR,EAAS,OAGG,WAAdnB,EAEPzW,KAAK2X,OAAOjE,IAAI,CACZpN,KAAMsR,EAAS,OAGE,SAAdnB,GAEPzW,KAAK2X,OAAOjE,IAAI,CACZhN,IAAKkR,EAAS,OAItB5X,KAAK+W,SAASrD,IAAI,CACdtN,MAAO+R,EACPxE,UAAW,eAAekE,EAAY,OAAOC,EAAY,aAG7D9X,KAAKmZ,oBAAqB,EAE1BnZ,KAAKiV,IAAI,8BAA8BjV,KAAK0W,kBAC5C1W,KAAKiV,IAAI,kCAAkC8C,EAAoB,MAC/D/X,KAAKiV,IAAI,mCAAmCgD,EAAqB,MACjEjY,KAAKiV,IAAI,0BAA0BqD,EAAoB,MACvDtY,KAAKiV,IAAI,2BAA2BsD,EAAqB,MACzDvY,KAAKiV,IAAI,+BAA+BuD,EAAmB,MAC3DxY,KAAKiV,IAAI,+BAA+ByD,EAAmB,MAC3D1Y,KAAKiV,IAAI,kBAAkBkD,EAAa,MACxCnY,KAAKiV,IAAI,mBAAmBmD,EAAc,MAC1CpY,KAAKiV,IAAI,uBAAuB4C,EAAY,MAC5C7X,KAAKiV,IAAI,uBAAuB6C,EAAY,MAC5C9X,KAAKiV,IAAI,0BAA0B+D,EAAgB1S,KAAK,MACxDtG,KAAKiV,IAAI,yBAAyB+D,EAAgBtS,IAAI,MACtD1G,KAAKiV,IAAI,2BAA2B+D,EAAgBjS,MAAM,MAC1D/G,KAAKiV,IAAI,4BAA4B+D,EAAgBxS,OAAO,YAKhExG,KAAKiV,IAAI,8BAA8BjV,KAAK0W,kBAC5C1W,KAAKiV,IAAI,kCAAkC8C,EAAoB,MAC/D/X,KAAKiV,IAAI,mCAAmCgD,EAAqB,MACjEjY,KAAKiV,IAAI,0BAA0BqD,EAAoB,MACvDtY,KAAKiV,IAAI,2BAA2BsD,EAAqB,MACzDvY,KAAKiV,IAAI,+BAA+BuD,EAAmB,MAC3DxY,KAAKiV,IAAI,+BAA+ByD,EAAmB,MAC3D1Y,KAAKiV,IAAI,kBAAkBkD,EAAa,MACxCnY,KAAKiV,IAAI,mBAAmBmD,EAAc,MAC1CpY,KAAKiV,IAAI,uBAAuB4C,EAAY,MAC5C7X,KAAKiV,IAAI,uBAAuB6C,EAAY,MAC5C9X,KAAKiV,IAAI,0BAA0B+D,EAAgB1S,KAAK,MACxDtG,KAAKiV,IAAI,yBAAyB+D,EAAgBtS,IAAI,MACtD1G,KAAKiV,IAAI,2BAA2B+D,EAAgBjS,MAAM,MAC1D/G,KAAKiV,IAAI,4BAA4B+D,EAAgBxS,OAAO,SAKpEyQ,KAAA,WAEQjX,KAAK+W,WAIT/W,KAAKyX,eACLzX,KAAKkX,cAEDlX,KAAKqW,WAELrW,KAAK+W,SAAS7G,SAASlQ,KAAKwW,gBAC5BxW,KAAK+W,SAASjH,WAAW9P,KAAKsW,aAC9BtW,KAAK+W,SAAS7G,SAAS,QACvBlQ,KAAK+W,SAASnF,KAAK,KAAM5R,KAAKmW,IAC9BnW,KAAK+V,IAAInE,KAAK,eAAgB5R,KAAKmW,MAInCnW,KAAK+W,SAAS7G,SAAS,QACvBlQ,KAAK+W,SAASnF,KAAK,KAAM5R,KAAKmW,IAC9BnW,KAAK+V,IAAInE,KAAK,eAAgB5R,KAAKmW,KAGvCnW,KAAK8U,aAITkC,MAAA,WAAQ,IAAAqC,EAAArZ,KAECA,KAAK+W,WAIN/W,KAAKqW,YAAcrW,KAAK+W,SAASrF,SAAS,YAE1C1R,KAAK+W,SAASjH,WAAW9P,KAAKuW,aAAc,WAExC8C,EAAKtC,SAASjZ,SACdub,EAAKtD,IAAImD,WAAW,gBACpBG,EAAKtC,SAAW,KAChBsC,EAAK3C,kBAAmB,EAExB2C,EAAKtE,aAKT/U,KAAK+W,SAASjZ,SACdkC,KAAK+V,IAAImD,WAAW,gBACpBlZ,KAAK+W,SAAW,KAChB/W,KAAK0W,kBAAmB,EAExB1W,KAAK+U,eAINuE,iBAAP,SAAwBC,GAEvB,OAAOvZ,KAAK+R,KAAK,WAEhB,IAAIO,EAAO3C,EAAE3P,MAAMsS,KAAKgD,GAQxB,GALKhD,IACJA,EAAO,IAAIiD,EAAQvV,KAHc,iBAAXuZ,GAAuBA,GAI7C5J,EAAE3P,MAAMsS,KAAKgD,EAAUhD,IAGF,iBAAXiH,EAAqB,CAE/B,GAA4B,oBAAjBjH,EAAKiH,GACZ,MAAM,IAAIC,UAAJ,oBAAkCD,EAAlC,KAGPjH,EAAKiH,YA5jBO7E,GAkkBtB,GAAiB,oBAAN/E,EAAmB,CAG1B,IAAM8J,EAAqB9J,EAAEC,GAAGyF,GAEhC1F,EAAEC,GAAGyF,GAAQE,EAAQ+D,iBACrB3J,EAAEC,GAAGyF,GAAMqE,YAAcnE,EAEzB5F,EAAEC,GAAGyF,GAAMsE,WAAa,WAIpB,OAFAhK,EAAEC,GAAGyF,GAAQoE,EAENlE,EAAQ+D,kBAGnB3J,EAAEC,GAAGyF,GAAMK,SAAW,CAClBO,UAAW,iBACXC,qBAAqB,EACrBhE,QAAS,QACTuE,UAAW,SACXJ,WAAW,EACXC,YAAa,SACbC,aAAc,UACdC,eAAgB,UAChBG,MAAO,GACPC,QAAS,GACTjC,OAAQ,KACRC,SAAU,KACVC,UAAW,KACXC,OAAQ,KACRC,QAAS,KACTI,OAAO,GCnmBf,IAAME,EAAO,aAGPuE,cAEF,SAAAA,EAAY/U,EAAI4L,GAAM,IAAA+E,EAAA,OAElBA,EAAAC,EAAA5X,KAAAmC,OAAAA,MAEKyQ,KAAO,GAERjP,OAAO8O,KAAKzQ,SAASgR,OAErBlB,EAAEE,QAAO,EAAM2F,EAAK/E,KAAMd,EAAEC,GAAGyF,GAAMK,SAAUlU,OAAO8O,KAAKzQ,SAASgR,OAAQJ,GAI5Ed,EAAEE,QAAO,EAAM2F,EAAK/E,KAAMd,EAAEC,GAAGyF,GAAMK,SAAUjF,GAGnD+E,EAAK3Q,GAAKA,EACV2Q,EAAKL,MAAQK,EAAK/E,KAAK0E,MACvBK,EAAKG,OAjBaH,oCAqBtBG,KAAA,WAAO,IAAAmB,EAAA9W,KAEHA,KAAK4V,aAAaiE,KAAK,WAEnB/C,EAAKgD,cACLhD,EAAKjB,aAEDiB,EAAKxE,KAAKwE,EAAK/V,MAAMI,OAAS,GAC9B2V,EAAKiD,UAGTjD,EAAKnC,cAKbnF,QAAA,WAEIxP,KAAK8V,eACL9V,KAAK+V,IAAIC,WA5CA,qBA6CThW,KAAK6U,eAITtF,OAAA,WAEIvP,KAAK4V,aACL5V,KAAK6V,aACL7V,KAAK4U,cAIToF,MAAA,WAEIha,KAAKsS,KAAO,GACZtS,KAAKsS,KAAKtS,KAAKe,MAAQ,GACvBf,KAAKia,MAAQ,GACbja,KAAKka,QAAQjI,KAAK,gBAAgBnU,SAClCkC,KAAKma,aAAe,GACpBna,KAAKoa,qBAAqBC,KAAKra,KAAKsa,mBAED,GAA/Bta,KAAKsS,KAAKtS,KAAKe,MAAMI,QACrBnB,KAAKua,cACLva,KAAKwa,qBACwB,IAA7Bxa,KAAKwa,qBAC8B,GAAnCxa,KAAKya,aAAaC,OAAOC,SACxB3a,KAAKma,aAAahZ,OAAS,GAAKnB,KAAK4a,YAEtC5a,KAAKya,aAAaJ,KAAKra,KAAKwa,qBAGA,GAA5Bxa,KAAKma,aAAahZ,SAAgBnB,KAAK4a,WAAa5a,KAAKua,cAAgBva,KAAK6a,0BAA8D,IAAlC7a,KAAK6a,2BAE/G7a,KAAK8a,cAAcpH,IAAI,SAAU,WACjC1T,KAAKoa,qBAAqBlK,SAAS,UACnClQ,KAAKya,aAAaJ,KAAKra,KAAK6a,2BAG5B7a,KAAK+a,aAEL/a,KAAKgb,WAAa,GAClBhb,KAAKib,aAAane,IAAI,IACtBkD,KAAKkb,aAAe,GACpBlb,KAAKmb,OAAOtd,KAAKmC,UAKzB4V,WAAA,WAAa,IAAAyD,EAAArZ,KAET,OAAO,IAAIob,QAAQ,SAACC,EAAgBC,GAEhC,IAAIC,EAAOlC,EA8CX,GA5CAA,EAAKtD,IAAMpG,EAAE0J,EAAKxU,IAClBwU,EAAKlH,WAAakH,EAAKtD,IAAIrD,SAC3B2G,EAAKyB,cAAgBzB,EAAKtD,IAAI9D,KAAK,kBACnCoH,EAAKoB,aAAepB,EAAKtD,IAAI9D,KAAK,iBAClCoH,EAAKe,qBAAuBf,EAAKyB,cAAc7I,KAAK,gBACpDoH,EAAKiB,kBAAoBjB,EAAKyB,cAAc7I,KAAK,gBAAkBoH,EAAKyB,cAAc7I,KAAK,gBAAgBoI,OAAS,cAAchB,EAAK5I,KAAK+K,MAAQ,MAAQ,OAAO,2BACnKnC,EAAKtY,KAAOsY,EAAKtD,IAAIzD,KAAK,QAAU+G,EAAKtD,IAAIzD,KAAK,QAAU+G,EAAK5I,KAAK1P,KACtEsY,EAAKoC,oBAAsBpC,EAAKtD,IAAIzD,KAAK,uBAAyB+G,EAAKtD,IAAIzD,KAAK,uBAAyB+G,EAAK5I,KAAKgL,oBACnHpC,EAAKY,MAAQZ,EAAKtD,IAAIzD,KAAK,SAAW+G,EAAKtD,IAAIzD,KAAK,SAAW+G,EAAK5I,KAAKwJ,MACzEZ,EAAK/G,KAAO,GACZ+G,EAAK/G,KAAK+G,EAAKtY,MAAQ,GACvBsY,EAAK2B,WAAa,GAClB3B,EAAKuB,UAAYvB,EAAKtD,IAAIzD,KAAK,aAAe+G,EAAKtD,IAAIzD,KAAK,aAAe+G,EAAK5I,KAAKmK,UACrFvB,EAAKqC,cAAgB,KACrBrC,EAAKsC,KAAOtC,EAAKtD,IAAIzD,KAAK,QAAU+G,EAAKtD,IAAIzD,KAAK,QAAU+G,EAAK5I,KAAKkL,KACtEtC,EAAKuC,aAAc,EACnBvC,EAAKwC,kBAAoBxC,EAAKtD,IAAIzD,KAAK,sBAAwB+G,EAAKtD,IAAIzD,KAAK,sBAAwB+G,EAAK5I,KAAKoL,kBAC/GxC,EAAKyC,aAAezC,EAAKtD,IAAIzD,KAAK,kBAAoB+G,EAAKtD,IAAIzD,KAAK,kBAAoB+G,EAAK5I,KAAKqL,aAClGzC,EAAK0C,cAAgB1C,EAAK5I,KAAKsL,cAC/B1C,EAAK2C,aAAe3C,EAAK5I,KAAKuL,aAC9B3C,EAAK4C,eAAiB5C,EAAK5I,KAAKwL,eAChC5C,EAAK6C,eAAiB7C,EAAK5I,KAAKyL,eAChC7C,EAAKkB,aAAelB,EAAKtD,IAAIzD,KAAK,gBAAkB+G,EAAKtD,IAAIzD,KAAK,gBAAkB+G,EAAK5I,KAAK8J,aAC9FlB,EAAKmB,oBAAsBnB,EAAKtD,IAAIzD,KAAK,uBAAyB+G,EAAKtD,IAAIzD,KAAK,uBAAyB+G,EAAK5I,KAAK+J,oBACnHnB,EAAKwB,yBAA2BxB,EAAKtD,IAAIzD,KAAK,4BAA8B+G,EAAKtD,IAAIzD,KAAK,4BAA8B+G,EAAK5I,KAAKoK,yBAClIxB,EAAK8C,uBAAyB9C,EAAKtD,IAAIzD,KAAK,0BAA4B+G,EAAKtD,IAAIzD,KAAK,0BAA4B+G,EAAK5I,KAAK0L,uBAC5H9C,EAAK+C,mBAAqB/C,EAAKtD,IAAIzD,KAAK,sBAAwB+G,EAAKtD,IAAIzD,KAAK,sBAAwB+G,EAAK5I,KAAK2L,mBAChH/C,EAAKgD,eAAiBhD,EAAKtD,IAAIzD,KAAK,kBAAoB+G,EAAKtD,IAAIzD,KAAK,kBAAkB8E,QAAQ,MAAO,IAAI1H,MAAM,KAAO2J,EAAK5I,KAAK4L,eAClIhD,EAAKiD,eAAiBjD,EAAKtD,IAAIzD,KAAK,kBAAoB+G,EAAKtD,IAAIzD,KAAK,kBAAoB+G,EAAK5I,KAAK6L,eACpGjD,EAAKkD,cAAe,EAEhBlD,EAAKgD,eAAelb,OAAS,IAC7BkY,EAAKgD,eAAiBhD,EAAKgD,eAAeG,IAAIC,SAG9CpD,EAAK5I,KAAKsJ,UACVV,EAAK/G,KAAO+G,EAAK5I,KAAKsJ,SAGtBV,EAAKtD,IAAIzD,KAAK,YAA0C,IAA5B+G,EAAKtD,IAAIzD,KAAK,aAC1C+G,EAAK/G,KAAO+G,EAAKtD,IAAIzD,KAAK,aAIzBnU,MAAMue,QAAQrD,EAAK/G,KAAK+G,EAAKtY,QAAmC,KAAzBsY,EAAK/G,KAAK+G,EAAKtY,OAAgBsY,EAAK/G,KAAK+G,EAAKtY,MAAMI,OAAS,EAAG,CAExG,IAAMwb,EAAMtD,EAAK/G,KAAK+G,EAAKtY,MAAMyW,WAAWmD,OAAOjL,MAAM,KAEzD2J,EAAK/G,KAAK+G,EAAKtY,MAAQ4b,EAIvBtD,EAAK/G,KAAK+G,EAAKtY,MAAMI,OAAS,IAC9BkY,EAAK/G,KAAK+G,EAAKtY,MAAQsY,EAAK/G,KAAK+G,EAAKtY,MAAMyb,IAAIC,SAGhDpD,EAAK/G,KAAK+G,EAAKtY,MAAMI,OAAS,GAAKkY,EAAKgD,eAAelb,OAAS,IAEhEkY,EAAK/G,KAAK+G,EAAKtY,MAAQsY,EAAK/G,KAAK+G,EAAKtY,MAAM3C,OAAO,SAASoU,GAExD,OAAIA,EAAK+I,EAAKe,iBAEoE,IAAvEf,EAAKc,eAAera,QAAQwQ,EAAK+I,EAAKe,gBAAgB9E,aAIJ,IAAlD+D,EAAKc,eAAera,QAAQwQ,EAAKgF,eAKhD6B,EAAKY,MAAM9Y,OAAS,GAAKkY,EAAKgD,eAAelb,OAAS,IAEtDkY,EAAKY,MAAQZ,EAAKY,MAAM7b,OAAO,SAASoU,GAEpC,OAAIA,EAAK+I,EAAKe,iBAEoE,IAAvEf,EAAKc,eAAera,QAAQwQ,EAAK+I,EAAKe,gBAAgB9E,aAIJ,IAAlD+D,EAAKc,eAAera,QAAQwQ,EAAKgF,eAKhD6B,EAAKtD,IAAI9D,KAAK,kBAAkB9Q,OAChCkY,EAAK0B,YAAa,EAElB1B,EAAK0B,WAAa1B,EAAKtD,IAAIzD,KAAK,cAAgB+G,EAAKtD,IAAIzD,KAAK,cAAgB+G,EAAK5I,KAAKsK,WAGxF1B,EAAKtD,IAAI9D,KAAK,kBAAkB9Q,OAChCkY,EAAKuD,YAAa,EAElBvD,EAAKuD,WAAavD,EAAKtD,IAAIzD,KAAK,cAAgB+G,EAAKtD,IAAIzD,KAAK,cAAgB+G,EAAK5I,KAAKmM,WAG5FvD,EAAKa,QAAUb,EAAKtD,IAAI9D,KAAK,mBAE7B,IAAImJ,QAAQ,SAACyB,EAAkBC,GAE3B,GAAKzD,EAAKa,QAAQ/Y,OAqBX,CAEH,IAAM4b,EAAc1D,EAAKa,QAAQjI,KAAK,gBAElC8K,EAAY5b,OAAS,GAAKkY,EAAKgD,eAAelb,OAAS,GAEvDwO,EAAEoC,KAAKgL,EAAa,SAAC1d,EAAGwF,GAEpB,IAAM/H,EAAM6S,EAAE9K,GAAIoN,KAAK,UAAUnV,MAE7Bye,EAAKc,eAAera,QAAQlF,IAAQ,GACpC6S,EAAE9K,GAAI/G,WAKlB+e,QArCsB,CAEtB,IAAI5C,EAAQZ,EAAK2D,gBAAgB3D,EAAKY,OAEtCZ,EAAKa,QAAUvK,EAAC,yFAGN0J,EAAK4D,gBAHC,gHAON5D,EAAK6D,gBAPC,4DAYhB7D,EAAKtD,IAAI2B,OAAO2B,EAAKa,SACrBb,EAAKa,QAAQjI,KAAK,8BAA8ByF,OAAOuC,GAEvD4C,OAqBLhD,KAAK,WAEJR,EAAK8D,qBAAqB9D,EAAKa,QAAQjI,KAAK,+BAAgCoH,EAAKa,QAAQjI,KAAK,8BAC9FoH,EAAKc,aAAed,EAAKa,QAAQjI,KAAK,gBAEH,GAA/BoH,EAAK/G,KAAK+G,EAAKtY,MAAMI,QACrBkY,EAAKkB,cACLlB,EAAKmB,qBACwB,IAA7BnB,EAAKmB,qBAC8B,GAAnCnB,EAAKoB,aAAaC,OAAOC,SACxBtB,EAAKc,aAAahZ,OAAS,GAAKkY,EAAKuB,YAEtCvB,EAAKoB,aAAaJ,KAAKhB,EAAKmB,qBAGA,GAA5BnB,EAAKc,aAAahZ,SAAgBkY,EAAKuB,WAAavB,EAAKkB,cAAgBlB,EAAKwB,0BAA8D,IAAlCxB,EAAKwB,2BAE/GxB,EAAKyB,cAAcpH,IAAI,SAAU,WACjC2F,EAAKe,qBAAqBlK,SAAS,UACnCmJ,EAAKoB,aAAaJ,KAAKhB,EAAKwB,2BAG5BxB,EAAK0B,aAEL1B,EAAK+D,iBAAmB/D,EAAKa,QAAQjI,KAAK,kBAC1CoH,EAAK4B,aAAe5B,EAAKa,QAAQjI,KAAK,0BACtCoH,EAAKgE,qBAAuBhE,EAAKa,QAAQjI,KAAK,uBAC9CoH,EAAKiE,mBAAqBjE,EAAKa,QAAQjI,KAAK,uBAG5CoH,EAAK4B,aAAa,GAAGsC,UAAY,GAGjClE,EAAKuD,aAELvD,EAAKmE,iBAAmBnE,EAAKa,QAAQjI,KAAK,kBAC1CoH,EAAKoE,aAAepE,EAAKa,QAAQjI,KAAK,uBAGtCoH,EAAKoE,aAAa,GAAGF,UAAY,GAGrClE,EAAKqE,kBAELrE,EAAKpE,IAAIoE,EAAKtD,KACdsD,EAAKpE,IAAIoE,EAAKa,SACdb,EAAKpE,IAAIoE,EAAK8D,oBACd9D,EAAKpE,IAAI,SAASoE,EAAKtY,MACvBsY,EAAKpE,IAAI,gBAAgBoE,EAAK0B,YAC9B1B,EAAKpE,IAAI,gBAAgBoE,EAAKuD,YAC9BvD,EAAKpE,IAAI,0BAA0BoE,EAAKoC,oBAAoB,MAC5DpC,EAAKpE,IAAIoE,EAAKY,OACdZ,EAAKpE,IAAIoE,EAAK2B,YAEdK,WAMZvB,YAAA,WAEI,GAAI9Z,KAAKmd,mBAAmBhc,OAAS,EAAG,CAEpC,IAAIsa,EAAsBzb,KAAKyb,oBAE3Bzb,KAAK+a,aACLU,GAA6Czb,KAAKod,iBAAiB/E,aAAY,IAAS,GAGxFrY,KAAK4c,aACLnB,GAA6Czb,KAAKwd,iBAAiBnF,aAAY,IAAS,GAG5FrY,KAAKmd,mBAAmBzJ,IAAI,CACxBiK,aAAelC,EAAsBnY,SAAStD,KAAKmd,mBAAmBzJ,IAAI,aAAc,IAAMpQ,SAAStD,KAAKmd,mBAAmBzJ,IAAI,gBAAiB,IAAM,OAG1Ja,IAEAvU,KAAKmd,mBAAmBzJ,IAAI,CACxBkK,aAAc,UAKlB5d,KAAKmd,mBAAmBjN,SAAS,WACjClQ,KAAK6d,OAAS,IAAIlQ,EAAiB3N,KAAKmd,mBAAmB,GAAI,CAC3DlS,WAAY,EACZrB,kBAAkB,EAClBnC,mBAAoB,GACpB7B,qBAAuB,EACvBD,iBAAiB,EACjBX,iBAAiB,IAIrBhF,KAAKmd,mBAAmBlL,KAAK,kBAAkBL,KAAK,YAAa,GAE7D5R,KAAKmd,mBAAmB,GAAG/R,aAAepL,KAAKmd,mBAAmB,GAAGxY,eAErE3E,KAAKmd,mBAAmBjN,SAAS,kBACjClQ,KAAK6d,OAAOhe,SAAS8F,iBAAkB,QAOvD+X,gBAAA,WAAkB,IAAAI,EAAA9d,KAEd,OAAO,IAAIob,QAAQ,SAAC2C,EAASC,GAEzBF,EAAK9C,WAAa,GAElB,IAAIiD,EAAeH,EAAK5D,QAAQjI,KAAK,gBAErCtC,EAAEoC,KAAKkM,EAAc,SAAC5e,EAAGwF,GAEtBiZ,EAAK9C,WAAWxa,KAAK,CAChB2V,GAAI9W,EACJvC,IAAK6S,EAAE9K,GAAI6V,OAAOC,WAI1BoD,SAKRlI,WAAA,WAAa,IAAAqI,EAAAle,KAELub,EAAOvb,KAEXA,KAAK8a,cAAczK,GAAG,SAAYgF,EAAM,WAEhC6I,EAAKtC,YACLsC,EAAKlH,SACEkH,EAAK/D,aAAahZ,OAAS,GAAK+c,EAAKtD,YAC5CsD,EAAKjH,SAIbjX,KAAK+V,IAAI1F,GAAG,UAAagF,EAAM,yBAA0B,WAErD,IAAIxQ,EAAK7E,KACLlD,EAAM6S,EAAE3P,MAAMlD,MAGlBye,EAAKgB,cAAe,EAEa,mBAAtBhB,EAAKS,cAA+BnX,EAAGsZ,SAE9CtZ,EAAGsZ,SAAU,EAEb5C,EAAKS,aAAa,SAACoC,GAEL,aAANA,KAEuC,IAAvC7C,EAAKjJ,KAAKiJ,EAAKxa,MAAMiB,QAAQlF,IAAcye,EAAKjJ,KAAKiJ,EAAKxa,MAAMP,KAAK1D,GACrE+H,EAAGsZ,SAAU,EACb5C,EAAK8C,SAASxZ,IAGlBlF,WAAW,WACP4b,EAAKgB,cAAe,GAlBb,MAoBZ1X,IAEIA,EAAGsZ,UAE6B,IAAvC5C,EAAKjJ,KAAKiJ,EAAKxa,MAAMiB,QAAQlF,IAAcye,EAAKjJ,KAAKiJ,EAAKxa,MAAMP,KAAK1D,GACrEye,EAAK8C,SAASxZ,GAEdlF,WAAW,WACP4b,EAAKgB,cAAe,GA5BT,MA+BuB,mBAAxBhB,EAAKU,gBAAkCpX,EAAGsZ,QAkBhDtZ,EAAGsZ,SAAY5C,EAAKW,gBASpBrX,EAAGsZ,SAAW5C,EAAKW,iBAE3BrX,EAAGsZ,SAAU,EAEbxe,WAAW,WACP4b,EAAKgB,cAAe,GA/DT,OAmDfhB,EAAKjJ,KAAKiJ,EAAKxa,MAAQwa,EAAKjJ,KAAKiJ,EAAKxa,MAAM3C,OAAO,SAAAkgB,GAAC,OAAIA,GAAKxhB,IAC7Dye,EAAK8C,SAASxZ,GAEdlF,WAAW,WACP4b,EAAKgB,cAAe,GAvDT,OAiCf1X,EAAGsZ,SAAU,EAEb5C,EAAKU,eAAe,SAACmC,GAEP,aAANA,IAEA7C,EAAKjJ,KAAKiJ,EAAKxa,MAAQwa,EAAKjJ,KAAKiJ,EAAKxa,MAAM3C,OAAO,SAAAkgB,GAAC,OAAIA,GAAKxhB,IAC7D+H,EAAGsZ,SAAU,EACb5C,EAAK8C,SAASxZ,IAGlBlF,WAAW,WACP4b,EAAKgB,cAAe,GA7Cb,MA+CZ1X,MAqBX7E,KAAK+V,IAAI1F,GAAG,UAAagF,EAAM,sBAAuB,WAElD,IAAIvY,EAAM6S,EAAE3P,MAAMlD,MAEdkD,KAAKme,SAEL5C,EAAKjJ,KAAKiJ,EAAKxa,MAAQ,CAACjE,GACxBye,EAAKrB,QAAQjI,KAAK,uBAAuBN,IAAIhC,EAAE3P,OAAOue,KAAK,WAAW,GACtEhD,EAAKrB,QAAQjI,KAAK,uBAAuBN,IAAIhC,EAAE3P,OAAOoQ,YAAY,YAIlEmL,EAAKjJ,KAAKiJ,EAAKxa,MAAQ,KAI/Bf,KAAK+V,IAAI1F,GAAG,SAAYgF,EAAM,sBAAuB,WAE7C1F,EAAE3P,MAAM0R,SAAS,YAAc6J,EAAKY,wBAEpCZ,EAAKjJ,KAAKiJ,EAAKxa,MAAQ,GACvB4O,EAAE3P,MAAMue,KAAK,WAAW,GACxB5O,EAAE3P,MAAMoQ,YAAY,WAEhBmL,EAAKhB,cACLgB,EAAKd,aAAaJ,KAAKkB,EAAKf,uBAKhC7K,EAAE3P,MAAMkQ,SAAS,WAEbqL,EAAKhB,cACLgB,EAAKd,aAAaJ,KAAK1K,EAAE3P,MAAM0S,SAAST,KAAK,gBAAgByI,SAIrEa,EAAK8C,SAASre,QAGdA,KAAK6d,SAEL7d,KAAKmd,mBAAmBlL,KAAK,gBAAgBiB,UAAU,WACnDqI,EAAK4B,mBAAmBjN,SAAS,yBAGrCP,EAAEzS,UAAUiW,QAAQ,WAEZoI,EAAK4B,mBAAmBzL,SAAS,wBACjC6J,EAAK4B,mBAAmB/M,YAAY,0BAK5CpQ,KAAK+a,aAEL/a,KAAKib,aAAa5K,GAAG,WAAcgF,EAAMxB,EAAS,WAE9C0H,EAAKL,aAAevL,EAAE3P,MAAMlD,MAAM6d,OAClCY,EAAKJ,OAAOtd,KAAK0d,IAElB,MAEHvb,KAAKib,aAAa5K,GAAG,WAAcgF,EAAM,WAErCkG,EAAK6B,iBAAiBlN,SAAS,aAGnClQ,KAAKib,aAAa5K,GAAG,YAAegF,EAAM,WAEtCkG,EAAK6B,iBAAiBhN,YAAY,aAGtCpQ,KAAKod,iBAAiB/M,GAAG,SAAYgF,EAAM,sBAAuB,WAE1DkG,EAAKL,aAAa/Z,SAElBoa,EAAKN,aAAane,IAAI,IACtBye,EAAKL,aAAe,GACpBK,EAAKJ,OAAOtd,KAAK0d,OASzBvb,KAAK4c,YAEL5c,KAAKyd,aAAapN,GAAG,SAAYgF,EAAM,WAEnC6I,EAAKlH,UAIbrH,EAAEzS,UAAUmT,GAAG,mBAAoB,SAASnO,GAEnCqZ,EAAKxF,IAAItD,GAAGvQ,EAAEvB,SAAY4a,EAAKxF,IAAIyI,IAAItc,EAAEvB,QAAQQ,SAAUoa,EAAKK,aAAgBL,EAAKgB,cAEtFhB,EAAKvE,MAAMnZ,KAAK0d,QAM5BzF,aAAA,WAEI9V,KAAK+V,IAAIoB,IAAI,IAAI9B,MAIrBoJ,QAAA,SAAQnM,GAEJ,OAAIA,EACOtS,KAAKsS,KAAKA,GAEVtS,KAAKsS,QAKpByH,QAAA,WAEI,IAAIwB,EAAOvb,KACP0e,EAAc1e,KAAKyQ,KAAK+K,MAAQ,MAAQ,MAQ5C,GANIxb,KAAKoc,mBACLpc,KAAKoa,qBAAqBC,KAA1B,aAA4CqE,EAA5C,mCAEA1e,KAAKoa,qBAAqBC,KAAKra,KAAKsa,mBAGpCta,KAAK4a,UAAUzZ,OAAQ,CAEvB,IAAIwd,EAAY3e,KAAK4a,UACjBgE,EAAY5e,KAAKsS,KAAKtS,KAAKe,MAAMI,OACjC0d,EAAe,EAEnB7e,KAAKsS,KAAKtS,KAAKe,MAAMkB,QAAQ,SAAS6c,GAElCH,GAAaI,mBAAmB,IAAID,KACpCD,IAEqBD,IACjBD,GAAa,OAIrBhP,EAAEqP,KAAK,CACHC,OAAQ,MACRC,IAAKP,IACNQ,KAAK,SAAS7M,GAEb,IAAI2H,EAAQ3H,EAAKkK,IAAI,SAAAhK,GAIjB,OAFAA,EAAK2D,GAAK3D,EAAK+I,EAAKe,gBAAgB9E,WAE7BhF,IAGP4M,EAAUnF,EAAMuC,IAAI,SAAAhK,GACpB,OAAOA,EAAK2D,GAAGqB,aAInB+D,EAAKjJ,KAAKiJ,EAAKxa,MAAQwa,EAAKjJ,KAAKiJ,EAAKxa,MAAM3C,OAAO,SAAS0gB,GACxD,OAAOM,EAAQpd,QAAQ8c,EAAMtH,aAAe,IAGb,GAA/B+D,EAAKjJ,KAAKiJ,EAAKxa,MAAMI,QACrBoa,EAAKnB,qBAAqBC,KAAKkB,EAAKjB,mBAGxCL,EAAQA,EAAM7b,OAAO,SAASoU,GAC1B,OAAO+I,EAAKjJ,KAAKiJ,EAAKxa,MAAMiB,QAAQwQ,EAAK2D,KAAO,IAA+C,IAA1CoF,EAAKc,eAAera,QAAQwQ,EAAK2D,KAAyB,GAAX3D,EAAK2D,KAG7G,IAAIrI,EAASyN,EAAKyB,gBAAgB/C,GAElCtK,EAAE0P,KAAK9D,EAAK4B,mBAAmBzF,OAAO5J,IAAS+L,KAAK,WAEhD,IAAIyF,EAAU/D,EAAK4B,mBAAmBlL,KAAK,UAqB3C,GAnBIsJ,EAAK4B,mBAAmB,GAAG/R,aAAemQ,EAAK4B,mBAAmB,GAAGxY,cAErE4W,EAAKsC,OAAOtO,SACZgM,EAAKsC,OAAOhe,SAAS8F,iBAAkB,EACvC4V,EAAK4B,mBAAmBjN,SAAS,oBAIjCqL,EAAKsC,OAAOtO,SACZgM,EAAKsC,OAAOhe,SAAS8F,iBAAkB,EACvC4V,EAAK4B,mBAAmB/M,YAAY,mBAGpCmL,EAAK4B,mBAAmBlL,KAAK,2BAA2B9Q,OACxDoa,EAAKI,KAAO,WACLJ,EAAK4B,mBAAmBlL,KAAK,wBAAwB9Q,SAC5Doa,EAAKI,KAAO,SAGC,YAAbJ,EAAKI,KAELJ,EAAKjJ,KAAKiJ,EAAKxa,MAAMkB,QAAQ,SAAS6c,GAElC,IAAIS,EAASD,EAAQlhB,OAAO,WACxB,OAAO4B,KAAK8e,OAASA,IAGzBS,EAAOhB,KAAK,WAAW,GAEvBhD,EAAK8C,SAASkB,EAAO,WAGtB,GAAiB,SAAbhE,EAAKI,KAAiB,CAE7B,IAAI4D,EAASD,EAAQlhB,OAAO,WACxB,OAAO4B,KAAK8e,OAASvD,EAAKjJ,KAAKiJ,EAAKxa,MAAM,KAG9Cwe,EAAOhB,KAAK,WAAW,GACvBgB,EAAOrP,SAAS,WAEZqL,EAAKhB,cACLgB,EAAKd,aAAaJ,KAAKkF,EAAO7M,SAAST,KAAK,gBAAgByI,QAGhEa,EAAK8C,SAASkB,EAAO,aAK9B,CAGH,IAAID,EAAUtf,KAAKmd,mBAAmBlL,KAAK,UACvCuN,EAAcF,EAAQne,OAAS,EAAIme,EAAQ9C,IAAI,WAC/C,OAAOxc,KAAK8e,MAAMtH,aACnBhb,MAAQ,GAgBX,GAdAwD,KAAKsS,KAAKtS,KAAKe,MAAQf,KAAKsS,KAAKtS,KAAKe,MAAM3C,OAAO,SAAS0gB,GACxD,OAAOU,EAAYxd,QAAQ8c,EAAMtH,aAAe,IAGjB,GAA/BxX,KAAKsS,KAAKtS,KAAKe,MAAMI,QACrBnB,KAAKoa,qBAAqBC,KAAKra,KAAKsa,mBAGpCta,KAAKmd,mBAAmBlL,KAAK,2BAA2B9Q,OACxDnB,KAAK2b,KAAO,WACL3b,KAAKmd,mBAAmBlL,KAAK,wBAAwB9Q,SAC5DnB,KAAK2b,KAAO,SAGC,YAAb3b,KAAK2b,KAEL3b,KAAKsS,KAAKtS,KAAKe,MAAMkB,QAAQ,SAAS6c,GAElC,IAAIS,EAASD,EAAQlhB,OAAO,WACxB,OAAO4B,KAAK8e,OAASA,IAGzBS,EAAOhB,KAAK,WAAW,GAEvBhD,EAAK8C,SAASkB,EAAO,WAGtB,GAAiB,SAAbvf,KAAK2b,KAAiB,CAE7B,IAAI4D,EAASD,EAAQlhB,OAAO,WACxB,OAAO4B,KAAK8e,OAASvD,EAAKjJ,KAAKiJ,EAAKxa,MAAM,KAG9Cwe,EAAOhB,KAAK,WAAW,GACvBgB,EAAOrP,SAAS,WAEZlQ,KAAKua,cACLva,KAAKya,aAAaJ,KAAKkF,EAAO7M,SAAST,KAAK,gBAAgByI,QAGhE1a,KAAKqe,SAASkB,EAAO,SAMjCpE,OAAA,WAEI,IAAII,EAAOvb,KACP0e,EAAc1e,KAAKyQ,KAAK+K,MAAQ,MAAQ,MAE5C,GAAIxb,KAAKkb,aAAa/Z,OAElB,GAAInB,KAAK4a,UAAUzZ,OAEfnB,KAAKmd,mBAAmBlL,KAAK,uBAAuBG,QAAQ,gBAAgBT,IAAI,gBAAgB7T,SAErE,OAAvBkC,KAAK0b,eACL1b,KAAK0b,cAAc+D,QAGvBzf,KAAK0b,cAAgB/L,EAAEqP,KAAK,CACxBC,OAAQ,MACRC,IAAKlf,KAAK4a,UAAY5a,KAAKkb,eAC5BiE,KAAK,SAAS7M,GAEbiJ,EAAKG,cAAgB,KAErB,IAAIzB,EAAQ3H,EAAKkK,IAAI,SAAAhK,GAIjB,OAFAA,EAAK2D,GAAK3D,EAAK+I,EAAKe,gBAAgB9E,WAE7BhF,IAGXyH,EAAQA,EAAM7b,OAAO,SAASoU,GAC1B,OAAkD,IAA3C+I,EAAKjJ,KAAKiJ,EAAKxa,MAAMiB,QAAQwQ,EAAK2D,MAAwD,IAA1CoF,EAAKc,eAAera,QAAQwQ,EAAK2D,KAAyB,GAAX3D,EAAK2D,KAG/G,IAAIrI,EAASyN,EAAKyB,gBAAgB/C,GAElCtK,EAAE0P,KAAK9D,EAAK4B,mBAAmBzF,OAAO5J,IAAS+L,KAAK,WAEhD,IAAI6E,EAAcnD,EAAK9K,KAAK+K,MAAQ,MAAQ,MAE5CD,EAAK8B,qBAAqBhD,KAA1B,aAA4CqE,EAA5C,wBACAnD,EAAK8B,qBAAqBzL,KAAK,oBAAqB,QAEhD2J,EAAK4B,mBAAmB,GAAG/R,aAAemQ,EAAK4B,mBAAmB,GAAGxY,cAErE4W,EAAKsC,OAAOtO,SACZgM,EAAKsC,OAAOhe,SAAS8F,iBAAkB,EACvC4V,EAAK4B,mBAAmBjN,SAAS,oBAIjCqL,EAAKsC,OAAOtO,SACZgM,EAAKsC,OAAOhe,SAAS8F,iBAAkB,EACvC4V,EAAK4B,mBAAmB/M,YAAY,2BAK7C,CAEH,IAAIsP,EAAU1f,KAAKgb,WAAW5c,OAAO,SAASoU,GAC1C,OAAOA,EAAK1V,IAAI6iB,oBAAoB3d,QAAQuZ,EAAKL,aAAayE,sBAAwB,IAG1F3f,KAAKma,aAAa/J,YAAY,UAC9BpQ,KAAKma,aAAa/J,YAAY,WAE9BsP,EAAQzd,QAAQ,SAASuQ,GACrB7C,EAAE4L,EAAKpB,aAAa3H,EAAK2D,KAAKjG,SAAS,aAG3ClQ,KAAKma,aAAaxI,IAAI,YAAYzB,SAAS,UAC3ClQ,KAAKqd,qBAAqBhD,KAA1B,aAA4CqE,EAA5C,wBACA1e,KAAKqd,qBAAqBzL,KAAK,oBAAqB,aAKpD5R,KAAK4a,UAAUzZ,QAEfnB,KAAKmd,mBAAmBlL,KAAK,uBAAuBG,QAAQ,gBAAgBT,IAAI,gBAAgB7T,SAChGkC,KAAKqd,qBAAqBhD,KAA1B,aAA4CqE,EAA5C,yBACA1e,KAAKqd,qBAAqBzL,KAAK,oBAAqB,MAIpD5R,KAAKma,aAAa/J,YAAY,UAC9BpQ,KAAKma,aAAa/J,YAAY,WAC9BpQ,KAAKqd,qBAAqBhD,KAA1B,aAA4CqE,EAA5C,yBACA1e,KAAKqd,qBAAqBzL,KAAK,oBAAqB,KAIxD5R,KAAK6d,QACL7d,KAAK6d,OAAOtO,SAGhBvP,KAAK4U,cAITqC,KAAA,WAAO,IAAA2I,EAAA5f,KAEH,IAAIA,KAAK+V,IAAIrE,SAAS,QAAtB,CAIA,IAAImO,EAAgBlQ,EAAE,gBAClBmQ,EAAS,EACTpB,EAAc1e,KAAKyQ,KAAK+K,MAAQ,MAAQ,MAExCqE,EAAc1e,SACd2e,EAASxc,SAASuc,EAAcpM,QAAQC,IAAI,WAAY,IAAM,GAGlE1T,KAAK+V,IAAIrC,IAAI,CACTiK,aAAe3d,KAAKyb,oBAAsBzb,KAAK8a,cAAczC,aAAY,GAAO,OAGpFrY,KAAK+V,IAAI7F,SAAS,QAEb2P,EAAc1e,SACf2e,EAAUxc,SAAStD,KAAK+V,IAAIrC,IAAI,WAAY,IAAM,GAGtD1T,KAAK+V,IAAIrC,IAAI,CACTqM,UAAWD,IAGX9f,KAAK6d,QAAU7d,KAAKmd,mBAAmBhc,QAEnCnB,KAAKmd,mBAAmB,GAAG/R,aAAepL,KAAKmd,mBAAmB,GAAGxY,eACrE3E,KAAKmd,mBAAmB,GAAGra,UAAY,EACvC9C,KAAKmd,mBAAmB,GAAGra,UAAY,GAI/C9C,KAAKoa,qBAAqBC,KAA1B,aAA4CqE,EAA5C,2BAEA/e,WAAW,WACPigB,EAAK7J,IAAI,GAAGiK,eAAe,CAACC,SAAU,SAAUC,MAAO,UAAWC,OAAQ,aAC3E,KAEHngB,KAAK4b,aAAc,EACnB5b,KAAK8U,aAITkC,MAAA,WAEI,IAAKhX,KAAKuc,aAAc,CAEpB,IAAIhB,EAAOvb,KACP0e,EAAc1e,KAAKyQ,KAAK+K,MAAQ,MAAQ,MAE5Cxb,KAAK+V,IAAIrC,IAAI,aAAc,IAC3B1T,KAAK+V,IAAI3F,YAAY,QAErBzQ,WAAW,WACP4b,EAAKxF,IAAImD,WAAW,UACrB,KAEClZ,KAAKsS,KAAKtS,KAAKe,MAAMI,OAAS,GAAKnB,KAAKoc,mBACxCpc,KAAKoa,qBAAqBC,KAA1B,aAA4CqE,EAA5C,mCAEA1e,KAAKoa,qBAAqBC,KAAKra,KAAKsa,mBAGxCta,KAAK4b,aAAc,EACnB5b,KAAK+U,cAKbsJ,SAAA,SAASxZ,GAEL,IAAI0W,EAAOvb,KACPqe,EAAWre,KAAKyQ,KAAK4N,SACrB/L,EAAO3C,EAAE9K,GAAIuN,QAAQ,gBAAgBE,OAErCtS,KAAK4a,UAAUzZ,SAAWwO,EAAEyQ,cAAc9N,KAEtC3C,EAAE9K,GAAI1D,QAAU0D,EAAGsZ,QAEnBne,KAAKia,MAAMzZ,KAAK8R,GAIjBtS,KAAKia,MAAQtK,EAAE0Q,KAAKrgB,KAAKia,MAAO,SAASzH,GAAQ,OAAOA,EAAK+I,EAAKe,iBAAmBhK,EAAK6D,MAIzE,mBAAbkI,GAEPA,EAASxgB,KAAKgH,EAAIyN,EAAMtS,SAKhCsgB,YAAA,SAAYrG,EAAO8C,GAAa,IAAAwD,EAAAvgB,KAE5B,OAAO,IAAIob,QAAQ,SAAC2C,EAASC,GAEzB,IAAIzC,EAAOgF,EAEX,IAAK5Q,EAAE+M,QAAQzC,GAAQ,CAEnB,IAAIuG,EAAW,GAEfA,EAAShgB,KAAKyZ,GACdA,EAAQuG,GAGZvG,EAAQA,EAAM7b,OAAO,SAASoU,GAC1B,OAA8E,IAAvE+I,EAAKc,eAAera,QAAQwQ,EAAK+I,EAAKe,gBAAgB9E,eAG3DvV,QAAQ,SAAAuQ,GAEV+N,EAAKtG,MAAMzZ,KAAKgS,KAGpB,IAAIiO,EAAWF,EAAKvD,gBAAgB/C,GAEpCsG,EAAKpD,mBAAmBuD,QAAQD,GAChCF,EAAKpG,aAAeoG,EAAKrG,QAAQjI,KAAK,gBAEtCsO,EAAK7C,kBAAkB7D,KAAK,WAExB,GAAI0G,EAAKpG,aAAahZ,OAAS,EAQ3B,GANIof,EAAKrG,QAAQjI,KAAK,2BAA2B9Q,OAC7Cof,EAAK5E,KAAO,WACL4E,EAAKrG,QAAQjI,KAAK,wBAAwB9Q,SACjDof,EAAK5E,KAAO,SAGC,YAAb4E,EAAK5E,KAEL1B,EAAMhY,QAAQ,SAAAuQ,GAEV,IAAI+M,EAASgB,EAAKrG,QAAQjI,KAAK,UAAU7T,OAAO,WAAa,OAAO4B,KAAK8e,OAAStM,EAAK2D,KACnFrZ,EAAMyiB,EAAOziB,MAAM0a,WAEvB+H,EAAOhB,KAAK,WAAW,IAEgB,IAAvCgC,EAAKjO,KAAKiO,EAAKxf,MAAMiB,QAAQlF,IAAcyjB,EAAKjO,KAAKiO,EAAKxf,MAAMP,KAAK1D,GACrEyjB,EAAKlC,SAASkB,EAAO,WAGtB,GAAiB,SAAbgB,EAAK5E,KAAiB,CAE7B,IAAInJ,EAAOyH,EAAM,GACbsF,EAASgB,EAAKrG,QAAQjI,KAAK,UAAU7T,OAAO,WAAa,OAAO4B,KAAK8e,OAAStM,EAAK2D,KACnFrZ,EAAMyiB,EAAOziB,MAAM0a,WAEvB+H,EAAOhB,KAAK,WAAW,GACvBgB,EAAOrP,SAAS,YAEuB,IAAvCqQ,EAAKjO,KAAKiO,EAAKxf,MAAMiB,QAAQlF,KAAcyjB,EAAKjO,KAAKiO,EAAKxf,MAAQ,CAACjE,IAE/DyjB,EAAKhG,cACLgG,EAAK9F,aAAaJ,KAAKkF,EAAO7M,SAAST,KAAK,gBAAgByI,QAGhE6F,EAAKrG,QAAQjI,KAAK,uBAAuBN,IAAI4N,GAAQhB,KAAK,WAAW,GACrEgC,EAAKrG,QAAQjI,KAAK,uBAAuBN,IAAI4N,GAAQnP,YAAY,WACjEmQ,EAAKlC,SAASkB,EAAO,IAIM,GAA/BgB,EAAKjO,KAAKiO,EAAKxf,MAAMI,QACrBof,EAAKhG,cACLgG,EAAK/F,qBACwB,IAA7B+F,EAAK/F,qBAC8B,GAAnC+F,EAAK9F,aAAaC,OAAOC,SACxB4F,EAAKpG,aAAahZ,OAAS,GAAKof,EAAK3F,YAEtC2F,EAAK9F,aAAaJ,KAAKkG,EAAK/F,qBAG5B+F,EAAKzF,cAAclJ,KAAK,UACxB2O,EAAKzF,cAAc5B,WAAW,SAG9BqH,EAAKnG,qBAAqB1I,SAAS,WACnC6O,EAAKnG,qBAAqBhK,YAAY,UAG1C2N,WAMZ4C,cAAA,SAAcC,GAAO,IAAAC,EAAA7gB,KAEjB,OAAO,IAAIob,QAAQ,SAAC2C,EAASC,GAEzB4C,EAAM3e,QAAQ,SAAAkU,GAEV,IAAIoJ,EAASsB,EAAK3G,QAAQjI,KAAK,UAAU7T,OAAO,WAAa,OAAO4B,KAAK8e,OAAS3I,IAE9EoJ,EAAO,GAAGpB,SAEVoB,EAAOrN,QAAQ,WAIY,GAA/B2O,EAAKvO,KAAKuO,EAAK9f,MAAMI,QACrB0f,EAAKzG,qBAAqBC,KAAKwG,EAAKvG,wBAMhDwG,QAAA,SAAQjkB,EAAKC,GAET,IAAIgR,EAAS6B,EAAE0Q,KAAKrgB,KAAKia,MAAO,SAASzH,GAAQ,OAAOA,EAAK3V,IAAQC,IAAO,GAE5E,OAAOgR,GAAkB,QAI7BiT,iBAAA,SAAiBC,GAEb,IAAIC,EAAM,GACNnT,EAAS,GACTwE,EAAOtS,KAAKsS,KAAKtS,KAAKe,MA+B1B,OA7BK4O,EAAE+M,QAAQpK,GAMX2O,EAAM3O,EAJN2O,EAAIzgB,KAAK8R,GAOb2O,EAAMA,EAAIzE,IAAIC,QAEVzc,KAAKia,MAAM9Y,OAAS,GAEpB2M,EAAS6B,EAAE0Q,KAAKrgB,KAAKia,MAAO,SAASzH,GAAQ,OAAOyO,EAAIjf,QAAQwQ,EAAK2D,GAAGqB,aAAe,IAEnFwJ,IAEAlT,EAASA,EAAO0O,IAAI,SAAA5f,GAChB,OAAOA,EAAIokB,KACZ5iB,OAAO,SAAAxB,GACN,OAAc,MAAPA,MAMfkR,EAASmT,EAGNnT,KAIXoT,gBAAA,SAAgBF,GAEZ,IAAIC,EAAM,GACNnT,EAAS,GACTwE,EAAOtS,KAAKsS,KAAKtS,KAAKe,MA+B1B,OA7BK4O,EAAE+M,QAAQpK,GAMX2O,EAAM3O,EAJN2O,EAAIzgB,KAAK8R,GAOb2O,EAAMA,EAAIzE,IAAIC,QAEVzc,KAAKia,MAAM9Y,OAAS,GAEpB2M,EAAS6B,EAAE0Q,KAAKrgB,KAAKia,MAAO,SAASzH,GAAQ,OAAOyO,EAAIjf,QAAQwQ,EAAK2D,GAAGqB,aAAe,IAEnFwJ,IAEAlT,EAASA,EAAO0O,IAAI,SAAA5f,GACjB,OAAOA,EAAIokB,KACX5iB,OAAO,SAAAxB,GACN,OAAc,MAAPA,MAMfkR,EAASmT,EAGO,MAAbnT,EAAO,GAAa,KAAOA,EAAO,MAG7CkP,gBAAA,SAAgB/C,GAIZ,IAFA,IAAInM,EAAS,GAEJzO,EAAI,EAAGA,EAAI4a,EAAM9Y,SAAU9B,EAAG,CAEnC,IAAImT,EAAOyH,EAAM5a,GACb8hB,EAAQ,GAEsB,mBAAvBnhB,KAAK+b,cAEZoF,EAAQnhB,KAAK+b,cAAcvJ,GAIvBA,EAAKzR,KACLogB,EAAQ3O,EAAKzR,KACNyR,EAAK2O,MACZA,EAAQ3O,EAAK2O,MACN3O,EAAKsM,QACZqC,EAAQ3O,EAAKsM,OAIrBhR,EAAOtN,KAAKmP,EAAC,gGAIqB3P,KAAK2b,KAJ1B,oDAMoB3b,KAAK2b,KANzB,kDAQkB3b,KAAK2b,KARvB,gBAQ2C3b,KAAKe,KARhD,IAQwDkZ,EAAM5a,GAAG8W,GARjE,YAQ+E8D,EAAM5a,GAAG8W,GARxF,sEAUwBnW,KAAKe,KAV7B,IAUqCkZ,EAAM5a,GAAG8W,GAV9C,mWAkBsBnW,KAAK2b,KAlB3B,WAkBuE,mBAAvB3b,KAAK+b,cAA+B,cAAgB,IAlBpG,0CAmBaoF,EAnBb,+LA8BV7O,KAAKE,IAGZ,OAAO1E,KAGXmP,cAAA,WAEI,GAAKjd,KAAK+a,WAIH,CAEH,IAAI2D,EAAc1e,KAAKyQ,KAAK+K,MAAQ,MAAQ,MAE5C,MAAA,qMAM4Exb,KAAK6b,kBANjF,+IAYwB6C,EAZxB,gGANA,MAAO,MA4BfxB,cAAA,WAEI,OAAKld,KAAK4c,WAMN,+LAKc5c,KAAK8b,aALnB,4EAJO,MAkBRxC,iBAAP,SAAwBC,GAEpB,OAAOvZ,KAAK+R,KAAK,WAEb,IAAIO,EAAO3C,EAAE3P,MAAMsS,KA9uCd,qBAsvCL,GALKA,IACDA,EAAO,IAAIsH,EAAO5Z,KAHY,iBAAXuZ,GAAuBA,GAI1C5J,EAAE3P,MAAMsS,KAnvCP,oBAmvCsBA,IAGL,iBAAXiH,EAAqB,CAE5B,GAA4B,oBAAjBjH,EAAKiH,GACZ,MAAM,IAAIC,UAAJ,oBAAkCD,EAAlC,KAGVjH,EAAKiH,YA1vCA7E,GAiwCrB,GAAiB,oBAAN/E,EAAmB,CAG1B,IAAM8J,EAAqB9J,EAAEC,GAAGyF,GAEhC1F,EAAEC,GAAGyF,GAAQuE,EAAON,iBACpB3J,EAAEC,GAAGyF,GAAMqE,YAAcE,EAEzBjK,EAAEC,GAAGyF,GAAMsE,WAAa,WAIpB,OAFAhK,EAAEC,GAAGyF,GAAQoE,EAENG,EAAON,kBAGlB3J,EAAEC,GAAGyF,GAAMK,SAAW,CAClB3U,KAAM,GACN4a,KAAM,WACNI,cAAe,KACfC,aAAc,KACdC,eAAgB,KAChBlC,QAAS,KACT0B,oBAAqB,IACrBD,OAAO,EACPvB,MAAO,GACPc,YAAY,EACZ6B,YAAY,EACZhC,WAAW,EACXjG,OAAQ,KACRC,SAAU,KACVC,UAAW,KACXC,OAAQ,KACRC,QAAS,KACTC,QAAS,KACToM,SAAU,KACV/C,SAAU,KACVvE,YAAa,KACb+B,kBAAmB,KACnBC,aAAc,KACd3G,OAAO,EACPoF,cAAc,EACdC,oBAAqB,GACrBK,yBAA0B,GAC1BsB,wBAAwB,EACxBD,gBAAgB,EAChBE,oBAAoB,EACpBC,eAAgB,GAChBC,eAAgB,MCnzCxB,IAAMjH,EAAO,eAGPgM,cAEF,SAAAA,EAAYxc,EAAI4L,GAAM,IAAA+E,EAAA,OAElBA,EAAAC,EAAA5X,KAAAmC,OAAAA,MAEKyQ,KAAO,GAERjP,OAAO8O,KAAKzQ,SAASkR,SAErBpB,EAAEE,QAAO,EAAM2F,EAAK/E,KAAMd,EAAEC,GAAGyF,GAAMK,SAAUlU,OAAO8O,KAAKzQ,SAASkR,SAAUN,GAI9Ed,EAAEE,QAAO,EAAM2F,EAAK/E,KAAMd,EAAEC,GAAGyF,GAAMK,SAAUjF,GAGnD+E,EAAK3Q,GAAKA,EACV2Q,EAAKL,MAAQK,EAAK/E,KAAK0E,MACvBK,EAAKG,OAjBaH,oCAqBtBG,KAAA,WAAO,IAAAmB,EAAA9W,KAEH2P,EAAE0P,KAAKrf,KAAK4V,cAAciE,KAAK,WAC3B/C,EAAKgD,cACLhD,EAAKjB,aACLiB,EAAKnC,cAKbnF,QAAA,WAEIxP,KAAK8V,eACL9V,KAAK+V,IAAIC,WAtCA,uBAuCThW,KAAK6U,eAITtF,OAAA,WAEIvP,KAAK4V,aACL5V,KAAK4U,cAITgB,WAAA,WAAa,IAAAyD,EAAArZ,KA6BT,GA3BAA,KAAK+V,IAAMpG,EAAE3P,KAAK6E,IAClB7E,KAAK+V,IAAI7F,SAAS,oBAClBlQ,KAAKmS,WAAanS,KAAK+V,IAAIrD,OAAO,aAClC1S,KAAKmW,GAAK,YAAYnW,KAAKoW,eAC3BpW,KAAKqW,UAAYrW,KAAK+V,IAAIzD,KAAK,aAAetS,KAAK+V,IAAIzD,KAAK,aAAetS,KAAKyQ,KAAK4F,UACrFrW,KAAKsW,YAActW,KAAK+V,IAAIzD,KAAK,eAAiBtS,KAAK+V,IAAIzD,KAAK,eAAiBtS,KAAKyQ,KAAK6F,YAC3FtW,KAAKuW,aAAevW,KAAK+V,IAAIzD,KAAK,gBAAkBtS,KAAK+V,IAAIzD,KAAK,gBAAkBtS,KAAKyQ,KAAK8F,aAC9FvW,KAAKwW,eAAiBxW,KAAK+V,IAAIzD,KAAK,kBAAoBtS,KAAK+V,IAAIzD,KAAK,kBAAoBtS,KAAKyQ,KAAK+F,eACpGxW,KAAKshB,OAASthB,KAAK+V,IAAIzD,KAAK,UAAYtS,KAAK+V,IAAIzD,KAAK,UAAYtS,KAAKyQ,KAAK6Q,OAC5EthB,KAAKuhB,SAAWvhB,KAAK+V,IAAIzD,KAAK,YAActS,KAAK+V,IAAIzD,KAAK,YAActS,KAAKyQ,KAAK8Q,SAClFvhB,KAAK6d,OAAS7d,KAAK+V,IAAIzD,KAAK,UAAYtS,KAAK+V,IAAIzD,KAAK,UAAYtS,KAAKyQ,KAAKoN,OAC5E7d,KAAKyb,oBAAsBzb,KAAK+V,IAAIzD,KAAK,uBAAyBtS,KAAK+V,IAAIzD,KAAK,uBAAyBtS,KAAKyQ,KAAKgL,oBACnHzb,KAAKwhB,iBAAmBxhB,KAAK+V,IAAInE,KAAK,0BAA4B6P,KAAKC,MAAM1hB,KAAK+V,IAAInE,KAAK,2BAA6B5R,KAAKyQ,KAAK+Q,iBAClIxhB,KAAK2hB,iBAAmB3hB,KAAK+V,IAAIzD,KAAK,oBAAsBtS,KAAK+V,IAAIzD,KAAK,oBAAsBtS,KAAKyQ,KAAKkR,iBAC1G3hB,KAAK4W,QAAU5W,KAAK+V,IAAIzD,KAAK,WAAatS,KAAK+V,IAAIzD,KAAK,WAAatS,KAAKyQ,KAAKmG,QAC/E5W,KAAK4b,aAAc,EAEf5b,KAAKmS,WAAWT,SAAS,UACzB1R,KAAKyW,UAAY,MACVzW,KAAKmS,WAAWT,SAAS,aAChC1R,KAAKyW,UAAY,QACVzW,KAAKmS,WAAWT,SAAS,cAChC1R,KAAKyW,UAAY,SAEjBzW,KAAKyW,UAAY,OAGO,mBAAjBzW,KAAK4W,QAgEZ,OAxBA5W,KAAK4hB,YAAY5hB,KAAK+V,IAAI8L,KAAK,mBAAoB7hB,KAAK+V,IAAI8L,KAAK,kBACjE7hB,KAAK4hB,UAAUlQ,SAAS,uBAAyB1R,KAAK8hB,MAAQ,MAAQ9hB,KAAK8hB,MAAQ,QACnF9hB,KAAKmd,qBAAqBnd,KAAK4hB,UAAU3P,KAAK,iCAAkCjS,KAAK4hB,UAAU3P,KAAK,gCACpGjS,KAAK+hB,cAAgB/hB,KAAK4hB,UAAU3P,KAAK,kBAErCjS,KAAKuhB,UACLvhB,KAAK4hB,UAAUlO,IAAI,YAAa1T,KAAKuhB,SAAS,MAGlDvhB,KAAKiV,IAAIjV,KAAK+V,KACd/V,KAAKiV,IAAIjV,KAAKmS,YACdnS,KAAKiV,IAAIjV,KAAK4hB,WACd5hB,KAAKiV,IAAIjV,KAAKmd,oBACdnd,KAAKiV,IAAI,OAAOjV,KAAKmW,IACrBnW,KAAKiV,IAAI,cAAcjV,KAAKqW,WAC5BrW,KAAKiV,IAAI,iBAAiBjV,KAAKsW,aAC/BtW,KAAKiV,IAAI,kBAAkBjV,KAAKuW,cAChCvW,KAAKiV,IAAI,oBAAoBjV,KAAKwW,gBAClCxW,KAAKiV,IAAI,WAAWjV,KAAKshB,QACzBthB,KAAKiV,IAAI,cAAcjV,KAAKuhB,UAC5BvhB,KAAKiV,IAAI,YAAYjV,KAAKyQ,KAAKmG,SAC/B5W,KAAKiV,IAAI,WAAWjV,KAAK6d,QACzB7d,KAAKiV,IAAI,0BAA0BjV,KAAKyb,oBAAoB,OAErD,EA9DP,IAAIuG,EAAgC,QAApBhiB,KAAKyQ,KAAKqR,MAAkB,uBAAyB,GAErE9hB,KAAK4hB,UAAYjS,EAAC,8CACaqS,EADb,SAC+BhiB,KAAKmW,GADpC,2BAERnW,KAAK4W,UAFG,0CAMlBjH,EAAE0P,KAAKrf,KAAK+V,IAAIkM,MAAMjiB,KAAK4hB,YAAY/H,KAAK,WAyBxC,OAvBAR,EAAK8D,qBAAqB9D,EAAKuI,UAAU3P,KAAK,iCAAkCoH,EAAKuI,UAAU3P,KAAK,gCACpGoH,EAAKuI,UAAUlQ,SAAS,uBAAyB2H,EAAKyI,MAAQ,MAAQzI,EAAKyI,MAAQ,QACnFzI,EAAK0I,cAAgB1I,EAAKuI,UAAU3P,KAAK,kBAErCoH,EAAKkI,UACLlI,EAAKuI,UAAUlO,IAAI,YAAa2F,EAAKkI,SAAS,MAGlDlI,EAAKpE,IAAIoE,EAAKtD,KACdsD,EAAKpE,IAAIoE,EAAKlH,YACdkH,EAAKpE,IAAIoE,EAAKuI,WACdvI,EAAKpE,IAAIoE,EAAK8D,oBACd9D,EAAKpE,IAAI,OAAOoE,EAAKlD,IACrBkD,EAAKpE,IAAI,cAAcoE,EAAKhD,WAC5BgD,EAAKpE,IAAI,iBAAiBoE,EAAK/C,aAC/B+C,EAAKpE,IAAI,kBAAkBoE,EAAK9C,cAChC8C,EAAKpE,IAAI,oBAAoBoE,EAAK7C,gBAClC6C,EAAKpE,IAAI,WAAWoE,EAAKiI,QACzBjI,EAAKpE,IAAI,cAAcoE,EAAKkI,UAC5BlI,EAAKpE,IAAI,YAAYoE,EAAKzC,SAC1ByC,EAAKpE,IAAI,WAAWoE,EAAKwE,QACzBxE,EAAKpE,IAAI,0BAA0BoE,EAAKoC,oBAAoB,OAErD,OAkCnB3B,YAAA,WAEQ9Z,KAAKyQ,KAAKoN,QAAU7d,KAAKmd,mBAAmBhc,SAE5CnB,KAAKmd,mBAAmBzJ,IAAI,CACxBiK,aAAc3d,KAAKyb,oBAAoB,OAGxClH,IAECvU,KAAKmd,mBAAmBzJ,IAAI,CACxBkK,aAAc,UAKlB5d,KAAKmd,mBAAmBzJ,IAAI,CACxBkK,aAAc,SAGlB5d,KAAK6d,OAAS,IAAIlQ,EAAiB3N,KAAKmd,mBAAmB,GAAI,CAC3DlS,WAAY,EACZrB,kBAAkB,EAClBnC,mBAAoB,KAGxBzH,KAAKmd,mBAAmBjN,SAAS,uBAM7C2F,WAAA,WAAa,IAAAiI,EAAA9d,KAELub,EAAOvb,KAEXA,KAAK+V,IAAI1F,GAAG,SAAYgF,EAAM,WAEtByI,EAAKlC,YACLkC,EAAK9G,QAEL8G,EAAK7G,SAIbjX,KAAK+hB,cAAc1R,GAAG,SAAYgF,EAAM,WAEjCkG,EAAKoG,kBACLpG,EAAKvE,QAGRuE,EAAK2G,YAAYliB,QAGrB2P,EAAEzS,UAAUmT,GAAG,mBAAoB,SAACnO,GAE3B4b,EAAK/H,IAAItD,GAAGvQ,EAAEvB,SAAYmd,EAAK8D,UAAUnP,GAAGvQ,EAAEvB,SAAmD,IAAxCmd,EAAK8D,UAAUpD,IAAItc,EAAEvB,QAAQQ,SAAgB2c,EAAKlC,aAC5GkC,EAAK9G,UAIbrH,EAAEnO,QAAQ6O,GAAG,SAAUwD,EAAS,WAE5BiK,EAAK5G,cACL4G,EAAKlJ,YACN,SAIPkB,aAAA,WAEI9V,KAAK+V,IAAIoB,IAAI,IAAI9B,MAIrBe,aAAA,WAEI,MAAO,uCAAuCgB,QAAQ,QAAS,SAASC,GACpE,IAAIC,EAAoB,GAAhBlT,KAAKmT,SAAgB,EAC7B,OADyC,KAALF,EAAWC,EAAS,EAAJA,EAAU,GACrDE,SAAS,SAK1BN,YAAA,SAAYT,GAEW,oBAAR0L,KAA+B,OAARA,MAC9B1L,EAAYzW,KAAKyW,WAGrB,IAAI2L,EAAgBpiB,KAAK4hB,UAAU9S,YAAW,GAC1CuT,EAAiBriB,KAAK4hB,UAAUvJ,aAAY,GAC5CiK,EAAuBtiB,KAAK+V,IAAIjH,YAAW,GAC3CyT,EAAwBviB,KAAK+V,IAAIsC,aAAY,GAC7CmK,EAAsBxiB,KAAK+V,IAAI0C,WAAWnS,KAC1Cmc,EAAsBziB,KAAK+V,IAAI0C,WAAW/R,IAC1Cgc,EAAe,EACfC,EAAe,EACfC,EAAU,EACVC,EAAU,EAiCd,GA/BkB,QAAdpM,GAGIiM,EADe,QAAf1iB,KAAK8hB,MACUQ,EAAuBF,EAEvBI,EAGnBG,EAAeF,EAAsBJ,GAEhB,UAAd5L,GAEPiM,EAAeF,EAAsBF,EACrCK,EAAeF,GAEM,WAAdhM,GAGHiM,EADe,QAAf1iB,KAAK8hB,MACUQ,EAAuBF,EAEvBI,EAGnBG,EAAeF,EAAsBF,GAEhB,SAAd9L,IAEPiM,EAAeF,EAAsBJ,EACrCO,EAAeF,GAGfziB,KAAKshB,OAAQ,CAEb,IAAMwB,EAAU9iB,KAAKshB,OAAO5R,MAAM,KAElCkT,EAAUE,EAAQ,GAClBD,EAAUC,EAAQ,GAClBJ,GAAgBpf,SAASsf,EAAS,IAClCD,GAAgBrf,SAASuf,EAAS,IAGtC,GAAI7iB,KAAKwhB,kBAAoBxhB,KAAKmS,WAAWhR,OAAS,EAAG,CAOrD,IAFA,IAAI4hB,EAAoB/iB,KAAKmS,WAAWO,SACpCsQ,EAAQ,EAEgC,WAAxCD,EAAkBrP,IAAI,eACgB,WAAtCqP,EAAkBrP,IAAI,aACsC,UAA3DqP,EAAkBxE,KAAK,YAAc,IAAI0E,eAC1CD,EAAQ,KACV,CAGE,KAFAD,EAAoBA,EAAkBrQ,UAEflW,IAAI,GACvB,SAGFwmB,EAGN,IAAKD,EAAkBvmB,IAAI,GACvB,OAGJ,IAAM0mB,EAAyBH,EAAkBvmB,IAAI,GAAGmM,wBAClDwa,EAAwBnjB,KAAKmS,WAAW3V,IAAI,GAAGmM,wBAEjDua,EAAuB9c,MAAQgc,GAC/BpiB,KAAK4hB,UAAUlO,IAAI,YAAawP,EAAuB9c,OACvDgc,EAAgBc,EAAuB9c,OAEvCpG,KAAK4hB,UAAUlO,IAAI,YAAa,IAGhCwP,EAAuBrc,OAASwb,GAChCriB,KAAK4hB,UAAUlO,IAAI,aAAcwP,EAAuBrc,QACxDwb,EAAiBa,EAAuBrc,QAExC7G,KAAK4hB,UAAUlO,IAAI,aAAc,IAGrC,IAAM0P,EAAShf,KAAKsD,IAAItD,KAAKoH,IAAI0X,EAAuB/jB,EAAIgkB,EAAsBhkB,GAAI,GAChFkkB,EAAUjf,KAAKsD,IAAItD,KAAKoH,IAAI0X,EAAuBxkB,EAAIykB,EAAsBzkB,GAAI,GACjF4kB,EAAWP,EAAkBvmB,IAAI,GAAGkI,aAAeye,EAAsBzkB,EAAIykB,EAAsB/c,OACnGmd,EAAYR,EAAkBvmB,IAAI,GAAGmI,cAAgBwe,EAAsBhkB,GAAmB,eAAdsX,EAA6B0M,EAAsBtc,OAAS,IAE9Iwc,EAAUjB,GAAiBM,EAAeF,IAC1CE,EAAeF,EAGXC,EAAsBF,EAAwBI,IAC9CA,EAAeF,EAAsBF,GAAyBM,EAAU,EAAIA,EAAU,KAI1FS,EAAWlB,GAAiBM,EAAeN,EAAgBI,EAAsBF,IACjFI,EAAeF,EAAsBF,EAAuBF,EAExDK,EAAsBF,EAAwBI,IAC9CA,EAAeF,EAAsBF,GAAyBM,EAAU,EAAIA,EAAU,KAI1FF,EAAeF,GAAuBW,EAASf,IAC/CM,EAAeF,EAAsBF,EAAwBM,GAG7DF,GAAgBF,GAAuBc,EAAYlB,IAE/CM,EADAD,GAAgBF,EAAsBF,GAAwBE,GAAuBE,EAAeN,EACrFK,GAAuBJ,EAAiBkB,GAExCd,EAAsBJ,EAAiBQ,GAKlE7iB,KAAK4hB,UAAUlO,IAAI,CACf+E,SAAU,WACV/R,IAAK,MACLJ,KAAM,MACNqN,UAAW,eAAevP,KAAKyU,MAAM6J,GAAc,OAAOte,KAAKyU,MAAM8J,GAAc,WACnF7J,cAAe,cAGnB9Y,KAAKiV,IAAI,2BAA2BqN,EAAqB,MACzDtiB,KAAKiV,IAAI,4BAA4BsN,EAAsB,MAC3DviB,KAAKiV,IAAI,gCAAgCuN,EAAoB,MAC7DxiB,KAAKiV,IAAI,gCAAgCwN,EAAoB,MAC7DziB,KAAKiV,IAAI,mBAAmBmN,EAAc,MAC1CpiB,KAAKiV,IAAI,oBAAoBoN,EAAe,MAC5CriB,KAAKiV,IAAI,wBAAwByN,EAAa,MAC9C1iB,KAAKiV,IAAI,wBAAwB0N,EAAa,SAIlD1L,KAAA,WAESjX,KAAK4hB,YAAa5hB,KAAK4hB,UAAUlQ,SAAS,UAI/C1R,KAAKkX,cAEDlX,KAAKqW,WAELrW,KAAK4hB,UAAUhQ,KAAK,cAAe5R,KAAKyW,UAAU,IAAIzW,KAAK8hB,OAC3D9hB,KAAK4hB,UAAU1R,SAASlQ,KAAKwW,gBAC7BxW,KAAK4hB,UAAU9R,WAAW9P,KAAKsW,aAC/BtW,KAAK4hB,UAAU1R,SAAS,QACxBlQ,KAAK4hB,UAAUhQ,KAAK,KAAM5R,KAAKmW,IAC/BnW,KAAK+V,IAAInE,KAAK,gBAAiB5R,KAAKmW,MAIpCnW,KAAK4hB,UAAUhQ,KAAK,cAAe5R,KAAKyW,UAAU,IAAIzW,KAAK8hB,OAC3D9hB,KAAK4hB,UAAU1R,SAAS,QACxBlQ,KAAK4hB,UAAUhQ,KAAK,KAAM5R,KAAKmW,IAC/BnW,KAAK+V,IAAInE,KAAK,gBAAiB5R,KAAKmW,KAGpCnW,KAAKyQ,KAAKoN,QAAU7d,KAAK6d,QAAU7d,KAAKmd,mBAAmBhc,SAC3DnB,KAAKmd,mBAAmB,GAAGra,UAAY,EACvC9C,KAAKmd,mBAAmB,GAAGra,UAAY,GAG3C9C,KAAK4b,aAAc,EACnB5b,KAAK8U,aAITkC,MAAA,WAAQ,IAAAkH,EAAAle,KAECA,KAAK4hB,YAIN5hB,KAAKqW,YAAcrW,KAAK4hB,UAAUlQ,SAAS,YAE3C1R,KAAK4hB,UAAU9R,WAAW9P,KAAKuW,aAAc,WACzC2H,EAAK0D,UAAUxR,YAAY,QAC3B8N,EAAKnI,IAAImD,WAAW,oBAKxBlZ,KAAK4hB,UAAUxR,YAAY,QAC3BpQ,KAAK+V,IAAImD,WAAW,kBAGxBlZ,KAAK4b,aAAc,EACnB5b,KAAK+U,cAITmN,YAAA,SAAYrd,GAER,IAAIqd,EAAcliB,KAAKyQ,KAAKyR,YAED,mBAAhBA,GAEPA,EAAYrkB,KAAKgH,MAIlByU,iBAAP,SAAwBC,GAEpB,OAAOvZ,KAAK+R,KAAK,WAEb,IAAIO,EAAO3C,EAAE3P,MAAMsS,KA5cd,uBAodL,GALKA,IACDA,EAAO,IAAI+O,EAASrhB,KAHU,iBAAXuZ,GAAuBA,GAI1C5J,EAAE3P,MAAMsS,KAjdP,sBAidsBA,IAGL,iBAAXiH,EAAqB,CAE5B,GAA4B,oBAAjBjH,EAAKiH,GACZ,MAAM,IAAIC,UAAJ,oBAAkCD,EAAlC,KAGVjH,EAAKiH,YAxdE7E,GA8dvB,GAAiB,oBAAN/E,EAAmB,CAG1B,IAAM8J,EAAqB9J,EAAEC,GAAGyF,GAEhC1F,EAAEC,GAAGyF,GAAQgM,EAAS/H,iBACtB3J,EAAEC,GAAGyF,GAAMqE,YAAc2H,EAEzB1R,EAAEC,GAAGyF,GAAMsE,WAAa,WAIpB,OAFAhK,EAAEC,GAAGyF,GAAQoE,EAEN4H,EAAS/H,kBAGpB3J,EAAEC,GAAGyF,GAAMK,SAAW,CAClBW,WAAW,EACXC,YAAa,SACbC,aAAc,UACdC,eAAgB,UAChB8K,OAAQ,KACRC,SAAU,KACVO,MAAO,QACPH,kBAAkB,EAClBH,kBAAkB,EAClB5K,SAAS,EACTiH,QAAQ,EACRpC,oBAAqB,IACrB9G,OAAQ,KACRC,SAAU,KACVC,UAAW,KACXC,OAAQ,KACRC,QAAS,KACTmN,YAAa,KACb/M,OAAO,GCpgBf,IAAME,EAAO,cAGPmO,cAEF,SAAAA,EAAY3e,EAAI4L,GAAM,IAAA+E,EAAA,OAElBA,EAAAC,EAAA5X,KAAAmC,OAAAA,MAEKyQ,KAAO,GAERjP,OAAO8O,KAAKzQ,SAASoR,QAErBtB,EAAEE,QAAO,EAAM2F,EAAK/E,KAAMd,EAAEC,GAAGyF,GAAMK,SAAUlU,OAAO8O,KAAKzQ,SAASoR,QAASR,GAI7Ed,EAAEE,QAAO,EAAM2F,EAAK/E,KAAMd,EAAEC,GAAGyF,GAAMK,SAAUjF,GAGnD+E,EAAK3Q,GAAKA,EACV2Q,EAAKL,MAAQK,EAAK/E,KAAK0E,MACvBK,EAAKG,OAjBaH,oCAqBtBG,KAAA,WAEI3V,KAAK4V,aACL5V,KAAK6V,aACL7V,KAAK2U,YAITnF,QAAA,WAEIxP,KAAK8V,eACL9V,KAAK+V,IAAIC,WApCA,sBAqCThW,KAAK6U,eAITtF,OAAA,WAEIvP,KAAK4V,aACL5V,KAAK4U,cAITgB,WAAA,WAEI5V,KAAK+V,IAAMpG,EAAE3P,KAAK6E,IAClB7E,KAAKmS,WAAanS,KAAK+V,IAAIzD,KAAK,aAAe3C,EAAE3P,KAAK+V,IAAIzD,KAAK,cAAgB3C,EAAE3P,KAAKyQ,KAAKwF,WAC3FjW,KAAKmW,GAAK,WAAWnW,KAAKoW,eAC1BpW,KAAKqW,UAAYrW,KAAK+V,IAAIzD,KAAK,aAAetS,KAAK+V,IAAIzD,KAAK,aAAetS,KAAKyQ,KAAK4F,UACrFrW,KAAKsW,YAActW,KAAK+V,IAAIzD,KAAK,eAAiBtS,KAAK+V,IAAIzD,KAAK,eAAiBtS,KAAKyQ,KAAK6F,YAC3FtW,KAAKuW,aAAevW,KAAK+V,IAAIzD,KAAK,gBAAkBtS,KAAK+V,IAAIzD,KAAK,gBAAkBtS,KAAKyQ,KAAK8F,aAC9FvW,KAAKwW,eAAiBxW,KAAK+V,IAAIzD,KAAK,kBAAoBtS,KAAK+V,IAAIzD,KAAK,kBAAoBtS,KAAKyQ,KAAK+F,eACpGxW,KAAKyW,UAAYzW,KAAK+V,IAAIzD,KAAK,aAAetS,KAAK+V,IAAIzD,KAAK,aAAetS,KAAKyQ,KAAKgG,UACrFzW,KAAK0W,kBAAmB,EACxB1W,KAAK4W,QAAU5W,KAAK+V,IAAIzD,KAAK,WAAatS,KAAK+V,IAAIzD,KAAK,WAAatS,KAAKyQ,KAAKmG,QAC/E5W,KAAKkS,QAAUlS,KAAK+V,IAAIzD,KAAK,WAAatS,KAAK+V,IAAIzD,KAAK,WAAatS,KAAKyQ,KAAKyB,WAInF2D,WAAA,WAAa,IAAAiB,EAAA9W,KAEY,SAAjBA,KAAKkS,UAELlS,KAAK+V,IAAI1F,GAAG,cAAiBgF,EAAM,WAE/ByB,EAAKG,SAGTjX,KAAK+V,IAAI1F,GAAG,cAAiBgF,EAAM,WAE/ByB,EAAKE,UAGThX,KAAK+V,IAAI1F,GAAG,QAAWgF,EAAM,WAEzByB,EAAKE,WAIbhX,KAAK+V,IAAI1F,GAAG,aAAgBgF,EAAM,WAE9ByB,EAAKE,UAGTrH,EAAEnO,QAAQ6O,GAAG,SAAUwD,EAAS,WAExBiD,EAAK2M,WACL3M,EAAKI,cACLJ,EAAKlC,aAEV,SAIPkB,aAAA,WAEI9V,KAAK+V,IAAIoB,IAAI,IAAI9B,MAIrBe,aAAA,WAEI,MAAO,uCAAuCgB,QAAQ,QAAS,SAASC,GACpE,IAAIC,EAAoB,GAAhBlT,KAAKmT,SAAgB,EAC7B,OADyC,KAALF,EAAWC,EAAS,EAAJA,EAAU,GACrDE,SAAS,SAK1BkM,aAAA,WAEI1jB,KAAKyjB,SAAW9T,EAAC,2DAE6B3P,KAAKmW,GAFlC,iGAMoBnW,KAAK4W,QANzB,4CAYjB5W,KAAKmS,WAAWuF,OAAO1X,KAAKyjB,UAC5BzjB,KAAK2X,OAAS3X,KAAKyjB,SAASxR,KAAK,UAEjCjS,KAAKiV,IAAIjV,KAAK+V,KACd/V,KAAKiV,IAAIjV,KAAKmS,YACdnS,KAAKiV,IAAIjV,KAAKyjB,UACdzjB,KAAKiV,IAAIjV,KAAK2X,QACd3X,KAAKiV,IAAI,OAAOjV,KAAKmW,IACrBnW,KAAKiV,IAAI,cAAcjV,KAAKqW,WAC5BrW,KAAKiV,IAAI,iBAAiBjV,KAAKsW,aAC/BtW,KAAKiV,IAAI,kBAAkBjV,KAAKuW,cAChCvW,KAAKiV,IAAI,oBAAoBjV,KAAKwW,gBAClCxW,KAAKiV,IAAI,cAAcjV,KAAKyW,WAC5BzW,KAAKiV,IAAI,YAAYjV,KAAK4W,SAC1B5W,KAAKiV,IAAI,YAAYjV,KAAKkS,YAI9BgF,YAAA,SAAYT,GAEiB,oBAAdA,GAA2C,OAAdA,IACpCA,EAAYzW,KAAKyW,WAGrBzW,KAAKyjB,SAASvT,SAAS,WAAWuG,GAElC,IAUImB,EACA+L,EACAC,EAZA7L,EAAsB/X,KAAKmS,WAAW6F,aACtCC,EAAuBjY,KAAKmS,WAAW+F,cACvC2L,EAAe7jB,KAAKyjB,SAAS3U,YAAW,GACxCgV,EAAgB9jB,KAAKyjB,SAASpL,aAAY,GAC1C0L,EAAsB/jB,KAAK+V,IAAIjH,aAC/BkV,EAAuBhkB,KAAK+V,IAAIsC,cAChC4L,EAAqBjkB,KAAK+V,IAAIuL,SAAShb,KACvC4d,EAAqBlkB,KAAK+V,IAAIuL,SAAS5a,IACvCiS,EAAa3Y,KAAK2X,OAAO7I,YAAW,GACpC8J,EAAc5Y,KAAK2X,OAAOU,aAAY,GAKxB,QAAd5B,GAEAkN,EAAcvf,KAAKyU,MAAMoL,GAAsBJ,EAAeE,GAAuB,GACrFH,EAAcxf,KAAKyU,MAAMqL,EAAqBJ,GAC9ClM,EAAWxT,KAAKyU,MAAMgL,EAAe,EAAIlL,EAAa,GAEtD3Y,KAAK2X,OAAOjE,IAAI,CACZpN,KAAMsR,EAAS,QAGE,UAAdnB,GAEPkN,EAAcvf,KAAKyU,MAAMoL,EAAqBF,GAC9CH,EAAcxf,KAAKyU,MAAMqL,GAAsBJ,EAAgBE,GAAwB,GACvFpM,EAAWxT,KAAKyU,MAAMiL,EAAgB,EAAIlL,EAAc,GAExD5Y,KAAK2X,OAAOjE,IAAI,CACZhN,IAAKkR,EAAS,QAGG,WAAdnB,GAEPkN,EAAcvf,KAAKyU,MAAMoL,GAAsBJ,EAAeE,GAAuB,GACrFH,EAAcxf,KAAKyU,MAAMqL,EAAqBF,GAC9CpM,EAAWxT,KAAKyU,MAAMgL,EAAe,EAAIlL,EAAa,GAEtD3Y,KAAK2X,OAAOjE,IAAI,CACZpN,KAAMsR,EAAS,QAGE,SAAdnB,IAEPkN,EAAcvf,KAAKyU,MAAMoL,EAAqBJ,GAC9CD,EAAcxf,KAAKyU,MAAMqL,GAAsBJ,EAAgBE,GAAwB,GACvFpM,EAAWxT,KAAKyU,MAAMiL,EAAgB,EAAIlL,EAAc,GAExD5Y,KAAK2X,OAAOjE,IAAI,CACZhN,IAAKkR,EAAS,QAItB5X,KAAKyjB,SAAS/P,IAAI,CACd+E,SAAU,WACV/R,IAAK,MACLJ,KAAM,MACNqN,UAAW,eAAegQ,EAAY,OAAOC,EAAY,WACzD9K,cAAe,cAInB,IAAIqL,EAAuB,EACvBC,EAAmB,CACnB9d,KAAMtG,KAAKyjB,SAAShL,WAAWnS,KAC/BI,IAAK1G,KAAKyjB,SAAShL,WAAW/R,IAC9BK,MAAOgR,GAAuB/X,KAAKyjB,SAAShL,WAAWnS,KAAOud,GAC9Drd,OAAQyR,GAAwBjY,KAAKyjB,SAAShL,WAAW/R,IAAMod,IAE/DO,EAAkB,CAClB/d,MAAM,EACNI,KAAK,EACLK,OAAO,EACPP,QAAQ,GAmCZ,GAhCI4d,EAAgBrd,MAAQ,IAExBsd,EAAgBtd,OAAQ,EACxBod,IAEAnkB,KAAKiV,IAAI,mCAGTmP,EAAgB9d,KAAO,IAEvB+d,EAAgB/d,MAAO,EACvB6d,IAEAnkB,KAAKiV,IAAI,kCAGTmP,EAAgB5d,OAAS,IAEzB6d,EAAgB7d,QAAS,EACzB2d,IAEAnkB,KAAKiV,IAAI,oCAGTmP,EAAgB1d,IAAM,IAEtB2d,EAAgB3d,KAAM,EACtByd,IAEAnkB,KAAKiV,IAAI,iCAGTkP,EAAuB,GAgEvB,IA9DKnkB,KAAK0W,kBAAoB2N,EAAgB/d,MAAQ8d,EAAgBrd,MAAQ8c,GAE1E7jB,KAAKiV,IAAI,uCAETjV,KAAK0W,kBAAmB,EACxB1W,KAAKyjB,SAASrT,YAAY,WAAWqG,GACrCzW,KAAK2X,OAAOuB,WAAW,SACvBlZ,KAAKkX,YAAY,WAETlX,KAAK0W,kBAAoB2N,EAAgB3d,KAAO0d,EAAgB1d,IAAMod,GAE9E9jB,KAAKiV,IAAI,wCAETjV,KAAK0W,kBAAmB,EACxB1W,KAAKyjB,SAASrT,YAAY,WAAWqG,GACrCzW,KAAK2X,OAAOuB,WAAW,SACvBlZ,KAAKkX,YAAY,YAETlX,KAAK0W,kBAAoB2N,EAAgBtd,OAASqd,EAAgB9d,KAAOud,GAEjF7jB,KAAKiV,IAAI,sCAETjV,KAAK0W,kBAAmB,EACxB1W,KAAKyjB,SAASrT,YAAY,WAAWqG,GACrCzW,KAAK2X,OAAOuB,WAAW,SACvBlZ,KAAKkX,YAAY,UAETlX,KAAK0W,kBAAoB2N,EAAgB7d,QAAU4d,EAAgB1d,IAAMod,GAEjF9jB,KAAKiV,IAAI,qCAETjV,KAAK0W,kBAAmB,EACxB1W,KAAKyjB,SAASrT,YAAY,WAAWqG,GACrCzW,KAAK2X,OAAOuB,WAAW,SACvBlZ,KAAKkX,YAAY,QAETlX,KAAK0W,kBAAmC,QAAdD,GAAqC,WAAdA,IAA4B4N,EAAgB/d,OAAQ+d,EAAgBtd,MAuB7H/G,KAAKskB,oBAAqB,EArBtBF,EAAgB1d,IAAM0d,EAAgB5d,QAEtCxG,KAAKiV,IAAI,qCAETjV,KAAK0W,kBAAmB,EACxB1W,KAAKyjB,SAASrT,YAAY,WAAWqG,GACrCzW,KAAK2X,OAAOuB,WAAW,SACvBlZ,KAAKkX,YAAY,SAIjBlX,KAAKiV,IAAI,wCAETjV,KAAK0W,kBAAmB,EACxB1W,KAAKyjB,SAASrT,YAAY,WAAWqG,GACrCzW,KAAK2X,OAAOuB,WAAW,SACvBlZ,KAAKkX,YAAY,WAQrBlX,KAAKskB,mBAAoB,CAIzB,GAFAtkB,KAAKiV,IAAI,+EAELoP,EAAgB/d,KAAM,CAEtBtG,KAAKiV,IAAI,iCAET,IAAImE,EAAiBhV,KAAKoH,IAAI4Y,EAAgB9d,MAGzC2d,GAAsBN,EAAcvK,GAFjB,CAAC,MAAO,UAE8CpX,QAAQyU,GAAa,GAE/FzW,KAAKiV,IAAI,2BAET4O,GAAgBzK,EAChBuK,GAAevK,IAIfpZ,KAAKiV,IAAI,gCAET0O,GAAevK,EACfxB,GAAYwB,GAIpB,GAAIiL,EAAgB3d,IAAK,CAErB1G,KAAKiV,IAAI,gCAET,IAAImE,EAAiBhV,KAAKoH,IAAI4Y,EAAgB1d,KAE9C1G,KAAKiV,IAAI,gCAET2O,GAAexK,EACfxB,GAAYwB,EAGhB,GAAIiL,EAAgBtd,MAAO,CAEvB/G,KAAKiV,IAAI,kCAET,IAAImE,EAAiBhV,KAAKoH,IAAI4Y,EAAgBrd,OAGzCkd,GAAsBN,EAAcvK,GAFjB,CAAC,MAAO,UAE8CpX,QAAQyU,GAAa,GAE/FzW,KAAKiV,IAAI,2BAET4O,GAAgBzK,IAIhBpZ,KAAKiV,IAAI,gCAET0O,GAAevK,EACfxB,GAAYwB,GAIpB,GAAIiL,EAAgB7d,OAAQ,CAExBxG,KAAKiV,IAAI,mCAET,IAAImE,EAAiBhV,KAAKoH,IAAI4Y,EAAgB5d,QAE9CxG,KAAKiV,IAAI,gCAET2O,GAAexK,EACfxB,GAAYwB,EAGE,QAAd3C,EAEAzW,KAAK2X,OAAOjE,IAAI,CACZpN,KAAMsR,EAAS,OAGE,UAAdnB,EAEPzW,KAAK2X,OAAOjE,IAAI,CACZhN,IAAKkR,EAAS,OAGG,WAAdnB,EAEPzW,KAAK2X,OAAOjE,IAAI,CACZpN,KAAMsR,EAAS,OAGE,SAAdnB,GAEPzW,KAAK2X,OAAOjE,IAAI,CACZhN,IAAKkR,EAAS,OAItB5X,KAAKyjB,SAAS/P,IAAI,CACdtN,MAAOyd,EACPlQ,UAAW,eAAegQ,EAAY,OAAOC,EAAY,aAG7D5jB,KAAKskB,oBAAqB,EAE1BtkB,KAAKiV,IAAI,8BAA8BjV,KAAK0W,kBAC5C1W,KAAKiV,IAAI,kCAAkC8C,EAAoB,MAC/D/X,KAAKiV,IAAI,mCAAmCgD,EAAqB,MACjEjY,KAAKiV,IAAI,0BAA0B8O,EAAoB,MACvD/jB,KAAKiV,IAAI,2BAA2B+O,EAAqB,MACzDhkB,KAAKiV,IAAI,+BAA+BgP,EAAmB,MAC3DjkB,KAAKiV,IAAI,+BAA+BiP,EAAmB,MAC3DlkB,KAAKiV,IAAI,kBAAkB4O,EAAa,MACxC7jB,KAAKiV,IAAI,mBAAmB6O,EAAc,MAC1C9jB,KAAKiV,IAAI,uBAAuB0O,EAAY,MAC5C3jB,KAAKiV,IAAI,uBAAuB2O,EAAY,MAC5C5jB,KAAKiV,IAAI,0BAA0BmP,EAAgB9d,KAAK,MACxDtG,KAAKiV,IAAI,yBAAyBmP,EAAgB1d,IAAI,MACtD1G,KAAKiV,IAAI,2BAA2BmP,EAAgBrd,MAAM,MAC1D/G,KAAKiV,IAAI,4BAA4BmP,EAAgB5d,OAAO,YAKhExG,KAAKiV,IAAI,8BAA8BjV,KAAK0W,kBAC5C1W,KAAKiV,IAAI,kCAAkC8C,EAAoB,MAC/D/X,KAAKiV,IAAI,mCAAmCgD,EAAqB,MACjEjY,KAAKiV,IAAI,0BAA0B8O,EAAoB,MACvD/jB,KAAKiV,IAAI,2BAA2B+O,EAAqB,MACzDhkB,KAAKiV,IAAI,+BAA+BgP,EAAmB,MAC3DjkB,KAAKiV,IAAI,+BAA+BiP,EAAmB,MAC3DlkB,KAAKiV,IAAI,kBAAkB4O,EAAa,MACxC7jB,KAAKiV,IAAI,mBAAmB6O,EAAc,MAC1C9jB,KAAKiV,IAAI,uBAAuB0O,EAAY,MAC5C3jB,KAAKiV,IAAI,uBAAuB2O,EAAY,MAC5C5jB,KAAKiV,IAAI,0BAA0BmP,EAAgB9d,KAAK,MACxDtG,KAAKiV,IAAI,yBAAyBmP,EAAgB1d,IAAI,MACtD1G,KAAKiV,IAAI,2BAA2BmP,EAAgBrd,MAAM,MAC1D/G,KAAKiV,IAAI,4BAA4BmP,EAAgB5d,OAAO,SAKpEyQ,KAAA,WAEQjX,KAAKyjB,WAITzjB,KAAK0jB,eACL1jB,KAAKkX,cAEDlX,KAAKqW,WAELrW,KAAKyjB,SAASvT,SAASlQ,KAAKwW,gBAC5BxW,KAAKyjB,SAAS3T,WAAW9P,KAAKsW,aAC9BtW,KAAKyjB,SAASvT,SAAS,QACvBlQ,KAAKyjB,SAAS7R,KAAK,KAAM5R,KAAKmW,IAC9BnW,KAAK+V,IAAInE,KAAK,eAAgB5R,KAAKmW,MAInCnW,KAAKyjB,SAASvT,SAAS,QACvBlQ,KAAKyjB,SAAS7R,KAAK,KAAM5R,KAAKmW,IAC9BnW,KAAK+V,IAAInE,KAAK,eAAgB5R,KAAKmW,KAGvCnW,KAAK8U,aAITkC,MAAA,WAAQ,IAAAqC,EAAArZ,KAECA,KAAKyjB,WAINzjB,KAAKqW,YAAcrW,KAAKyjB,SAAS/R,SAAS,YAE1C1R,KAAKyjB,SAAS3T,WAAW9P,KAAKuW,aAAc,WAExC8C,EAAKoK,SAAS3lB,SACdub,EAAKtD,IAAImD,WAAW,gBACpBG,EAAKoK,SAAW,KAChBpK,EAAK3C,kBAAmB,EAExB2C,EAAKtE,aAKT/U,KAAKyjB,SAAS3lB,SACdkC,KAAK+V,IAAImD,WAAW,gBACpBlZ,KAAKyjB,SAAW,KAChBzjB,KAAK0W,kBAAmB,EAExB1W,KAAK+U,eAINuE,iBAAP,SAAwBC,GAEpB,OAAOvZ,KAAK+R,KAAK,WAEb,IAAIO,EAAO3C,EAAE3P,MAAMsS,KAphBd,sBA4hBL,GALKA,IACDA,EAAO,IAAIkR,EAAQxjB,KAHW,iBAAXuZ,GAAuBA,GAI1C5J,EAAE3P,MAAMsS,KAzhBP,qBAyhBsBA,IAGL,iBAAXiH,EAAqB,CAE5B,GAA4B,oBAAjBjH,EAAKiH,GACZ,MAAM,IAAIC,UAAJ,oBAAkCD,EAAlC,KAGVjH,EAAKiH,YAhiBC7E,GAsiBtB,GAAiB,oBAAN/E,EAAmB,CAG1B,IAAM8J,EAAqB9J,EAAEC,GAAGyF,GAEhC1F,EAAEC,GAAGyF,GAAQmO,EAAQlK,iBACrB3J,EAAEC,GAAGyF,GAAMqE,YAAc8J,EAEzB7T,EAAEC,GAAGyF,GAAMsE,WAAa,WAIpB,OAFAhK,EAAEC,GAAGyF,GAAQoE,EAEN+J,EAAQlK,kBAGnB3J,EAAEC,GAAGyF,GAAMK,SAAW,CAClBO,UAAW,OACXI,WAAW,EACXC,YAAa,SACbC,aAAc,UACdC,eAAgB,UAChBC,UAAW,SACXG,QAAS,GACT1E,QAAS,OACTyC,OAAQ,KACRC,SAAU,KACVC,UAAW,KACXC,OAAQ,KACRC,QAAS,KACTI,OAAO,GCtkBf,IAAME,EAAO,kBACPC,EAAW,yBAEXiP,cAEF,SAAAA,EAAY1f,EAAI4L,GAAM,IAAA+E,EAAA,OAElBA,EAAAC,EAAA5X,KAAAmC,OAAAA,MAEKyQ,KAAO,GAERjP,OAAO8O,KAAKzQ,SAASwR,YAErB1B,EAAEE,QAAO,EAAM2F,EAAK/E,KAAMd,EAAEC,GAAGyF,GAAMK,SAAUlU,OAAO8O,KAAKzQ,SAASwR,YAAaZ,GAIjFd,EAAEE,QAAO,EAAM2F,EAAK/E,KAAMd,EAAEC,GAAGyF,GAAMK,SAAUjF,GAGnD+E,EAAK3Q,GAAKA,EACV2Q,EAAKL,MAAQK,EAAK/E,KAAK0E,MACvBK,EAAKG,OAjBaH,oCAqBtBG,KAAA,WAEI3V,KAAK4V,aACL5V,KAAK6V,aACL7V,KAAKwkB,kBACLxkB,KAAK2U,YAITnF,QAAA,WAEIxP,KAAK8V,eACL9V,KAAK+V,IAAIC,WAAWV,GACpBtV,KAAK6U,eAITtF,OAAA,WAEIvP,KAAK4V,aACL5V,KAAK4U,cAITgB,WAAA,WAEI5V,KAAK+V,IAAMpG,EAAE3P,KAAK6E,IAClB7E,KAAKykB,mBAAqBzkB,KAAK+V,IAAI9D,KAAK,uBACxCjS,KAAK0kB,cAAgB1kB,KAAK+V,IAAI9D,KAAK,kBACnCjS,KAAK2kB,UAAY3kB,KAAK+V,IAAI9D,KAAK,eAAe9Q,OAC9CnB,KAAK4kB,KAAO5kB,KAAK+V,IAAI9D,KAAK,uBAE1BtC,EAAEoC,KAAK/R,KAAK4kB,KAAM,SAASvlB,EAAGwF,GAC1B8K,EAAE9K,GAAIyN,KAAK,QAAS3C,EAAE9K,GAAIiK,YAAW,MAGzC9O,KAAKiV,IAAIjV,KAAK+V,KACd/V,KAAKiV,IAAIjV,KAAKykB,oBACdzkB,KAAKiV,IAAIjV,KAAK0kB,eACd1kB,KAAKiV,IAAIjV,KAAK2kB,cAIlB9O,WAAA,WAAa,IAAAiB,EAAA9W,KAET2P,EAAEnO,QAAQ6O,GAAG,SAAUwD,EAAS,WAC5BiD,EAAK0N,mBACN,SAIP1O,aAAA,WAEI9V,KAAK+V,IAAIoB,IAAI,IAAInX,KAAK6kB,UAI1BC,WAAA,SAAWjgB,GAEP,IAAMkR,EAAMpG,EAAE9K,GACQkR,EAAI9D,KAAK,oBAEjB7B,YAAY,iBAC1B2F,EAAIgP,aAAa/kB,KAAKykB,oBAEtBzkB,KAAKwkB,qBAITQ,eAAA,SAAengB,GAEZ,IAAMkR,EAAMpG,EAAE9K,GACRogB,EAAgBlP,EAAI9D,KAAK,oBAE1BgT,EAAcvT,SAAS,kBACxBuT,EAAc/U,SAAS,iBAG1B6F,EAAImP,SAASllB,KAAK0kB,eAElB1kB,KAAKwkB,qBAITW,eAAA,WAEI,OAAInlB,KAAK+V,IAAI,GAAGxK,YAAcvL,KAAK+V,IAAI,GAAGrR,eAQ9C8f,gBAAA,WAEI,IAAIY,EAAgBplB,KAAK0kB,cAAcrmB,WACnCgnB,EAAerlB,KAAK+V,IAAI9D,KAAK,eAAeN,IAAI3R,KAAKykB,oBACrDG,EAAO5kB,KAAK+V,IAAI9D,KAAK,uBACrBqT,EAAY,EAEhB3V,EAAEoC,KAAK6S,EAAM,SAASvlB,EAAGwF,GACrBygB,GAAa3V,EAAE9K,GAAIiK,YAAW,KAGlC,IAAIyW,EAAYvlB,KAAK+V,IAAI,GAAGxK,YAAc+Z,EAEtCF,EAAcjkB,OAAS,EAElBnB,KAAKykB,mBAAmB/S,SAAS,YAClC1R,KAAKykB,mBAAmBvU,SAAS,WAKjClQ,KAAKykB,mBAAmB/S,SAAS,YACjC1R,KAAKykB,mBAAmBrU,YAAY,WAIf,GAAzBpQ,KAAKmlB,iBAEDE,EAAalkB,OAAS,GACtBnB,KAAKglB,eAAeK,EAAazR,QAKjCwR,EAAcjkB,OAAS,GAEnBokB,EAAYH,EAAcxR,OAAOtB,KAAK,UACtCtS,KAAK8kB,WAAWM,EAAcxR,WAMvC0F,iBAAP,SAAwBC,GAEpB,OAAOvZ,KAAK+R,KAAK,WAEb,IAAIO,EAAO3C,EAAE3P,MAAMsS,KAAKgD,GAQxB,GALKhD,IACDA,EAAO,IAAIiS,EAAYvkB,KAHO,iBAAXuZ,GAAuBA,GAI1C5J,EAAE3P,MAAMsS,KAAKgD,EAAUhD,IAGL,iBAAXiH,EAAqB,CAE5B,GAA4B,oBAAjBjH,EAAKiH,GACZ,MAAM,IAAIC,UAAJ,oBAAkCD,EAAlC,KAGVjH,EAAKiH,YAlLK7E,GAwL1B,GAAiB,oBAAN/E,EAAmB,CAG1B,IAAM8J,EAAqB9J,EAAEC,GAAGyF,GAEhC1F,EAAEC,GAAGyF,GAAQkP,EAAYjL,iBACzB3J,EAAEC,GAAGyF,GAAMqE,YAAc6K,EAEzB5U,EAAEC,GAAGyF,GAAMsE,WAAa,WAIpB,OAFAhK,EAAEC,GAAGyF,GAAQoE,EAEN8K,EAAYjL,kBAGvB3J,EAAEC,GAAGyF,GAAMK,SAAW,CAClBf,OAAQ,KACRC,SAAU,KACVC,UAAW,KACXM,OAAO,GC9Mf,IAAME,EAAO,eAGPmQ,cAEF,SAAAA,EAAY3gB,EAAI4L,GAAM,IAAA+E,EAAA,OAElBA,EAAAC,EAAA5X,KAAAmC,OAAAA,MAEKyQ,KAAO,GAERjP,OAAO8O,KAAKzQ,SAASsR,SAErBxB,EAAEE,QAAO,EAAM2F,EAAK/E,KAAMd,EAAEC,GAAGyF,GAAMK,SAAUlU,OAAO8O,KAAKzQ,SAAS4R,OAAQhB,GAI5Ed,EAAEE,QAAO,EAAM2F,EAAK/E,KAAMd,EAAEC,GAAGyF,GAAMK,SAAUjF,GAGnD+E,EAAK3Q,GAAKA,EACV2Q,EAAKL,MAAQK,EAAK/E,KAAK0E,MACvBK,EAAKG,OAjBaH,oCAqBtBG,KAAA,WAEI3V,KAAK4V,aACL5V,KAAK6V,aACL7V,KAAK2U,YAITnF,QAAA,WAEIxP,KAAK8V,eACL9V,KAAK+V,IAAIC,WApCA,uBAqCThW,KAAK6U,eAITtF,OAAA,WAEIvP,KAAK4V,aACL5V,KAAK4U,cAITgB,WAAA,WAEI5V,KAAK+V,IAAMpG,EAAE3P,KAAK6E,IAClB7E,KAAKylB,QAAUzlB,KAAK+V,IAAIzD,KAAK,UAAY3C,EAAEzS,UAAU+U,KAAKjS,KAAK+V,IAAIzD,KAAK,WAAa3C,EAAEzS,UAAU+U,KAAKjS,KAAKyQ,KAAK9P,QAChHX,KAAK0lB,SAA6C,QAAlC1lB,KAAK+V,IAAInE,KAAK,iBAE1B5R,KAAKylB,QAAQtkB,QAEbnB,KAAK2lB,aAAe3lB,KAAKylB,QAAQ5e,SACjC7G,KAAKmS,WAAanS,KAAKylB,QAAQ3T,QAAQ,qBACvC9R,KAAK4lB,WAAajW,EAAEzS,UAAU+U,KAAK,6BAA+BjS,KAAK+V,IAAIzD,KAAK,UAAY,QAI5FtS,KAAKylB,QAAU9V,EAAE3P,KAAK+V,KAAKrD,SAAST,KAAK,aACzCjS,KAAK2lB,aAAe3lB,KAAKylB,QAAQ5e,SACjC7G,KAAKmS,WAAanS,KAAKylB,QAAQ3T,QAAQ,qBACvC9R,KAAK4lB,WAAajW,EAAE3P,KAAK+V,KAAKrD,SAAST,KAAK,8BAG5CjS,KAAK0lB,UACL1lB,KAAKylB,QAAQ/R,IAAI,SAAU,QAG/B1T,KAAKiV,IAAIjV,KAAK+V,KACd/V,KAAKiV,IAAIjV,KAAKylB,SACdzlB,KAAKiV,IAAIjV,KAAKmS,YACdnS,KAAKiV,IAAIjV,KAAK4lB,YACd5lB,KAAKiV,IAAI,aAAajV,KAAK0lB,UAC3B1lB,KAAKiV,IAAI,kBAAkBjV,KAAK2lB,aAAa,SAIjD9P,WAAA,WAAa,IAAAiB,EAAA9W,KAETA,KAAK+V,IAAI1F,GAAG,SAAYrQ,KAAKe,KAAM,SAACmB,GAE5B4U,EAAK4O,SACL5O,EAAKE,QAELF,EAAKG,SAIbtH,EAAEnO,QAAQ6O,GAAG,SAAUwD,EAAS,WAExBiD,EAAK2O,QAAQtkB,SAEb2V,EAAK6O,aAAe7O,EAAK2O,QAAQ5e,SACjCiQ,EAAK7B,IAAI,kBAAkB6B,EAAK6O,aAAa,QAElD,SAIP7P,aAAA,WAEI9V,KAAK+V,IAAIoB,IAAI,IAAInX,KAAKe,SAI1B8kB,qBAAA,WAEI,IAAIhhB,EAAK3H,SAASC,cAAc,mBAC5B2oB,EAAqB,CACrBC,iBAAoB,sBACpBC,cAAiB,gBACjBC,WAAc,iBAGlB,IAAK,IAAIC,KAAKJ,EAEV,QAAoBlkB,IAAhBiD,EAAG9H,MAAMmpB,GACT,OAAOJ,EAAmBI,MAMtCjP,KAAA,WAAO,IAAAoC,EAAArZ,KAGCA,KAAK2lB,eAAiB3lB,KAAKylB,QAAQ5e,WACnC7G,KAAK2lB,aAAe3lB,KAAKylB,QAAQ5e,UAGrC7G,KAAKylB,QAAQrV,YAAY,iBACzBpQ,KAAKylB,QAAQvV,SAAS,cAElBlQ,KAAK+V,IAAItD,GAAG,WACZzS,KAAK+V,IAAInE,KAAK,YAAY,GAG1B5R,KAAKmS,WAAWhR,QAChBnB,KAAKmS,WAAWjC,SAAS,QAG7BlQ,KAAKylB,QAAQ/R,IAAI,UACjB1T,KAAKylB,QAAQ/R,IAAI,SAAU1T,KAAK2lB,cAE5B3lB,KAAK4lB,WAAWzkB,QAChBnB,KAAK4lB,WAAW1V,SAAS,QAG7BlQ,KAAKylB,QAAQtV,IAAInQ,KAAK6lB,uBAAwB,WAE1CxM,EAAKoM,QAAQrV,YAAY,cAErBiJ,EAAKtD,IAAItD,GAAG,WACZ4G,EAAKtD,IAAInE,KAAK,YAAY,GAG9ByH,EAAKoM,QAAQvM,WAAW,SACxBG,EAAKoM,QAAQvV,SAAS,iBACtBmJ,EAAKtD,IAAInE,KAAK,iBAAiB,GAC/ByH,EAAKoM,QAAQ/R,IAAI,SAAU,QAC3B2F,EAAKqM,UAAW,IAGpB1lB,KAAK8U,YAITkC,MAAA,WAAQ,IAAA8G,EAAA9d,KAEJA,KAAKylB,QAAQrV,YAAY,iBACzBpQ,KAAKylB,QAAQvV,SAAS,cAElBlQ,KAAK+V,IAAItD,GAAG,WACZzS,KAAK+V,IAAInE,KAAK,YAAY,GAG1B5R,KAAKmS,WAAWhR,QAChBnB,KAAKmS,WAAW/B,YAAY,QAGhCpQ,KAAKylB,QAAQ/R,IAAI,SAAU1T,KAAKylB,QAAQ5e,UAExClH,WAAW,WACPme,EAAK2H,QAAQ/R,IAAI,SAAU,IAC5B,IAEC1T,KAAK4lB,WAAWzkB,QAAUnB,KAAK4lB,WAAWlU,SAAS,SACnD1R,KAAK4lB,WAAWxV,YAAY,QAGhCpQ,KAAKylB,QAAQtV,IAAInQ,KAAK6lB,uBAAwB,WAE1C/H,EAAK2H,QAAQrV,YAAY,cAErB0N,EAAK/H,IAAItD,GAAG,WACZqL,EAAK/H,IAAInE,KAAK,YAAY,GAG9BkM,EAAK2H,QAAQvM,WAAW,SACxB4E,EAAK2H,QAAQvV,SAAS,YACtB4N,EAAK/H,IAAInE,KAAK,iBAAiB,GAC/BkM,EAAK4H,UAAW,EAGZ5H,EAAK6H,eAAiB7H,EAAK2H,QAAQ5e,WACnCiX,EAAK6H,aAAe7H,EAAK2H,QAAQ5e,YAIzC7G,KAAK+U,aAGFuE,iBAAP,SAAwBC,GAEpB,OAAOvZ,KAAK+R,KAAK,WAEb,IAAIO,EAAO3C,EAAE3P,MAAMsS,KA5Nd,uBAoOL,GALKA,IACDA,EAAO,IAAIkT,EAASxlB,KAHU,iBAAXuZ,GAAuBA,GAI1C5J,EAAE3P,MAAMsS,KAjOP,sBAiOsBA,IAGL,iBAAXiH,EAAqB,CAE5B,GAA4B,oBAAjBjH,EAAKiH,GACZ,MAAM,IAAIC,UAAJ,oBAAkCD,EAAlC,KAGVjH,EAAKiH,YAxOE7E,GA8OvB,GAAiB,oBAAN/E,EAAmB,CAG1B,IAAM8J,EAAqB9J,EAAEC,GAAGyF,GAEhC1F,EAAEC,GAAGyF,GAAQmQ,EAASlM,iBACtB3J,EAAEC,GAAGyF,GAAMqE,YAAc8L,EAEzB7V,EAAEC,GAAGyF,GAAMsE,WAAa,WAItB,OAFAhK,EAAEC,GAAGyF,GAAQoE,EAEN+L,EAASlM,kBAGlB3J,EAAEC,GAAGyF,GAAMK,SAAW,CAClB/U,OAAQ,KACRgU,OAAQ,KACRC,SAAU,KACVC,UAAW,KACXC,OAAQ,KACRC,QAAS,KACTI,OAAO,GCvQf,IAAME,EAAO,YAGP8Q,aAEF,SAAAA,EAAYlQ,EAAWxF,GAEnBzQ,KAAKH,SAAW,GAEZ2B,OAAO8O,KAAKzQ,SAAS0R,MAErB5B,EAAEE,QAAO,EAAM7P,KAAKH,SAAU8P,EAAEC,GAAGyF,GAAMK,SAAUlU,OAAO8O,KAAKzQ,SAAS0R,MAAOd,GAI/Ed,EAAEE,QAAO,EAAM7P,KAAKH,SAAU8P,EAAEC,GAAGyF,GAAMK,SAAUjF,GAGvDzQ,KAAKiW,UAAYA,EACjBjW,KAAKmS,WAAaxC,EAAE3P,KAAKiW,WACzBjW,KAAKmV,MAAQnV,KAAKH,SAASsV,MAC3BnV,KAAKwb,MAAQxb,KAAKH,SAAS2b,MAC3Bxb,KAAKomB,OAAS,GACdpmB,KAAKqmB,MAAQ,GACbrmB,KAAKsmB,iBAAkB,EACvBtmB,KAAKumB,aAAevmB,KAAKH,SAAS0mB,aAClCvmB,KAAK6U,UAAY7U,KAAKH,SAASgV,qCAInC2R,SAAA,SAASjV,GAIL,GAFAvR,KAAKqmB,MAAM7lB,KAAK+Q,IAEZvR,KAAKsmB,gBAIT,OAAOtmB,KAAKymB,kBAIhBA,aAAA,WAOI,GALIzmB,KAAKsmB,iBAELtmB,KAAKqmB,MAAMK,QAGV1mB,KAAKqmB,MAAMllB,OAQhB,OAFAnB,KAAKsmB,iBAAkB,EAEhBtmB,KAAKiX,KAAKjX,KAAKqmB,MAAM,IANxBrmB,KAAKsmB,iBAAkB,KAU/B3Q,KAAA,SAAKlF,GAED,IAAI5Q,EAAW,GAEf8P,EAAEE,QAAO,EAAMhQ,EAAUG,KAAKH,SAAU4Q,GAExC,IAAIc,EAAQvR,KAAK2mB,WAAW9mB,GAK5B,OAHAG,KAAKwmB,SAASjV,GACdvR,KAAK2U,OAAOpD,GAELA,KAIX/B,QAAA,WAEIxP,KAAKmS,WAAW6D,WA7EP,oBA8EThW,KAAK6U,eAIT8R,WAAA,SAAW9mB,GAEP,IAAI0R,EAAQ,CACRqV,KAAM,SAAS5mB,KAAKoW,eACpBK,UAAW5W,EAAS4W,UACpBoQ,WAAYhnB,EAASgnB,WACrBC,WAAYjnB,EAASinB,WACrBxF,OAAQzhB,EAASyhB,OACjBjL,UAAWxW,EAASwW,UACpBC,YAAazW,EAASyW,YACtBC,aAAc1W,EAAS0W,aACvBC,eAAgB3W,EAAS2W,eACzBuQ,QAASlnB,EAASknB,QAClBC,KAAMnnB,EAASmnB,KACfC,OAAQpnB,EAASonB,OACjBC,MAAOrnB,EAASqnB,MAChBvQ,MAAO9W,EAAS8W,MAChBC,QAAS/W,EAAS+W,QAClBuQ,SAAUtnB,EAASsnB,SACnBC,cAAevnB,EAASunB,cACxBzS,OAAQ9U,EAAS8U,OACjBG,OAAQjV,EAASiV,OACjBC,QAASlV,EAASkV,SAkBtB,MAf6B,mBAAlBxD,EAAMqF,QAEbrF,EAAMwE,IAAMpG,EAAE4B,EAAM4V,YAIpB5V,EAAMwE,IAAMpG,EAAE3P,KAAKqnB,gBAAgB9V,IAGvCA,EAAM+V,OAAS/V,EAAMwE,IAAI9D,KAAK,gBAC9BV,EAAMgW,UAAYhW,EAAMwE,IAAI9D,KAAK,sBAEjCjS,KAAKiV,IAAI1D,GACTvR,KAAKomB,OAAO5lB,KAAK+Q,GAEVA,KAIXsE,WAAA,SAAWtE,GAAO,IAAAiE,EAAAxV,KAEVub,EAAOvb,KAEXuR,EAAMwE,IAAI1F,GAAG,QAAS,qBAAsB,WAEpCkB,EAAMwE,KACNwF,EAAKvE,MAAMzF,KAInB5B,EAAEnO,QAAQ6O,GAAG,SAAUwD,EAAS,WAExBtC,EAAMwE,KACNP,EAAK0B,YAAY3F,IAEtB,SAIP6E,aAAA,WAEI,MAAO,uCAAuCgB,QAAQ,QAAS,SAASC,GACpE,IAAIC,EAAoB,GAAhBlT,KAAKmT,SAAgB,EAC7B,OADyC,KAALF,EAAWC,EAAS,EAAJA,EAAU,GACrDE,SAAS,SAK1BN,YAAA,SAAY3F,EAAOkF,EAAWqQ,EAAYD,GActC,GAZ0B,oBAAfC,GAA6C,OAAfA,IACrCA,EAAavV,EAAMuV,YAGG,oBAAfD,GAA6C,OAAfA,IACrCA,EAAatV,EAAMsV,YAGlBA,GAAeC,IAChBrQ,EAAYlF,EAAMkF,WAGlBlF,EAAM+P,OAEN,CAAA,IAAIwB,EAAUvR,EAAM+P,OAAO5R,MAAM,KACnBpM,SAASwf,EAAQ,GAAI,IACrBxf,SAASwf,EAAQ,GAAI,IAGvC,IAEI0E,EACAC,EAHAC,EAAanW,EAAMwE,IAAIjH,YAAW,GAClC6Y,EAAcpW,EAAMwE,IAAIsC,aAAY,GAIpC5B,EAEkB,aAAdA,GAEA+Q,EAAY,EACZC,EAAY,EAERlW,EAAM+P,QACNkG,GAAa5E,QACb6E,GAAa5E,UAEb2E,GAAa,GACbC,GAAa,KAGI,eAAdhR,GAEP+Q,EAAaxnB,KAAKmS,WAAW/L,QAAU,EAAKshB,EAAa,EACzDD,EAAY,EAEZznB,KAAKiV,IAAIjV,KAAKmS,WAAW/L,OAErBmL,EAAM+P,QACNkG,GAAa5E,QACb6E,GAAa5E,SAEb4E,GAAa,IAGI,cAAdhR,GAEP+Q,EAAYxnB,KAAKmS,WAAW/L,QAAUshB,EACtCD,EAAY,EAERlW,EAAM+P,QACNkG,IAAc5E,QACd6E,GAAa5E,UAEb2E,IAAc,GACdC,GAAa,KAGI,gBAAdhR,GAEP+Q,EAAY,EACZC,EAAaznB,KAAKmS,WAAWtL,SAAW,EAAK8gB,EAAc,EAEvDpW,EAAM+P,QACNkG,GAAa5E,QACb6E,GAAa5E,SAEb2E,GAAa,IAGI,kBAAd/Q,GAEP+Q,EAAaxnB,KAAKmS,WAAW/L,QAAU,EAAKshB,EAAa,EACzDD,EAAaznB,KAAKmS,WAAWtL,SAAW,EAAK8gB,EAAc,EAEvDpW,EAAM+P,SACNkG,GAAa5E,QACb6E,GAAa5E,UAGI,iBAAdpM,GAEP+Q,EAAYxnB,KAAKmS,WAAW/L,QAAUshB,EACtCD,EAAaznB,KAAKmS,WAAWtL,SAAW,EAAK8gB,EAAc,EAEvDpW,EAAM+P,QACNkG,IAAc5E,QACd6E,GAAa5E,SAEb2E,IAAc,IAGG,gBAAd/Q,GAEP+Q,EAAY,EACZC,EAAYznB,KAAKmS,WAAWtL,SAAW8gB,EAEnCpW,EAAM+P,QACNkG,GAAa5E,QACb6E,IAAc5E,UAEd2E,GAAa,GACbC,IAAc,KAGG,kBAAdhR,GAEP+Q,EAAaxnB,KAAKmS,WAAW/L,QAAU,EAAKshB,EAAa,EACzDD,EAAYznB,KAAKmS,WAAWtL,SAAW8gB,EAEnCpW,EAAM+P,QACNkG,GAAa5E,QACb6E,IAAc5E,SAEd4E,IAAc,IAGG,iBAAdhR,IAEP+Q,EAAYxnB,KAAKmS,WAAW/L,QAAUshB,EACtCD,EAAYznB,KAAKmS,WAAWtL,SAAW8gB,EAEnCpW,EAAM+P,QACNkG,IAAc5E,QACd6E,IAAc5E,UAEd2E,IAAc,GACdC,IAAc,MAMtBD,EAAYX,EACZY,EAAYX,GAGhBvV,EAAMwE,IAAIrC,IAAI,CACV+E,SAAU,WACV/R,IAAK,MACLJ,KAAM,MACNqN,UAAW,eAAe6T,EAAU,OAAOC,EAAU,WACrD3O,cAAe,cAGnB9Y,KAAKiV,IAAI,gBAAgByS,EAAW,MACpC1nB,KAAKiV,IAAI,iBAAiB0S,EAAY,MACtC3nB,KAAKiV,IAAI,qBAAqBuS,EAAU,MACxCxnB,KAAKiV,IAAI,qBAAqBwS,EAAU,SAI5CxQ,KAAA,SAAK1F,GAAO,IAAAuF,EAAA9W,KAERA,KAAKmS,WAAWuF,OAAOnG,EAAMwE,KAC7B/V,KAAK6V,WAAWtE,GAChBvR,KAAKkX,YAAY3F,GAEbA,EAAM8E,WAEN9E,EAAMwE,IAAI7F,SAAS,QACnBqB,EAAM+V,OAAOpX,SAASqB,EAAMiF,gBAC5BjF,EAAM+V,OAAOxX,WAAWyB,EAAM+E,cAI9B/E,EAAMwE,IAAI7F,SAAS,QAGnBqB,EAAMwV,SAENpnB,WAAW,WACPmX,EAAKE,MAAMzF,IACI,IAAhBA,EAAMwV,SAGb/mB,KAAK8U,OAAOvD,MAIhByF,MAAA,SAAMzF,GAAO,IAAA8H,EAAArZ,KAELuR,EAAM8E,YAAc9E,EAAM+V,OAAO5V,SAAS,aAE1CH,EAAMwE,IAAI3F,YAAY,QACtBmB,EAAM+V,OAAOxX,WAAWyB,EAAMgF,aAAc,WAExChF,EAAMwE,IAAIjY,SAEVub,EAAK+M,OAASzW,EAAE0Q,KAAKhH,EAAK+M,OAAQ,SAAS5T,GACvC,OAAOA,EAAKoU,MAAQrV,EAAMqV,OAG9BvN,EAAKoN,eACLpN,EAAKtE,QAAQxD,OAKjBA,EAAMwE,IAAIjY,SAEVkC,KAAKomB,OAASzW,EAAE0Q,KAAKrgB,KAAKomB,OAAQ,SAAS5T,GACvC,OAAOA,EAAKoU,MAAQrV,EAAMqV,OAG9B5mB,KAAKymB,eACLzmB,KAAK+U,QAAQxD,OAKrBgV,aAAA,WAEI,IAAIA,EAAevmB,KAAKumB,aAEI,mBAAjBA,GAEPA,EAAa1oB,KAAKmC,KAAKiW,cAK/BpB,UAAA,WAEI,IAAIA,EAAY7U,KAAK6U,UAEI,mBAAdA,GAEPA,EAAUhX,KAAKmC,KAAKiW,cAK5BtB,OAAA,SAAOpD,GAEH,IAAIoD,EAASpD,EAAMoD,OAEG,mBAAXA,GAEPA,EAAO9W,KAAK0T,MAKpBuD,OAAA,SAAOvD,GAEH,IAAIuD,EAASvD,EAAMuD,OAEG,mBAAXA,GAEPA,EAAOjX,KAAK0T,MAKpBwD,QAAA,SAAQxD,GAEJ,IAAIwD,EAAUxD,EAAMwD,QAEG,mBAAZA,GAEPA,EAAQlX,KAAK0T,MAKrB0D,IAAA,WAMe,IAAAC,EAJPlV,KAAKmV,QAEqB,mBAAfnV,KAAKmV,MACZnV,KAAKmV,MAALb,MAAAtU,KAAAoU,YAEAc,EAAAE,SAAQH,IAARX,MAAAY,EAAAd,eAMZiT,gBAAA,SAAgB9V,GAEZ,IAGIqW,EAHAlJ,EAAc1e,KAAKwb,MAAQ,MAAQ,MACnC5E,EAAU,GACVqQ,EAAS,GAETY,EAAe,GA6CnB,OAzCIjR,EAFyB,mBAAlBrF,EAAMqF,QAEHrF,EAAMqF,UAINrF,EAAMqF,QAGhBrF,EAAM0V,OAENA,EAAM,6EAGU1V,EAAMoF,MAHhB,6GAMkB+H,EANlB,8FAcNmJ,EAAY,8FAGQnJ,EAHR,kEAShBkJ,EAAI,mEAGYhR,EAHZ,4BAIMiR,EAJN,mCASJ,yCAC8BtW,EAAMyV,KADpC,UACkDzV,EAAM2V,MADxD,sBACmF3V,EAAMqV,KADzF,0EAKcK,EALd,yBAMcW,EANd,gEAcGtO,iBAAP,SAAwBC,GAEpB,OAAOvZ,KAAK+R,KAAK,WAEb,IAAIO,EAAO3C,EAAE3P,MAAMsS,KAjgBd,oBAygBL,GALKA,IACDA,EAAO,IAAI6T,EAAMnmB,KAHa,iBAAXuZ,GAAuBA,GAI1C5J,EAAE3P,MAAMsS,KAtgBP,mBAsgBsBA,IAGL,iBAAXiH,EAAqB,CAE5B,GAA4B,oBAAjBjH,EAAKiH,GACZ,MAAM,IAAIC,UAAJ,oBAAkCD,EAAlC,KAGVjH,EAAKiH,cAMrB,GAAiB,oBAAN5J,EAAmB,CAAA,IAAAmY,EAGpBrO,EAAqB9J,EAAEC,GAAGyF,GAEhC1F,EAAEC,GAAGyF,GAAQ8Q,EAAM7M,iBACnB3J,EAAEC,GAAGyF,GAAMqE,YAAcyM,EAEzBxW,EAAEC,GAAGyF,GAAMsE,WAAa,WAItB,OAFAhK,EAAEC,GAAGyF,GAAQoE,EAEN0M,EAAM7M,kBAGf3J,EAAEC,GAAGyF,GAAMK,WAAXoS,EAAA,CACInR,MAAO,GACPC,QAAS,GACTuQ,SAAU,GACVD,MAAO,OACPzQ,UAAW,gBACXoQ,WAAY,KACZC,WAAY,KACZzQ,WAAW,EACXC,YAAa,YACbC,aAAc,eACdC,eAAgB,SAChB8K,OAAQ,KACR0F,KAAM,KACND,QAAS,EACTE,QAAQ,EACRzL,OAAO,EACPrG,OAAO,EACPoR,aAAc,KACd1R,UAAW,KACXF,OAAQ,OApBZ,UAqBe,KArBfmT,EAsBIhT,OAAQ,KAtBZgT,EAuBI/S,QAAS,KAvBb+S,GCtiBJ,IAAMzS,EAAO,aAGP0S,cAEF,SAAAA,EAAY9R,EAAWxF,GAEnBzQ,KAAKH,SAAW,GAEZ2B,OAAO8O,KAAKzQ,SAAS4R,OAErB9B,EAAEE,QAAO,EAAM7P,KAAKH,SAAU8P,EAAEC,GAAGyF,GAAMK,SAAUlU,OAAO8O,KAAKzQ,SAAS4R,OAAQhB,GAIhFd,EAAEE,QAAO,EAAM7P,KAAKH,SAAU8P,EAAEC,GAAGyF,GAAMK,SAAUjF,GAGvDzQ,KAAKiW,UAAYA,EACjBjW,KAAKmS,WAAaxC,EAAE3P,KAAKiW,WACzBjW,KAAKmV,MAAQnV,KAAKH,SAASsV,MAC3BnV,KAAKwb,MAAQxb,KAAKH,SAAS2b,MAC3Bxb,KAAKgoB,QAAU,GACfhoB,KAAKumB,aAAevmB,KAAKH,SAAS0mB,aAClCvmB,KAAK6U,UAAY7U,KAAKH,SAASgV,qCAInCc,KAAA,SAAKlF,GAED,IAAI5Q,EAAW,GAEf8P,EAAEE,QAAO,EAAMhQ,EAAUG,KAAKH,SAAU4Q,GAExC,IAAIgB,EAASzR,KAAKioB,YAAYpoB,GAM9B,OAJAG,KAAKiX,KAAKxF,GACVzR,KAAK6V,WAAWpE,GAChBzR,KAAK2U,OAAOlD,GAELA,KAIXjC,QAAA,WAEIxP,KAAKmS,WAAW6D,WA7CP,qBA8CThW,KAAK6U,eAIToT,YAAA,SAAYpoB,GAER,IAAI0b,EAAOvb,KACPyR,EAAS,CACTmV,KAAM,UAAU5mB,KAAKoW,eACrBO,MAAO9W,EAAS8W,MAChBwQ,SAAUtnB,EAASsnB,SACnBS,KAAM/nB,EAAS+nB,KACfM,OAAQroB,EAASqoB,OACjBlB,KAAMnnB,EAASmnB,KACfmB,QAAStoB,EAASsoB,QAClBC,SAAUvoB,EAASuoB,SACnBC,SAAUxoB,EAASwoB,SACnBC,cAAezoB,EAASyoB,cACxBC,SAAU1oB,EAAS0oB,SACnBlS,UAAWxW,EAASwW,UACpBC,YAAazW,EAASyW,YACtBC,aAAc1W,EAAS0W,aACvBC,eAAgB3W,EAAS2W,eACzBgS,UAAW3oB,EAAS2oB,UACpBpB,cAAevnB,EAASunB,cACxBqB,gBAAiB5oB,EAAS4oB,gBAC1BC,QAAS7oB,EAAS6oB,QAClB/T,OAAQ9U,EAAS8U,OACjBG,OAAQjV,EAASiV,OACjBC,QAASlV,EAASkV,SA4BtB,OAzB4B,MAAxBtD,EAAO2V,gBAEP3V,EAAO2V,cAAgB5lB,OAAO0W,YAAc,KAGjB,mBAApBzG,EAAO0V,SAEd1V,EAAOsE,IAAMpG,EAAE8B,EAAO0V,YAItB1V,EAAOsE,IAAMpG,EAAE3P,KAAKqnB,gBAAgB5V,IAGxCA,EAAOwF,KAAO,WACVsE,EAAKtE,KAAKxF,IAGdA,EAAOuF,MAAQ,WACXuE,EAAKvE,MAAMvF,IAGfzR,KAAKiV,IAAIxD,GACTzR,KAAKgoB,QAAQxnB,KAAKiR,GAEXA,KAIXoE,WAAA,SAAWpE,GAEP,IAAI8J,EAAOvb,KAEXyR,EAAOsE,IAAI1F,GAAG,QAAS,sBAAuB,SAAUnO,GAEpDuP,EAAOsE,IAAI7D,QAAQ,gBAEmB,mBAA3BT,EAAO+W,UAAUxR,MAExBvF,EAAO+W,UAAUxR,MAAMnZ,KAAK0d,EAAM,WAC9BA,EAAKvE,MAAMvF,IACZA,GAIH8J,EAAKvE,MAAMvF,KAInBA,EAAOsE,IAAI1F,GAAG,QAAS,uBAAwB,SAAUnO,GAErDuP,EAAOsE,IAAI7D,QAAQ,iBAEoB,mBAA5BT,EAAO+W,UAAU1qB,QAExB2T,EAAO+W,UAAU1qB,OAAOD,KAAK0d,EAAM,WAC/BA,EAAKvE,MAAMvF,IACZA,KAIXA,EAAOsE,IAAI1F,GAAG,QAAS,wBAAyBwD,EAAS,SAAU3R,GAE/DuP,EAAOsE,IAAI7D,QAAQ,gBAEqB,mBAA7BT,EAAO+W,UAAUG,QAExBlX,EAAO+W,UAAUG,QAAQ9qB,KAAK0d,EAAM,WAChCA,EAAKvE,MAAMvF,IACZA,GAIH8J,EAAKvE,MAAMvF,SAMvB2E,aAAA,WAEI,MAAO,uCAAuCgB,QAAQ,QAAS,SAASC,GACpE,IAAIC,EAAoB,GAAhBlT,KAAKmT,SAAgB,EAC7B,OADyC,KAALF,EAAWC,EAAS,EAAJA,EAAU,GACrDE,SAAS,SAK1BP,KAAA,SAAKxF,GAAQ,IAAA+D,EAAAxV,KAUT,GARKA,KAAKmS,WAAWT,SAAS,gBAC1B1R,KAAKmS,WAAWjC,SAAS,eAGzBuB,EAAO6W,gBAAkBtoB,KAAKmS,WAAWT,SAAS,0BAClD1R,KAAKmS,WAAWjC,SAAS,yBAGzBlQ,KAAKgoB,QAAQ7mB,OAAS,EAAG,CAEzB,IAAIynB,EAAcjZ,EAAE3P,KAAKgoB,SAASa,IAAI,GAAG,GAAG9S,IACxC+S,EAASxlB,SAASslB,EAAYlV,IAAI,WAAY,IAAM,EAExDjC,EAAOsE,IAAIrC,IAAI,UAAWoV,GAE1BF,EAAYlV,IAAI,CACZuS,WAAc,eACd8C,QAAW,EACXC,WAAc,YAItB,GAAIvX,EAAO4W,UAAY1Y,EAAE,oBAAoBxO,OAAS,EAAG,CAErDnB,KAAKmS,WAAWuF,OAAO,uCAEvB,IAAIuR,EAAmBxb,YAAY,WAEJ,GAAvB+H,EAAKwS,QAAQ7mB,QAAewO,EAAE,oBAAoBxO,SAElDwO,EAAE,oBAAoB7R,SACtBmP,cAAcgc,KAGnB,KAGPjpB,KAAKmS,WAAWuF,OAAOjG,EAAOsE,KAE1BtE,EAAO4E,WACP5E,EAAOsE,IAAI9D,KAAK,mBAAmB/B,SAASuB,EAAO+E,gBAAgB1G,WAAW2B,EAAO6E,aAGzFtW,KAAK8U,OAAOrD,MAIhBuF,MAAA,SAAMvF,GAAQ,IAAAqF,EAAA9W,KAEN4oB,EAAc,KAEd5oB,KAAKgoB,QAAQ7mB,OAAS,IACtBynB,EAAcjZ,EAAE3P,KAAKgoB,SAASa,IAAI,GAAG,GAAG9S,KAGa,IAArDpG,EAAE,wCAAwCxO,QAAgBwO,EAAE,oBAAoBxO,QAChFwO,EAAE,oBAAoB7R,SAGtB2T,EAAO4E,UAEP5E,EAAOsE,IAAI9D,KAAK,mBAAmBnC,WAAW2B,EAAO8E,aAAc,WAE/D9E,EAAOsE,IAAIjY,SAEXgZ,EAAKkR,QAAUrY,EAAE0Q,KAAKvJ,EAAKkR,QAAS,SAASxV,GACzC,OAAOA,EAAKoU,MAAQnV,EAAOmV,OAGJ,GAAvB9P,EAAKkR,QAAQ7mB,QAEb2V,EAAK3E,WAAW/B,YAAY,eAExB0G,EAAK3E,WAAWT,SAAS,0BACzBoF,EAAK3E,WAAW/B,YAAY,0BAK5BwY,GACAA,EAAYlV,IAAI,UAAW,MAOvCjC,EAAOsE,IAAIjY,SAEXkC,KAAKgoB,QAAUrY,EAAE0Q,KAAKrgB,KAAKgoB,QAAS,SAASxV,GACzC,OAAOA,EAAKoU,MAAQnV,EAAOmV,OAGJ,GAAvB5mB,KAAKgoB,QAAQ7mB,QAEbnB,KAAKmS,WAAW/B,YAAY,eAExBpQ,KAAKmS,WAAWT,SAAS,0BACzB1R,KAAKmS,WAAW/B,YAAY,0BAK5BwY,GACAA,EAAYlV,IAAI,UAAW,IAKvC1T,KAAK+U,QAAQtD,MAIjB8U,aAAA,WAEI,IAAIA,EAAevmB,KAAKumB,aAEI,mBAAjBA,GAEPA,EAAa1oB,KAAKmC,KAAKiW,cAK/BpB,UAAA,WAEI,IAAIA,EAAY7U,KAAK6U,UAEI,mBAAdA,GAEPA,EAAUhX,KAAKmC,KAAKiW,cAK5BtB,OAAA,SAAOlD,GAEH,IAAIkD,EAASlD,EAAOkD,OAEE,mBAAXA,GAEPA,EAAO9W,KAAK4T,MAKpBqD,OAAA,SAAOrD,GAEH,IAAIqD,EAASrD,EAAOqD,OAEE,mBAAXA,GAEPA,EAAOjX,KAAK4T,MAKpBsD,QAAA,SAAQtD,GAEJ,IAAIsD,EAAUtD,EAAOsD,QAEE,mBAAZA,GAEPA,EAAQlX,KAAK4T,MAKrBwD,IAAA,WAMe,IAAAC,EAJPlV,KAAKmV,QAEqB,mBAAfnV,KAAKmV,MACZnV,KAAKmV,MAALb,MAAAtU,KAAAoU,YAEAc,EAAAE,SAAQH,IAARX,MAAAY,EAAAd,eAMZ8I,cAAA,SAAczL,GAEV,IAAIyW,EAAS,GAEb,GAA6B,mBAAlBzW,EAAOyW,OAEdA,EAASzW,EAAOyW,cAEb,GAAsB,KAAlBzW,EAAOyW,SAAmC,IAAlBzW,EAAOyW,SAAsC,IAAlBzW,EAAOyW,OAEjEA,EAASzW,EAAOyW,WAEb,CAAA,IAAsB,IAAlBzW,EAAOyW,OAqDd,OAAOA,EAnDP,IAAIgB,EAAY,GACZC,EAAY,GACZC,EAAa,GAKb3X,EAAOiX,QAAQ1R,MAAMqS,UAKrBH,EAAS,2DAHEzX,EAAOiX,QAAQ1R,MAAMsS,QAAU,cAAgB,kBAC7C7X,EAAOiX,QAAQ1R,MAAMmR,QAAU,IAAI1W,EAAOiX,QAAQ1R,MAAMmR,QAAU,IAEtE,KADE1W,EAAOiX,QAAQ1R,MAAMuS,MAAQ,IAAI9X,EAAOiX,QAAQ1R,MAAMuS,MAAQ,IAChE,gDAEC9X,EAAOiX,QAAQ1R,MAAMJ,QAFtB,qDAOTnF,EAAOiX,QAAQ5qB,OAAOurB,UAKtBF,EAAS,2DAHE1X,EAAOiX,QAAQ5qB,OAAOwrB,QAAU,cAAgB,kBAC9C7X,EAAOiX,QAAQ5qB,OAAOqqB,QAAU,IAAI1W,EAAOiX,QAAQ5qB,OAAOqqB,QAAU,IAExE,KADE1W,EAAOiX,QAAQ5qB,OAAOyrB,MAAQ,IAAI9X,EAAOiX,QAAQ5qB,OAAOyrB,MAAQ,IAClE,iDAEC9X,EAAOiX,QAAQ5qB,OAAO8Y,QAFvB,qDAOTnF,EAAOiX,QAAQC,QAAQU,UAKvBD,EAAU,2DAHC3X,EAAOiX,QAAQC,QAAQW,QAAU,cAAgB,kBAC/C7X,EAAOiX,QAAQC,QAAQR,QAAU,IAAI1W,EAAOiX,QAAQC,QAAQR,QAAU,IAEzE,KADC1W,EAAOiX,QAAQC,QAAQY,MAAQ,IAAI9X,EAAOiX,QAAQC,QAAQY,MAAQ,IACnE,kDAEA9X,EAAOiX,QAAQC,QAAQ/R,QAFvB,qDAOdsR,EAAM,qBACAgB,EADA,qBAEAC,EAFA,qBAGAC,EAHA,iBAWV,GAAIlB,EAEA,MAAA,sEAEUA,EAFV,4CASRb,gBAAA,SAAgB5V,GAEZ,IAAIiN,EAAc1e,KAAKwb,MAAQ,MAAQ,MACnC2M,EAAU1W,EAAO0W,QAAU,IAAI1W,EAAO0W,QAAU,GAChDC,EAAW3W,EAAO2W,SAAW,mBAAqB,GAClDpB,EAAOvV,EAAOuV,KAAO,WAAWvV,EAAOuV,KAAO,GAC9CwC,EAAkB/X,EAAOgX,gBAAkB,2BAA6B,GACxE7B,EAAO,sBAAsBnV,EAAOmV,KAAK,IACzCyB,EAAW5W,EAAO4W,SAAW,+BAAiC,gCAC9D1R,EAAQlF,EAAOkF,MACf4R,EAAW9W,EAAO8W,SAAP,qDAAuE7J,EAAvE,gCAAoH,GAC/H0I,EAAgB3V,EAAO2V,cAAgB,uBAAuB3V,EAAO2V,cAAc,MAAQ,GAE3Fc,EAASloB,KAAKkd,cAAczL,GAWhC,MAAA,mCACwB0W,EAAUC,EAAWpB,EAAOwC,EADpD,IACuE5C,EAAOyB,EAD9E,8PAU0B1R,EAV1B,wEAasB4R,EAbtB,yFAiB0CnB,EAjB1C,qCAT2B,mBAAhB3V,EAAOmW,KAEPnW,EAAOmW,OAIPnW,EAAOmW,MAGlB,iEAuBkBM,EAvBlB,8FAiCG5O,iBAAP,SAAwBC,GAEpB,IAAIjH,EAAO3C,EAAE3P,MAAMsS,KAveV,qBA+eT,GALKA,IACDA,EAAO,IAAIyV,EAAO/nB,KAHY,iBAAXuZ,GAAuBA,GAI1C5J,EAAE3P,MAAMsS,KA5eH,oBA4ekBA,IAGL,iBAAXiH,EAAqB,CAE5B,GAA4B,oBAAjBjH,EAAKiH,GACZ,MAAM,IAAIC,UAAJ,oBAAkCD,EAAlC,KAGVjH,EAAKiH,YAKjB,GAAiB,oBAAN5J,EAAmB,CAAA,IAAA8Z,GAGpBhQ,GAAqB9J,EAAEC,GAAGyF,GAEhC1F,EAAEC,GAAGyF,GAAQ0S,GAAOzO,iBACpB3J,EAAEC,GAAGyF,GAAMqE,YAAcqO,GAEzBpY,EAAEC,GAAGyF,GAAMsE,WAAa,WAItB,OAFAhK,EAAEC,GAAGyF,GAAQoE,GAENsO,GAAOzO,kBAGhB3J,EAAEC,GAAGyF,GAAMK,WAAX+T,GAAA,CACI9S,MAAO,GACPwQ,SAAU,GACVS,KAAM,GACNM,QAAQ,EACRlB,KAAM,GACNmB,QAAS,GACTC,UAAU,EACVC,UAAU,EACVC,eAAe,EACfC,UAAU,EACVlS,WAAW,EACXC,YAAa,SACbC,aAAc,UACdC,eAAgB,UAChBgS,UAAW,GACXpB,cAAe,KACfqB,iBAAiB,EACjBjN,OAAO,EACPrG,OAAO,EACPoR,aAAc,KACd1R,UAAW,KACXF,OAAQ,OAtBZ,UAuBe,KAvBf8U,GAwBI3U,OAAQ,KAxBZ2U,GAyBI1U,QAAS,KAzBb0U,GA0BIf,QAAS,CACL1R,MAAO,CACHsS,SAAS,EACTD,SAAS,EACTzS,QAAS,QACTuR,QAAS,GACToB,MAAO,IAEXzrB,OAAQ,CACJwrB,SAAS,EACTD,SAAS,EACTzS,QAAS,SACTuR,QAAS,GACToB,MAAO,IAEXZ,QAAS,CACLW,SAAS,EACTD,SAAS,EACTzS,QAAS,UACTuR,QAAS,GACToB,MAAO,KA9CnBE,UCngBW,CACdlZ,OAAAA,EACAgF,QAAAA,EACAqE,OAAAA,EACAyH,SAAAA,EACAmC,QAAAA,EACAe,YAAAA,EACAiB,SAAAA,EACAW,MAAAA,EACA4B,OAAAA","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\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 // Custom Form group\n $('.form-label-group').each(function(i, formLabelGroup) {\n\n let $formLabelGroup = $(formLabelGroup);\n\n $formLabelGroup.find('input').on('blur input change', function () {\n\n let val = $(this).val();\n\n if (val) {\n $(formLabelGroup).addClass('label-on-top');\n } else {\n $(formLabelGroup).removeClass('label-on-top');\n }\n\n }).trigger('change');\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]', function(e) {\n\n let $container = $(this).parents('table, .table');\n let href = $(this).data('tableLink');\n let target = $(e.target);\n let exceptions = ['input', 'button', 'a', 'label', 'td.col-select'];\n let linkDisabled = false;\n\n $.each(exceptions, function(item) {\n\n if (target.is(item) || (item == 'a' && target.parent().is(item))) {\n linkDisabled = true;\n }\n });\n\n if ($container.hasClass('bulk-actions-active')) {\n linkDisabled = true;\n }\n\n if (target.hasClass('table-link-exclude')) {\n linkDisabled = true;\n }\n\n if (target.is('td, .td, img') && !linkDisabled) {\n\n if (e.ctrlKey || e.metaKey) {\n\n window.open(href, '_blank');\n\n } else {\n\n window.location.href = href;\n }\n\n } else {\n\n return;\n }\n });\n\n $(document).on('click', '[data-table-btn]', function(e) {\n\n let $container = $(this).parents('table, .table');\n let $self = $(this);\n let btn = $(this).data('tableButton');\n let target = $(e.target);\n let exceptions = ['input', 'button', 'a', 'label', 'td.col-select'];\n let btnDisabled = false;\n\n if (!btn) {\n\n btn = $self.find('button')[0];\n\n if (!btn) {\n return;\n }\n }\n\n $.each(exceptions, function(item) {\n\n if (target.is(item) || (item == 'a' && target.parent().is(item))) {\n btnDisabled = true;\n }\n });\n\n if ($container.hasClass('bulk-actions-active')) {\n btnDisabled = true;\n }\n\n if (target.hasClass('table-btn-exclude')) {\n btnDisabled = true;\n }\n\n if (target.is('td, .td, img') && !btnDisabled) {\n\n $(btn).click();\n\n } else {\n\n return;\n }\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\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() {\n\n setTimeout(() => {\n sidebarLeftScroll.update();\n }, 300);\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;\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, () => {\n\n this.close();\n });\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 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\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.css('cursor', 'default');\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\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.css('cursor', 'default');\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-green 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-green 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-secondary\" 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.expanded = this.$el.attr('aria-expanded') == 'true' ? true : false;\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\n this.$el.on('click'+'.'+this.name, (e) => {\n\n if (this.expanded) {\n this.close();\n } else {\n this.show();\n }\n });\n\n $(window).on('resize', debounce(() => {\n\n if (this.$target.length) {\n\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 // 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.one(this.whichTransitionEvent(), () => {\n\n this.$target.removeClass('collapsing');\n\n if (this.$el.is('button')) {\n this.$el.attr('disabled', false);\n }\n\n this.$target.removeAttr('style');\n this.$target.addClass('collapse show');\n this.$el.attr('aria-expanded', true);\n this.$target.css('height', 'auto');\n this.expanded = true;\n });\n\n this.onShow();\n }\n\n // Close\n close() {\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.one(this.whichTransitionEvent(), () => {\n\n this.$target.removeClass('collapsing');\n\n if (this.$el.is('button')) {\n this.$el.attr('disabled', false);\n }\n\n this.$target.removeAttr('style');\n this.$target.addClass('collapse');\n this.$el.attr('aria-expanded', false);\n this.expanded = false;\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\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 = dialog.actions.remove.primary ? 'btn-primary' : 'btn-secondary';\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 ${btnCancel}\n ${btnRemove}\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":["Component","initializeElement","selector","options","el","document","querySelector","$el","$","data","this","NAME","instance","instances","push","initializeElements","_this","querySelectorAll","forEach","_proto","prototype","onInit","opts","call","onUpdate","onDestroy","onShow","onClose","onReset","Section","_Component","window","Cool","settings","section","extend","DEFAULTS","_eventHandlers","_updateTimeout","_rafId","init","_inheritsLoose","observeSections","initializeSectionObserver","initFormControls","initializeFormControls","initTableHandlers","initializeTableHandlers","initButtonGroups","initializeButtonGroups","initTabs","initializeTabs","destroy","destroySectionObserver","unbindEvents","clearTimeout","cancelAnimationFrame","_addEventListener","element","event","handler","addEventListener","_this2","_isUpdating","sectionObserver","MutationObserver","mutations","every","mutation","type","attributeName","target","oldClasses","oldValue","split","newClasses","Array","from","classList","addedClasses","filter","c","includes","removedClasses","concat","setTimeout","requestAnimationFrame","updateLastVisibleElements","observe","body","attributes","childList","subtree","attributeFilter","attributeOldValue","subtreeFilter","node","contains","nodeName","_this3","updates","sections","tables","rows","visibleChildren","getVisibleChildren","length","lastVisible","table","tbody","visibleRows","getVisibleElements","lastVisibleRow","row","visibleCells","lastVisibleCell","remove","_ref","add","_ref2","_ref3","parent","_this4","children","isElementVisible","elements","_this5","_computedStyle","_styleInvalidated","getComputedStyle","offsetParent","offsetHeight","display","disconnect","e","formControl","closest","disabled","readOnly","inputGroup","updateFormLabelGroup","formLabelGroup","input","hasValue","value","toggle","matches","blur","stopPropagation","tableLink","container","href","dataset","ctrlKey","metaKey","open","location","tableBtn","btn","click","btnGroupToggle","dispatchEvent","Event","bubbles","btnGroup","parentElement","b","_b$querySelector","checked","tabItem","item","_ref4","removeEventListener","refresh","val","get","set","obj","key","style","div","className","createElement","elMatches","Element","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","query","Error","parentNode","removeChild","queryChildren","child","cls","thumb","x","rail","consuming","focus","clicking","active","scrolling","scrollingClassTimeout","y","addScrollingClass","i","removeScrollingClass","isAlive","scrollingThreshold","EventElement","handlers","prototypeAccessors","isEmpty","configurable","bind","eventName","unbind","this$1","unbindAll","name","Object","keys","defineProperties","EventManager","eventElements","createEvent","CustomEvent","evt","initCustomEvent","undefined","processScrollDiff","axis","diff","useScrollingClass","forceFireReachEvent","fields","ref","contentHeight","containerHeight","scrollTop","up","down","reach","setScrollingClassInstantly","processScrollDiff$1","toInt","parseInt","eventElement","ee","splice","indexOf","once","onceHandler","env","isWebKit","documentElement","supportsTouch","navigator","maxTouchPoints","DocumentTouch","supportsIePointer","msMaxTouchPoints","isChrome","test","userAgent","updateGeometry","roundedScrollTop","Math","floor","rect","getBoundingClientRect","containerWidth","width","height","contentWidth","scrollWidth","scrollHeight","scrollbarXRail","appendChild","scrollbarYRail","suppressScrollX","scrollXMarginOffset","scrollbarXActive","railXWidth","railXMarginWidth","railXRatio","scrollbarXWidth","getThumbSize","scrollbarXLeft","negativeScrollAdjustment","scrollLeft","suppressScrollY","scrollYMarginOffset","scrollbarYActive","railYHeight","railYMarginHeight","railYRatio","scrollbarYHeight","scrollbarYTop","xRailOffset","isRtl","left","isScrollbarXUsingBottom","bottom","scrollbarXBottom","top","scrollbarXTop","yRailOffset","isScrollbarYUsingRight","right","scrollbarYRight","scrollbarYOuterWidth","scrollbarYLeft","scrollbarX","railBorderXWidth","scrollbarY","railBorderYWidth","updateCss","thumbSize","minScrollbarLength","max","maxScrollbarLength","min","activeSlider","bindMouseScrollHandler","containerDimension","contentDimension","pageAxis","railDimension","scrollbarAxis","scrollbarDimension","scrollAxis","scrollbarRail","startingScrollPosition","startingMousePagePosition","scrollBy","moveHandler","touches","toUpperCase","preventDefault","endHandler","bindMoves","passive","cancelable","direction","pageY","pageYOffset","pageX","pageXOffset","keyboard","ownerDocument","isDefaultPrevented","defaultPrevented","activeElement","tagName","contentDocument","shadowRoot","deltaX","deltaY","which","altKey","shiftKey","wheelPropagation","shouldPreventDefault","wheel","mousewheelHandler","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","getDeltaFromEvent","cursor","overflowY","match","maxScrollTop","clientHeight","overflowX","maxScrollLeft","clientWidth","shouldBeConsumedByChild","shouldPrevent","useBothWheelAxes","wheelSpeed","isTop","isBottom","isLeft","isRight","offsetWidth","abs","onwheel","onmousewheel","touch","state","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","result","originalScrollLeft","isNegativeScroll","setAttribute","railXStyle","isNaN","borderLeftWidth","borderRightWidth","marginLeft","marginRight","railYStyle","styles","paddingLeft","paddingRight","outerWidth","borderTopWidth","borderBottomWidth","marginTop","marginBottom","handlerName","lastScrollTop","lastScrollLeft","onScroll","update","removePsClasses","join","Sidebar","sidebar","buildCache","bindEvents","initializeScrollbars","destroyScrollbars","$content","find","content","$toggler","toggler","isFloating","hasClass","isOpen","$tabs","$tabSelectors","resizeTimeout","_toggleHandler","handleToggle","_mousedownHandler","sidebarContent","mousedownScrollbar","_mouseupHandler","_tabSelectHandler","switchTab","_collapseClickHandler","collapseToggle","breakpoint","matchMedia","_collapseToggle$nextE","_collapseToggle$paren","linkElement","nextElementSibling","_this2$scrollbar","scrollbar","ResizeObserver","resizeObserver","entries","rafId","innerWidth","removeBackdrop","_resizeHandler","now","performance","lastResizeTime","tabScrollbars","Map","each","index","tab","scrollContainer","ps","clear","toggleWithTransition","action","html","createBackdrop","backdrop","ariaExpanded","siteMainEl","isCurrentlyOpen","tabId","activeTab","getElementById","sidebarTabs","toArray","tabContent","transform","isBeforeActive","activeTabContent","toggleClass","close","floating","ResizeManager","handleWindowResize","windowCallbacks","callback","contentRect","innerHeight","callbacks","WeakMap","observer","Set","isWindowListening","entry","startWindowListening","unobserve","delete","size","stopWindowListening","ScrollManager","handleScroll","isListening","_proto2","id","startListening","stopListening","contentElement","scrollElement","resizeManager","scrollManager","debounce","func","wait","immediate","timeout","context","args","arguments","apply","touchEvents","generateUUID","replace","r","random","toString","playAnimation","animationClass","domEl","jquery","Promise","resolve","_domEl$classList","classes","onEnd","_domEl$classList2","escapeChar","chr","escape","string","String","Popover","popover","fn","constructor","defaults","_jQueryInterface","config","_jQueryInit","previousName","Constructor","noConflict","$popover","removeData","setPosition","$container","containerAutoDetect","trigger","placement","align","title","offset","collisionDetection","on","show","hoverTimeout","popupHasFocus","_resizeCallback","off","buildPopover","append","triggerPosX","triggerPosY","viewportWidth","viewportHeight","popoverWidth","popoverHeight","outerHeight","triggerWidth","triggerHeight","containerOffset","triggerOffset","popoverPosX","popoverPosY","offsetX","offsetY","offsets","computedStyle","spacing","getPropertyValue","calculatePosition","currentPlacement","currentAlign","finalPlacement","finalAlign","position","checkCollision","pos","collision","popoverScreenLeft","popoverScreenTop","popoverScreenRight","popoverScreenBottom","newCollision","finalCollision","css","round","attr","addClass","removeAttr","Select","select","useChips","cachedTitle","lastSearchQuery","_scrollCallback","buildScroll","updatePromise","searchApi","_performInitialSearch","then","reset","items","$select","$selectItems","$selectIconContainer","selectIconDefault","$selectHeader","removeClass","dynamicTitle","$selectTitle","text","dynamicTitleDefault","trim","dynamicTitleEmptyDefault","showSearch","searchData","$searchInput","searchString","search","$searchIconContainer","faPro","scroll","scrollContentHeight","useNativeScroll","searchRequest","contentOpen","searchPlaceholder","btnCloseText","labelTemplate","confirmCheck","confirmUncheck","preventUncheck","allowNoneOnRadioSelect","showValidStateIcon","itemsToExclude","primaryKeyword","preventClose","map","setData","isArray","arr","_renderChips","showFooter","selectItems","_renderItemList","_renderSearch","_renderFooter","values","_","$input","prop","$checkedInput","$scrollableContent","$searchContainer","$clearSearchButton","tabIndex","$footerContainer","$closeButton","buildSearchData","_updateScrollbarVisibility","isSearchApiEnabled","_showSpinner","reject","ajax","method","url","success","dataItem","matchingItem","label","empty","$chip","valueId","_hideSpinner","_recalculateContentHeight","error","xhr","status","console","totalMargin","actualContentHeight","finalHeight","_this6","selectLabels","_this7","self","closeTimeout","cb","_self$data$self$name$","onSelect","_self$data$self$name$2","n","not","mousedown","mouseup","is","has","getData","_this8","faNameSpace","searchUrl","itemCount","currentCount","encodeURIComponent","done","itemIds","useObjects","findIndex","$inputs","inputValues","_this9","_this0","abort","_searchDebounceTimer","parents","searchStringLower","toLowerCase","results","_this1","$selectContent","headerHeight","searchHeight","footerHeight","scrollableHeight","scrollableClientHeight","shouldOpenUpwards","selectTop","constrainedHeight","contentMarginBottom","contentMarginTop","spaceBelow","spaceAbove","scrollableMaxHeight","_this10","$otherSelects","zindex","first","contentRequiredWidth","scrollIntoView","behavior","block","inline","_this$data$this$name$","_this11","isEmptyObject","grep","getItem","getSelectedItems","segment","_this12","ids","getSelectedItem","_this13","checkedItems","createDocumentFragment","resultItems","isChecked","$item","_getItemTemplate","selectItem","_this14","_this$data$this$name$2","_this15","$checkedInputs","onSearch","scrollEl","Dropdown","dropdown","setupResizeHandling","resizeHandler","setupScrollHandling","$dropdown","$scrollableParent","scrollableParents","overflow","scrollHandler","setupVisibilityDetection","IntersectionObserver","intersectionObserver","isIntersecting","threshold","rootMargin","catch","hasDarkMode","parentsUntil","animation","animationIn","animationOut","animationSpeed","minWidth","positionObserver","JSON","parse","closeOnItemClick","$existingMenu","clone","nestedContainer","$nestedContainer","$nestedTrigger","$nestedMenu","parentZIndex","dropdownEl","$dropdownItems","menuRight","positionTypes","fixed","absolute","after","when","$target","onItemClick","_documentClickHandler","isClickInThisDropdown","isNestedDropdownTrigger","dropdownTriggerPosX","dropdownTriggerPosY","triggerRect","dropdownWidth","dropdownHeight","dropdownTriggerWidth","dropdownTriggerHeight","parentOffset","dropdownPosX","dropdownPosY","pl","al","dropdownLeft","dropdownTop","dropdownRight","dropdownBottom","dropdownScreenLeft","dropdownScreenTop","relativeX","relativeY","animationDuration","duration","parseFloat","Tooltip","tooltip","$tooltip","placementChanged","buildTooltip","$arrow","arrowPos","tooltipPosX","tooltipPosY","containerInnerWidth","containerInnerHeight","tooltipWidth","tooltipHeight","tooltipTriggerWidth","tooltipTriggerHeight","tooltipTriggerPosX","tooltipTriggerPosY","arrowWidth","arrowHeight","tooltipOverflowCount","tooltipPosition","tooltipOverflow","fixTooltipPosition","overflowAmount","Collapse","collapse","targetSelector","expanded","indicatorSelector","$indicator","indicator","_clickHandler","SectionTabs","sectionTabs","_tabsCache","_resizeObserver","_isProcessing","dropdownContainer","checkForChanges","$dropdownContainer","$dropdownList","dropdownList","observeTarget","moveToList","uuid","getAttribute","removeAttribute","moveToDropdown","hasAttribute","crypto","randomUUID","cloneNode","itemActionEl","getTabDimensions","wasInvisible","originalOverflow","totalWidth","dimensions","availableSpace","sectionHeader","headerStyles","flexDirection","containerStyles","sectionSearch","gap","tabs","dropdownItems","accumulatedWidth","visibleTabs","overflowTabs","widthWithGap","relatedDropdownId","dropdownItem","remainingSpace","originalTab","hasDropdownItems","Toast","toast","toasts","queue","processingQueue","onInitialize","lastToastContent","isSimilarToast","addQueue","t","processQueue","shift","buildToast","placementX","placementY","dismiss","header","theme","template","maxBodyHeight","_renderTemplate","$inner","$closeBtn","toastPosX","toastPosY","toastWidth","toastHeight","bodyCloseBtn","_Toast$DEFAULTS","Dialog","dialog","dialogs","actions","hasOwnProperty","buildDialog","footer","centered","preventScroll","closeBtn","overflowVisible","actionInProgress","actionThreshold","commonActions","actionKey","_step","_iterator","_createForOfIteratorHelperLoose","commonAction","resetActionFlag","immediately","promiseResult","updateMaxBodyHeight","newHeight","lastOrientation","orientation","orientationChanged","$prevDialog","eq","zIndex","transition","opacity","visibility","checkForBackdrop","$dialogContentEl","actionsArr","visible","idx","sort","a","some","btns","btnStyle","primary","btnContent","charAt","slice","attrs","_renderHeader","p","closeBtnHtml","createTextNode","innerHTML","overFlowVisible","_Dialog$DEFAULTS","Common","_sectionInstance","initialize","sidebarLeft","_sidebarInstance","initComponent","selectors","initQueue","visibleQueue","hiddenQueue","allQueue","processBatch","requestIdleCallback","observeResize","warn","unobserveResize","addScrollListener","removeScrollListener","getSidebar","getSection"],"sources":["../../js/src/component.js","../../js/src/section.js","../../node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js","../../js/src/sidebar.js","../../js/src/utils.js","../../js/src/popover.js","../../js/src/select.js","../../js/src/dropdown.js","../../js/src/tooltip.js","../../js/src/collapse.js","../../js/src/section-tabs.js","../../js/src/toast.js","../../js/src/dialog.js","../../js/src/common.js","../../js/index.umd.js"],"sourcesContent":["import 'jquery';\n\nexport default class Component {\n\n static instances = [];\n\n static initializeElement(selector, options = {}) {\n const el = typeof selector === 'string' ? document.querySelector(selector) : selector;\n if (!el) return false;\n\n const $el = $(el);\n\n if (!$el.data(`plugin_${this.NAME}`)) {\n const instance = new this(el, options);\n $el.data(`plugin_${this.NAME}`, instance);\n this.instances.push(instance);\n return instance;\n }\n\n return false;\n }\n\n static initializeElements(selector, options = {}) { \n document.querySelectorAll(selector).forEach(el => {\n this.initializeElement(el, options);\n });\n \n return this.instances;\n }\n\n onInit() {\n let onInit = this.opts.onInit;\n if (typeof onInit === 'function') {\n onInit.call(this);\n }\n }\n\n onUpdate() {\n let onUpdate = this.opts.onUpdate;\n if (typeof onUpdate === 'function') {\n onUpdate.call(this);\n }\n }\n\n onDestroy() {\n let onDestroy = this.opts.onDestroy;\n if (typeof onDestroy === 'function') {\n onDestroy.call(this);\n }\n }\n \n onShow() {\n let onShow = this.opts.onShow;\n\n if (typeof onShow === 'function') {\n onShow.call(this);\n }\n }\n\n onClose() {\n let onClose = this.opts.onClose;\n if (typeof onClose === 'function') {\n onClose.call(this);\n }\n }\n\n onReset() {\n let onReset = this.opts.onReset;\n if (typeof onReset === 'function') {\n onReset.call(this);\n }\n }\n}","import Component from './component';\n\nclass Section extends Component {\n\n static DEFAULTS = {\n observeSections: true,\n initFormControls: true,\n initTableHandlers: true,\n initButtonGroups: true,\n initTabs: true,\n onInit: null,\n onDestroy: null\n };\n\n constructor(opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool && window.Cool.settings && window.Cool.settings.section) {\n $.extend(true, this.opts, Section.DEFAULTS, window.Cool.settings.section, opts);\n } else {\n $.extend(true, this.opts, Section.DEFAULTS, opts);\n }\n\n this._eventHandlers = [];\n this._updateTimeout = null;\n this._rafId = null;\n \n this.init();\n }\n\n init() {\n if (this.opts.observeSections) {\n this.initializeSectionObserver();\n }\n \n if (this.opts.initFormControls) {\n this.initializeFormControls();\n }\n \n if (this.opts.initTableHandlers) {\n this.initializeTableHandlers();\n }\n \n if (this.opts.initButtonGroups) {\n this.initializeButtonGroups();\n }\n \n if (this.opts.initTabs) {\n this.initializeTabs();\n }\n \n this.onInit();\n }\n\n destroy() {\n this.destroySectionObserver();\n this.unbindEvents();\n if (this._updateTimeout) {\n clearTimeout(this._updateTimeout);\n }\n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n }\n this.onDestroy();\n }\n\n _addEventListener(element, event, handler, options) {\n element.addEventListener(event, handler, options);\n this._eventHandlers.push({ element, event, handler, options });\n }\n\n initializeSectionObserver() {\n this._isUpdating = false;\n \n this.sectionObserver = new MutationObserver((mutations) => {\n if (this._isUpdating) return;\n \n const isOwnUpdate = mutations.every(mutation => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n const target = mutation.target;\n const oldClasses = mutation.oldValue ? mutation.oldValue.split(' ') : [];\n const newClasses = Array.from(target.classList);\n const addedClasses = newClasses.filter(c => !oldClasses.includes(c));\n const removedClasses = oldClasses.filter(c => !newClasses.includes(c));\n const changedClasses = [...addedClasses, ...removedClasses];\n \n return changedClasses.every(c => \n c === 'is-last-visible' || \n c === 'is-last-visible-row' || \n c === 'is-last-visible-cell'\n );\n }\n return false;\n });\n \n if (isOwnUpdate) return;\n \n if (this._updateTimeout) {\n clearTimeout(this._updateTimeout);\n }\n \n this._updateTimeout = setTimeout(() => {\n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n }\n \n this._rafId = requestAnimationFrame(() => {\n this.updateLastVisibleElements();\n });\n }, 50);\n });\n\n this.sectionObserver.observe(document.body, {\n attributes: true,\n childList: true,\n subtree: true,\n attributeFilter: ['class', 'style', 'hidden'],\n attributeOldValue: true,\n subtreeFilter: (node) => {\n return node.classList && (\n node.classList.contains('section') ||\n node.classList.contains('select') ||\n node.nodeName === 'TABLE' ||\n node.nodeName === 'TR' ||\n node.nodeName === 'TD' ||\n node.nodeName === 'TH'\n );\n }\n });\n\n this.updateLastVisibleElements();\n }\n\n updateLastVisibleElements() {\n this._isUpdating = true;\n \n const updates = {\n sections: [],\n tables: [],\n rows: []\n };\n\n document.querySelectorAll('.section').forEach(section => {\n const visibleChildren = this.getVisibleChildren(section);\n if (visibleChildren.length) {\n updates.sections.push({\n section,\n lastVisible: visibleChildren[visibleChildren.length - 1]\n });\n }\n });\n\n document.querySelectorAll('table').forEach(table => {\n const tbody = table.querySelector('tbody') || table;\n const visibleRows = this.getVisibleElements(tbody.querySelectorAll('tr'));\n \n if (visibleRows.length) {\n updates.tables.push({\n tbody,\n lastVisibleRow: visibleRows[visibleRows.length - 1]\n });\n }\n });\n\n document.querySelectorAll('table tr').forEach(row => {\n const visibleCells = this.getVisibleElements(row.querySelectorAll('td, th'));\n \n if (visibleCells.length) {\n updates.rows.push({\n row,\n lastVisibleCell: visibleCells[visibleCells.length - 1]\n });\n }\n });\n\n requestAnimationFrame(() => {\n document.querySelectorAll('.is-last-visible, .is-last-visible-row, .is-last-visible-cell')\n .forEach(el => {\n el.classList.remove('is-last-visible', 'is-last-visible-row', 'is-last-visible-cell');\n });\n\n updates.sections.forEach(({ lastVisible }) => {\n lastVisible.classList.add('is-last-visible');\n });\n\n updates.tables.forEach(({ lastVisibleRow }) => {\n lastVisibleRow.classList.add('is-last-visible-row');\n });\n\n updates.rows.forEach(({ lastVisibleCell }) => {\n lastVisibleCell.classList.add('is-last-visible-cell');\n });\n \n setTimeout(() => {\n this._isUpdating = false;\n }, 0);\n });\n }\n\n getVisibleChildren(parent) {\n return Array.from(parent.children).filter(el => this.isElementVisible(el));\n }\n\n getVisibleElements(elements) {\n return Array.from(elements).filter(el => this.isElementVisible(el));\n }\n\n isElementVisible(el) {\n if (!el._computedStyle || el._styleInvalidated) {\n el._computedStyle = window.getComputedStyle(el);\n el._styleInvalidated = false;\n }\n \n return !el.classList.contains('d-none') &&\n !el.classList.contains('d-md-none') &&\n el.offsetParent !== null &&\n el.offsetHeight > 0 &&\n el._computedStyle.display !== 'none';\n }\n\n destroySectionObserver() {\n if (this.sectionObserver) {\n this.sectionObserver.disconnect();\n this.sectionObserver = null;\n }\n if (this._updateTimeout) {\n clearTimeout(this._updateTimeout);\n this._updateTimeout = null;\n }\n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n this._rafId = null;\n }\n }\n\n initializeFormControls() {\n this._addEventListener(document, 'focusin', (e) => {\n const formControl = e.target.closest('.form-control');\n if (!formControl) return;\n \n if (!formControl.disabled && !formControl.readOnly) {\n const inputGroup = formControl.closest('.input-group');\n inputGroup?.classList.add('input-group-focus');\n }\n });\n\n this._addEventListener(document, 'focusout', (e) => {\n const formControl = e.target.closest('.form-control');\n if (!formControl) return;\n \n if (!formControl.disabled && !formControl.readOnly) {\n const inputGroup = formControl.closest('.input-group');\n inputGroup?.classList.remove('input-group-focus');\n }\n });\n\n const updateFormLabelGroup = (formLabelGroup) => {\n const input = formLabelGroup.querySelector('input, select');\n const hasValue = !!input?.value;\n formLabelGroup.classList.toggle('label-on-top', hasValue);\n };\n\n this._addEventListener(document, 'input', (e) => {\n const formLabelGroup = e.target.closest('.form-label-group');\n if (formLabelGroup) {\n updateFormLabelGroup(formLabelGroup);\n }\n });\n\n this._addEventListener(document, 'change', (e) => {\n const formLabelGroup = e.target.closest('.form-label-group');\n if (formLabelGroup) {\n updateFormLabelGroup(formLabelGroup);\n }\n \n if (e.target.matches('select')) {\n e.target.blur();\n }\n });\n\n document.querySelectorAll('.form-label-group').forEach(updateFormLabelGroup);\n }\n\n initializeTableHandlers() {\n document.querySelectorAll('.table').forEach(table => {\n if (table.querySelector('[data-table-link], [data-table-btn]') && \n !table.classList.contains('table-hover')) {\n table.classList.add('table-hover');\n }\n });\n\n this._addEventListener(document, 'click', (e) => {\n if (e.target.closest('[data-table-link] .table-link-exclude, ' +\n '[data-table-link] input, [data-table-link] button, ' +\n '[data-table-link] a, [data-table-link] label, ' +\n '[data-table-link] .td-col-select')) {\n e.stopPropagation();\n return;\n }\n\n const tableLink = e.target.closest('[data-table-link]');\n if (tableLink) {\n const container = tableLink.closest('table, .table');\n const href = tableLink.dataset.tableLink;\n\n if (container?.classList.contains('bulk-actions-active')) {\n return;\n }\n\n if (e.ctrlKey || e.metaKey) {\n window.open(href, '_blank');\n } else {\n window.location.href = href;\n }\n }\n\n if (e.target.closest('[data-table-btn] .table-btn-exclude, ' +\n '[data-table-btn] input, [data-table-btn] button, ' +\n '[data-table-btn] a, [data-table-btn] label, ' +\n '[data-table-btn] .td-col-select')) {\n e.stopPropagation();\n return;\n }\n\n const tableBtn = e.target.closest('[data-table-btn]');\n if (tableBtn) {\n const container = tableBtn.closest('tr, .tr');\n const btn = tableBtn.querySelector('button');\n\n if (!btn || container?.classList.contains('bulk-actions-active')) {\n return;\n }\n\n btn.click();\n }\n });\n }\n\n initializeButtonGroups() {\n this._addEventListener(document, 'click', (e) => {\n const btnGroupToggle = e.target.closest('.btn-group-toggle .btn');\n if (btnGroupToggle && !e.target.matches('input')) {\n const input = btnGroupToggle.querySelector('input');\n if (input) {\n input.click();\n input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n }\n\n if (e.target.matches('.btn-group-toggle .btn > input')) {\n e.stopPropagation();\n }\n });\n\n this._addEventListener(document, 'change', (e) => {\n if (e.target.matches('.btn-group-toggle .btn > input[type=\"radio\"]')) {\n const btn = e.target.parentElement;\n const btnGroup = btn.closest('.btn-group-toggle');\n if (btnGroup) {\n btnGroup.querySelectorAll('.btn').forEach(b => {\n b.classList.toggle('active', b.querySelector('input')?.checked);\n });\n }\n } else if (e.target.matches('.btn-group-toggle .btn > input[type=\"checkbox\"]')) {\n const btn = e.target.parentElement;\n btn.classList.toggle('active', e.target.checked);\n }\n });\n }\n\n initializeTabs() {\n this._addEventListener(document, 'click', (e) => {\n const tabItem = e.target.closest('.tabs .tab-item')\n if (tabItem) {\n e.stopPropagation();\n const tabs = tabItem.closest('.tabs');\n tabs.querySelectorAll('.tab-item').forEach(item => \n item.classList.remove('active')\n );\n tabItem.classList.add('active');\n }\n });\n }\n\n unbindEvents() {\n this._eventHandlers.forEach(({ element, event, handler, options }) => {\n element.removeEventListener(event, handler, options);\n });\n this._eventHandlers = [];\n }\n\n refresh() {\n document.querySelectorAll('.form-label-group').forEach(formLabelGroup => {\n const input = formLabelGroup.querySelector('input, select');\n const val = input?.value;\n formLabelGroup.classList.toggle('label-on-top', !!val);\n });\n }\n}\n\nexport default Section;","/*!\n * perfect-scrollbar v1.5.6\n * Copyright 2024 Hyunje Jun, MDBootstrap and Contributors\n * Licensed under MIT\n */\n\nfunction get(element) {\n return getComputedStyle(element);\n}\n\nfunction set(element, obj) {\n for (var key in obj) {\n var val = obj[key];\n if (typeof val === 'number') {\n val = val + \"px\";\n }\n element.style[key] = val;\n }\n return element;\n}\n\nfunction div(className) {\n var div = document.createElement('div');\n div.className = className;\n return div;\n}\n\nvar elMatches =\n typeof Element !== 'undefined' &&\n (Element.prototype.matches ||\n Element.prototype.webkitMatchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector);\n\nfunction matches(element, query) {\n if (!elMatches) {\n throw new Error('No element matching method supported');\n }\n\n return elMatches.call(element, query);\n}\n\nfunction remove(element) {\n if (element.remove) {\n element.remove();\n } else {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n}\n\nfunction queryChildren(element, selector) {\n return Array.prototype.filter.call(element.children, function (child) { return matches(child, selector); }\n );\n}\n\nvar cls = {\n main: 'ps',\n rtl: 'ps__rtl',\n element: {\n thumb: function (x) { return (\"ps__thumb-\" + x); },\n rail: function (x) { return (\"ps__rail-\" + x); },\n consuming: 'ps__child--consume',\n },\n state: {\n focus: 'ps--focus',\n clicking: 'ps--clicking',\n active: function (x) { return (\"ps--active-\" + x); },\n scrolling: function (x) { return (\"ps--scrolling-\" + x); },\n },\n};\n\n/*\n * Helper methods\n */\nvar scrollingClassTimeout = { x: null, y: null };\n\nfunction addScrollingClass(i, x) {\n var classList = i.element.classList;\n var className = cls.state.scrolling(x);\n\n if (classList.contains(className)) {\n clearTimeout(scrollingClassTimeout[x]);\n } else {\n classList.add(className);\n }\n}\n\nfunction removeScrollingClass(i, x) {\n scrollingClassTimeout[x] = setTimeout(\n function () { return i.isAlive && i.element.classList.remove(cls.state.scrolling(x)); },\n i.settings.scrollingThreshold\n );\n}\n\nfunction setScrollingClassInstantly(i, x) {\n addScrollingClass(i, x);\n removeScrollingClass(i, x);\n}\n\nvar EventElement = function EventElement(element) {\n this.element = element;\n this.handlers = {};\n};\n\nvar prototypeAccessors = { isEmpty: { configurable: true } };\n\nEventElement.prototype.bind = function bind (eventName, handler) {\n if (typeof this.handlers[eventName] === 'undefined') {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(handler);\n this.element.addEventListener(eventName, handler, false);\n};\n\nEventElement.prototype.unbind = function unbind (eventName, target) {\n var this$1 = this;\n\n this.handlers[eventName] = this.handlers[eventName].filter(function (handler) {\n if (target && handler !== target) {\n return true;\n }\n this$1.element.removeEventListener(eventName, handler, false);\n return false;\n });\n};\n\nEventElement.prototype.unbindAll = function unbindAll () {\n for (var name in this.handlers) {\n this.unbind(name);\n }\n};\n\nprototypeAccessors.isEmpty.get = function () {\n var this$1 = this;\n\n return Object.keys(this.handlers).every(\n function (key) { return this$1.handlers[key].length === 0; }\n );\n};\n\nObject.defineProperties( EventElement.prototype, prototypeAccessors );\n\nvar EventManager = function EventManager() {\n this.eventElements = [];\n};\n\nEventManager.prototype.eventElement = function eventElement (element) {\n var ee = this.eventElements.filter(function (ee) { return ee.element === element; })[0];\n if (!ee) {\n ee = new EventElement(element);\n this.eventElements.push(ee);\n }\n return ee;\n};\n\nEventManager.prototype.bind = function bind (element, eventName, handler) {\n this.eventElement(element).bind(eventName, handler);\n};\n\nEventManager.prototype.unbind = function unbind (element, eventName, handler) {\n var ee = this.eventElement(element);\n ee.unbind(eventName, handler);\n\n if (ee.isEmpty) {\n // remove\n this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n }\n};\n\nEventManager.prototype.unbindAll = function unbindAll () {\n this.eventElements.forEach(function (e) { return e.unbindAll(); });\n this.eventElements = [];\n};\n\nEventManager.prototype.once = function once (element, eventName, handler) {\n var ee = this.eventElement(element);\n var onceHandler = function (evt) {\n ee.unbind(eventName, onceHandler);\n handler(evt);\n };\n ee.bind(eventName, onceHandler);\n};\n\nfunction createEvent(name) {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(name);\n }\n\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(name, false, false, undefined);\n return evt;\n}\n\nfunction processScrollDiff (i, axis, diff, useScrollingClass, forceFireReachEvent) {\n if ( useScrollingClass === void 0 ) useScrollingClass = true;\n if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n var fields;\n if (axis === 'top') {\n fields = ['contentHeight', 'containerHeight', 'scrollTop', 'y', 'up', 'down'];\n } else if (axis === 'left') {\n fields = ['contentWidth', 'containerWidth', 'scrollLeft', 'x', 'left', 'right'];\n } else {\n throw new Error('A proper axis should be provided');\n }\n\n processScrollDiff$1(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff$1(\n i,\n diff,\n ref,\n useScrollingClass,\n forceFireReachEvent\n) {\n var contentHeight = ref[0];\n var containerHeight = ref[1];\n var scrollTop = ref[2];\n var y = ref[3];\n var up = ref[4];\n var down = ref[5];\n if ( useScrollingClass === void 0 ) useScrollingClass = true;\n if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false;\n\n var element = i.element;\n\n // reset reach\n i.reach[y] = null;\n\n // 1 for subpixel rounding\n if (element[scrollTop] < 1) {\n i.reach[y] = 'start';\n }\n\n // 1 for subpixel rounding\n if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n i.reach[y] = 'end';\n }\n\n if (diff) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + y)));\n\n if (diff < 0) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + up)));\n } else if (diff > 0) {\n element.dispatchEvent(createEvent((\"ps-scroll-\" + down)));\n }\n\n if (useScrollingClass) {\n setScrollingClassInstantly(i, y);\n }\n }\n\n if (i.reach[y] && (diff || forceFireReachEvent)) {\n element.dispatchEvent(createEvent((\"ps-\" + y + \"-reach-\" + (i.reach[y]))));\n }\n}\n\nfunction toInt(x) {\n return parseInt(x, 10) || 0;\n}\n\nfunction isEditable(el) {\n return (\n matches(el, 'input,[contenteditable]') ||\n matches(el, 'select,[contenteditable]') ||\n matches(el, 'textarea,[contenteditable]') ||\n matches(el, 'button,[contenteditable]')\n );\n}\n\nfunction outerWidth(element) {\n var styles = get(element);\n return (\n toInt(styles.width) +\n toInt(styles.paddingLeft) +\n toInt(styles.paddingRight) +\n toInt(styles.borderLeftWidth) +\n toInt(styles.borderRightWidth)\n );\n}\n\nvar env = {\n isWebKit:\n typeof document !== 'undefined' &&\n 'WebkitAppearance' in document.documentElement.style,\n supportsTouch:\n typeof window !== 'undefined' &&\n ('ontouchstart' in window ||\n ('maxTouchPoints' in window.navigator &&\n window.navigator.maxTouchPoints > 0) ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)),\n supportsIePointer:\n typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n isChrome:\n typeof navigator !== 'undefined' &&\n /Chrome/i.test(navigator && navigator.userAgent),\n};\n\n/* eslint-disable no-lonely-if */\n\nfunction updateGeometry (i) {\n var element = i.element;\n var roundedScrollTop = Math.floor(element.scrollTop);\n var rect = element.getBoundingClientRect();\n\n i.containerWidth = Math.floor(rect.width);\n i.containerHeight = Math.floor(rect.height);\n\n i.contentWidth = element.scrollWidth;\n i.contentHeight = element.scrollHeight;\n\n if (!element.contains(i.scrollbarXRail)) {\n // clean up and append\n queryChildren(element, cls.element.rail('x')).forEach(function (el) { return remove(el); });\n element.appendChild(i.scrollbarXRail);\n }\n if (!element.contains(i.scrollbarYRail)) {\n // clean up and append\n queryChildren(element, cls.element.rail('y')).forEach(function (el) { return remove(el); });\n element.appendChild(i.scrollbarYRail);\n }\n\n if (\n !i.settings.suppressScrollX &&\n i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n ) {\n i.scrollbarXActive = true;\n i.railXWidth = i.containerWidth - i.railXMarginWidth;\n i.railXRatio = i.containerWidth / i.railXWidth;\n i.scrollbarXWidth = getThumbSize(i, toInt((i.railXWidth * i.containerWidth) / i.contentWidth));\n i.scrollbarXLeft = toInt(\n ((i.negativeScrollAdjustment + element.scrollLeft) * (i.railXWidth - i.scrollbarXWidth)) /\n (i.contentWidth - i.containerWidth)\n );\n } else {\n i.scrollbarXActive = false;\n }\n\n if (\n !i.settings.suppressScrollY &&\n i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n ) {\n i.scrollbarYActive = true;\n i.railYHeight = i.containerHeight - i.railYMarginHeight;\n i.railYRatio = i.containerHeight / i.railYHeight;\n i.scrollbarYHeight = getThumbSize(\n i,\n toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n );\n i.scrollbarYTop = toInt(\n (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n (i.contentHeight - i.containerHeight)\n );\n } else {\n i.scrollbarYActive = false;\n }\n\n if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n }\n if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n }\n\n updateCss(element, i);\n\n if (i.scrollbarXActive) {\n element.classList.add(cls.state.active('x'));\n } else {\n element.classList.remove(cls.state.active('x'));\n i.scrollbarXWidth = 0;\n i.scrollbarXLeft = 0;\n element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n }\n if (i.scrollbarYActive) {\n element.classList.add(cls.state.active('y'));\n } else {\n element.classList.remove(cls.state.active('y'));\n i.scrollbarYHeight = 0;\n i.scrollbarYTop = 0;\n element.scrollTop = 0;\n }\n}\n\nfunction getThumbSize(i, thumbSize) {\n if (i.settings.minScrollbarLength) {\n thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n }\n if (i.settings.maxScrollbarLength) {\n thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n }\n return thumbSize;\n}\n\nfunction updateCss(element, i) {\n var xRailOffset = { width: i.railXWidth };\n var roundedScrollTop = Math.floor(element.scrollTop);\n\n if (i.isRtl) {\n xRailOffset.left =\n i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth - i.contentWidth;\n } else {\n xRailOffset.left = element.scrollLeft;\n }\n if (i.isScrollbarXUsingBottom) {\n xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n } else {\n xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n }\n set(i.scrollbarXRail, xRailOffset);\n\n var yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n if (i.isScrollbarYUsingRight) {\n if (i.isRtl) {\n yRailOffset.right =\n i.contentWidth -\n (i.negativeScrollAdjustment + element.scrollLeft) -\n i.scrollbarYRight -\n i.scrollbarYOuterWidth -\n 9;\n } else {\n yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n }\n } else {\n if (i.isRtl) {\n yRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth * 2 -\n i.contentWidth -\n i.scrollbarYLeft -\n i.scrollbarYOuterWidth;\n } else {\n yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n }\n }\n set(i.scrollbarYRail, yRailOffset);\n\n set(i.scrollbarX, {\n left: i.scrollbarXLeft,\n width: i.scrollbarXWidth - i.railBorderXWidth,\n });\n set(i.scrollbarY, {\n top: i.scrollbarYTop,\n height: i.scrollbarYHeight - i.railBorderYWidth,\n });\n}\n\n/* eslint-disable */\n\nfunction clickRail (i) {\n // const element = i.element;\n\n i.event.bind(i.scrollbarY, 'mousedown', function (e) { return e.stopPropagation(); });\n i.event.bind(i.scrollbarYRail, 'mousedown', function (e) {\n var positionTop = e.pageY - window.pageYOffset - i.scrollbarYRail.getBoundingClientRect().top;\n var direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n i.element.scrollTop += direction * i.containerHeight;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n\n i.event.bind(i.scrollbarX, 'mousedown', function (e) { return e.stopPropagation(); });\n i.event.bind(i.scrollbarXRail, 'mousedown', function (e) {\n var positionLeft =\n e.pageX - window.pageXOffset - i.scrollbarXRail.getBoundingClientRect().left;\n var direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n i.element.scrollLeft += direction * i.containerWidth;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n}\n\nvar activeSlider = null; // Variable to track the currently active slider\n\nfunction setupScrollHandlers(i) {\n bindMouseScrollHandler(i, [\n 'containerHeight',\n 'contentHeight',\n 'pageY',\n 'railYHeight',\n 'scrollbarY',\n 'scrollbarYHeight',\n 'scrollTop',\n 'y',\n 'scrollbarYRail' ]);\n\n bindMouseScrollHandler(i, [\n 'containerWidth',\n 'contentWidth',\n 'pageX',\n 'railXWidth',\n 'scrollbarX',\n 'scrollbarXWidth',\n 'scrollLeft',\n 'x',\n 'scrollbarXRail' ]);\n}\n\nfunction bindMouseScrollHandler(\n i,\n ref\n) {\n var containerDimension = ref[0];\n var contentDimension = ref[1];\n var pageAxis = ref[2];\n var railDimension = ref[3];\n var scrollbarAxis = ref[4];\n var scrollbarDimension = ref[5];\n var scrollAxis = ref[6];\n var axis = ref[7];\n var scrollbarRail = ref[8];\n\n var element = i.element;\n var startingScrollPosition = null;\n var startingMousePagePosition = null;\n var scrollBy = null;\n\n function moveHandler(e) {\n if (e.touches && e.touches[0]) {\n e[pageAxis] = e.touches[0][(\"page\" + (axis.toUpperCase()))];\n }\n\n // Only move if the active slider is the one we started with\n if (activeSlider === scrollbarAxis) {\n element[scrollAxis] =\n startingScrollPosition + scrollBy * (e[pageAxis] - startingMousePagePosition);\n addScrollingClass(i, axis);\n updateGeometry(i);\n\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n function endHandler() {\n removeScrollingClass(i, axis);\n i[scrollbarRail].classList.remove(cls.state.clicking);\n document.removeEventListener('mousemove', moveHandler);\n document.removeEventListener('mouseup', endHandler);\n document.removeEventListener('touchmove', moveHandler);\n document.removeEventListener('touchend', endHandler);\n activeSlider = null; // Reset active slider when interaction ends\n }\n\n function bindMoves(e) {\n if (activeSlider === null) {\n // Only bind if no slider is currently active\n activeSlider = scrollbarAxis; // Set current slider as active\n\n startingScrollPosition = element[scrollAxis];\n if (e.touches) {\n e[pageAxis] = e.touches[0][(\"page\" + (axis.toUpperCase()))];\n }\n startingMousePagePosition = e[pageAxis];\n scrollBy =\n (i[contentDimension] - i[containerDimension]) / (i[railDimension] - i[scrollbarDimension]);\n\n if (!e.touches) {\n document.addEventListener('mousemove', moveHandler);\n document.addEventListener('mouseup', endHandler);\n } else {\n document.addEventListener('touchmove', moveHandler, { passive: false });\n document.addEventListener('touchend', endHandler);\n }\n\n i[scrollbarRail].classList.add(cls.state.clicking);\n }\n\n e.stopPropagation();\n if (e.cancelable) {\n e.preventDefault();\n }\n }\n\n i[scrollbarAxis].addEventListener('mousedown', bindMoves);\n i[scrollbarAxis].addEventListener('touchstart', bindMoves);\n}\n\n/* eslint-disable */\n\nfunction keyboard (i) {\n var element = i.element;\n\n var elementHovered = function () { return matches(element, ':hover'); };\n var scrollbarFocused = function () { return matches(i.scrollbarX, ':focus') || matches(i.scrollbarY, ':focus'); };\n\n function shouldPreventDefault(deltaX, deltaY) {\n var scrollTop = Math.floor(element.scrollTop);\n if (deltaX === 0) {\n if (!i.scrollbarYActive) {\n return false;\n }\n if (\n (scrollTop === 0 && deltaY > 0) ||\n (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n\n var scrollLeft = element.scrollLeft;\n if (deltaY === 0) {\n if (!i.scrollbarXActive) {\n return false;\n }\n if (\n (scrollLeft === 0 && deltaX < 0) ||\n (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n return true;\n }\n\n i.event.bind(i.ownerDocument, 'keydown', function (e) {\n if ((e.isDefaultPrevented && e.isDefaultPrevented()) || e.defaultPrevented) {\n return;\n }\n\n if (!elementHovered() && !scrollbarFocused()) {\n return;\n }\n\n var activeElement = document.activeElement\n ? document.activeElement\n : i.ownerDocument.activeElement;\n if (activeElement) {\n if (activeElement.tagName === 'IFRAME') {\n activeElement = activeElement.contentDocument.activeElement;\n } else {\n // go deeper if element is a webcomponent\n while (activeElement.shadowRoot) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n }\n if (isEditable(activeElement)) {\n return;\n }\n }\n\n var deltaX = 0;\n var deltaY = 0;\n\n switch (e.which) {\n case 37: // left\n if (e.metaKey) {\n deltaX = -i.contentWidth;\n } else if (e.altKey) {\n deltaX = -i.containerWidth;\n } else {\n deltaX = -30;\n }\n break;\n case 38: // up\n if (e.metaKey) {\n deltaY = i.contentHeight;\n } else if (e.altKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = 30;\n }\n break;\n case 39: // right\n if (e.metaKey) {\n deltaX = i.contentWidth;\n } else if (e.altKey) {\n deltaX = i.containerWidth;\n } else {\n deltaX = 30;\n }\n break;\n case 40: // down\n if (e.metaKey) {\n deltaY = -i.contentHeight;\n } else if (e.altKey) {\n deltaY = -i.containerHeight;\n } else {\n deltaY = -30;\n }\n break;\n case 32: // space bar\n if (e.shiftKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = -i.containerHeight;\n }\n break;\n case 33: // page up\n deltaY = i.containerHeight;\n break;\n case 34: // page down\n deltaY = -i.containerHeight;\n break;\n case 36: // home\n deltaY = i.contentHeight;\n break;\n case 35: // end\n deltaY = -i.contentHeight;\n break;\n default:\n return;\n }\n\n if (i.settings.suppressScrollX && deltaX !== 0) {\n return;\n }\n if (i.settings.suppressScrollY && deltaY !== 0) {\n return;\n }\n\n element.scrollTop -= deltaY;\n element.scrollLeft += deltaX;\n updateGeometry(i);\n\n if (shouldPreventDefault(deltaX, deltaY)) {\n e.preventDefault();\n }\n });\n}\n\n/* eslint-disable */\n\nfunction wheel (i) {\n var element = i.element;\n\n function shouldPreventDefault(deltaX, deltaY) {\n var roundedScrollTop = Math.floor(element.scrollTop);\n var isTop = element.scrollTop === 0;\n var isBottom = roundedScrollTop + element.offsetHeight === element.scrollHeight;\n var isLeft = element.scrollLeft === 0;\n var isRight = element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n var hitsBound;\n\n // pick axis with primary direction\n if (Math.abs(deltaY) > Math.abs(deltaX)) {\n hitsBound = isTop || isBottom;\n } else {\n hitsBound = isLeft || isRight;\n }\n\n return hitsBound ? !i.settings.wheelPropagation : true;\n }\n\n function getDeltaFromEvent(e) {\n var deltaX = e.deltaX;\n var deltaY = -1 * e.deltaY;\n\n if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n // OS X Safari\n deltaX = (-1 * e.wheelDeltaX) / 6;\n deltaY = e.wheelDeltaY / 6;\n }\n\n if (e.deltaMode && e.deltaMode === 1) {\n // Firefox in deltaMode 1: Line scrolling\n deltaX *= 10;\n deltaY *= 10;\n }\n\n if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n // IE in some mouse drivers\n deltaX = 0;\n deltaY = e.wheelDelta;\n }\n\n if (e.shiftKey) {\n // reverse axis with shift key\n return [-deltaY, -deltaX];\n }\n return [deltaX, deltaY];\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n // FIXME: this is a workaround for <select> issue in FF and IE #571\n if (!env.isWebKit && element.querySelector('select:focus')) {\n return true;\n }\n\n if (!element.contains(target)) {\n return false;\n }\n\n var cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n var style = get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n var maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n var maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function mousewheelHandler(e) {\n var ref = getDeltaFromEvent(e);\n var deltaX = ref[0];\n var deltaY = ref[1];\n\n if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\n return;\n }\n\n var shouldPrevent = false;\n if (!i.settings.useBothWheelAxes) {\n // deltaX will only be used for horizontal scrolling and deltaY will\n // only be used for vertical scrolling - this is the default\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else if (i.scrollbarYActive && !i.scrollbarXActive) {\n // only vertical scrollbar is active and useBothWheelAxes option is\n // active, so let's scroll vertical bar using both mouse wheel axes\n if (deltaY) {\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n } else {\n element.scrollTop += deltaX * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n } else if (i.scrollbarXActive && !i.scrollbarYActive) {\n // useBothWheelAxes and only horizontal bar is active, so use both\n // wheel axes for horizontal bar\n if (deltaX) {\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else {\n element.scrollLeft -= deltaY * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n }\n\n updateGeometry(i);\n\n shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\n if (shouldPrevent && !e.ctrlKey) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n if (typeof window.onwheel !== 'undefined') {\n i.event.bind(element, 'wheel', mousewheelHandler);\n } else if (typeof window.onmousewheel !== 'undefined') {\n i.event.bind(element, 'mousewheel', mousewheelHandler);\n }\n}\n\nfunction touch (i) {\n if (!env.supportsTouch && !env.supportsIePointer) {\n return;\n }\n\n var element = i.element;\n\n var state = {\n startOffset: {},\n startTime: 0,\n speed: {},\n easingLoop: null,\n };\n\n function shouldPrevent(deltaX, deltaY) {\n var scrollTop = Math.floor(element.scrollTop);\n var scrollLeft = element.scrollLeft;\n var magnitudeX = Math.abs(deltaX);\n var magnitudeY = Math.abs(deltaY);\n\n if (magnitudeY > magnitudeX) {\n // user is perhaps trying to swipe up/down the page\n\n if (\n (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\n (deltaY > 0 && scrollTop === 0)\n ) {\n // set prevent for mobile Chrome refresh\n return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n }\n } else if (magnitudeX > magnitudeY) {\n // user is perhaps trying to swipe left/right across the page\n\n if (\n (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||\n (deltaX > 0 && scrollLeft === 0)\n ) {\n return true;\n }\n }\n\n return true;\n }\n\n function applyTouchMove(differenceX, differenceY) {\n element.scrollTop -= differenceY;\n element.scrollLeft -= differenceX;\n\n updateGeometry(i);\n }\n\n function getTouch(e) {\n if (e.targetTouches) {\n return e.targetTouches[0];\n }\n // Maybe IE pointer\n return e;\n }\n\n function shouldHandle(e) {\n if (e.target === i.scrollbarX || e.target === i.scrollbarY) {\n return false;\n }\n if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\n return false;\n }\n if (e.targetTouches && e.targetTouches.length === 1) {\n return true;\n }\n if (e.pointerType && e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {\n return true;\n }\n return false;\n }\n\n function touchStart(e) {\n if (!shouldHandle(e)) {\n return;\n }\n\n var touch = getTouch(e);\n\n state.startOffset.pageX = touch.pageX;\n state.startOffset.pageY = touch.pageY;\n\n state.startTime = new Date().getTime();\n\n if (state.easingLoop !== null) {\n clearInterval(state.easingLoop);\n }\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n if (!element.contains(target)) {\n return false;\n }\n\n var cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n var style = get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n var maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n var maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function touchMove(e) {\n if (shouldHandle(e)) {\n var touch = getTouch(e);\n\n var currentOffset = { pageX: touch.pageX, pageY: touch.pageY };\n\n var differenceX = currentOffset.pageX - state.startOffset.pageX;\n var differenceY = currentOffset.pageY - state.startOffset.pageY;\n\n if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n return;\n }\n\n applyTouchMove(differenceX, differenceY);\n state.startOffset = currentOffset;\n\n var currentTime = new Date().getTime();\n\n var timeGap = currentTime - state.startTime;\n if (timeGap > 0) {\n state.speed.x = differenceX / timeGap;\n state.speed.y = differenceY / timeGap;\n state.startTime = currentTime;\n }\n\n if (shouldPrevent(differenceX, differenceY)) {\n // Prevent the default behavior if the event is cancelable\n if (e.cancelable) {\n e.preventDefault();\n }\n }\n }\n }\n\n function touchEnd() {\n if (i.settings.swipeEasing) {\n clearInterval(state.easingLoop);\n state.easingLoop = setInterval(function () {\n if (i.isInitialized) {\n clearInterval(state.easingLoop);\n return;\n }\n\n if (!state.speed.x && !state.speed.y) {\n clearInterval(state.easingLoop);\n return;\n }\n\n if (Math.abs(state.speed.x) < 0.01 && Math.abs(state.speed.y) < 0.01) {\n clearInterval(state.easingLoop);\n return;\n }\n\n applyTouchMove(state.speed.x * 30, state.speed.y * 30);\n\n state.speed.x *= 0.8;\n state.speed.y *= 0.8;\n }, 10);\n }\n }\n\n if (env.supportsTouch) {\n i.event.bind(element, 'touchstart', touchStart);\n i.event.bind(element, 'touchmove', touchMove);\n i.event.bind(element, 'touchend', touchEnd);\n } else if (env.supportsIePointer) {\n if (window.PointerEvent) {\n i.event.bind(element, 'pointerdown', touchStart);\n i.event.bind(element, 'pointermove', touchMove);\n i.event.bind(element, 'pointerup', touchEnd);\n } else if (window.MSPointerEvent) {\n i.event.bind(element, 'MSPointerDown', touchStart);\n i.event.bind(element, 'MSPointerMove', touchMove);\n i.event.bind(element, 'MSPointerUp', touchEnd);\n }\n }\n}\n\n/* eslint-disable */\n\nvar defaultSettings = function () { return ({\n handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n maxScrollbarLength: null,\n minScrollbarLength: null,\n scrollingThreshold: 1000,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n suppressScrollX: false,\n suppressScrollY: false,\n swipeEasing: true,\n useBothWheelAxes: false,\n wheelPropagation: true,\n wheelSpeed: 1,\n}); };\n\nvar handlers = {\n 'click-rail': clickRail,\n 'drag-thumb': setupScrollHandlers,\n keyboard: keyboard,\n wheel: wheel,\n touch: touch,\n};\n\nvar PerfectScrollbar = function PerfectScrollbar(element, userSettings) {\n var this$1 = this;\n if ( userSettings === void 0 ) userSettings = {};\n\n if (typeof element === 'string') {\n element = document.querySelector(element);\n }\n\n if (!element || !element.nodeName) {\n throw new Error('no element is specified to initialize PerfectScrollbar');\n }\n\n this.element = element;\n\n element.classList.add(cls.main);\n\n this.settings = defaultSettings();\n for (var key in userSettings) {\n this.settings[key] = userSettings[key];\n }\n\n this.containerWidth = null;\n this.containerHeight = null;\n this.contentWidth = null;\n this.contentHeight = null;\n\n var focus = function () { return element.classList.add(cls.state.focus); };\n var blur = function () { return element.classList.remove(cls.state.focus); };\n\n this.isRtl = get(element).direction === 'rtl';\n if (this.isRtl === true) {\n element.classList.add(cls.rtl);\n }\n this.isNegativeScroll = (function () {\n var originalScrollLeft = element.scrollLeft;\n var result = null;\n element.scrollLeft = -1;\n result = element.scrollLeft < 0;\n element.scrollLeft = originalScrollLeft;\n return result;\n })();\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? element.scrollWidth - element.clientWidth\n : 0;\n this.event = new EventManager();\n this.ownerDocument = element.ownerDocument || document;\n\n this.scrollbarXRail = div(cls.element.rail('x'));\n element.appendChild(this.scrollbarXRail);\n this.scrollbarX = div(cls.element.thumb('x'));\n this.scrollbarXRail.appendChild(this.scrollbarX);\n this.scrollbarX.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarX, 'focus', focus);\n this.event.bind(this.scrollbarX, 'blur', blur);\n this.scrollbarXActive = null;\n this.scrollbarXWidth = null;\n this.scrollbarXLeft = null;\n var railXStyle = get(this.scrollbarXRail);\n this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\n if (isNaN(this.scrollbarXBottom)) {\n this.isScrollbarXUsingBottom = false;\n this.scrollbarXTop = toInt(railXStyle.top);\n } else {\n this.isScrollbarXUsingBottom = true;\n }\n this.railBorderXWidth = toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n // Set rail to display:block to calculate margins\n set(this.scrollbarXRail, { display: 'block' });\n this.railXMarginWidth = toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\n set(this.scrollbarXRail, { display: '' });\n this.railXWidth = null;\n this.railXRatio = null;\n\n this.scrollbarYRail = div(cls.element.rail('y'));\n element.appendChild(this.scrollbarYRail);\n this.scrollbarY = div(cls.element.thumb('y'));\n this.scrollbarYRail.appendChild(this.scrollbarY);\n this.scrollbarY.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarY, 'focus', focus);\n this.event.bind(this.scrollbarY, 'blur', blur);\n this.scrollbarYActive = null;\n this.scrollbarYHeight = null;\n this.scrollbarYTop = null;\n var railYStyle = get(this.scrollbarYRail);\n this.scrollbarYRight = parseInt(railYStyle.right, 10);\n if (isNaN(this.scrollbarYRight)) {\n this.isScrollbarYUsingRight = false;\n this.scrollbarYLeft = toInt(railYStyle.left);\n } else {\n this.isScrollbarYUsingRight = true;\n }\n this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\n this.railBorderYWidth = toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n set(this.scrollbarYRail, { display: 'block' });\n this.railYMarginHeight = toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\n set(this.scrollbarYRail, { display: '' });\n this.railYHeight = null;\n this.railYRatio = null;\n\n this.reach = {\n x:\n element.scrollLeft <= 0\n ? 'start'\n : element.scrollLeft >= this.contentWidth - this.containerWidth\n ? 'end'\n : null,\n y:\n element.scrollTop <= 0\n ? 'start'\n : element.scrollTop >= this.contentHeight - this.containerHeight\n ? 'end'\n : null,\n };\n\n this.isAlive = true;\n\n this.settings.handlers.forEach(function (handlerName) { return handlers[handlerName](this$1); });\n\n this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\n this.lastScrollLeft = element.scrollLeft; // for onScroll only\n this.event.bind(this.element, 'scroll', function (e) { return this$1.onScroll(e); });\n updateGeometry(this);\n};\n\nPerfectScrollbar.prototype.update = function update () {\n if (!this.isAlive) {\n return;\n }\n\n // Recalcuate negative scrollLeft adjustment\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? this.element.scrollWidth - this.element.clientWidth\n : 0;\n\n // Recalculate rail margins\n set(this.scrollbarXRail, { display: 'block' });\n set(this.scrollbarYRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(get(this.scrollbarXRail).marginLeft) +\n toInt(get(this.scrollbarXRail).marginRight);\n this.railYMarginHeight =\n toInt(get(this.scrollbarYRail).marginTop) +\n toInt(get(this.scrollbarYRail).marginBottom);\n\n // Hide scrollbars not to affect scrollWidth and scrollHeight\n set(this.scrollbarXRail, { display: 'none' });\n set(this.scrollbarYRail, { display: 'none' });\n\n updateGeometry(this);\n\n processScrollDiff(this, 'top', 0, false, true);\n processScrollDiff(this, 'left', 0, false, true);\n\n set(this.scrollbarXRail, { display: '' });\n set(this.scrollbarYRail, { display: '' });\n};\n\nPerfectScrollbar.prototype.onScroll = function onScroll (e) {\n if (!this.isAlive) {\n return;\n }\n\n updateGeometry(this);\n processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\n processScrollDiff(this, 'left', this.element.scrollLeft - this.lastScrollLeft);\n\n this.lastScrollTop = Math.floor(this.element.scrollTop);\n this.lastScrollLeft = this.element.scrollLeft;\n};\n\nPerfectScrollbar.prototype.destroy = function destroy () {\n if (!this.isAlive) {\n return;\n }\n\n this.event.unbindAll();\n remove(this.scrollbarX);\n remove(this.scrollbarY);\n remove(this.scrollbarXRail);\n remove(this.scrollbarYRail);\n this.removePsClasses();\n\n // unset elements\n this.element = null;\n this.scrollbarX = null;\n this.scrollbarY = null;\n this.scrollbarXRail = null;\n this.scrollbarYRail = null;\n\n this.isAlive = false;\n};\n\nPerfectScrollbar.prototype.removePsClasses = function removePsClasses () {\n this.element.className = this.element.className\n .split(' ')\n .filter(function (name) { return !name.match(/^ps([-_].+|)$/); })\n .join(' ');\n};\n\nexport default PerfectScrollbar;\n//# sourceMappingURL=perfect-scrollbar.esm.js.map\n","import Component from './component';\nimport PerfectScrollbar from 'perfect-scrollbar';\n\nif (typeof window !== 'undefined' && !window.PerfectScrollbar) {\n window.PerfectScrollbar = PerfectScrollbar;\n}\n\nclass Sidebar extends Component {\n\n static DEFAULTS = {\n floating: true,\n breakpoint: 1046,\n wheelSpeed: 2,\n wheelPropagation: true,\n minScrollbarLength: 20,\n suppressScrollX: true,\n onInit: null,\n onDestroy: null,\n onShow: null,\n onClose: null\n };\n\n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool && window.Cool.settings && window.Cool.settings.sidebar) {\n $.extend(true, this.opts, Sidebar.DEFAULTS, window.Cool.settings.sidebar, opts);\n } else {\n $.extend(true, this.opts, Sidebar.DEFAULTS, opts);\n }\n\n this.el = el;\n \n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n this.initializeScrollbars();\n this.initializeTabs();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n this.destroyScrollbars();\n this.onDestroy();\n }\n\n buildCache() {\n this.$el = $(this.el);\n this.el = this.$el[0];\n this.$content = this.$el.find('.sidebar-content');\n this.content = this.$content[0];\n this.$toggler = $('.sidebar-left-toggler');\n this.toggler = this.$toggler[0];\n this.isFloating = this.$el.hasClass('sidebar-floating');\n this.isOpen = document.body.classList.contains('sidebar-left-open');\n this.$tabs = this.$el.find('.sidebar-tab');\n this.$tabSelectors = $('[name=\"sidebar-tab-select\"]');\n }\n\n bindEvents() {\n this._toggleHandler = (e) => {\n const toggler = e.target.closest('.sidebar-left-toggler');\n if (toggler) {\n this.handleToggle(e, toggler);\n }\n };\n \n this._mousedownHandler = (e) => {\n if (e.target.matches('.sidebar-content .ps__thumb-y')) {\n const sidebarContent = e.target.closest('.sidebar-content');\n sidebarContent?.classList.add('ps-mousedown-scroll');\n this.mousedownScrollbar = true;\n }\n };\n \n this._mouseupHandler = () => {\n if (this.mousedownScrollbar) {\n document.querySelectorAll('.sidebar-content.ps-mousedown-scroll')\n .forEach(el => el.classList.remove('ps-mousedown-scroll'));\n this.mousedownScrollbar = false;\n }\n };\n\n this._tabSelectHandler = (e) => {\n if (!e.target.matches('[name=\"sidebar-tab-select\"]')) return;\n this.switchTab(e.target.value);\n };\n \n this._collapseClickHandler = (e) => {\n const collapseToggle = e.target.closest('[data-toggle=\"collapse\"]');\n if (!collapseToggle) return;\n\n const breakpoint = collapseToggle.dataset.breakpoint;\n if (breakpoint && window.matchMedia(`(min-width: ${breakpoint}px)`).matches) {\n let linkElement = collapseToggle.nextElementSibling?.querySelector('li a') ||\n collapseToggle.parentElement.nextElementSibling?.querySelector('li a');\n\n if (linkElement) {\n if (e.metaKey || e.ctrlKey) {\n window.open(linkElement.href, '_blank').focus();\n } else {\n window.location.href = linkElement.href;\n }\n }\n } else {\n setTimeout(() => this.scrollbar?.update(), 300);\n }\n };\n \n if (window.ResizeObserver) {\n this.resizeObserver = new ResizeObserver(entries => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n if (window.innerWidth > this.opts.breakpoint) {\n this.removeBackdrop();\n }\n });\n });\n \n this.resizeObserver.observe(document.body);\n \n } else {\n\n let resizeTimeout;\n this._resizeHandler = () => {\n clearTimeout(resizeTimeout);\n \n const now = performance.now();\n if (!this.lastResizeTime || now - this.lastResizeTime > 100) {\n if (window.innerWidth > this.opts.breakpoint) {\n this.removeBackdrop();\n }\n this.lastResizeTime = now;\n } else {\n resizeTimeout = setTimeout(() => {\n if (window.innerWidth > this.opts.breakpoint) {\n this.removeBackdrop();\n }\n }, 16);\n }\n };\n \n window.addEventListener('resize', this._resizeHandler, { passive: true });\n }\n \n document.addEventListener('click', this._toggleHandler);\n document.addEventListener('click', this._tabSelectHandler);\n document.addEventListener('mousedown', this._mousedownHandler);\n document.addEventListener('mouseup', this._mouseupHandler);\n \n if (this.content) {\n this.content.addEventListener('click', this._collapseClickHandler);\n }\n }\n\n unbindEvents() {\n document.removeEventListener('click', this._toggleHandler);\n document.removeEventListener('click', this._tabSelectHandler);\n document.removeEventListener('mousedown', this._mousedownHandler);\n document.removeEventListener('mouseup', this._mouseupHandler);\n \n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n \n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n \n if (this._resizeHandler) {\n window.removeEventListener('resize', this._resizeHandler);\n this._resizeHandler = null;\n }\n \n if (this.content) {\n this.content.removeEventListener('click', this._collapseClickHandler);\n }\n }\n\n initializeScrollbars() {\n if (this.content) {\n this.scrollbar = new PerfectScrollbar(this.content, {\n wheelSpeed: this.opts.wheelSpeed,\n wheelPropagation: this.opts.wheelPropagation,\n minScrollbarLength: this.opts.minScrollbarLength,\n suppressScrollX: this.opts.suppressScrollX,\n });\n }\n }\n\n initializeTabs() {\n this.tabScrollbars = new Map();\n\n this.$tabs.each((index, tab) => {\n const scrollContainer = tab.querySelector('.tab-content');\n if (scrollContainer) {\n const ps = new PerfectScrollbar(scrollContainer, {\n wheelSpeed: this.opts.wheelSpeed,\n wheelPropagation: this.opts.wheelPropagation,\n minScrollbarLength: this.opts.minScrollbarLength,\n suppressScrollX: this.opts.suppressScrollX,\n });\n this.tabScrollbars.set(tab, ps);\n }\n });\n }\n\n destroyScrollbars() {\n if (this.scrollbar) {\n this.scrollbar.destroy();\n this.scrollbar = null;\n }\n \n this.tabScrollbars.forEach(ps => ps.destroy());\n this.tabScrollbars.clear();\n }\n\n toggleWithTransition(action) {\n const html = document.documentElement;\n \n html.classList.add('sidebar-transitioning');\n \n if (action === 'open') {\n document.body.classList.add('sidebar-left-open');\n \n if (this.isFloating && window.innerWidth <= this.opts.breakpoint) {\n this.createBackdrop();\n }\n } else {\n document.body.classList.remove('sidebar-left-open');\n this.removeBackdrop();\n }\n \n setTimeout(() => {\n html.classList.remove('sidebar-transitioning');\n }, 330);\n }\n\n createBackdrop() {\n if (document.querySelector('.sidebar-backdrop')) {\n return;\n }\n \n const backdrop = document.createElement('div');\n backdrop.className = 'sidebar-backdrop';\n backdrop.addEventListener('click', () => {\n this.toggleWithTransition('close');\n \n if (this.toggler) {\n this.toggler.classList.remove('open');\n if (this.toggler.ariaExpanded !== null) {\n this.toggler.ariaExpanded = 'false';\n }\n }\n });\n\n const siteMainEl = document.querySelector('.site-main');\n if (siteMainEl) {\n siteMainEl.appendChild(backdrop);\n \n requestAnimationFrame(() => {\n backdrop.classList.add('show');\n });\n }\n }\n\n removeBackdrop() {\n const backdrop = document.querySelector('.sidebar-backdrop');\n if (backdrop) {\n backdrop.classList.remove('show');\n \n backdrop.addEventListener('transitionend', () => {\n backdrop.remove();\n }, { once: true });\n \n setTimeout(() => {\n backdrop?.remove();\n }, 330);\n }\n }\n\n handleToggle(event, toggler) {\n event.stopPropagation();\n if (!toggler) {\n return;\n }\n \n if (toggler.ariaExpanded !== null) {\n toggler.ariaExpanded = toggler.ariaExpanded !== 'true';\n }\n\n toggler.classList.toggle('open');\n \n const isCurrentlyOpen = document.body.classList.contains('sidebar-left-open');\n this.toggleWithTransition(isCurrentlyOpen ? 'close' : 'open');\n \n if (isCurrentlyOpen) {\n this.onClose();\n } else {\n this.onShow();\n }\n }\n\n switchTab(tabId) {\n const activeTab = document.getElementById(`sidebar-tab-${tabId}`);\n \n if (!activeTab) return;\n\n const sidebarTabs = this.$tabs.toArray();\n \n sidebarTabs.forEach(tab => {\n tab.classList.toggle('active', tab === activeTab);\n \n if (tab !== activeTab) {\n const tabContent = tab.querySelector('.tab-content');\n if (tabContent) {\n if (tab === sidebarTabs[0]) {\n tabContent.style.transform = 'translate3d(100%, 0px, 0px)';\n } else if (tab === sidebarTabs[sidebarTabs.length - 1]) {\n tabContent.style.transform = 'translate3d(-100%, 0px, 0px)';\n } else {\n const isBeforeActive = sidebarTabs.indexOf(tab) < \n sidebarTabs.indexOf(activeTab);\n tabContent.style.transform = `translate3d(${isBeforeActive ? '-100%' : '100%'}, 0px, 0px)`;\n }\n }\n }\n });\n\n const activeTabContent = activeTab.querySelector('.tab-content');\n \n if (activeTabContent) {\n activeTabContent.style.transform = 'none';\n }\n\n this.$tabSelectors.each(function() {\n $(this).toggleClass('active', this.value === tabId);\n });\n }\n\n toggle() {\n const isOpen = document.body.classList.contains('sidebar-left-open');\n this.toggleWithTransition(isOpen ? 'close' : 'open');\n }\n\n open() {\n if (!document.body.classList.contains('sidebar-left-open')) {\n this.toggleWithTransition('open');\n }\n }\n\n close() {\n if (document.body.classList.contains('sidebar-left-open')) {\n this.toggleWithTransition('close');\n }\n }\n}\n\nexport default Sidebar;","class ResizeManager {\n constructor() {\n this.callbacks = new WeakMap();\n this.observer = null;\n this.rafId = null;\n this.windowCallbacks = new Set();\n this.isWindowListening = false;\n }\n\n observe(element, callback) {\n if (!this.observer) {\n this.observer = new ResizeObserver(entries => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n entries.forEach(entry => {\n const callback = this.callbacks.get(entry.target);\n if (callback) {\n callback(entry);\n }\n });\n });\n });\n }\n\n this.callbacks.set(element, callback);\n this.observer.observe(element);\n \n this.windowCallbacks.add(callback);\n \n if (!this.isWindowListening) {\n this.startWindowListening();\n }\n }\n\n unobserve(element) {\n if (this.observer) {\n this.observer.unobserve(element);\n const callback = this.callbacks.get(element);\n if (callback) {\n this.windowCallbacks.delete(callback);\n }\n this.callbacks.delete(element);\n \n if (this.windowCallbacks.size === 0) {\n this.stopWindowListening();\n }\n }\n }\n\n startWindowListening() {\n this.isWindowListening = true;\n window.addEventListener('resize', this.handleWindowResize, { passive: true });\n }\n\n stopWindowListening() {\n this.isWindowListening = false;\n window.removeEventListener('resize', this.handleWindowResize);\n }\n\n handleWindowResize = () => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n this.windowCallbacks.forEach(callback => {\n callback({ target: window, contentRect: { width: window.innerWidth, height: window.innerHeight } });\n });\n });\n }\n\n disconnect() {\n if (this.observer) {\n this.observer.disconnect();\n this.callbacks = new WeakMap();\n }\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.windowCallbacks.clear();\n this.stopWindowListening();\n }\n}\n\nclass ScrollManager {\n constructor() {\n this.callbacks = new Map();\n this.rafId = null;\n this.isListening = false;\n }\n\n add(id, callback) {\n this.callbacks.set(id, callback);\n \n if (!this.isListening) {\n this.startListening();\n }\n }\n\n remove(id) {\n this.callbacks.delete(id);\n \n if (this.callbacks.size === 0) {\n this.stopListening();\n }\n }\n\n startListening() {\n this.isListening = true;\n \n const contentElement = document.querySelector('.site-main .content');\n\n if (contentElement) {\n this.scrollElement = contentElement;\n this.scrollElement.addEventListener('scroll', this.handleScroll, { passive: true });\n } else {\n this.scrollElement = window;\n window.addEventListener('scroll', this.handleScroll, { passive: true });\n }\n }\n\n stopListening() {\n this.isListening = false;\n \n if (this.scrollElement) {\n this.scrollElement.removeEventListener('scroll', this.handleScroll);\n this.scrollElement = null;\n }\n \n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n\n handleScroll = () => {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n this.callbacks.forEach(callback => callback());\n });\n }\n}\n\nconst resizeManager = new ResizeManager();\nconst scrollManager = new ScrollManager();\n\nconst debounce = function (func, wait, immediate) {\n\tlet timeout;\n\n\treturn function () {\n\t\tlet context = this;\n\t\tlet args = arguments;\n\t\tlet later = function () {\n\t\t\ttimeout = null;\n\n\t\t\tif (!immediate) {\n\t\t\t\tfunc.apply(context, args);\n\t\t\t}\n\t\t};\n\n\t\tlet callNow = immediate && !timeout;\n\n\t\tclearTimeout(timeout);\n\n\t\ttimeout = setTimeout(later, wait);\n\n\t\tif (callNow) {\n\t\t\tfunc.apply(context, args);\n\t\t}\n\t};\n};\n\nconst touchEvents = function () {\n\tlet result = false;\n\n\tif ('ontouchstart' in window || (window.DocumentTouch && document instanceof DocumentTouch)) {\n\t\tresult = true;\n\t}\n\n\treturn result;\n};\n\nconst generateUUID = function () {\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tlet r = (Math.random() * 16) | 0;\n\t\tlet v = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n};\n\nconst shallowProperty = function (key) {\n\treturn function (obj) {\n\t\treturn obj == null ? void 0 : obj[key];\n\t};\n};\n\nconst isArrayLike = function (collection) {\n\tlet length = shallowProperty('length');\n\n\treturn typeof length == 'number' && length >= 0 && length <= Math.pow(2, 53) - 1;\n};\n\nconst optimizeCb = function (func, context, argCount) {\n\tif (context === void 0) {\n\t\treturn func;\n\t}\n\n\tswitch (argCount == null ? 3 : argCount) {\n\t\tcase 1:\n\t\t\treturn function (value) {\n\t\t\t\treturn func.call(context, value);\n\t\t\t};\n\n\t\tcase 3:\n\t\t\treturn function (value, index, collection) {\n\t\t\t\treturn func.call(context, value, index, collection);\n\t\t\t};\n\t\tcase 4:\n\t\t\treturn function (accumulator, value, index, collection) {\n\t\t\t\treturn func.call(context, accumulator, value, index, collection);\n\t\t\t};\n\t}\n\n\treturn function () {\n\t\treturn func.apply(context, arguments);\n\t};\n};\n\nconst escapeHtml = function (html) {\n\tconst text = document.createTextNode(html);\n\tconst p = document.createElement('p');\n\tp.appendChild(text);\n\treturn p.innerHTML;\n};\n\nconst each = function (obj, iteratee, context) {\n\titeratee = optimizeCb(iteratee, context);\n\n\tlet i;\n\tlet length;\n\n\tif (isArrayLike(obj)) {\n\t\tfor (i = 0, length = obj.length; i < length; i++) {\n\t\t\titeratee(obj[i], i, obj);\n\t\t}\n\t} else {\n\t\tlet keys = Object.keys(obj);\n\n\t\tfor (i = 0, length = keys.length; i < length; i++) {\n\t\t\titeratee(obj[keys[i]], keys[i], obj);\n\t\t}\n\t}\n\n\treturn obj;\n};\n\nconst whichTransitionEvent = function () {\n\t let el = document.createElement('text-transition');\n\tlet transEndEventNames = {\n\t\tWebkitTransition: 'webkitTransitionEnd', // Saf 6, Android Browser\n\t\tMozTransition: 'transitionend', // only for FF < 15\n\t\ttransition: 'transitionend', // IE10, Opera, Chrome, FF 15+, Saf 7+\n\t};\n\n\tfor (let t in transEndEventNames) {\n\t\tif (el.style[t] !== undefined) {\n\t\t\treturn transEndEventNames[t];\n\t\t}\n\t}\n}\n\nconst playAnimation = function(el, animationClass) {\n\tconst domEl = (el && el.jquery) ? el[0] : el;\n if (!domEl) return Promise.resolve();\n\n return new Promise((resolve) => {\n const classes = ['animation', animationClass];\n domEl.classList.add(...classes);\n\n function onEnd(event) {\n event.stopPropagation();\n domEl.classList.remove(...classes);\n domEl.removeEventListener('animationend', onEnd);\n resolve();\n }\n\n domEl.addEventListener('animationend', onEnd, { once: true });\n });\n}\n\nconst escapeChar = (chr) => {\n\tconst chars = {\n\t\t'&': '&amp;',\n\t\t'<': '&lt;',\n\t\t'>': '&gt;',\n\t\t'\"': '&quot;',\n\t\t\"'\": '&#x27;',\n\t\t'`': '&#x60;',\n\t\t'=': '&#x3D;'\n\t};\n return chars[chr];\n};\n\nconst escape = (string) => {\n\tconst invalidChars = /[&<>\"'`=]/g;\n\tconst validChars = /[&<>\"'`=]/;\n if (typeof string !== 'string') {\n if (string === null) {\n return '';\n } else if (!string) {\n return String(string);\n }\n string = String(string);\n }\n if (!validChars.test(string)) {\n return string;\n }\n return string.replace(invalidChars, escapeChar);\n};\n\nexport {\n\tresizeManager,\n\tscrollManager,\n\tdebounce,\n\ttouchEvents,\n\tgenerateUUID,\n\teach,\n\tescapeHtml,\n\twhichTransitionEvent,\n\tplayAnimation,\n\tescape\n};","import Component from './component';\nimport { generateUUID, resizeManager } from './utils';\n\nclass Popover extends Component {\n\n static NAME = 'coolPopover';\n\n static DEFAULTS = {\n container: 'body',\n containerAutoDetect: false,\n trigger: 'focus',\n placement: 'bottom',\n align: 'center',\n offset: null,\n collisionDetection: true,\n title: '',\n content: '',\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${Popover.NAME}`);\n if (!instance) {\n instance = new Popover(this, typeof config === 'object' && config);\n $el.data(`plugin_${Popover.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Popover.NAME];\n $.fn[Popover.NAME] = Popover._jQueryInterface;\n $.fn[Popover.NAME].Constructor = Popover;\n $.fn[Popover.NAME].defaults = Popover.DEFAULTS || {};\n $.fn[Popover.NAME].noConflict = () => {\n $.fn[Popover.NAME] = previousName;\n return Popover._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.popover) {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, window.Cool.settings.popover, opts);\n } else {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.el = el;\n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n if (this.$popover) {\n this.$popover.remove();\n this.$popover = null;\n }\n this.$el.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n if (this.$popover) {\n this.setPosition();\n }\n this.onUpdate();\n }\n\n buildCache() {\n this.$el = $(this.el);\n this.$container = this.$el.data('container') ? $(this.$el.data('container')) : $(this.opts.container);\n this.containerAutoDetect = this.$el.data('containerAutoDetect')\n ? this.$el.data('containerAutoDetect')\n : this.opts.containerAutoDetect;\n this.id = 'popover-' + generateUUID();\n this.trigger = this.$el.data('trigger') ? this.$el.data('trigger') : this.opts.trigger;\n this.placement = this.$el.data('placement') ? this.$el.data('placement') : this.opts.placement;\n this.align = this.$el.data('align') ? this.$el.data('align') : this.opts.align;\n this.title = this.$el.data('title') ? this.$el.data('title') : this.opts.title;\n this.content = this.$el.data('content') ? this.$el.data('content') : this.opts.content;\n this.offset = this.$el.data('offset') ? this.$el.data('offset') : this.opts.offset;\n this.collisionDetection = this.$el.data('collisionDetection') !== false ? this.$el.data('collisionDetection') : this.opts.collisionDetection;\n\n if (this.containerAutoDetect) {\n this.$container = this.$el.offsetParent();\n }\n }\n\n bindEvents() {\n if (this.trigger === 'click') {\n this.$el.on('click' + '.' + this.constructor.NAME, () => {\n if (this.$popover) {\n this.close();\n } else {\n this.show();\n }\n });\n } else if (this.trigger === 'hover') {\n this.$el.on('mouseenter' + '.' + this.constructor.NAME, () => {\n clearTimeout(this.hoverTimeout);\n this.show();\n });\n\n this.$el.on('mouseleave' + '.' + this.constructor.NAME, () => {\n this.hoverTimeout = setTimeout(() => {\n if (!this.popupHasFocus) {\n this.close();\n }\n }, 100);\n });\n } else if (this.trigger === 'focus') {\n this.$el.on('focusin' + '.' + this.constructor.NAME, () => {\n this.show();\n });\n\n this.$el.on('focusout' + '.' + this.constructor.NAME, () => {\n this.close();\n });\n }\n\n if (window.ResizeObserver) {\n this._resizeCallback = () => {\n if (this.$popover && this.$popover.hasClass('show')) {\n requestAnimationFrame(() => {\n this.setPosition();\n });\n }\n };\n \n resizeManager.observe(this.el, this._resizeCallback);\n }\n }\n\n unbindEvents() {\n this.$el.off('.' + this.constructor.NAME);\n \n if (this._resizeCallback) {\n resizeManager.unobserve(this.el);\n this._resizeCallback = null;\n }\n }\n\n buildPopover() {\n let content;\n\n if (typeof this.content === 'function') {\n content = this.content();\n } else {\n content = this.content;\n }\n\n this.$popover = $(`\n <div class=\"popover\" role=\"tooltip\" id=\"${this.id}\">\n <h3 class=\"popover-header\">${this.title}</h3>\n <div class=\"popover-body\">${content}</div>\n </div>\n `);\n\n this.$container.append(this.$popover);\n \n this.$container.find('#' + this.id).on('mouseenter', () => {\n this.popupHasFocus = true;\n if (this.trigger === 'hover' && this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n }\n });\n\n this.$container.find('#' + this.id).on('mouseleave', () => {\n this.popupHasFocus = false;\n if (this.trigger === 'hover') {\n this.hoverTimeout = setTimeout(() => {\n this.close();\n }, 100);\n }\n });\n }\n\n setPosition(placement) {\n if (typeof placement === 'undefined' || placement === null) {\n placement = this.placement;\n }\n\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n \n let popoverWidth = this.$popover.outerWidth(true);\n let popoverHeight = this.$popover.outerHeight(true);\n let triggerWidth = this.$el.outerWidth(true);\n let triggerHeight = this.$el.outerHeight(true);\n \n let triggerPosX, triggerPosY;\n\n const containerOffset = this.$container.offset() || { left: 0, top: 0 };\n const triggerOffset = this.$el.offset();\n\n triggerPosX = triggerOffset.left - containerOffset.left;\n triggerPosY = triggerOffset.top - containerOffset.top;\n\n let popoverPosX = 0;\n let popoverPosY = 0;\n let offsetX = 0;\n let offsetY = 0;\n\n if (this.offset) {\n const offsets = this.offset.split(',');\n offsetX = parseInt(offsets[0], 10) || 0;\n offsetY = parseInt(offsets[1], 10) || 0;\n }\n\n const computedStyle = getComputedStyle(this.$popover[0]);\n const spacing = parseInt(computedStyle.getPropertyValue('--cool-popover-spacer')) || 8;\n\n const calculatePosition = (currentPlacement, currentAlign = this.align) => {\n let x = 0, y = 0;\n \n switch (currentPlacement) {\n case 'top':\n x = currentAlign === 'end' \n ? triggerPosX + triggerWidth - popoverWidth \n : currentAlign === 'center'\n ? triggerPosX + (triggerWidth - popoverWidth) / 2\n : triggerPosX;\n y = triggerPosY - popoverHeight - spacing;\n break;\n case 'bottom':\n x = currentAlign === 'end' \n ? triggerPosX + triggerWidth - popoverWidth \n : currentAlign === 'center'\n ? triggerPosX + (triggerWidth - popoverWidth) / 2\n : triggerPosX;\n y = triggerPosY + triggerHeight + spacing;\n break;\n case 'left':\n x = triggerPosX - popoverWidth - spacing;\n y = currentAlign === 'end'\n ? triggerPosY + triggerHeight - popoverHeight\n : currentAlign === 'center'\n ? triggerPosY + (triggerHeight - popoverHeight) / 2\n : triggerPosY;\n break;\n case 'right':\n x = triggerPosX + triggerWidth + spacing;\n y = currentAlign === 'end'\n ? triggerPosY + triggerHeight - popoverHeight\n : currentAlign === 'center'\n ? triggerPosY + (triggerHeight - popoverHeight) / 2\n : triggerPosY;\n break;\n }\n \n return { x: x + offsetX, y: y + offsetY };\n };\n\n let finalPlacement = placement;\n let finalAlign = this.align;\n let position = calculatePosition(placement);\n \n if (this.collisionDetection) {\n const margin = 5;\n \n const checkCollision = (pos) => {\n const collision = {\n top: false,\n bottom: false,\n left: false,\n right: false\n };\n \n const popoverScreenLeft = containerOffset.left + pos.x;\n const popoverScreenTop = containerOffset.top + pos.y;\n const popoverScreenRight = popoverScreenLeft + popoverWidth;\n const popoverScreenBottom = popoverScreenTop + popoverHeight;\n \n collision.top = popoverScreenTop < margin;\n collision.bottom = popoverScreenBottom > viewportHeight - margin;\n collision.left = popoverScreenLeft < margin;\n collision.right = popoverScreenRight > viewportWidth - margin;\n \n return collision;\n };\n \n const collision = checkCollision(position);\n \n if (placement === 'bottom' && collision.bottom && !collision.top) {\n finalPlacement = 'top';\n position = calculatePosition('top', finalAlign);\n } else if (placement === 'top' && collision.top && !collision.bottom) {\n finalPlacement = 'bottom';\n position = calculatePosition('bottom', finalAlign);\n } else if (placement === 'right' && collision.right && !collision.left) {\n finalPlacement = 'left';\n position = calculatePosition('left', finalAlign);\n } else if (placement === 'left' && collision.left && !collision.right) {\n finalPlacement = 'right';\n position = calculatePosition('right', finalAlign);\n }\n \n const newCollision = checkCollision(position);\n \n if ((finalPlacement === 'top' || finalPlacement === 'bottom')) {\n if (finalAlign === 'end' && newCollision.left && !newCollision.right) {\n finalAlign = 'start';\n position = calculatePosition(finalPlacement, finalAlign);\n } else if (finalAlign === 'start' && newCollision.right && !newCollision.left) {\n finalAlign = 'end';\n position = calculatePosition(finalPlacement, finalAlign);\n }\n }\n \n const finalCollision = checkCollision(position);\n\n if (finalCollision.left) {\n position.x += (margin - (containerOffset.left + position.x));\n } else if (finalCollision.right) {\n position.x -= ((containerOffset.left + position.x + popoverWidth) - (viewportWidth - margin));\n }\n \n if (finalCollision.top) {\n position.y += (margin - (containerOffset.top + position.y));\n } else if (finalCollision.bottom) {\n position.y -= ((containerOffset.top + position.y + popoverHeight) - (viewportHeight - margin));\n }\n }\n\n popoverPosX = position.x;\n popoverPosY = position.y;\n\n this.$popover.css({\n transform: `translate3d(${Math.round(popoverPosX)}px, ${Math.round(popoverPosY)}px, 0px)`,\n 'will-change': 'transform'\n });\n\n this.$popover.attr('x-placement', finalPlacement + '-' + finalAlign);\n }\n\n show() {\n if (this.$popover) {\n return;\n }\n\n this.buildPopover();\n this.setPosition();\n\n this.$popover.addClass('show');\n this.$el.attr('data-popover', this.id);\n\n this.onShow();\n }\n\n close() {\n if (!this.$popover) {\n return;\n }\n\n this.$popover.remove();\n this.$el.removeAttr('data-popover');\n this.$popover = null;\n\n this.onClose();\n }\n}\n\nPopover._jQueryInit();\n\nexport default Popover;","import Component from './component';\nimport { debounce, touchEvents, escape, resizeManager, scrollManager } from './utils';\nimport PerfectScrollbar from 'perfect-scrollbar';\n\nif (typeof window !== 'undefined' && !window.PerfectScrollbar) {\n window.PerfectScrollbar = PerfectScrollbar;\n}\n\nclass Select extends Component {\n\n static NAME = 'coolSelect';\n\n static DEFAULTS = {\n name: '',\n type: 'checkbox',\n labelTemplate: null,\n confirmCheck: null,\n confirmUncheck: null,\n setData: null,\n scrollContentHeight: 300,\n useNativeScroll: false,\n contentWidth: null,\n faPro: false,\n items: [],\n showSearch: false,\n showFooter: false,\n searchApi: false,\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n onReset: null,\n onSearch: null,\n onSelect: null,\n buildScroll: null,\n searchPlaceholder: null,\n btnCloseText: null,\n dynamicTitle: false,\n dynamicTitleDefault: '',\n dynamicTitleEmptyDefault: '',\n allowNoneOnRadioSelect: true,\n preventUncheck: false,\n showValidStateIcon: true,\n itemsToExclude: [],\n primaryKeyword: 'id',\n position: 'absolute',\n scrollEl: '.content',\n useChips: false\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${Select.NAME}`);\n if (!instance) {\n instance = new Select(this, typeof config === 'object' && config);\n $el.data(`plugin_${Select.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Select.NAME];\n $.fn[Select.NAME] = Select._jQueryInterface;\n $.fn[Select.NAME].Constructor = Select;\n $.fn[Select.NAME].defaults = Select.DEFAULTS || {};\n $.fn[Select.NAME].noConflict = () => {\n $.fn[Select.NAME] = previousName;\n return Select._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.select) {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, window.Cool.settings.select, opts);\n } else {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.el = el;\n this.useChips = false;\n this.cachedTitle = '';\n this.lastSearchQuery = '';\n this._resizeCallback = null;\n this._scrollCallback = null;\n this.init();\n }\n\n init() {\n this.buildCache();\n this.buildScroll();\n this.bindEvents();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n this.$el.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n this.bindEvents();\n\n let updatePromise = Promise.resolve();\n\n if (this.searchApi && this.searchApi.length) {\n updatePromise = this._performInitialSearch();\n }\n\n return updatePromise.then(() => {\n this.onUpdate();\n });\n }\n\n reset() {\n this.data = {};\n this.data[this.name] = [];\n this.items = [];\n this.$select.find('.select-item').remove();\n this.$selectItems = [];\n this.$selectIconContainer.html(this.selectIconDefault);\n this.$selectHeader.removeClass('select-placeholder');\n\n if (typeof this.dynamicTitle === 'function') {\n this.$selectTitle.text(this.dynamicTitle.call(this));\n } else {\n if (\n this.data[this.name].length == 0 &&\n this.dynamicTitle &&\n this.dynamicTitleDefault &&\n this.dynamicTitleDefault !== 0 &&\n this.$selectTitle.text().trim() == 0 &&\n (this.$selectItems.length > 0 || this.searchApi)\n ) {\n this.$selectTitle.text(this.dynamicTitleDefault);\n }\n\n if (this.$selectItems.length == 0 && !this.searchApi && this.dynamicTitle && this.dynamicTitleEmptyDefault && this.dynamicTitleEmptyDefault !== 0) {\n this.$selectHeader.addClass('select-placeholder');\n this.$selectIconContainer.addClass('d-none');\n this.$selectTitle.text(this.dynamicTitleEmptyDefault);\n }\n }\n\n if (this.showSearch) {\n this.searchData = [];\n this.$searchInput.val('');\n this.searchString = '';\n this.search.call(this);\n }\n }\n\n buildCache() {\n this.$el = $(this.el);\n this.$container = this.$el.parent();\n this.$selectHeader = this.$el.find('.select-header');\n this.$selectTitle = this.$el.find('.select-title');\n this.cachedTitle = this.$selectTitle.text();\n this.$selectIconContainer = this.$selectHeader.find('.select-icon');\n this.$searchIconContainer = this.$el.find('.select-search-icon');\n this.selectIconDefault = this.$selectHeader.find('.select-icon')\n ? this.$selectHeader.find('.select-icon').html()\n : '<i class=\"' + (this.opts.faPro ? 'fal' : 'fas') + 'fa-angle-down icon\"></i>';\n this.name = this.$el.data('name') ? this.$el.data('name') : this.opts.name;\n this.scroll = null;\n this.scrollContentHeight = this.$el.data('scrollContentHeight') ? this.$el.data('scrollContentHeight') : this.opts.scrollContentHeight;\n this.useNativeScroll = this.$el.data('useNativeScroll') ? this.$el.data('useNativeScroll') : this.opts.useNativeScroll;\n this.contentWidth = this.$el.data('contentWidth') ? this.$el.data('contentWidth') : this.opts.contentWidth;\n this.items = this.$el.data('items') ? this.$el.data('items') : this.opts.items;\n this.data = {};\n this.data[this.name] = [];\n this.searchData = [];\n this.searchApi = this.$el.data('searchApi') ? this.$el.data('searchApi') : this.opts.searchApi;\n this.searchRequest = null;\n this.type = this.$el.data('type') ? this.$el.data('type') : this.opts.type;\n this.contentOpen = false;\n this.searchPlaceholder = this.$el.data('search-placeholder') ? this.$el.data('search-placeholder') : this.opts.searchPlaceholder;\n this.btnCloseText = this.$el.data('btn-close-text') ? this.$el.data('btn-close-text') : this.opts.btnCloseText;\n this.labelTemplate = this.opts.labelTemplate;\n this.confirmCheck = this.opts.confirmCheck;\n this.confirmUncheck = this.opts.confirmUncheck;\n this.preventUncheck = this.opts.preventUncheck;\n this.dynamicTitle = this.$el.data('dynamicTitle') ? this.$el.data('dynamicTitle') : this.opts.dynamicTitle;\n this.dynamicTitleDefault = this.$el.data('dynamicTitleDefault') ? this.$el.data('dynamicTitleDefault') : this.opts.dynamicTitleDefault;\n this.dynamicTitleEmptyDefault = this.$el.data('dynamicTitleEmptyDefault') ? this.$el.data('dynamicTitleEmptyDefault') : this.opts.dynamicTitleEmptyDefault;\n this.allowNoneOnRadioSelect = this.$el.data('allowNoneOnRadioSelect') ? this.$el.data('allowNoneOnRadioSelect') : this.opts.allowNoneOnRadioSelect;\n this.showValidStateIcon = this.$el.data('showValidStateIcon') ? this.$el.data('showValidStateIcon') : this.opts.showValidStateIcon;\n this.itemsToExclude = this.$el.data('itemsToExclude') ? this.$el.data('itemsToExclude').replace(/\\s/g, '').split(',') : this.opts.itemsToExclude;\n this.primaryKeyword = this.$el.data('primaryKeyword') ? this.$el.data('primaryKeyword') : this.opts.primaryKeyword;\n this.useChips = this.$el.data('useChips') ? this.$el.data('useChips') : this.opts.useChips;\n\n if (this.useChips) {\n this.showValidStateIcon = false;\n }\n\n this.preventClose = false;\n\n if (this.itemsToExclude.length > 0) {\n this.itemsToExclude = this.itemsToExclude.map(String);\n }\n\n if (this.opts.setData) {\n this.data = this.opts.setData;\n }\n\n if (this.$el.data('setData') && this.$el.data('setData') != '') {\n this.data = this.$el.data('setData');\n }\n\n if (!Array.isArray(this.data[this.name]) && this.data[this.name] !== '' && this.data[this.name].length > 0) {\n const arr = this.data[this.name].toString().trim().split(',');\n\n this.data[this.name] = arr;\n }\n\n if (this.data[this.name].length > 0 && !this.useChips) {\n this.data[this.name] = this.data[this.name].map(String);\n }\n\n if (this.data[this.name].length > 0 && this.itemsToExclude.length > 0) {\n this.data[this.name] = this.data[this.name].filter((item) => {\n if (item[this.primaryKeyword]) {\n return this.itemsToExclude.indexOf(item[this.primaryKeyword].toString()) === -1;\n } else {\n return this.itemsToExclude.indexOf(item.toString()) === -1;\n }\n });\n }\n\n if (this.data && this.useChips) {\n this._renderChips();\n }\n\n if (this.items.length > 0 && this.itemsToExclude.length > 0) {\n this.items = this.items.filter((item) => {\n if (item[this.primaryKeyword]) {\n return this.itemsToExclude.indexOf(item[this.primaryKeyword].toString()) === -1;\n } else {\n return this.itemsToExclude.indexOf(item.toString()) === -1;\n }\n });\n }\n\n if (this.$el.find('.select-search').length) {\n this.showSearch = true;\n } else {\n this.showSearch = this.$el.data('showSearch') ? this.$el.data('showSearch') : this.opts.showSearch;\n }\n\n if (this.$el.find('.select-footer').length) {\n this.showFooter = true;\n } else {\n this.showFooter = this.$el.data('showFooter') ? this.$el.data('showFooter') : this.opts.showFooter;\n }\n\n this.$select = this.$el.find('.select-content');\n\n if (!this.$select.length) {\n let items = this._renderItemList(this.items);\n\n this.$select = $(`\n <div class=\"select-content\">\n\n ${this._renderSearch()}\n\n <div class=\"select-scrollable-content\"></div>\n\n ${this._renderFooter()}\n\n </div>\n `);\n\n this.$el.append(this.$select);\n this.$select.find('.select-scrollable-content').append(items);\n } else {\n const selectItems = this.$select.find('.select-item');\n\n if (selectItems.length > 0 && this.itemsToExclude.length > 0) {\n $.each(selectItems, (i, el) => {\n const val = $(el).find(':input').val();\n\n if (this.itemsToExclude.indexOf(val) > -1) {\n $(el).remove();\n }\n });\n }\n }\n\n if (this.data[this.name].length > 0) {\n const values = this.useChips ? this.data[this.name].map((item) => item[this.primaryKeyword].toString()) : this.data[this.name].map(String);\n\n this.$select.find(':input').each((_, input) => {\n const $input = $(input);\n if (values.includes($input.val())) {\n $input.prop('checked', true);\n if (this.type === 'radio') {\n $input.addClass('checked');\n }\n }\n });\n\n if (this.useChips) {\n this._renderChips();\n } else if (this.type === 'radio' && typeof this.dynamicTitle !== 'function') {\n const $checkedInput = this.$select.find(':input:checked');\n if ($checkedInput.length) {\n this.$selectTitle.text($checkedInput.parent().find('[data-label]').text());\n }\n }\n }\n\n this.$scrollableContent = this.$select.find('.select-scrollable-content') ? this.$select.find('.select-scrollable-content') : false;\n this.$selectItems = this.$select.find('.select-item');\n this.$selectHeader.removeClass('select-placeholder');\n\n if (this.searchApi && this.searchApi.length) {\n this._performInitialSearch();\n }\n\n if (typeof this.dynamicTitle === 'function') {\n this.$selectTitle.text(this.dynamicTitle.call(this));\n } else {\n if (\n this.data[this.name].length == 0 &&\n this.dynamicTitle &&\n this.dynamicTitleDefault &&\n this.dynamicTitleDefault !== 0 &&\n this.$selectTitle.text().trim() == 0 &&\n (this.$selectItems.length > 0 || this.searchApi)\n ) {\n this.$selectTitle.text(this.dynamicTitleDefault);\n }\n\n if (this.$selectItems.length == 0 && !this.searchApi && this.dynamicTitle && this.dynamicTitleEmptyDefault && this.dynamicTitleEmptyDefault !== 0) {\n this.$selectHeader.addClass('select-placeholder');\n this.$selectIconContainer.addClass('d-none');\n this.$selectTitle.text(this.dynamicTitleEmptyDefault);\n }\n }\n\n if (this.showSearch) {\n this.$searchContainer = this.$select.find('.select-search');\n this.$searchInput = this.$select.find('[name=\"select-search\"]');\n this.$clearSearchButton = this.$select.find('[data-clear-search]');\n\n this.$searchInput[0].tabIndex = -1;\n }\n\n if (this.showFooter) {\n this.$footerContainer = this.$select.find('.select-footer');\n this.$closeButton = this.$select.find('[data-select-close]');\n\n if (this.$closeButton.length) {\n this.$closeButton[0].tabIndex = -1;\n }\n }\n\n this.buildSearchData();\n }\n\n _updateScrollbarVisibility() {\n if (this.scroll && this.$scrollableContent[0]) {\n const element = this.$scrollableContent[0];\n const needsScrollbar = element.scrollHeight > element.clientHeight;\n \n if (needsScrollbar) {\n this.scroll.settings.suppressScrollY = false;\n this.$scrollableContent.addClass('ps-show-rail-y');\n } else {\n this.scroll.settings.suppressScrollY = true;\n this.$scrollableContent.removeClass('ps-show-rail-y');\n }\n this.scroll.update();\n }\n }\n\n _performInitialSearch() {\n if (!this.isSearchApiEnabled()) {\n return Promise.resolve();\n }\n\n this._showSpinner();\n\n return new Promise((resolve, reject) => {\n $.ajax({\n method: 'GET',\n url: this.searchApi,\n timeout: 10000,\n success: (data) => {\n let items = data.filter((item) => {\n return this.itemsToExclude.indexOf(item[this.primaryKeyword].toString()) === -1 && item[this.primaryKeyword] != 0;\n });\n\n if (this.useChips && this.data[this.name].length > 0) {\n this.data[this.name].forEach((dataItem) => {\n const matchingItem = items.find((item) => item[this.primaryKeyword].toString() === dataItem[this.primaryKeyword].toString());\n if (matchingItem) {\n dataItem.label = matchingItem.label || matchingItem.name || matchingItem.value;\n }\n });\n\n this.$selectTitle.empty();\n this.data[this.name].forEach((dataItem) => {\n const $chip = $(`\n <span class=\"chip\" data-value=\"${dataItem[this.primaryKeyword]}\">\n <span class=\"chip-title\">${escape(dataItem.label)}</span>\n </span>\n `);\n\n $chip.on('click', (e) => {\n e.stopPropagation();\n const $input = this.$select.find(`input[value=\"${dataItem[this.primaryKeyword]}\"]`);\n $input.prop('checked', false).trigger('change');\n });\n\n this.$selectTitle.append($chip);\n });\n }\n\n let result = this._renderItemList(items);\n this.$scrollableContent.html(result);\n\n if (this.data[this.name].length > 0) {\n this.data[this.name].forEach((value) => {\n const valueId = this.useChips ? value[this.primaryKeyword].toString() : value.toString();\n const $input = this.$scrollableContent.find(`input[value=\"${valueId}\"]`);\n\n if ($input.length) {\n $input.prop('checked', true);\n if (this.type === 'radio') {\n $input.addClass('checked');\n }\n }\n });\n }\n\n this._updateScrollbarVisibility();\n this._hideSpinner();\n\n if (this.useChips && this.data[this.name].length > 0) {\n this._renderChips();\n }\n\n if (this.contentOpen) {\n this._recalculateContentHeight();\n }\n\n resolve();\n },\n error: (xhr, status, error) => {\n this._hideSpinner();\n console.error('Search API error:', status, error);\n this.$scrollableContent.html('<div class=\"p-3 text-danger\">Error loading items</div>');\n resolve();\n },\n });\n });\n }\n\n buildScroll() {\n if (this.$scrollableContent.length > 0) {\n let scrollContentHeight = this.scrollContentHeight;\n\n if (this.showSearch) {\n scrollContentHeight = scrollContentHeight - (this.$searchContainer.outerHeight(true) || 0);\n }\n\n if (this.showFooter) {\n scrollContentHeight = scrollContentHeight - (this.$footerContainer.outerHeight(true) || 0);\n }\n\n const marginTop = parseInt(this.$scrollableContent.css('marginTop'), 10) || 0;\n const marginBottom = parseInt(this.$scrollableContent.css('marginBottom'), 10) || 0;\n const totalMargin = marginTop + marginBottom;\n\n const actualContentHeight = this.$scrollableContent[0].scrollHeight;\n const finalHeight = Math.min(actualContentHeight, scrollContentHeight + totalMargin);\n\n this.$scrollableContent.css({\n 'max-height': finalHeight + 'px'\n });\n\n if (touchEvents()) {\n this.$scrollableContent.css({\n 'overflow-y': 'auto',\n });\n } else {\n if (this.useNativeScroll === false) {\n this.$scrollableContent.addClass('ps-dark');\n this.scroll = new PerfectScrollbar(this.$scrollableContent[0], {\n wheelSpeed: 1,\n wheelPropagation: false,\n minScrollbarLength: 20,\n scrollYMarginOffset: -1,\n suppressScrollY: true,\n suppressScrollX: true\n });\n\n setTimeout(() => {\n this._updateScrollbarVisibility();\n }, 0);\n }\n\n this.$scrollableContent.find('[tabindex=\"0\"]').attr('tabindex', -1);\n }\n }\n }\n\n buildSearchData() {\n this.searchData = [];\n\n let selectLabels = this.$select.find('[data-label]');\n\n $.each(selectLabels, (i, el) => {\n this.searchData.push({\n id: i,\n val: $(el).text().trim(),\n });\n });\n }\n\n bindEvents() {\n let self = this;\n\n this.$selectHeader.on('click' + '.' + this.constructor.NAME, () => {\n if (this.contentOpen) {\n this.close();\n } else if (this.$selectItems.length > 0 || this.searchApi) {\n this.show();\n }\n });\n\n this.$el.on('change' + '.' + this.constructor.NAME, 'input[type=\"checkbox\"]', function () {\n let el = this;\n let val = $(this).val();\n let closeTimeout = 600;\n\n self.preventClose = true;\n\n if (typeof self.confirmCheck === 'function' && el.checked) {\n el.checked = false;\n\n self.confirmCheck((cb) => {\n if (cb == 'confirmed') {\n if (self.useChips) {\n const hasItem = self.data[self.name].find((item) => item[self.primaryKeyword] === val);\n\n if (!hasItem) {\n self.data[self.name].push({ [self.primaryKeyword]: val, label: $(el).parent().find('[data-label]').text() });\n }\n } else if (self.data[self.name].indexOf(val) === -1) {\n self.data[self.name].push(val);\n }\n\n el.checked = true;\n self.onSelect(el);\n }\n\n setTimeout(function () {\n self.preventClose = false;\n }, closeTimeout);\n }, el);\n } else if (el.checked) {\n if (self.useChips) {\n const hasItem = self.data[self.name].find((item) => item[self.primaryKeyword] === val);\n\n if (!hasItem) {\n self.data[self.name].push({ [self.primaryKeyword]: val, label: $(el).parent().find('[data-label]').text() });\n }\n } else if (self.data[self.name].indexOf(val) === -1) {\n self.data[self.name].push(val);\n }\n\n self.onSelect(el);\n\n setTimeout(function () {\n self.preventClose = false;\n }, closeTimeout);\n } else if (typeof self.confirmUncheck === 'function' && !el.checked) {\n el.checked = true;\n\n self.confirmUncheck((cb) => {\n if (cb == 'confirmed') {\n if (self.useChips) {\n self.data[self.name] = self.data[self.name].filter((n) => n[self.primaryKeyword] != val);\n } else {\n self.data[self.name] = self.data[self.name].filter((n) => n != val);\n }\n\n el.checked = false;\n self.onSelect(el);\n }\n\n setTimeout(function () {\n self.preventClose = false;\n }, closeTimeout);\n }, el);\n } else if (!el.checked && !self.preventUncheck) {\n if (self.useChips) {\n self.data[self.name] = self.data[self.name].filter((n) => n[self.primaryKeyword] != val);\n } else {\n self.data[self.name] = self.data[self.name].filter((n) => n != val);\n }\n\n self.onSelect(el);\n\n setTimeout(function () {\n self.preventClose = false;\n }, closeTimeout);\n } else if (!el.checked && self.preventUncheck) {\n el.checked = true;\n\n setTimeout(function () {\n self.preventClose = false;\n }, closeTimeout);\n }\n });\n\n this.$el.on('change' + '.' + this.constructor.NAME, 'input[type=\"radio\"]', function () {\n let val = $(this).val();\n\n if (this.checked) {\n if (self.useChips) {\n self.data[self.name] = [{ [self.primaryKeyword]: val, label: $(this).parent().find('[data-label]').text() }];\n } else {\n self.data[self.name] = [val];\n }\n\n self.data[self.name] = [val];\n self.$select.find('input[type=\"radio\"]').not($(this)).prop('checked', false);\n self.$select.find('input[type=\"radio\"]').not($(this)).removeClass('checked');\n } else {\n self.data[self.name] = [];\n }\n });\n\n this.$el.on('click' + '.' + this.constructor.NAME, 'input[type=\"radio\"]', function () {\n if ($(this).hasClass('checked') && self.allowNoneOnRadioSelect) {\n self.data[self.name] = [];\n $(this).prop('checked', false);\n $(this).removeClass('checked');\n\n if (self.dynamicTitle && typeof self.dynamicTitle !== 'function') {\n self.$selectTitle.text(self.dynamicTitleDefault);\n }\n } else {\n $(this).addClass('checked');\n\n if (self.dynamicTitle && typeof self.dynamicTitle !== 'function') {\n self.$selectTitle.text(escape($(this).parent().find('[data-label]').text()));\n }\n }\n\n if (typeof self.dynamicTitle === 'function') {\n self.$selectTitle.text(self.dynamicTitle.call(this));\n }\n\n self.onSelect(this);\n });\n\n if (this.scroll) {\n this.$scrollableContent.find('.ps__thumb-y').mousedown(function () {\n self.$scrollableContent.addClass('ps-mousedown-scroll');\n });\n\n $(document).mouseup(function () {\n if (self.$scrollableContent.hasClass('ps-mousedown-scroll')) {\n self.$scrollableContent.removeClass('ps-mousedown-scroll');\n }\n });\n }\n\n if (this.showSearch) {\n this.$searchInput.on(\n 'keydown' + '.' + this.constructor.NAME,\n debounce(function () {\n self.searchString = $(this).val().trim();\n self.search.call(self);\n }, 250)\n );\n\n this.$searchInput.on('focusin' + '.' + this.constructor.NAME, function () {\n self.$searchContainer.addClass('focused');\n });\n\n this.$searchInput.on('focusout' + '.' + this.constructor.NAME, function () {\n self.$searchContainer.removeClass('focused');\n });\n\n this.$searchContainer.on('click' + '.' + this.constructor.NAME, '[data-clear-search]', function () {\n if (self.searchString.length) {\n self.$searchInput.val('');\n self.searchString = '';\n self.search.call(self);\n } else {\n return;\n }\n });\n }\n\n if (this.showFooter) {\n this.$closeButton.on('click' + '.' + this.constructor.NAME, () => {\n this.close();\n });\n }\n\n $(document).on('touchstart click', function (e) {\n if (!self.$el.is(e.target) && !self.$el.has(e.target).length && self.contentOpen && !self.preventClose) {\n self.close.call(self);\n }\n });\n\n if (this.opts.position === 'fixed') {\n this._scrollCallback = () => {\n if (!this.$el || !this.$el.hasClass('show')) {\n return;\n }\n\n requestAnimationFrame(() => {\n this.$el.find('.select-content').css({\n top: this.$container.offset().top - $(window).scrollTop(),\n left: this.$container.offset().left - $(window).scrollLeft(),\n width: this.contentWidth ? `var(--cool-select-content-width, ${this.contentWidth}px)` : this.$container.outerWidth()\n });\n });\n };\n\n if (window.ResizeObserver) {\n this._resizeCallback = (entry) => {\n if (!this.$el || !this.$el.hasClass('show')) {\n return;\n }\n\n requestAnimationFrame(() => {\n this.$el.find('.select-content').css({\n top: this.$container.offset().top - $(window).scrollTop(),\n left: this.$container.offset().left - $(window).scrollLeft(),\n width: this.contentWidth ? `var(--cool-select-content-width, ${this.contentWidth}px)` : this.$container.outerWidth()\n });\n });\n };\n \n resizeManager.observe(document.body, this._resizeCallback);\n }\n }\n }\n\n unbindEvents() {\n this.$el.off('.' + this.constructor.NAME);\n $(document).off('touchstart click.' + this.constructor.NAME);\n\n if (this.opts.position === 'fixed') {\n if (this._scrollCallback) {\n scrollManager.remove(`select-${this.name}`);\n this._scrollCallback = null;\n }\n \n if (this._resizeCallback) {\n resizeManager.unobserve(document.body);\n this._resizeCallback = null;\n }\n }\n }\n\n getData(data) {\n if (data) {\n return this.data[data];\n } else {\n return this.data;\n }\n }\n\n setData() {\n let self = this;\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n if (this.showValidStateIcon) {\n this.$selectIconContainer.html(`<i class=\"${faNameSpace} fa-check text-success icon\"></i>`);\n } else {\n this.$selectIconContainer.html(this.selectIconDefault);\n }\n\n if (this.useChips) {\n this.$selectTitle.empty();\n }\n\n if (this.searchApi.length) {\n let searchUrl = this.searchApi;\n let itemCount = this.data[this.name].length;\n let currentCount = 0;\n\n this.data[self.name].forEach(function (value) {\n searchUrl += encodeURIComponent('#' + value);\n currentCount++;\n\n if (currentCount !== itemCount) {\n searchUrl += '+';\n }\n });\n\n $.ajax({\n method: 'GET',\n url: searchUrl,\n }).done((data) => {\n let itemIds = data.map((item) => {\n return item.id.toString();\n });\n\n self.data[self.name] = self.data[self.name].filter(function (value) {\n if (self.useObjects) {\n return itemIds.indexOf(value[self.primaryKeyword].toString()) > -1;\n } else {\n return itemIds.indexOf(value.toString()) > -1;\n }\n });\n\n if (self.data[self.name].length == 0) {\n self.$selectIconContainer.html(self.selectIconDefault);\n }\n\n const items = data.filter(function (item) {\n if (self.useObjects) {\n return self.data[self.name].findIndex((value) => value[self.primaryKeyword] == item.id) > -1 && self.itemsToExclude.indexOf(item.id) === -1 && item.id != 0;\n } else {\n return self.data[self.name].indexOf(item.id) > -1 && self.itemsToExclude.indexOf(item.id) === -1 && item.id != 0;\n }\n });\n\n let result = self._renderItemList(items);\n\n self.$scrollableContent.append(result);\n\n let $inputs = self.$scrollableContent.find(':input');\n\n self._updateScrollbarVisibility();\n\n if (self.$scrollableContent.find(':input[type=\"checkbox\"]').length) {\n self.type = 'checkbox';\n } else if (self.$scrollableContent.find(':input[type=\"radio\"]').length) {\n self.type = 'radio';\n }\n\n if (self.type == 'checkbox') {\n self.data[self.name].forEach(function (value) {\n let valueId = self.useObjects ? value[self.primaryKeyword].toString() : value.toString();\n let $input = $inputs.filter(function () {\n return this.value == valueId;\n });\n\n $input.prop('checked', true);\n\n if (self.useChips) {\n self._renderChips();\n }\n\n self.onSelect($input[0]);\n });\n } else if (self.type == 'radio') {\n const self = this;\n const value = this.data[this.name][0];\n\n let $input = $inputs.filter(function () {\n return this.value == value;\n });\n\n $input.prop('checked', true);\n $input.addClass('checked');\n\n if (self.useChips) {\n self._renderChips();\n } else if (self.dynamicTitle && typeof self.dynamicTitle !== 'function') {\n self.$selectTitle.text($input.parent().find('[data-label]').text());\n }\n\n self.onSelect($input[0]);\n }\n\n if (typeof self.dynamicTitle === 'function') {\n self.$selectTitle.text(self.dynamicTitle.call(this));\n }\n });\n } else {\n let $inputs = this.$scrollableContent.find(':input');\n let inputValues =\n $inputs.length > 0\n ? $inputs\n .map(function () {\n return this.value.toString();\n })\n .get()\n : [];\n\n this.data[this.name] = this.data[this.name].filter(function (value) {\n return inputValues.indexOf(value.toString()) > -1;\n });\n\n if (this.data[this.name].length == 0) {\n this.$selectIconContainer.html(this.selectIconDefault);\n }\n\n if (this.$scrollableContent.find(':input[type=\"checkbox\"]').length) {\n this.type = 'checkbox';\n } else if (this.$scrollableContent.find(':input[type=\"radio\"]').length) {\n this.type = 'radio';\n }\n\n if (this.type == 'checkbox') {\n this.data[this.name].forEach(function (value) {\n let $input = $inputs.filter(function () {\n return this.value == value;\n });\n\n $input.prop('checked', true);\n\n if (self.useChips) {\n self._renderChips();\n }\n\n self.onSelect($input[0]);\n });\n } else if (this.type == 'radio') {\n let $input = $inputs.filter(function () {\n return this.value == this.data[this.name][0];\n });\n\n $input.prop('checked', true);\n $input.addClass('checked');\n\n if (this.useChips) {\n this._renderChips();\n } else if (this.dynamicTitle && typeof this.dynamicTitle !== 'function') {\n this.$selectTitle.text($input.parent().find('[data-label]').text());\n }\n\n this.onSelect($input[0]);\n }\n\n if (typeof this.dynamicTitle === 'function') {\n this.$selectTitle.text(this.dynamicTitle.call(this));\n }\n }\n }\n\n _renderChips() {\n this.$selectTitle.empty();\n\n if (this.data[this.name].length === 0) {\n if (this.dynamicTitle && this.dynamicTitleDefault) {\n this.$selectTitle.text(this.dynamicTitleDefault);\n } else {\n this.$selectTitle.text(this.cachedTitle);\n }\n return;\n }\n\n this.data[this.name].forEach((dataItem) => {\n const value = this.useChips ? dataItem[this.primaryKeyword] : dataItem;\n const $input = this.$select ? this.$select.find(`input[value=\"${value}\"]`) : [];\n const label = $input.length ? $input.parent().find('[data-label]').text() : dataItem.label || dataItem.name || dataItem.value || value;\n\n const $chip = $(`\n <span class=\"chip\" data-value=\"${value}\">\n <span class=\"chip-title\">${escape(label)}</span>\n </span>\n `);\n\n $chip.on('click', (e) => {\n e.stopPropagation();\n\n const $input = this.$select.find(`input[value=\"${value}\"]`);\n\n if ($input.length) {\n $input.prop('checked', false).trigger('change');\n } else {\n if (this.useChips) {\n this.data[this.name] = this.data[this.name].filter((item) => item[this.primaryKeyword].toString() !== value.toString());\n } else {\n this.data[this.name] = this.data[this.name].filter((item) => item.toString() !== value.toString());\n }\n\n if (this.searchApi.length) {\n this.items = this.items.filter((item) => item[this.primaryKeyword].toString() !== value.toString());\n }\n\n this._renderChips();\n\n if (typeof this.opts.onSelect === 'function') {\n this.opts.onSelect.call(this, dataItem, this, false);\n }\n }\n });\n\n this.$selectTitle.append($chip);\n });\n\n if (this.contentOpen) {\n setTimeout(() => {\n this._updateScrollbarVisibility();\n }, 0);\n }\n }\n\n search() {\n let self = this;\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n if (this.searchString.length) {\n if (this.isSearchApiEnabled()) {\n if (this.searchString === this.lastSearchQuery) {\n return;\n }\n\n this.lastSearchQuery = this.searchString;\n this._showSpinner();\n\n if (this.searchRequest !== null) {\n this.searchRequest.abort();\n }\n\n clearTimeout(this._searchDebounceTimer);\n this._searchDebounceTimer = setTimeout(() => {\n this.searchRequest = $.ajax({\n method: 'GET',\n url: this.searchApi + this.searchString,\n }).done(function (data) {\n self.searchRequest = null;\n\n self.$scrollableContent.find('input:not(:checked)').parents('.select-item').not('.static-item').remove();\n\n const items = data.filter(function (item) {\n if (self.useObjects) {\n return self.data[self.name].findIndex((value) => value[self.primaryKeyword] == item.id) === -1 && self.itemsToExclude.indexOf(item.id) === -1 && item.id != 0;\n } else {\n return self.data[self.name].indexOf(item.id) === -1 && self.itemsToExclude.indexOf(item.id) === -1 && item.id != 0;\n }\n });\n\n let result = self._renderItemList(items);\n\n self.$scrollableContent.append(result);\n\n self.$searchIconContainer.html(`<i class=\"${faNameSpace} fa-times icon\"></i>`);\n self.$searchIconContainer.attr('data-clear-search', 'true');\n\n self._updateScrollbarVisibility();\n \n if (self.contentOpen) {\n self._recalculateContentHeight();\n }\n });\n }, 300);\n } else {\n const searchStringLower = this.searchString.toLowerCase();\n let results = this.searchData.filter(function (item) {\n return item.val.toLowerCase().indexOf(searchStringLower) > -1;\n });\n\n this.$selectItems.removeClass('d-none');\n this.$selectItems.removeClass('visible');\n\n results.forEach(function (item) {\n $(self.$selectItems[item.id]).addClass('visible');\n });\n\n this.$selectItems.not('.visible').addClass('d-none');\n this.$searchIconContainer.html(`<i class=\"${faNameSpace} fa-times icon\"></i>`);\n this.$searchIconContainer.attr('data-clear-search', 'true');\n }\n } else {\n this.lastSearchQuery = '';\n if (this.isSearchApiEnabled()) {\n this.$scrollableContent.find('input:not(:checked)').parents('.select-item').not('.static-item').remove();\n this._hideSpinner();\n this.$searchIconContainer.attr('data-clear-search', '');\n this._performInitialSearch();\n } else {\n this.$selectItems.removeClass('d-none');\n this.$selectItems.removeClass('visible');\n this.$searchIconContainer.html(`<i class=\"${faNameSpace} fa-search icon\"></i>`);\n this.$searchIconContainer.attr('data-clear-search', '');\n }\n }\n\n if (this.scroll) {\n this.scroll.update();\n }\n\n this.onUpdate();\n }\n\n _recalculateContentHeight() {\n const $selectContent = this.$el.find('.select-content');\n const headerHeight = this.$selectHeader.outerHeight(true);\n const contentHeight = this.scrollContentHeight;\n const viewportHeight = $(window).height();\n const scrollTop = $(window).scrollTop();\n const minSpaceRequired = 50;\n\n let actualContentHeight = contentHeight;\n let searchHeight = 0;\n let footerHeight = 0;\n \n if (this.$searchContainer && this.$searchContainer.length) {\n searchHeight = this.$searchContainer.outerHeight(true) || 0;\n }\n \n if (this.$footerContainer && this.$footerContainer.length) {\n footerHeight = this.$footerContainer.outerHeight(true) || 0;\n }\n \n if (this.$scrollableContent && this.$scrollableContent.length) {\n const scrollableHeight = this.$scrollableContent[0].scrollHeight;\n const scrollableClientHeight = this.$scrollableContent[0].clientHeight;\n \n actualContentHeight = Math.min(Math.max(scrollableHeight, scrollableClientHeight) + searchHeight + footerHeight, contentHeight);\n }\n\n let shouldOpenUpwards = this.$el.hasClass('select-dropup');\n let selectTop = 0;\n let constrainedHeight = actualContentHeight;\n\n const contentMarginBottom = parseInt($selectContent.css('margin-bottom') || 0, 10);\n const contentMarginTop = parseInt($selectContent.css('margin-top') || 0, 10);\n\n if (this.opts.position === 'fixed') {\n const top = this.$container.offset().top - $(window).scrollTop();\n const spaceBelow = viewportHeight - top - headerHeight - minSpaceRequired;\n const spaceAbove = top - minSpaceRequired;\n \n if (shouldOpenUpwards) {\n constrainedHeight = Math.min(actualContentHeight, spaceAbove);\n selectTop = top - constrainedHeight - contentMarginBottom;\n } else {\n constrainedHeight = Math.min(actualContentHeight, spaceBelow);\n selectTop = top + headerHeight + contentMarginTop;\n }\n } else {\n const containerOffset = this.$container.offset();\n const spaceBelow = viewportHeight - (containerOffset.top - scrollTop) - headerHeight - minSpaceRequired;\n const spaceAbove = containerOffset.top - scrollTop - minSpaceRequired;\n \n if (shouldOpenUpwards) {\n constrainedHeight = Math.min(actualContentHeight, spaceAbove);\n selectTop = -constrainedHeight - contentMarginBottom;\n } else {\n constrainedHeight = Math.min(actualContentHeight, spaceBelow);\n selectTop = headerHeight + contentMarginTop;\n }\n }\n\n const scrollableMaxHeight = constrainedHeight - searchHeight - footerHeight;\n\n $selectContent.css({\n 'height': constrainedHeight + 'px'\n });\n\n if (this.$scrollableContent && this.$scrollableContent.length) {\n this.$scrollableContent.css({\n 'max-height': scrollableMaxHeight + 'px'\n });\n }\n\n if (this.opts.position === 'fixed') {\n $selectContent.css({\n top: selectTop\n });\n } else {\n $selectContent.css({\n top: selectTop\n });\n }\n\n if (this.scroll) {\n setTimeout(() => {\n this._updateScrollbarVisibility();\n }, 0);\n }\n }\n\n show() {\n if (this.$el.hasClass('show')) {\n return;\n }\n\n let top = 0;\n let left = 0;\n\n if (this.opts.position === 'fixed') {\n top = this.$container.offset().top - $(window).scrollTop();\n left = this.$container.offset().left - $(window).scrollLeft();\n }\n\n let $otherSelects = $('.select.show');\n let zindex = 1;\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n if ($otherSelects.length) {\n zindex = parseInt($otherSelects.first().css('z-index'), 10) + 2;\n }\n\n this.$el.addClass('show');\n\n if (!$otherSelects.length) {\n zindex = parseInt(this.$el.css('z-index'), 10) + 1;\n }\n\n const $selectContent = this.$el.find('.select-content');\n const headerHeight = this.$selectHeader.outerHeight(true);\n const contentHeight = this.scrollContentHeight;\n const viewportHeight = $(window).height();\n const scrollTop = $(window).scrollTop();\n const minSpaceRequired = 50;\n\n let actualContentHeight = contentHeight;\n let searchHeight = 0;\n let footerHeight = 0;\n \n if (this.$searchContainer && this.$searchContainer.length) {\n searchHeight = this.$searchContainer.outerHeight(true) || 0;\n }\n \n if (this.$footerContainer && this.$footerContainer.length) {\n footerHeight = this.$footerContainer.outerHeight(true) || 0;\n }\n \n if (this.$scrollableContent && this.$scrollableContent.length) {\n const scrollableHeight = this.$scrollableContent[0].scrollHeight;\n const scrollableClientHeight = this.$scrollableContent[0].clientHeight;\n \n actualContentHeight = Math.min(Math.max(scrollableHeight, scrollableClientHeight) + searchHeight + footerHeight, contentHeight);\n }\n\n let shouldOpenUpwards = false;\n let selectTop = 0;\n let constrainedHeight = actualContentHeight;\n\n const contentMarginBottom = parseInt($selectContent.css('margin-bottom') || 0, 10);\n const contentMarginTop = parseInt($selectContent.css('margin-top') || 0, 10);\n\n if (this.opts.position === 'fixed') {\n const spaceBelow = viewportHeight - top - headerHeight - minSpaceRequired;\n const spaceAbove = top - minSpaceRequired;\n \n shouldOpenUpwards = spaceBelow < actualContentHeight && spaceAbove > spaceBelow;\n \n if (shouldOpenUpwards) {\n constrainedHeight = Math.min(actualContentHeight, spaceAbove);\n selectTop = top - constrainedHeight - contentMarginBottom;\n } else {\n constrainedHeight = Math.min(actualContentHeight, spaceBelow);\n selectTop = top + headerHeight + contentMarginTop;\n }\n } else {\n const containerOffset = this.$container.offset();\n const spaceBelow = viewportHeight - (containerOffset.top - scrollTop) - headerHeight - minSpaceRequired;\n const spaceAbove = containerOffset.top - scrollTop - minSpaceRequired;\n \n shouldOpenUpwards = spaceBelow < actualContentHeight && spaceAbove > spaceBelow;\n \n if (shouldOpenUpwards) {\n constrainedHeight = Math.min(actualContentHeight, spaceAbove);\n selectTop = -constrainedHeight - contentMarginBottom;\n } else {\n constrainedHeight = Math.min(actualContentHeight, spaceBelow);\n selectTop = headerHeight + contentMarginTop;\n }\n }\n\n const scrollableMaxHeight = constrainedHeight - searchHeight - footerHeight;\n\n $selectContent.css({\n 'height': constrainedHeight + 'px'\n });\n\n if (this.$scrollableContent && this.$scrollableContent.length) {\n this.$scrollableContent.css({\n 'max-height': scrollableMaxHeight + 'px'\n });\n }\n\n this.$el.toggleClass('select-dropup', shouldOpenUpwards);\n this.$el.toggleClass('select-dropdown', !shouldOpenUpwards);\n\n const contentRequiredWidth = $selectContent.outerWidth();\n\n $selectContent.css({\n 'z-index': zindex,\n position: this.opts.position === 'fixed' ? 'fixed' : 'absolute'\n });\n\n if (this.opts.position === 'fixed') {\n $selectContent.css({\n top: selectTop,\n left,\n width: this.contentWidth ? `var(--cool-select-content-width, ${this.contentWidth}px)` : this.$container.outerWidth()\n });\n } else {\n $selectContent.css({\n top: selectTop,\n width: this.contentWidth ? `var(--cool-select-content-width, ${this.contentWidth}px)` : contentRequiredWidth > this.$container.outerWidth() ? `var(--cool-select-content-width, auto)` : this.$container.outerWidth()\n });\n }\n\n $selectContent.css({\n 'min-width': this.$container.outerWidth()\n });\n\n if (this.$scrollableContent.length) {\n if (this.$scrollableContent[0].offsetHeight < this.$scrollableContent[0].scrollHeight) {\n this.$scrollableContent[0].scrollTop = 1;\n this.$scrollableContent[0].scrollTop = 0;\n }\n }\n\n if (shouldOpenUpwards) {\n this.$selectIconContainer.html(`<i class=\"${faNameSpace} fa-angle-down icon\"></i>`);\n } else {\n this.$selectIconContainer.html(`<i class=\"${faNameSpace} fa-angle-up icon\"></i>`);\n }\n\n setTimeout(() => {\n this.$el[0].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });\n\n if (this.scroll) {\n this._updateScrollbarVisibility();\n }\n }, 300);\n\n this.contentOpen = true;\n\n if (this.opts.position === 'fixed' && this._scrollCallback) {\n scrollManager.add(`select-${this.name}`, this._scrollCallback);\n }\n\n this.onShow();\n }\n\n close() {\n if (!this.preventClose) {\n let self = this;\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n this.$el.removeClass('show');\n this.$el.removeClass('select-dropup select-dropdown');\n\n setTimeout(() => {\n self.$el.removeAttr('style');\n }, 300);\n\n if (this.data[this.name].length > 0 && this.showValidStateIcon) {\n this.$selectIconContainer.html(`<i class=\"${faNameSpace} fa-check text-success icon\"></i>`);\n } else {\n this.$selectIconContainer.html(this.selectIconDefault);\n }\n\n this.contentOpen = false;\n\n if (this.opts.position === 'fixed' && this._scrollCallback) {\n scrollManager.remove(`select-${this.name}`);\n }\n\n this.onClose();\n }\n }\n\n onSelect(el) {\n const data = $(el).parents('.select-item').data();\n const val = $(el).val();\n\n if (this.searchApi.length && !$.isEmptyObject(data)) {\n if ($(el).length && el.checked) {\n this.items.push(data);\n\n if (this.useChips) {\n const hasItem = this.data[this.name].find((item) => {\n return item[this.primaryKeyword].toString() === val.toString();\n });\n\n if (!hasItem) {\n this.data[this.name].push({\n [this.primaryKeyword]: val,\n label: $(el).parent().find('[data-label]').text(),\n });\n }\n } else if (this.data[this.name].indexOf(val) === -1) {\n this.data[this.name].push(val);\n }\n } else {\n this.items = $.grep(this.items, (item) => {\n return item[this.primaryKeyword].toString() !== val.toString();\n });\n\n if (this.useChips) {\n this.data[this.name] = this.data[this.name].filter((item) => item[this.primaryKeyword].toString() !== val.toString());\n } else {\n this.data[this.name] = this.data[this.name].filter((id) => id.toString() !== val.toString());\n }\n }\n }\n\n if (this.useChips) {\n this._renderChips();\n }\n\n if (typeof this.opts.onSelect === 'function') {\n this.opts.onSelect.call(el, data, this, el.checked);\n }\n }\n\n getItem(key, val) {\n let result = $.grep(this.items, function (item) {\n return item[key] == val;\n })[0];\n\n return result ? result : null;\n }\n\n getSelectedItems(segment) {\n let ids = [];\n let result = [];\n let data = this.data[this.name];\n\n if (!$.isArray(data)) {\n ids.push(data);\n } else {\n ids = data;\n }\n\n if (!this.useChips) {\n ids = ids.map(String);\n } else {\n ids = ids.map((obj) => obj[this.primaryKeyword].toString());\n }\n\n if (this.items.length > 0) {\n result = $.grep(this.items, function (item) {\n return ids.indexOf(item.id.toString()) > -1;\n });\n\n if (segment) {\n result = result\n .map((obj) => {\n return obj[segment];\n })\n .filter((obj) => {\n return obj != null;\n });\n }\n } else {\n result = ids;\n }\n\n return result;\n }\n\n getSelectedItem(segment) {\n return this.getSelectedItems(segment)[0];\n }\n\n _renderItemList(items) {\n if (!items || !items.length) return [];\n\n const checkedItems = this.data[this.name].map((item) => (this.useChips ? item[this.primaryKeyword].toString() : item.toString()));\n\n const fragment = document.createDocumentFragment();\n const resultItems = [];\n\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let label = '';\n\n if (typeof this.labelTemplate === 'function') {\n label = this.labelTemplate(item);\n } else {\n if (item.name) {\n label = item.name;\n } else if (item.label) {\n label = item.label;\n } else if (item.value) {\n label = item.value;\n }\n }\n\n const id = this.useChips ? item[this.primaryKeyword] : item.id;\n const isChecked = checkedItems.indexOf(id.toString()) > -1;\n const $item = $(this._getItemTemplate(item, i, label, isChecked)).data(item);\n resultItems.push($item);\n }\n\n return resultItems;\n }\n\n _getItemTemplate(item, index, label, isChecked) {\n return `\n <div class=\"select-item\">\n <div class=\"select-item-${this.type}\">\n <div class=\"form-check\">\n <input type=\"${this.type}\"\n id=\"select-${this.name}-${item.id}\"\n value=\"${item.id}\"\n tabindex=\"-1\"\n ${isChecked ? 'checked' : ''}>\n <label for=\"select-${this.name}-${item.id}\">\n <span class=\"form-check-icon\">\n <svg viewBox=\"0 0 18 18\">\n <polyline points=\"1.5 6 4.5 9 10.5 1\"></polyline>\n </svg>\n </span>\n <span class=\"form-check-label\"${typeof this.labelTemplate !== 'function' ? ' data-label' : ''}>\n ${typeof this.labelTemplate !== 'function' ? escape(label) : label}\n </span>\n </label>\n </div>\n </div>\n </div>`;\n }\n\n _renderSearch() {\n if (!this.showSearch) {\n return '';\n } else {\n const faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n\n return `\n\n <div class=\"select-search\">\n\n <div class=\"select-search-input\">\n\n <input type=\"text\" name=\"select-search\" value=\"\" placeholder=\"${this.searchPlaceholder}\" tabindex=\"-1\">\n\n </div>\n\n <div class=\"select-search-icon\">\n\n <i class=\"${faNameSpace} fa-search icon\"></i>\n\n </div>\n\n </div>\n\n `;\n }\n }\n\n _renderFooter() {\n if (!this.showFooter) {\n return '';\n } else {\n return `\n\n <div class=\"select-footer\">\n\n <button class=\"btn btn-block btn-light btn-sm\" type=\"button\" tabindex=\"-1\" data-select-close >\n ${this.btnCloseText}\n </button>\n\n </div>\n\n `;\n }\n }\n\n isSearchApiEnabled() {\n return this.searchApi && this.searchApi.length;\n }\n\n _showSpinner() {\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n this.$searchIconContainer.html(`<i class=\"${faNameSpace} fa-spinner-third fa-spin icon\"></i>`);\n }\n\n _hideSpinner() {\n let faNameSpace = this.opts.faPro ? 'fal' : 'fas';\n this.$searchIconContainer.html(`<i class=\"${faNameSpace} fa-search icon\"></i>`);\n }\n\n selectItem(id) {\n const $input = this.$select.find(`:input[value=\"${id}\"]`);\n\n if ($input.length) {\n if (this.type === 'radio') {\n this.$select.find('input[type=\"radio\"]').prop('checked', false).removeClass('checked');\n if (this.useChips) {\n const label = $input.parent().find('[data-label]').text();\n this.data[this.name] = [\n {\n [this.primaryKeyword]: id,\n label: label,\n },\n ];\n } else {\n this.data[this.name] = [id];\n }\n } else {\n if (this.useChips) {\n const hasItem = this.data[this.name].find((item) => item[this.primaryKeyword].toString() === id.toString());\n if (!hasItem) {\n const label = $input.parent().find('[data-label]').text();\n this.data[this.name].push({\n [this.primaryKeyword]: id,\n label: label,\n });\n }\n } else if (this.data[this.name].indexOf(id) === -1) {\n this.data[this.name].push(id);\n }\n }\n\n $input.prop('checked', true).addClass('checked').trigger('change');\n\n return true;\n }\n\n return false;\n }\n\n clear() {\n const $checkedInputs = this.$select.find(':input:checked');\n\n this.$select.find(':input').prop('checked', false).removeClass('checked');\n this.data[this.name] = [];\n\n if (this.useChips) {\n this._renderChips();\n } else if (this.dynamicTitle && typeof this.dynamicTitle !== 'function') {\n this.$selectTitle.text(this.dynamicTitleDefault || this.cachedTitle);\n }\n\n if (this.showValidStateIcon) {\n this.$selectIconContainer.html(this.selectIconDefault);\n }\n\n $checkedInputs.each((_, input) => {\n const $input = $(input);\n const data = $input.parents('.select-item').data();\n if (typeof this.opts.onSelect === 'function') {\n this.opts.onSelect.call(input, data, this, false);\n }\n });\n }\n}\n\nSelect._jQueryInit();\n\nexport default Select;","import Component from './component';\nimport { touchEvents, generateUUID, playAnimation, resizeManager, scrollManager } from './utils';\nimport PerfectScrollbar from 'perfect-scrollbar';\n\nif (typeof window !== 'undefined' && !window.PerfectScrollbar) {\n window.PerfectScrollbar = PerfectScrollbar;\n}\n\nclass Dropdown extends Component {\n\n static NAME = 'coolDropdown';\n\n static DEFAULTS = {\n animation: true,\n animationIn: 'zoomIn',\n animationOut: 'zoomOut',\n animationSpeed: 'fastest',\n offset: null,\n minWidth: null,\n closeOnItemClick: true,\n positionObserver: true,\n content: false,\n scroll: true,\n scrollContentHeight: 100,\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n onItemClick: null,\n position: 'absolute',\n placement: 'bottom',\n align: 'start'\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${Dropdown.NAME}`);\n if (!instance) {\n instance = new Dropdown(this, typeof config === 'object' && config);\n $el.data(`plugin_${Dropdown.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Dropdown.NAME];\n $.fn[Dropdown.NAME] = Dropdown._jQueryInterface;\n $.fn[Dropdown.NAME].Constructor = Dropdown;\n $.fn[Dropdown.NAME].defaults = Dropdown.DEFAULTS || {};\n $.fn[Dropdown.NAME].noConflict = () => {\n $.fn[Dropdown.NAME] = previousName;\n return Dropdown._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.dropdown) {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, window.Cool.settings.dropdown, opts);\n } else {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.el = el;\n this._resizeCallback = null;\n this._scrollCallback = null;\n\n this.init();\n }\n\n setupResizeHandling() {\n if (window.ResizeObserver) {\n this._resizeCallback = (entry) => {\n if (!this.contentOpen) return;\n \n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n this.setPosition();\n this.onUpdate();\n });\n };\n \n resizeManager.observe(this.$el[0], this._resizeCallback);\n resizeManager.observe(document.body, this._resizeCallback);\n \n if (this.$container.length) {\n resizeManager.observe(this.$container[0], this._resizeCallback);\n }\n \n } else {\n let resizeTimeout;\n this.resizeHandler = () => {\n if (!this.contentOpen) return;\n\n clearTimeout(resizeTimeout);\n \n const now = performance.now();\n if (!this.lastResizeTime || now - this.lastResizeTime > 100) {\n this.setPosition();\n this.onUpdate();\n this.lastResizeTime = now;\n } else {\n resizeTimeout = setTimeout(() => {\n this.setPosition();\n this.onUpdate();\n }, 16);\n }\n };\n \n window.addEventListener('resize', this.resizeHandler, { passive: true });\n }\n }\n\n setupScrollHandling() {\n if (this.position === 'fixed') {\n this._scrollCallback = () => {\n if (!this.contentOpen || !this.$dropdown.hasClass('show')) return;\n \n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n this.setPosition();\n this.onUpdate();\n });\n };\n \n scrollManager.add(`dropdown-${this.id}`, this._scrollCallback);\n \n let $scrollableParent = this.$el.parent();\n this.scrollableParents = [];\n\n while ($scrollableParent.length && $scrollableParent[0] !== document.body) {\n const overflow = $scrollableParent.css('overflow-y');\n if (overflow === 'scroll' || overflow === 'auto') {\n const scrollHandler = () => this._scrollCallback();\n $scrollableParent[0].addEventListener('scroll', scrollHandler, { passive: true });\n this.scrollableParents.push({ element: $scrollableParent[0], handler: scrollHandler });\n }\n $scrollableParent = $scrollableParent.parent();\n }\n }\n }\n\n setupVisibilityDetection() {\n if (!window.IntersectionObserver) return;\n \n this.intersectionObserver = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (!entry.isIntersecting && this.contentOpen) {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n }\n \n this.rafId = requestAnimationFrame(() => {\n this.setPosition();\n });\n }\n });\n }, {\n threshold: 0.1,\n rootMargin: '50px'\n });\n \n this.intersectionObserver.observe(this.$el[0]);\n }\n\n init() {\n this.buildCache().then(() => {\n this.buildScroll();\n this.setupVisibilityDetection();\n this.bindEvents();\n this.onInit();\n }).catch(() => {\n console.error('Failed to build Dropdown');\n });\n }\n\n destroy() {\n this.unbindEvents();\n\n if (this.scroll && typeof this.scroll.destroy === 'function') {\n this.scroll.destroy();\n this.scroll = null;\n }\n\n if (this.$dropdown) {\n this.$dropdown.remove();\n }\n\n this.$el.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n update() {\n const hasDarkMode = this.$scrollableContent && this.$scrollableContent.hasClass('ps-dark');\n\n if (this.scroll && typeof this.scroll.destroy === 'function') {\n this.scroll.destroy();\n this.scroll = null;\n }\n\n this.unbindEvents();\n this.buildCache().then(() => {\n if (hasDarkMode && this.$scrollableContent) {\n this.$scrollableContent.addClass('ps-dark');\n }\n this.buildScroll();\n this.setupVisibilityDetection();\n this.bindEvents();\n this.onUpdate();\n }).catch(() => {\n console.error('Failed to build Dropdown');\n });\n }\n\n buildCache() {\n return new Promise((resolve, reject) => {\n this.$el = $(this.el);\n this.$el.addClass('dropdown-trigger');\n this.$container = this.$el.parent('.dropdown').length ? this.$el.parent('.dropdown') : this.$el.parentsUntil('.dropdown').parent();\n \n if (!this.$container.length) {\n this.$container = this.$el.parent();\n }\n\n this.id = 'dropdown-' + generateUUID();\n this.animation = this.$el.data('animation') ? this.$el.data('animation') : this.opts.animation;\n this.animationIn = this.$el.data('animationIn') ? this.$el.data('animationIn') : this.opts.animationIn;\n this.animationOut = this.$el.data('animationOut') ? this.$el.data('animationOut') : this.opts.animationOut;\n this.animationSpeed = this.$el.data('animationSpeed') ? this.$el.data('animationSpeed') : this.opts.animationSpeed;\n this.position = this.$el.data('position') ? this.$el.data('position') : this.opts.position;\n this.placement = this.$el.data('placement') ? this.$el.data('placement') : this.opts.placement;\n this.offset = this.$el.data('offset') ? this.$el.data('offset') : this.opts.offset;\n this.minWidth = this.$el.data('minWidth') ? this.$el.data('minWidth') : this.opts.minWidth;\n this.scroll = this.$el.data('scroll') ? this.$el.data('scroll') : this.opts.scroll;\n this.scrollContentHeight = this.$el.data('scrollContentHeight') ? this.$el.data('scrollContentHeight') : this.opts.scrollContentHeight;\n this.positionObserver = this.$el.attr('data-position-observer') ? JSON.parse(this.$el.attr('data-position-observer')) : this.opts.positionObserver;\n this.closeOnItemClick = this.$el.data('closeOnItemClick') ? this.$el.data('closeOnItemClick') : this.opts.closeOnItemClick;\n this.preventClose = this.$el.data('preventClose') ? this.$el.data('preventClose') : false;\n this.content = this.$el.data('content') ? this.$el.data('content') : this.opts.content;\n this.contentOpen = false;\n\n if (this.$container.hasClass('dropup')) {\n this.placement = 'top';\n } else if (this.$container.hasClass('dropright')) {\n this.placement = 'right';\n } else if (this.$container.hasClass('dropbottom')) {\n this.placement = 'bottom';\n } else if (this.$container.hasClass('dropleft')) {\n this.placement = 'left';\n }\n \n const $existingMenu = this.$container.find('.dropdown-menu').first();\n\n if (this.position === 'fixed' && $existingMenu.length) {\n this.$dropdown = $existingMenu.clone(true, true);\n this.$dropdown.attr('id', this.id); \n this.$dropdown.removeClass('show');\n\n this.align = $existingMenu.hasClass('dropdown-menu-right') ? 'end' : 'start';\n \n $('body').append(this.$dropdown);\n \n $existingMenu.remove();\n\n this.$dropdown.find('.dropdown').each((index, nestedContainer) => {\n const $nestedContainer = $(nestedContainer);\n const $nestedTrigger = $nestedContainer.find('[data-toggle=\"dropdown\"]').first();\n const $nestedMenu = $nestedContainer.find('.dropdown-menu').first();\n \n if ($nestedTrigger.length && $nestedMenu.length && !$nestedTrigger.data(`plugin_${this.constructor.NAME}`)) {\n $nestedTrigger[this.constructor.NAME]({\n position: 'absolute',\n closeOnItemClick: false,\n positionObserver: true,\n onShow: function() {\n const parentZIndex = parseInt(this.$dropdown.css('z-index') || 9999, 10);\n $nestedMenu.css('z-index', parentZIndex + 1);\n }.bind(this)\n });\n }\n });\n \n const dropdownEl = this.$dropdown[0];\n \n this.$dropdownItems = this.$dropdown.find('a, button, .dropdown-item').filter(function() {\n return $(this).closest('.dropdown-menu')[0] === dropdownEl;\n });\n\n this.$scrollableContent = this.$dropdown.find('.dropdown-scrollable-content');\n \n this.$dropdown.css({\n 'min-width': this.minWidth ? this.minWidth + 'px' : ''\n });\n\n return resolve();\n \n } else if (typeof this.content === 'function') {\n let menuRight = this.opts.align === 'end' ? ' dropdown-menu-right' : '';\n\n this.$dropdown = $(`\n <div class=\"dropdown-menu${menuRight}\" id=\"${this.id}\">\n ${this.content()}\n </div>\n `);\n\n const positionTypes = {\n fixed: () => $('body').append(this.$dropdown),\n absolute: () => this.$el.after(this.$dropdown)\n };\n\n $.when(positionTypes[this.position]()).then(() => {\n this.$scrollableContent = this.$dropdown.find('.dropdown-scrollable-content') ? this.$dropdown.find('.dropdown-scrollable-content').first() : false;\n this.$dropdown.hasClass('dropdown-menu-right') ? (this.align = 'end') : (this.align = 'start');\n\n const dropdownEl = this.$dropdown[0];\n \n this.$dropdownItems = this.$dropdown.find('a, button, .dropdown-item').filter(function() {\n return $(this).closest('.dropdown-menu')[0] === dropdownEl;\n });\n\n if (this.minWidth) {\n this.$dropdown.css('min-width', this.minWidth + 'px');\n }\n\n return resolve();\n });\n \n } else {\n this.$dropdown = this.$container.find('.dropdown-menu').length ? this.$container.find('.dropdown-menu').first() : false;\n\n if (!this.$dropdown.length) return reject();\n\n this.$dropdown.hasClass('dropdown-menu-right') ? (this.align = 'end') : (this.align = 'start');\n this.$scrollableContent = this.$dropdown.find('.dropdown-scrollable-content').length ? this.$dropdown.find('.dropdown-scrollable-content').first() : false;\n\n const dropdownEl = this.$dropdown[0];\n\n this.$dropdownItems = this.$dropdown.find('a, button, .dropdown-item').filter(function() {\n return $(this).closest('.dropdown-menu')[0] === dropdownEl;\n });\n\n if (this.minWidth) {\n this.$dropdown.css('min-width', this.minWidth + 'px');\n }\n\n return resolve();\n }\n });\n }\n\n buildScroll() {\n if (this.opts.scroll && this.$scrollableContent.length) {\n this.$scrollableContent.css({\n 'max-height': this.scrollContentHeight + 'px'\n });\n\n if (touchEvents()) {\n this.$scrollableContent.css({\n 'overflow-y': 'auto',\n });\n } else {\n this.scroll = new PerfectScrollbar(this.$scrollableContent[0], {\n wheelSpeed: 1,\n wheelPropagation: false,\n minScrollbarLength: 20,\n suppressScrollX: true,\n scrollYMarginOffset: 2\n });\n }\n }\n }\n\n bindEvents() {\n let self = this;\n\n this.$el.on('click' + '.' + this.constructor.NAME, () => {\n if (this.contentOpen) {\n this.close();\n } else {\n this.show();\n }\n });\n\n if (this.position === 'fixed') {\n this.$dropdown.on('click' + '.' + this.constructor.NAME, 'a, button, .dropdown-item', function(e) {\n const $target = $(this);\n \n if ($target.closest('.dropdown-menu')[0] !== self.$dropdown[0]) {\n return;\n }\n \n if (!$target.hasClass('dropdown-trigger') && !$target.data('toggle')) {\n if (self.closeOnItemClick) {\n self.close();\n }\n \n self.onItemClick(this, e);\n }\n });\n } else {\n this.$dropdownItems.on('click' + '.' + this.constructor.NAME, function (e) {\n const $target = $(this);\n \n if (!$target.hasClass('dropdown-trigger') && !$target.data('toggle')) {\n if (self.closeOnItemClick) {\n self.close();\n }\n \n self.onItemClick(this, e);\n }\n });\n }\n\n this._documentClickHandler = (e) => {\n if (!this.contentOpen) return;\n \n const isClickInThisDropdown = this.$el.is(e.target) || \n this.$el.has(e.target).length > 0 ||\n this.$dropdown.is(e.target) || \n this.$dropdown.has(e.target).length > 0;\n\n const isNestedDropdownTrigger = this.$dropdown.find(e.target).closest('[data-toggle=\"dropdown\"]').length > 0;\n\n if (!isClickInThisDropdown && !isNestedDropdownTrigger) {\n this.close();\n }\n };\n\n document.addEventListener('click', this._documentClickHandler, { passive: true });\n document.addEventListener('touchstart', this._documentClickHandler, { passive: true });\n\n this.setupResizeHandling();\n this.setupScrollHandling();\n }\n\n unbindEvents() {\n this.$el.off('.' + this.constructor.NAME);\n\n if (this.$dropdown) {\n this.$dropdown.off('.' + this.constructor.NAME);\n }\n\n if (this.$dropdownItems && this.position !== 'fixed') {\n this.$dropdownItems.off('.' + this.constructor.NAME);\n }\n \n if (this._resizeCallback) {\n resizeManager.unobserve(this.$el[0]);\n resizeManager.unobserve(document.body);\n if (this.$container.length) {\n resizeManager.unobserve(this.$container[0]);\n }\n this._resizeCallback = null;\n }\n \n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n \n if (this._scrollCallback) {\n scrollManager.remove(`dropdown-${this.id}`);\n this._scrollCallback = null;\n }\n\n if (this.scrollableParents) {\n this.scrollableParents.forEach(({ element, handler }) => {\n element.removeEventListener('scroll', handler);\n });\n this.scrollableParents = [];\n }\n \n if (this.resizeHandler) {\n window.removeEventListener('resize', this.resizeHandler);\n this.resizeHandler = null;\n }\n\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = null;\n }\n\n if (this._documentClickHandler) {\n document.removeEventListener('click', this._documentClickHandler);\n document.removeEventListener('touchstart', this._documentClickHandler);\n this._documentClickHandler = null;\n }\n }\n\n setPosition(placement) {\n if (typeof placement === 'undefined' || placement === null) {\n placement = this.placement;\n }\n\n const triggerRect = this.$el[0].getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n \n let dropdownWidth = this.$dropdown.outerWidth(true);\n let dropdownHeight = this.$dropdown.outerHeight(true);\n let dropdownTriggerWidth = this.$el.outerWidth(true);\n let dropdownTriggerHeight = this.$el.outerHeight(true);\n \n let dropdownTriggerPosX, dropdownTriggerPosY;\n\n if (this.position === 'fixed') {\n const triggerOffset = this.$el.offset();\n dropdownTriggerPosX = triggerOffset.left;\n dropdownTriggerPosY = triggerOffset.top;\n } else {\n const $offsetParent = this.$dropdown.offsetParent();\n const parentOffset = $offsetParent.offset() || { left: 0, top: 0 };\n const triggerOffset = this.$el.offset();\n\n dropdownTriggerPosX = triggerOffset.left - parentOffset.left;\n dropdownTriggerPosY = triggerOffset.top - parentOffset.top;\n }\n\n let dropdownPosX = 0;\n let dropdownPosY = 0;\n let offsetX = 0;\n let offsetY = 0;\n\n if (this.offset) {\n const offsets = this.offset.split(',');\n offsetX = parseInt(offsets[0], 10) || 0;\n offsetY = parseInt(offsets[1], 10) || 0;\n }\n\n const spacing = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--cool-dropdown-spacer')) || 2;\n\n const calculatePosition = (currentPlacement, currentAlign = this.align) => {\n let x = 0, y = 0;\n \n switch (currentPlacement) {\n case 'top':\n x = currentAlign === 'end' \n ? dropdownTriggerPosX + dropdownTriggerWidth - dropdownWidth \n : dropdownTriggerPosX;\n y = dropdownTriggerPosY - dropdownHeight - spacing;\n break;\n case 'bottom':\n x = currentAlign === 'end' \n ? dropdownTriggerPosX + dropdownTriggerWidth - dropdownWidth \n : dropdownTriggerPosX;\n y = dropdownTriggerPosY + dropdownTriggerHeight + spacing;\n break;\n case 'left':\n x = dropdownTriggerPosX - dropdownWidth - spacing;\n y = dropdownTriggerPosY;\n break;\n case 'right':\n x = dropdownTriggerPosX + dropdownTriggerWidth + spacing;\n y = dropdownTriggerPosY;\n break;\n }\n \n return { x: x + offsetX, y: y + offsetY };\n };\n\n let finalPlacement = placement;\n let finalAlign = this.align;\n let position = calculatePosition(placement);\n \n if (this.positionObserver) {\n const margin = 5;\n \n const checkCollision = (pos, pl, al = this.align) => {\n const collision = {\n top: false,\n bottom: false,\n left: false,\n right: false\n };\n \n if (this.position === 'fixed') {\n collision.top = pos.y < margin;\n collision.bottom = pos.y + dropdownHeight > viewportHeight - margin;\n collision.left = pos.x < margin;\n collision.right = pos.x + dropdownWidth > viewportWidth - margin;\n } else {\n const dropdownLeft = this.position === 'fixed' ? pos.x : triggerRect.left + (pos.x - dropdownTriggerPosX);\n const dropdownTop = this.position === 'fixed' ? pos.y : triggerRect.top + (pos.y - dropdownTriggerPosY);\n const dropdownRight = dropdownLeft + dropdownWidth;\n const dropdownBottom = dropdownTop + dropdownHeight;\n \n collision.top = dropdownTop < margin;\n collision.bottom = dropdownBottom > viewportHeight - margin;\n collision.left = dropdownLeft < margin;\n collision.right = dropdownRight > viewportWidth - margin;\n }\n \n return collision;\n };\n \n const collision = checkCollision(position, placement, this.align);\n\n if (placement === 'bottom' && collision.bottom && !collision.top) {\n finalPlacement = 'top';\n position = calculatePosition('top', finalAlign);\n } else if (placement === 'top' && collision.top && !collision.bottom) {\n finalPlacement = 'bottom';\n position = calculatePosition('bottom', finalAlign);\n } else if (placement === 'right' && collision.right && !collision.left) {\n finalPlacement = 'left';\n position = calculatePosition('left', finalAlign);\n } else if (placement === 'left' && collision.left && !collision.right) {\n finalPlacement = 'right';\n position = calculatePosition('right', finalAlign);\n }\n\n const newCollision = checkCollision(position, finalPlacement, finalAlign);\n\n if ((finalPlacement === 'top' || finalPlacement === 'bottom')) {\n if (finalAlign === 'end' && newCollision.left && !newCollision.right) {\n finalAlign = 'start';\n position = calculatePosition(finalPlacement, finalAlign);\n } else if (finalAlign === 'start' && newCollision.right && !newCollision.left) {\n finalAlign = 'end';\n position = calculatePosition(finalPlacement, finalAlign);\n }\n }\n \n this.$container.removeClass('dropup dropbottom dropleft dropright');\n\n if (finalPlacement === 'top') {\n this.$container.addClass('dropup');\n } else if (finalPlacement === 'left') {\n this.$container.addClass('dropleft');\n } else if (finalPlacement === 'right') {\n this.$container.addClass('dropright');\n } else {\n this.$container.addClass('dropbottom');\n }\n\n this.$dropdown.attr('x-placement', finalPlacement + '-' + finalAlign);\n \n if (this.position === 'fixed') {\n position.x = Math.max(margin, Math.min(position.x, viewportWidth - dropdownWidth - margin));\n position.y = Math.max(margin, Math.min(position.y, viewportHeight - dropdownHeight - margin));\n } else {\n const dropdownScreenLeft = triggerRect.left + (position.x - dropdownTriggerPosX);\n const dropdownScreenTop = triggerRect.top + (position.y - dropdownTriggerPosY);\n \n if (dropdownScreenLeft < margin) {\n position.x += (margin - dropdownScreenLeft);\n } else if (dropdownScreenLeft + dropdownWidth > viewportWidth - margin) {\n position.x -= (dropdownScreenLeft + dropdownWidth - viewportWidth + margin);\n }\n \n if (dropdownScreenTop < margin) {\n position.y += (margin - dropdownScreenTop);\n } else if (dropdownScreenTop + dropdownHeight > viewportHeight - margin) {\n position.y -= (dropdownScreenTop + dropdownHeight - viewportHeight + margin);\n }\n }\n }\n\n dropdownPosX = position.x;\n dropdownPosY = position.y;\n\n if (this.position === 'fixed') {\n this.$dropdown.css({\n position: 'fixed',\n top: Math.round(dropdownPosY) + 'px',\n left: Math.round(dropdownPosX) + 'px',\n right: 'auto',\n bottom: 'auto',\n transform: 'none',\n 'will-change': 'auto',\n 'z-index': 9999\n });\n } else {\n const $container = this.$el.closest('.dropdown, .dropup, .dropleft, .dropright');\n \n if ($container.length) {\n const containerOffset = $container.offset();\n const triggerOffset = this.$el.offset();\n \n let relativeX = triggerOffset.left - containerOffset.left;\n let relativeY = triggerOffset.top - containerOffset.top;\n \n switch (finalPlacement) {\n case 'bottom':\n relativeY += dropdownTriggerHeight + spacing;\n if (finalAlign === 'end') {\n relativeX = relativeX + dropdownTriggerWidth - dropdownWidth;\n }\n break;\n case 'top':\n relativeY -= dropdownHeight + spacing;\n if (finalAlign === 'end') {\n relativeX = relativeX + dropdownTriggerWidth - dropdownWidth;\n }\n break;\n case 'left':\n relativeX -= dropdownWidth + spacing;\n break;\n case 'right':\n relativeX += dropdownTriggerWidth + spacing;\n break;\n }\n \n relativeX += offsetX;\n relativeY += offsetY;\n \n this.$dropdown.css({\n position: 'absolute',\n top: Math.round(relativeY) + 'px',\n left: Math.round(relativeX) + 'px',\n right: 'auto',\n bottom: 'auto',\n transform: 'none',\n 'will-change': 'auto'\n });\n }\n }\n }\n\n show() {\n if (!this.$dropdown || this.$dropdown.hasClass('show')) {\n return;\n }\n\n this.setPosition();\n\n if (this.animation) {\n this.$dropdown.attr('x-placement', this.placement + '-' + this.align);\n this.$dropdown.addClass(this.animationSpeed);\n playAnimation(this.$dropdown, this.animationIn);\n this.$dropdown.addClass('show');\n this.$dropdown.attr('id', this.id);\n this.$el.attr('data-dropdown', this.id);\n } else {\n this.$dropdown.attr('x-placement', this.placement + '-' + this.align);\n this.$dropdown.addClass('show');\n this.$dropdown.attr('id', this.id);\n this.$el.attr('data-dropdown', this.id);\n }\n\n if (this.opts.scroll && this.scroll && this.$scrollableContent.length) {\n this.$scrollableContent[0].offsetHeight;\n \n if (this.animation) {\n const animationDuration = this.$dropdown.css('animation-duration');\n const duration = animationDuration ? parseFloat(animationDuration) * 1000 : 300;\n \n setTimeout(() => {\n if (this.scroll && typeof this.scroll.update === 'function') {\n this.scroll.update();\n }\n }, duration);\n } else {\n\n requestAnimationFrame(() => {\n if (this.scroll && typeof this.scroll.update === 'function') {\n this.scroll.update();\n }\n });\n }\n }\n\n this.contentOpen = true;\n this.onShow();\n }\n\n close() {\n if (!this.$dropdown || this.preventClose) {\n return;\n }\n\n if (this.animation && !this.$dropdown.hasClass('animation')) {\n playAnimation(this.$dropdown, this.animationOut).then(() => {\n this.$dropdown.removeClass('show');\n this.$el.removeAttr('data-dropdown');\n });\n } else {\n this.$dropdown.removeClass('show');\n this.$el.removeAttr('data-dropdown');\n }\n\n this.contentOpen = false;\n this.onClose();\n }\n\n onItemClick(el, e) {\n let onItemClick = this.opts.onItemClick;\n\n if (typeof onItemClick === 'function') {\n onItemClick.call(el, e, this);\n }\n }\n}\n\nDropdown._jQueryInit();\n\nexport default Dropdown;","import Component from './component';\nimport { generateUUID, playAnimation, resizeManager } from './utils';\n\nclass Tooltip extends Component {\n\n static NAME = 'coolTooltip';\n\n static DEFAULTS = {\n container: 'body',\n animation: false,\n animationIn: 'fadeIn',\n animationOut: 'fadeOut',\n animationSpeed: 'fastest',\n placement: 'bottom',\n content: '',\n trigger: 'auto',\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${Tooltip.NAME}`);\n if (!instance) {\n instance = new Tooltip(this, typeof config === 'object' && config);\n $el.data(`plugin_${Tooltip.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Tooltip.NAME];\n $.fn[Tooltip.NAME] = Tooltip._jQueryInterface;\n $.fn[Tooltip.NAME].Constructor = Tooltip;\n $.fn[Tooltip.NAME].defaults = Tooltip.DEFAULTS || {};\n $.fn[Tooltip.NAME].noConflict = () => {\n $.fn[Tooltip.NAME] = previousName;\n return Tooltip._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.tooltip) {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, window.Cool.settings.tooltip, opts);\n } else {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.el = el;\n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n if (this.$tooltip) {\n this.$tooltip.remove();\n this.$tooltip = null;\n }\n this.$el.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n if (this.$tooltip) {\n this.setPosition();\n }\n this.onUpdate();\n }\n\n buildCache() {\n this.$el = $(this.el);\n this.$container = this.$el.data('container') ? $(this.$el.data('container')) : $(this.opts.container);\n this.id = 'tooltip-' + generateUUID();\n this.animation = this.$el.data('animation') ? this.$el.data('animation') : this.opts.animation;\n this.animationIn = this.$el.data('animationIn') ? this.$el.data('animationIn') : this.opts.animationIn;\n this.animationOut = this.$el.data('animationOut') ? this.$el.data('animationOut') : this.opts.animationOut;\n this.animationSpeed = this.$el.data('animationSpeed')\n ? this.$el.data('animationSpeed')\n : this.opts.animationSpeed;\n this.placement = this.$el.data('placement') ? this.$el.data('placement') : this.opts.placement;\n this.placementChanged = false;\n this.content = this.$el.data('content') ? this.$el.data('content') : this.opts.content;\n this.trigger = this.$el.data('trigger') ? this.$el.data('trigger') : this.opts.trigger;\n }\n\n bindEvents() {\n if (this.trigger === 'auto') {\n this.$el.on('mouseenter' + '.' + this.constructor.NAME, () => {\n this.show();\n });\n\n this.$el.on('mouseleave' + '.' + this.constructor.NAME, () => {\n this.close();\n });\n\n this.$el.on('blur' + '.' + this.constructor.NAME, () => {\n this.close();\n });\n\n this.$el.on('click' + '.' + this.constructor.NAME, () => {\n this.close();\n });\n }\n\n if (window.ResizeObserver) {\n this._resizeCallback = () => {\n if (this.$tooltip && this.$tooltip.hasClass('show')) {\n requestAnimationFrame(() => {\n this.setPosition();\n });\n }\n };\n \n resizeManager.observe(this.el, this._resizeCallback);\n }\n }\n\n unbindEvents() {\n this.$el.off('.' + this.constructor.NAME);\n \n if (this._resizeCallback) {\n resizeManager.unobserve(this.el);\n this._resizeCallback = null;\n }\n }\n\n buildTooltip() {\n this.$tooltip = $(`\n <div class=\"tooltip\" role=\"tooltip\" id=\"${this.id}\">\n <div class=\"arrow\"></div>\n <div class=\"tooltip-inner\">${this.content}</div>\n </div>\n `);\n\n this.$container.append(this.$tooltip);\n this.$arrow = this.$tooltip.find('.arrow');\n }\n\n setPosition(placement) {\n if (typeof placement === 'undefined' || placement === null) {\n placement = this.placement;\n }\n\n this.$tooltip.addClass('tooltip-' + placement);\n\n let containerInnerWidth = this.$container.innerWidth();\n let containerInnerHeight = this.$container.innerHeight();\n let tooltipWidth = this.$tooltip.outerWidth(true);\n let tooltipHeight = this.$tooltip.outerHeight(true);\n let tooltipTriggerWidth = this.$el.outerWidth();\n let tooltipTriggerHeight = this.$el.outerHeight();\n let tooltipTriggerPosX = this.$el.offset().left;\n let tooltipTriggerPosY = this.$el.offset().top;\n let arrowWidth = this.$arrow.outerWidth(true);\n let arrowHeight = this.$arrow.outerHeight(true);\n let arrowPos;\n let tooltipPosX;\n let tooltipPosY;\n\n if (placement === 'top') {\n tooltipPosX = Math.round(tooltipTriggerPosX - (tooltipWidth - tooltipTriggerWidth) / 2);\n tooltipPosY = Math.round(tooltipTriggerPosY - tooltipHeight);\n arrowPos = Math.round(tooltipWidth / 2 - arrowWidth / 2);\n\n this.$arrow.css({\n left: arrowPos + 'px',\n });\n } else if (placement === 'right') {\n tooltipPosX = Math.round(tooltipTriggerPosX + tooltipTriggerWidth);\n tooltipPosY = Math.round(tooltipTriggerPosY - (tooltipHeight - tooltipTriggerHeight) / 2);\n arrowPos = Math.round(tooltipHeight / 2 - arrowHeight / 2);\n\n this.$arrow.css({\n top: arrowPos + 'px',\n });\n } else if (placement === 'bottom') {\n tooltipPosX = Math.round(tooltipTriggerPosX - (tooltipWidth - tooltipTriggerWidth) / 2);\n tooltipPosY = Math.round(tooltipTriggerPosY + tooltipTriggerHeight);\n arrowPos = Math.round(tooltipWidth / 2 - arrowWidth / 2);\n\n this.$arrow.css({\n left: arrowPos + 'px',\n });\n } else if (placement === 'left') {\n tooltipPosX = Math.round(tooltipTriggerPosX - tooltipWidth);\n tooltipPosY = Math.round(tooltipTriggerPosY - (tooltipHeight - tooltipTriggerHeight) / 2);\n arrowPos = Math.round(tooltipHeight / 2 - arrowHeight / 2);\n\n this.$arrow.css({\n top: arrowPos + 'px',\n });\n }\n\n this.$tooltip.css({\n position: 'absolute',\n top: '0px',\n left: '0px',\n transform: 'translate3d(' + tooltipPosX + 'px, ' + tooltipPosY + 'px, 0px)',\n 'will-change': 'transform',\n });\n\n let tooltipOverflowCount = 0;\n let tooltipPosition = {\n left: this.$tooltip.position().left,\n top: this.$tooltip.position().top,\n right: containerInnerWidth - (this.$tooltip.position().left + tooltipWidth),\n bottom: containerInnerHeight - (this.$tooltip.position().top + tooltipHeight),\n };\n let tooltipOverflow = {\n left: false,\n top: false,\n right: false,\n bottom: false,\n };\n\n if (tooltipPosition.right < 0) {\n tooltipOverflow.right = true;\n tooltipOverflowCount++;\n }\n\n if (tooltipPosition.left < 0) {\n tooltipOverflow.left = true;\n tooltipOverflowCount++;\n }\n\n if (tooltipPosition.bottom < 0) {\n tooltipOverflow.bottom = true;\n tooltipOverflowCount++;\n }\n\n if (tooltipPosition.top < 0) {\n tooltipOverflow.top = true;\n tooltipOverflowCount++;\n }\n\n if (tooltipOverflowCount > 0) {\n if (!this.placementChanged && tooltipOverflow.left && tooltipPosition.right > tooltipWidth) {\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-' + placement);\n this.$arrow.removeAttr('style');\n this.setPosition('right');\n } else if (!this.placementChanged && tooltipOverflow.top && tooltipPosition.top > tooltipHeight) {\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-' + placement);\n this.$arrow.removeAttr('style');\n this.setPosition('bottom');\n } else if (!this.placementChanged && tooltipOverflow.right && tooltipPosition.left > tooltipWidth) {\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-' + placement);\n this.$arrow.removeAttr('style');\n this.setPosition('left');\n } else if (!this.placementChanged && tooltipOverflow.bottom && tooltipPosition.top > tooltipHeight) {\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-' + placement);\n this.$arrow.removeAttr('style');\n this.setPosition('top');\n } else if (\n !this.placementChanged &&\n (placement !== 'top' || placement !== 'bottom') &&\n (tooltipOverflow.left || tooltipOverflow.right)\n ) {\n if (tooltipPosition.top > tooltipPosition.bottom) {\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-' + placement);\n this.$arrow.removeAttr('style');\n this.setPosition('top');\n } else {\n this.placementChanged = true;\n this.$tooltip.removeClass('tooltip-' + placement);\n this.$arrow.removeAttr('style');\n this.setPosition('bottom');\n }\n } else {\n this.fixTooltipPosition = true;\n }\n\n if (this.fixTooltipPosition) {\n\n if (tooltipOverflow.left) {\n let overflowAmount = Math.abs(tooltipPosition.left);\n let excludePlacements = ['top', 'bottom'];\n\n if (\n tooltipTriggerPosX >= tooltipPosX + overflowAmount &&\n excludePlacements.indexOf(placement) < 0\n ) {\n tooltipWidth -= overflowAmount;\n tooltipPosX += overflowAmount;\n } else {\n tooltipPosX += overflowAmount;\n arrowPos -= overflowAmount;\n }\n }\n\n if (tooltipOverflow.top) {\n let overflowAmount = Math.abs(tooltipPosition.top);\n\n tooltipPosY += overflowAmount;\n arrowPos -= overflowAmount;\n }\n\n if (tooltipOverflow.right) {\n let overflowAmount = Math.abs(tooltipPosition.right);\n let excludePlacements = ['top', 'bottom'];\n\n if (\n tooltipTriggerPosX <= tooltipPosX - overflowAmount &&\n excludePlacements.indexOf(placement) < 0\n ) {\n tooltipWidth -= overflowAmount;\n } else {\n tooltipPosX -= overflowAmount;\n arrowPos += overflowAmount;\n }\n }\n\n if (tooltipOverflow.bottom) {\n let overflowAmount = Math.abs(tooltipPosition.bottom);\n\n tooltipPosY -= overflowAmount;\n arrowPos += overflowAmount;\n }\n\n if (placement === 'top') {\n this.$arrow.css({\n left: arrowPos + 'px',\n });\n } else if (placement === 'right') {\n this.$arrow.css({\n top: arrowPos + 'px',\n });\n } else if (placement === 'bottom') {\n this.$arrow.css({\n left: arrowPos + 'px',\n });\n } else if (placement === 'left') {\n this.$arrow.css({\n top: arrowPos + 'px',\n });\n }\n\n this.$tooltip.css({\n width: tooltipWidth,\n transform: 'translate3d(' + tooltipPosX + 'px, ' + tooltipPosY + 'px, 0px)',\n });\n\n this.fixTooltipPosition = false;\n }\n }\n }\n\n show() {\n if (this.$tooltip) {\n return;\n }\n\n this.buildTooltip();\n this.setPosition();\n\n if (this.animation) {\n this.$tooltip.addClass(this.animationSpeed);\n playAnimation(this.$tooltip, this.animationIn);\n this.$tooltip.addClass('show');\n this.$tooltip.attr('id', this.id);\n this.$el.attr('data-tooltip', this.id);\n } else {\n this.$tooltip.addClass('show');\n this.$tooltip.attr('id', this.id);\n this.$el.attr('data-tooltip', this.id);\n }\n\n this.onShow();\n }\n\n close() {\n if (!this.$tooltip) {\n return;\n }\n\n if (this.animation && !this.$tooltip.hasClass('animation')) {\n playAnimation(this.$tooltip, this.animationOut).then(() => {\n this.$tooltip.remove();\n this.$el.removeAttr('data-tooltip');\n this.$tooltip = null;\n this.placementChanged = false;\n\n this.onClose();\n });\n } else {\n this.$tooltip.remove();\n this.$el.removeAttr('data-tooltip');\n this.$tooltip = null;\n this.placementChanged = false;\n\n this.onClose();\n }\n }\n}\n\nTooltip._jQueryInit();\n\nexport default Tooltip;","import Component from './component';\n\nclass Collapse extends Component {\n\n static NAME = 'coolCollapse';\n\n static DEFAULTS = {\n target: null,\n onInit: null,\n onUpdate: null,\n onDestroy: null,\n onShow: null,\n onClose: null\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${Collapse.NAME}`);\n if (!instance) {\n instance = new Collapse(this, typeof config === 'object' && config);\n $el.data(`plugin_${Collapse.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Collapse.NAME];\n $.fn[Collapse.NAME] = Collapse._jQueryInterface;\n $.fn[Collapse.NAME].Constructor = Collapse;\n $.fn[Collapse.NAME].defaults = Collapse.DEFAULTS || {};\n $.fn[Collapse.NAME].noConflict = () => {\n $.fn[Collapse.NAME] = previousName;\n return Collapse._jQueryInterface;\n };\n }\n \n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.collapse) {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, window.Cool.settings.collapse, opts);\n } else {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.el = el;\n \n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n this.onInit();\n }\n\n destroy() {\n this.unbindEvents();\n this.$el.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n this.onUpdate();\n }\n\n buildCache() {\n this.$el = $(this.el);\n this.el = this.$el[0];\n \n const targetSelector = this.$el.data('target') || this.opts.target;\n this.$target = targetSelector ? $(targetSelector) : this.$el.parent().find('.collapse');\n \n this.target = this.$target[0];\n this.breakpoint = this.$el.data('breakpoint');\n this.expanded = this.$el.attr('aria-expanded') === 'true';\n\n if (this.target) {\n this.$container = this.$target.closest('.section-collapse');\n this.container = this.$container[0];\n \n const indicatorSelector = this.$el.data('target') \n ? `[data-collapse-indicator=\"${this.$el.data('target')}\"]`\n : null;\n this.$indicator = indicatorSelector ? $(indicatorSelector) : this.$el.parent().find('[data-collapse-indicator]');\n this.indicator = this.$indicator[0];\n }\n }\n\n bindEvents() {\n this._clickHandler = (e) => {\n if (!this.breakpoint || !window.matchMedia(`(min-width: ${this.breakpoint}px)`).matches) {\n e.preventDefault();\n this.toggle();\n }\n };\n \n this.el.addEventListener('click', this._clickHandler);\n }\n\n unbindEvents() {\n if (this._clickHandler) {\n this.el.removeEventListener('click', this._clickHandler);\n }\n \n this.$el.off('.' + this.constructor.NAME);\n }\n\n toggle() {\n if (this.expanded) {\n this.close();\n } else {\n this.show();\n }\n }\n\n show() {\n if (this.expanded) return;\n\n this.target.classList.add('show');\n \n if (this.container) {\n this.container.classList.add('show');\n }\n\n if (this.indicator) {\n this.indicator.classList.add('show');\n }\n\n this.el.setAttribute('aria-expanded', 'true');\n this.expanded = true;\n \n this.onShow();\n }\n\n close() {\n if (!this.expanded) return;\n\n this.target.classList.remove('show');\n \n if (this.container) {\n this.container.classList.remove('show');\n }\n\n if (this.indicator) {\n this.indicator.classList.remove('show');\n }\n\n this.el.setAttribute('aria-expanded', 'false');\n this.expanded = false;\n \n this.onClose();\n }\n}\n\nCollapse._jQueryInit();\n\nexport default Collapse;","import Component from './component';\nimport { debounce } from './utils';\n\nclass SectionTabs extends Component {\n\n static NAME = 'coolSectionTabs';\n\n static DEFAULTS = {\n onInit: null,\n onUpdate: null,\n onDestroy: null\n };\n\n static _jQueryInterface(config) {\n return this.each(function() {\n const $el = $(this);\n let instance = $el.data(`plugin_${SectionTabs.NAME}`);\n if (!instance) {\n instance = new SectionTabs(this, typeof config === 'object' && config);\n $el.data(`plugin_${SectionTabs.NAME}`, instance);\n }\n if (typeof config === 'string') instance[config]();\n });\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[SectionTabs.NAME];\n $.fn[SectionTabs.NAME] = SectionTabs._jQueryInterface;\n $.fn[SectionTabs.NAME].Constructor = SectionTabs;\n $.fn[SectionTabs.NAME].defaults = SectionTabs.DEFAULTS || {};\n $.fn[SectionTabs.NAME].noConflict = () => {\n $.fn[SectionTabs.NAME] = previousName;\n return SectionTabs._jQueryInterface;\n };\n }\n\n constructor(el, opts) {\n super();\n\n this.opts = {};\n\n if (window.Cool.settings.sectionTabs) {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, window.Cool.settings.sectionTabs, opts);\n } else {\n $.extend(true, this.opts, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.el = el;\n this._tabsCache = new WeakMap();\n this._resizeObserver = null;\n this._isProcessing = false;\n this._rafId = null;\n \n this.init();\n }\n\n init() {\n this.buildCache();\n this.bindEvents();\n \n this._rafId = requestAnimationFrame(() => {\n if (this.dropdownContainer) this.dropdownContainer.classList.add('js-ready');\n this.el.classList.add('js-initialized');\n \n this.checkForChanges();\n this.onInit();\n });\n }\n\n destroy() {\n this.unbindEvents();\n \n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n }\n \n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = null;\n }\n \n this.$el.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n update() {\n this.buildCache();\n this.onUpdate();\n }\n\n buildCache() {\n this.$el = $(this.el);\n this.el = this.$el[0];\n \n const sectionTabs = this.el.closest('.section-tabs');\n \n this.$dropdownContainer = sectionTabs ? $(sectionTabs).find('.dropdown-container') : this.$el.find('.dropdown-container');\n this.$dropdownList = sectionTabs ? $(sectionTabs).find('.dropdown-list') : this.$el.find('.dropdown-list');\n this.dropdownContainer = this.$dropdownContainer.length ? this.$dropdownContainer[0] : null;\n this.dropdownList = this.$dropdownList.length ? this.$dropdownList[0] : null;\n }\n\n bindEvents() {\n const sectionTabs = this.el.closest('.section-tabs');\n const sectionHeader = sectionTabs ? sectionTabs.closest('.section-header') : null;\n const observeTarget = sectionHeader || sectionTabs || this.el;\n \n if (window.ResizeObserver) {\n this._resizeObserver = new ResizeObserver(entries => {\n if (!this._isProcessing) {\n this._isProcessing = true;\n \n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n }\n \n this._rafId = requestAnimationFrame(() => {\n this.checkForChanges();\n this._isProcessing = false;\n });\n }\n });\n \n this._resizeObserver.observe(observeTarget);\n } else {\n this._resizeHandler = debounce(() => {\n this.checkForChanges();\n }, 50);\n \n window.addEventListener('resize', this._resizeHandler, { passive: true });\n }\n }\n\n unbindEvents() {\n this.$el.off('.' + this.constructor.NAME);\n \n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n }\n \n if (this._resizeHandler) {\n window.removeEventListener('resize', this._resizeHandler);\n }\n }\n\n moveToList(el) {\n const uuid = el.getAttribute('data-uuid');\n const tab = this.el.querySelector(`:scope > .tab-item[data-related-dropdown-item=\"${uuid}\"]`);\n\n if (tab) {\n tab.removeAttribute('data-related-dropdown-item');\n el.remove();\n }\n }\n\n moveToDropdown(el) {\n if (el.hasAttribute('data-related-dropdown-item')) {\n return;\n }\n if (!this.dropdownList) {\n return;\n }\n\n const uuid = crypto.randomUUID();\n const clone = el.cloneNode(true);\n const itemActionEl = clone.querySelector('.tab-item-action');\n\n if (itemActionEl) {\n itemActionEl.classList.add('dropdown-item');\n }\n\n clone.setAttribute('data-uuid', uuid);\n this.dropdownList.appendChild(clone);\n\n el.setAttribute('data-related-dropdown-item', uuid);\n }\n\n getTabDimensions(tab) {\n if (this._tabsCache.has(tab)) {\n const cached = this._tabsCache.get(tab);\n return cached;\n }\n \n const wasInvisible = tab.classList.contains('invisible');\n\n if (wasInvisible) {\n tab.classList.remove('invisible');\n }\n \n const sectionTabs = this.el.closest('.section-tabs');\n const container = sectionTabs || this.el;\n const originalOverflow = container.style.overflow;\n \n container.style.overflow = 'visible';\n container.offsetHeight;\n \n const width = tab.offsetWidth;\n const marginLeft = parseInt(getComputedStyle(tab).marginLeft, 10) || 0;\n const marginRight = parseInt(getComputedStyle(tab).marginRight, 10) || 0;\n const totalWidth = width + marginLeft + marginRight;\n \n container.style.overflow = originalOverflow;\n\n if (wasInvisible) {\n tab.classList.add('invisible');\n }\n \n const dimensions = { width, totalWidth };\n this._tabsCache.set(tab, dimensions);\n \n return dimensions;\n }\n\n availableSpace() {\n const sectionTabs = this.el.closest('.section-tabs');\n const sectionHeader = sectionTabs ? sectionTabs.closest('.section-header') : null;\n let containerWidth, paddingLeft, paddingRight;\n\n if (sectionHeader) {\n const headerStyles = getComputedStyle(sectionHeader);\n const flexDirection = headerStyles.flexDirection;\n \n if (flexDirection === 'column') {\n const container = sectionTabs || this.el;\n const containerStyles = getComputedStyle(container);\n\n containerWidth = container.offsetWidth;\n paddingLeft = parseInt(containerStyles.paddingLeft, 10) || 0;\n paddingRight = parseInt(containerStyles.paddingRight, 10) || 0;\n\n } else {\n\n containerWidth = sectionHeader.offsetWidth;\n paddingLeft = parseInt(headerStyles.paddingLeft, 10) || 0;\n paddingRight = parseInt(headerStyles.paddingRight, 10) || 0;\n \n const sectionSearch = sectionHeader.querySelector('.section-search');\n\n if (sectionSearch) {\n containerWidth -= sectionSearch.offsetWidth;\n const headerGap = parseInt(headerStyles.gap, 10) || 0;\n containerWidth -= headerGap;\n }\n }\n\n } else {\n const container = sectionTabs || this.el;\n const containerStyles = getComputedStyle(container);\n\n containerWidth = container.offsetWidth;\n paddingLeft = parseInt(containerStyles.paddingLeft, 10) || 0;\n paddingRight = parseInt(containerStyles.paddingRight, 10) || 0;\n }\n \n const dropdownWidth = this.dropdownContainer ? (this.dropdownContainer.classList.contains('visible') ? this.dropdownContainer.offsetWidth : 40) : 0;\n const available = containerWidth - paddingLeft - paddingRight - dropdownWidth;\n \n return available;\n }\n\n checkForChanges() {\n if (!this.dropdownList) {\n return;\n }\n\n this._tabsCache = new WeakMap();\n \n const tabs = Array.from(this.el.querySelectorAll(':scope > .tab-item'));\n const dropdownItems = Array.from(this.dropdownList.children);\n const availableSpace = this.availableSpace();\n const gap = parseInt(getComputedStyle(this.el).gap, 10) || 0;\n \n if (window.innerWidth < 768 && availableSpace < 200) {\n tabs.forEach(tab => {\n tab.classList.remove('invisible');\n tab.removeAttribute('data-related-dropdown-item');\n });\n if (this.dropdownContainer) {\n this.dropdownContainer.classList.remove('visible');\n }\n return;\n }\n \n let accumulatedWidth = 0;\n let visibleTabs = [];\n let overflowTabs = [];\n \n for (let i = 0; i < tabs.length; i++) {\n const tab = tabs[i];\n const { totalWidth } = this.getTabDimensions(tab);\n const widthWithGap = accumulatedWidth + totalWidth + (i > 0 ? gap : 0);\n \n if (widthWithGap <= availableSpace) {\n accumulatedWidth = widthWithGap;\n visibleTabs.push(tab);\n \n const relatedDropdownId = tab.getAttribute('data-related-dropdown-item');\n\n if (relatedDropdownId) {\n const dropdownItem = this.dropdownList.querySelector(`[data-uuid=\"${relatedDropdownId}\"]`);\n if (dropdownItem) {\n this.moveToList(dropdownItem);\n }\n }\n } else {\n overflowTabs.push(tab);\n }\n }\n \n overflowTabs.forEach((tab, index) => {\n if (!tab.hasAttribute('data-related-dropdown-item')) {\n this.moveToDropdown(tab);\n }\n });\n \n if (dropdownItems.length > 0 && overflowTabs.length === 0) {\n const remainingSpace = availableSpace - accumulatedWidth;\n \n for (let i = dropdownItems.length - 1; i >= 0; i--) {\n const dropdownItem = dropdownItems[i];\n const uuid = dropdownItem.getAttribute('data-uuid');\n const originalTab = this.el.querySelector(`[data-related-dropdown-item=\"${uuid}\"]`);\n \n if (originalTab) {\n const { totalWidth } = this.getTabDimensions(originalTab);\n const widthWithGap = totalWidth + (accumulatedWidth > 0 ? gap : 0);\n \n if (widthWithGap <= remainingSpace) {\n this.moveToList(dropdownItem);\n visibleTabs.push(originalTab);\n accumulatedWidth += widthWithGap;\n } else {\n break;\n }\n }\n }\n }\n \n tabs.forEach(tab => {\n const shouldBeVisible = visibleTabs.includes(tab);\n if (shouldBeVisible) {\n tab.classList.remove('invisible');\n } else {\n tab.classList.add('invisible');\n }\n });\n \n const hasDropdownItems = this.dropdownList && this.dropdownList.children.length > 0;\n\n if (this.dropdownContainer) {\n this.dropdownContainer.classList.toggle('visible', hasDropdownItems);\n }\n }\n}\n\nSectionTabs._jQueryInit();\n\nexport default SectionTabs;","import Component from './component';\nimport { generateUUID, playAnimation } from './utils';\n\nclass Toast extends Component {\n\n static NAME = 'coolToast';\n\n static DEFAULTS = {\n title: '',\n content: '',\n template: '',\n theme: 'dark',\n placement: 'bottom-center',\n placementX: null,\n placementY: null,\n animation: true,\n animationIn: 'slideInUp',\n animationOut: 'slideOutDown',\n animationSpeed: 'faster',\n offset: null,\n size: null,\n dismiss: 3,\n header: false,\n onInitialize: null,\n onDestroy: null,\n onInit: null,\n onDestroy: null,\n onShow: null,\n onClose: null\n };\n\n static _jQueryInterface(config) {\n const $el = $(this);\n let instance = $el.data(`plugin_${Toast.NAME}`);\n\n if (!instance) {\n instance = new Toast(this, typeof config === 'object' && config);\n $el.data(`plugin_${Toast.NAME}`, instance);\n }\n \n if (typeof config === 'string') instance[config]();\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Toast.NAME];\n $.fn[Toast.NAME] = Toast._jQueryInterface;\n $.fn[Toast.NAME].Constructor = Toast;\n $.fn[Toast.NAME].defaults = Toast.DEFAULTS || {};\n $.fn[Toast.NAME].noConflict = () => {\n $.fn[Toast.NAME] = previousName;\n return Toast._jQueryInterface;\n };\n }\n\n constructor(container, opts) {\n super(); \n \n this.settings = {};\n\n if (window.Cool.settings.toast) {\n $.extend(true, this.settings, $.fn[this.constructor.NAME].defaults, window.Cool.settings.toast, opts);\n } else {\n $.extend(true, this.settings, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.container = container;\n this.$container = $(this.container);\n this.toasts = [];\n this.queue = [];\n this.processingQueue = false;\n this.onInitialize = this.settings.onInitialize;\n this.onDestroy = this.settings.onDestroy;\n this.lastToastContent = null;\n\n this.$container.data(`plugin_${this.constructor.NAME}`, this);\n }\n\n isSimilarToast(toast) {\n if (!this.lastToastContent) return false;\n return this.lastToastContent === toast.content;\n }\n\n addQueue(toast) {\n if (this.isSimilarToast(toast)) {\n this.queue = this.queue.filter((t) => t.content !== toast.content);\n }\n\n this.queue.push(toast);\n this.lastToastContent = toast.content;\n\n if (this.processingQueue) {\n return;\n }\n\n return this.processQueue();\n }\n\n processQueue() {\n if (this.processingQueue) {\n this.queue.shift();\n }\n\n if (!this.queue.length) {\n this.processingQueue = false;\n return;\n }\n\n this.processingQueue = true;\n\n return this.show(this.queue[0]);\n }\n\n init(opts) {\n let settings = {};\n\n $.extend(true, settings, this.settings, opts);\n\n let toast = this.buildToast(settings);\n\n this.addQueue(toast);\n this.onInit(toast);\n\n return toast;\n }\n\n destroy() {\n this.$container.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n buildToast(settings) {\n let toast = {\n uuid: 'toast-' + generateUUID(),\n placement: settings.placement,\n placementX: settings.placementX,\n placementY: settings.placementY,\n offset: settings.offset,\n animation: settings.animation,\n animationIn: settings.animationIn,\n animationOut: settings.animationOut,\n animationSpeed: settings.animationSpeed,\n dismiss: settings.dismiss,\n size: settings.size,\n header: settings.header,\n theme: settings.theme,\n title: settings.title,\n content: settings.content,\n template: settings.template,\n maxBodyHeight: settings.maxBodyHeight,\n onInit: settings.onInit,\n onShow: settings.onShow,\n onClose: settings.onClose,\n };\n\n if (typeof toast.content === 'function') {\n toast.$el = $(toast.template());\n } else {\n toast.$el = $(this._renderTemplate(toast));\n }\n\n toast.$inner = toast.$el.find('.toast-inner');\n toast.$closeBtn = toast.$el.find('[data-toast-close]');\n\n this.toasts.push(toast);\n\n return toast;\n }\n\n bindEvents(toast) {\n let self = this;\n\n toast.$el.on('click', '[data-toast-close]', () => {\n if (toast.$el) {\n self.close(toast);\n }\n });\n\n if (window.ResizeObserver) {\n toast.resizeObserver = new ResizeObserver(entries => {\n if (!toast.$el) return;\n \n if (toast.rafId) {\n cancelAnimationFrame(toast.rafId);\n }\n \n toast.rafId = requestAnimationFrame(() => {\n if (toast.$el) {\n this.setPosition(toast);\n }\n });\n });\n \n toast.resizeObserver.observe(document.body);\n \n } else {\n\n let resizeTimeout;\n toast.resizeHandler = () => {\n if (!toast.$el) return;\n \n clearTimeout(resizeTimeout);\n \n const now = performance.now();\n if (!toast.lastResizeTime || now - toast.lastResizeTime > 100) {\n this.setPosition(toast);\n toast.lastResizeTime = now;\n } else {\n resizeTimeout = setTimeout(() => {\n if (toast.$el) {\n this.setPosition(toast);\n }\n }, 16);\n }\n };\n \n window.addEventListener('resize', toast.resizeHandler, { passive: true });\n }\n }\n\n setPosition(toast, placement, placementY, placementX) {\n if (typeof placementY === 'undefined' || placementY === null) {\n placementY = toast.placementY;\n }\n\n if (typeof placementX === 'undefined' || placementX === null) {\n placementX = toast.placementX;\n }\n\n if (!placementX || !placementY) {\n placement = toast.placement;\n }\n\n if (toast.offset) {\n let offsets = toast.offset.split(',');\n let offsetX = parseInt(offsets[0], 10);\n let offsetY = parseInt(offsets[1], 10);\n }\n\n let toastWidth = toast.$el.outerWidth(true);\n let toastHeight = toast.$el.outerHeight(true);\n let toastPosX;\n let toastPosY;\n\n if (placement) {\n if (placement === 'top-left') {\n toastPosX = 0;\n toastPosY = 0;\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += offsetY;\n } else {\n toastPosX += 30;\n toastPosY += 30;\n }\n } else if (placement === 'top-center') {\n toastPosX = this.$container.width() / 2 - toastWidth / 2;\n toastPosY = 0;\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += offsetY;\n } else {\n toastPosY += 30;\n }\n } else if (placement === 'top-right') {\n toastPosX = this.$container.width() - toastWidth;\n toastPosY = 0;\n\n if (toast.offset) {\n toastPosX += -offsetX;\n toastPosY += offsetY;\n } else {\n toastPosX += -30;\n toastPosY += 30;\n }\n } else if (placement === 'center-left') {\n toastPosX = 0;\n toastPosY = this.$container.height() / 2 - toastHeight / 2;\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += offsetY;\n } else {\n toastPosX += 30;\n }\n } else if (placement === 'center-center') {\n toastPosX = this.$container.width() / 2 - toastWidth / 2;\n toastPosY = this.$container.height() / 2 - toastHeight / 2;\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += offsetY;\n }\n } else if (placement === 'center-right') {\n toastPosX = this.$container.width() - toastWidth;\n toastPosY = this.$container.height() / 2 - toastHeight / 2;\n\n if (toast.offset) {\n toastPosX += -offsetX;\n toastPosY += offsetY;\n } else {\n toastPosX += -30;\n }\n } else if (placement === 'bottom-left') {\n toastPosX = 0;\n toastPosY = this.$container.height() - toastHeight;\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += -offsetY;\n } else {\n toastPosX += 30;\n toastPosY += -30;\n }\n } else if (placement === 'bottom-center') {\n toastPosX = this.$container.width() / 2 - toastWidth / 2;\n toastPosY = this.$container.height() - toastHeight;\n\n if (toast.offset) {\n toastPosX += offsetX;\n toastPosY += -offsetY;\n } else {\n toastPosY += -30;\n }\n } else if (placement === 'bottom-right') {\n toastPosX = this.$container.width() - toastWidth;\n toastPosY = this.$container.height() - toastHeight;\n\n if (toast.offset) {\n toastPosX += -offsetX;\n toastPosY += -offsetY;\n } else {\n toastPosX += -30;\n toastPosY += -30;\n }\n }\n } else {\n toastPosX = placementX;\n toastPosY = placementY;\n }\n\n toast.$el.css({\n position: 'absolute',\n top: '0px',\n left: '0px',\n transform: 'translate3d(' + toastPosX + 'px, ' + toastPosY + 'px, 0px)',\n 'will-change': 'transform',\n });\n }\n\n show(toast) {\n this.$container.append(toast.$el);\n this.bindEvents(toast);\n this.setPosition(toast);\n\n if (toast.animation) {\n toast.$el.addClass('show');\n toast.$inner.addClass(toast.animationSpeed);\n playAnimation(toast.$inner, toast.animationIn);\n } else {\n toast.$el.addClass('show');\n }\n\n if (toast.dismiss) {\n setTimeout(() => {\n this.close(toast);\n }, toast.dismiss * 1000);\n }\n\n this.onShow(toast);\n }\n\n close(toast) {\n if (toast.resizeObserver) {\n toast.resizeObserver.disconnect();\n toast.resizeObserver = null;\n }\n \n if (toast.rafId) {\n cancelAnimationFrame(toast.rafId);\n toast.rafId = null;\n }\n \n if (toast.resizeHandler) {\n window.removeEventListener('resize', toast.resizeHandler);\n toast.resizeHandler = null;\n }\n\n if (toast.animation && !toast.$inner.hasClass('animation')) {\n toast.$el.removeClass('show');\n playAnimation(toast.$inner, toast.animationOut).then(() => {\n toast.$el.remove();\n this.lastToastContent = null;\n\n this.toasts = $.grep(this.toasts, function (item) {\n return item.uuid != toast.uuid;\n });\n\n this.processQueue();\n this.onClose(toast);\n });\n } else {\n toast.$el.remove();\n this.lastToastContent = null;\n\n this.toasts = $.grep(this.toasts, function (item) {\n return item.uuid != toast.uuid;\n });\n\n this.processQueue();\n this.onClose(toast);\n }\n }\n\n onInitialize() {\n let onInitialize = this.onInitialize;\n\n if (typeof onInitialize === 'function') {\n onInitialize.call(this.container);\n }\n }\n\n onDestroy() {\n let onDestroy = this.onDestroy;\n\n if (typeof onDestroy === 'function') {\n onDestroy.call(this.container);\n }\n }\n\n onInit(toast) {\n let onInit = toast.onInit;\n\n if (typeof onInit === 'function') {\n onInit.call(toast);\n }\n }\n\n onShow(toast) {\n let onShow = toast.onShow;\n\n if (typeof onShow === 'function') {\n onShow.call(toast);\n }\n }\n\n onClose(toast) {\n let onClose = toast.onClose;\n\n if (typeof onClose === 'function') {\n onClose.call(toast);\n }\n }\n\n _renderTemplate(toast) {\n let content = '';\n let header = '';\n let body = '';\n let bodyCloseBtn = '';\n\n if (typeof toast.content === 'function') {\n content = toast.content();\n } else {\n content = toast.content;\n }\n\n if (toast.header) {\n header = `\n <div class=\"toast-header\">\n\n <span>${toast.title}</span>\n\n <button type=\"button\" data-toast-close>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n </button>\n\n </div>\n `;\n } else {\n bodyCloseBtn = `\n <button type=\"button\" data-toast-close>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n </button>\n `;\n }\n\n body = `\n <div class=\"toast-body\">\n\n <span>${content}</span>\n ${bodyCloseBtn}\n\n </div>\n `;\n\n return `\n <div class=\"toast toast-${toast.size} toast-${toast.theme}\" role=\"alert\" id=\"${toast.uuid}\">\n\n <div class=\"toast-inner\">\n\n ${header}\n ${body}\n\n </div>\n\n </div>\n `;\n }\n}\n\nToast._jQueryInit();\n\nexport default Toast;","import Component from './component';\nimport { escapeHtml, generateUUID, playAnimation } from './utils';\n\nclass Dialog extends Component {\n\n static NAME = 'coolDialog';\n\n static DEFAULTS = {\n title: '',\n template: '',\n body: '',\n footer: true,\n header: true,\n size: '',\n classes: '',\n centered: true,\n backdrop: true,\n preventScroll: true,\n closeBtn: true,\n animation: true,\n animationIn: 'zoomIn',\n animationOut: 'fadeOut',\n animationSpeed: 'fastest',\n maxBodyHeight: null,\n overflowVisible: false,\n onInitialize: null,\n onDestroy: null,\n onInit: null,\n onDestroy: null,\n onShow: null,\n onClose: null,\n callbacks: {},\n actions: {}\n };\n\n static _jQueryInterface(config) {\n const $el = $(this);\n let instance = $el.data(`plugin_${Dialog.NAME}`);\n\n if (!instance) {\n instance = new Dialog(this, typeof config === 'object' && config);\n $el.data(`plugin_${Dialog.NAME}`, instance);\n }\n \n if (typeof config === 'string') instance[config]();\n }\n\n static _jQueryInit() {\n if (!$.fn) return;\n const previousName = $.fn[Dialog.NAME];\n $.fn[Dialog.NAME] = Dialog._jQueryInterface;\n $.fn[Dialog.NAME].Constructor = Dialog;\n $.fn[Dialog.NAME].defaults = Dialog.DEFAULTS || {};\n $.fn[Dialog.NAME].noConflict = () => {\n $.fn[Dialog.NAME] = previousName;\n return Dialog._jQueryInterface;\n };\n }\n\n constructor(container, opts) {\n super(); \n \n this.settings = {};\n\n if (window.Cool.settings.dialog) {\n $.extend(true, this.settings, $.fn[this.constructor.NAME].defaults, window.Cool.settings.dialog, opts);\n } else {\n $.extend(true, this.settings, $.fn[this.constructor.NAME].defaults, opts);\n }\n\n this.container = container;\n this.$container = $(this.container);\n this.dialogs = [];\n this.onInitialize = this.settings.onInitialize;\n this.onDestroy = this.settings.onDestroy;\n\n this.$container.data(`plugin_${this.constructor.NAME}`, this);\n }\n\n init(opts) {\n let settings = {};\n\n $.extend(true, settings, this.settings, opts);\n\n if (opts && opts.actions) settings.actions = opts.actions || {};\n if (opts && opts.callbacks) settings.callbacks = opts.callbacks || {};\n\n if (settings.callbacks && typeof settings.callbacks === 'object') {\n Object.keys(settings.callbacks).forEach(key => { \n if (!settings.actions.hasOwnProperty(key)) {\n if (this.settings.actions && this.settings.actions[key]) {\n settings.actions[key] = $.extend(true, {}, this.settings.actions[key]);\n } else {\n settings.actions[key] = {};\n }\n } else {\n if (typeof settings.actions[key] === 'object' && !settings.actions[key].hasOwnProperty('content')) {\n if (this.settings.actions &&\n this.settings.actions[key] &&\n typeof this.settings.actions[key] === 'object' &&\n this.settings.actions[key].hasOwnProperty('content')) {\n settings.actions[key].content = this.settings.actions[key].content;\n }\n }\n }\n });\n }\n\n const dialog = this.buildDialog(settings);\n\n this.show(dialog);\n this.bindEvents(dialog);\n this.onInit(dialog);\n\n return dialog;\n }\n \n destroy() {\n this.$container.removeData(`plugin_${this.constructor.NAME}`);\n this.onDestroy();\n }\n\n buildDialog(settings) {\n const self = this;\n const dialog = {\n uuid: 'dialog-' + generateUUID(),\n title: settings.title,\n template: settings.template,\n body: settings.body,\n footer: settings.footer,\n header: settings.header,\n size: settings.size,\n classes: settings.classes,\n centered: settings.centered,\n backdrop: settings.backdrop,\n preventScroll: settings.preventScroll,\n closeBtn: settings.closeBtn,\n animation: settings.animation,\n animationIn: settings.animationIn,\n animationOut: settings.animationOut,\n animationSpeed: settings.animationSpeed,\n callbacks: settings.callbacks,\n maxBodyHeight: settings.maxBodyHeight,\n overflowVisible: settings.overflowVisible,\n actions: settings.actions,\n actionInProgress: false,\n actionThreshold: 300,\n onInit: settings.onInit,\n onShow: settings.onShow,\n onClose: settings.onClose,\n };\n\n if (dialog.maxBodyHeight == null && dialog.size !== 'full') {\n dialog.maxBodyHeight = window.innerHeight - 200;\n }\n\n if (typeof dialog.template === 'function') {\n dialog.$el = $(dialog.template());\n } else {\n dialog.$el = $(this._renderTemplate(dialog));\n }\n\n dialog.show = function () {\n self.show(dialog);\n };\n\n dialog.close = function () {\n self.close(dialog);\n };\n\n this.dialogs.push(dialog);\n\n return dialog;\n }\n\n bindEvents(dialog) {\n const self = this;\n\n dialog.$el.on(\n 'click',\n '[data-dialog-action], [data-dialog-confirm], [data-dialog-close], [data-dialog-remove]',\n function (e) {\n e.preventDefault();\n\n if (dialog.actionInProgress) {\n e.stopPropagation();\n return;\n }\n\n dialog.actionInProgress = true;\n\n const commonActions = ['confirm', 'close', 'remove'];\n let actionKey = $(this).data('dialogAction');\n\n if (!actionKey) {\n for (const commonAction of commonActions) {\n if ($(this).is(`[data-dialog-${commonAction}]`)) {\n actionKey = commonAction;\n break;\n }\n }\n }\n\n const action = dialog.actions[actionKey] || {};\n dialog.$el.trigger(`dialog.${actionKey}`);\n\n const callback =\n typeof action.callback === 'function'\n ? action.callback\n : typeof dialog.callbacks[actionKey] === 'function'\n ? dialog.callbacks[actionKey]\n : null;\n\n const resetActionFlag = (immediately = false) => {\n if (immediately) {\n dialog.actionInProgress = false;\n } else {\n setTimeout(() => {\n dialog.actionInProgress = false;\n }, dialog.actionThreshold);\n }\n };\n\n if (typeof callback === 'function') {\n try {\n const result = callback.call(self, function () {\n if (commonActions.includes(actionKey)) self.close(dialog);\n resetActionFlag();\n }, dialog);\n\n if (result && typeof result.then === 'function') {\n result.then((promiseResult) => {\n // Check if the promise result is false\n if (promiseResult === false) {\n resetActionFlag();\n }\n })\n .catch((error) => {\n console.error('Dialog action error:', error);\n resetActionFlag();\n });\n } else if (result === false) {\n resetActionFlag();\n } else {\n // Reset flag for any other return value (including undefined)\n // This handles cases where callback returns nothing (form validation fails)\n resetActionFlag();\n }\n } catch (error) {\n console.error('Dialog action error:', error);\n resetActionFlag();\n }\n } else if (commonActions.includes(actionKey)) {\n self.close(dialog);\n resetActionFlag();\n } else {\n resetActionFlag();\n }\n }\n );\n\n if (dialog.maxBodyHeight !== null && dialog.size !== 'full') {\n const updateMaxBodyHeight = () => {\n dialog.maxBodyHeight = window.innerHeight - 200;\n return dialog.maxBodyHeight;\n };\n\n if (window.ResizeObserver) {\n dialog.resizeObserver = new ResizeObserver(entries => {\n if (dialog.rafId) {\n cancelAnimationFrame(dialog.rafId);\n }\n \n dialog.rafId = requestAnimationFrame(() => {\n const newHeight = updateMaxBodyHeight();\n dialog.$el.find('.dialog-body').css('--cool-dialog-body-height', newHeight + 'px');\n });\n });\n \n dialog.resizeObserver.observe(document.body);\n \n } else {\n let resizeTimeout;\n let lastOrientation = window.orientation;\n \n dialog.resizeHandler = () => {\n clearTimeout(resizeTimeout);\n \n const now = performance.now();\n const orientationChanged = window.orientation !== lastOrientation;\n \n if (orientationChanged) {\n lastOrientation = window.orientation;\n }\n\n if (!dialog.lastResizeTime || now - dialog.lastResizeTime > 100 || orientationChanged) {\n const newHeight = updateMaxBodyHeight();\n dialog.$el.find('.dialog-body').css('--cool-dialog-body-height', newHeight + 'px');\n dialog.lastResizeTime = now;\n } else {\n resizeTimeout = setTimeout(() => {\n const newHeight = updateMaxBodyHeight();\n dialog.$el.find('.dialog-body').css('--cool-dialog-body-height', newHeight + 'px');\n }, 16);\n }\n };\n \n window.addEventListener('resize', dialog.resizeHandler, { passive: true });\n window.addEventListener('orientationchange', dialog.resizeHandler, { passive: true });\n }\n }\n }\n\n show(dialog) {\n if (!this.$container.hasClass('has-dialogs')) {\n this.$container.addClass('has-dialogs');\n }\n\n if (dialog.preventScroll && !this.$container.hasClass('dialog-prevent-scroll')) {\n this.$container.addClass('dialog-prevent-scroll');\n }\n\n if (this.dialogs.length > 1) {\n let $prevDialog = $(this.dialogs).eq(-2)[0].$el;\n let zIndex = parseInt($prevDialog.css('z-index'), 10) + 1;\n\n dialog.$el.css('z-index', zIndex);\n\n $prevDialog.css({\n transition: 'opacity 0.3s',\n opacity: 0,\n visibility: 'visible',\n });\n }\n\n if (dialog.backdrop && $('.dialog-backdrop').length < 1) {\n this.$container.append('<div class=\"dialog-backdrop\"></div>');\n\n let checkForBackdrop = setInterval(() => {\n if (this.dialogs.length == 0 && $('.dialog-backdrop').length) {\n $('.dialog-backdrop').remove();\n clearInterval(checkForBackdrop);\n }\n }, 100);\n }\n\n this.$container.append(dialog.$el);\n\n if (dialog.animation) {\n const $dialogContentEl = dialog.$el.find('.dialog-content');\n playAnimation($dialogContentEl, dialog.animationIn);\n }\n\n this.onShow(dialog);\n }\n\n close(dialog) {\n let $prevDialog = null;\n\n if (dialog.resizeObserver) {\n dialog.resizeObserver.disconnect();\n dialog.resizeObserver = null;\n }\n \n if (dialog.rafId) {\n cancelAnimationFrame(dialog.rafId);\n dialog.rafId = null;\n }\n \n if (dialog.resizeHandler) {\n window.removeEventListener('resize', dialog.resizeHandler);\n window.removeEventListener('orientationchange', dialog.resizeHandler);\n dialog.resizeHandler = null;\n }\n\n if (this.dialogs.length > 1) {\n $prevDialog = $(this.dialogs).eq(-2)[0].$el;\n }\n\n if ($('.dialog[data-dialog-backdrop=\"true\"]').length === 0 && $('.dialog-backdrop').length) {\n $('.dialog-backdrop').remove();\n }\n\n if (dialog.animation) {\n playAnimation(dialog.$el.find('.dialog-content'), dialog.animationOut).then(() => {\n dialog.$el.remove();\n\n this.dialogs = $.grep(this.dialogs, function (item) {\n return item.uuid != dialog.uuid;\n });\n\n if (this.dialogs.length == 0) {\n this.$container.removeClass('has-dialogs');\n\n if (this.$container.hasClass('dialog-prevent-scroll')) {\n this.$container.removeClass('dialog-prevent-scroll');\n }\n } else {\n if ($prevDialog) {\n $prevDialog.css('opacity', 1);\n }\n }\n });\n } else {\n dialog.$el.remove();\n\n this.dialogs = $.grep(this.dialogs, function (item) {\n return item.uuid != dialog.uuid;\n });\n\n if (this.dialogs.length == 0) {\n this.$container.removeClass('has-dialogs');\n\n if (this.$container.hasClass('dialog-prevent-scroll')) {\n this.$container.removeClass('dialog-prevent-scroll');\n }\n } else {\n if ($prevDialog) {\n $prevDialog.css('opacity', 1);\n }\n }\n }\n\n this.onClose(dialog);\n }\n\n onInitialize() {\n let onInitialize = this.onInitialize;\n\n if (typeof onInitialize === 'function') {\n onInitialize.call(this.container);\n }\n }\n\n onDestroy() {\n let onDestroy = this.onDestroy;\n\n if (typeof onDestroy === 'function') {\n onDestroy.call(this.container);\n }\n }\n\n onInit(dialog) {\n let onInit = dialog.onInit;\n\n if (typeof onInit === 'function') {\n onInit.call(dialog);\n }\n }\n\n onShow(dialog) {\n let onShow = dialog.onShow;\n\n if (typeof onShow === 'function') {\n onShow.call(dialog);\n }\n }\n\n onClose(dialog) {\n let onClose = dialog.onClose;\n\n if (typeof onClose === 'function') {\n onClose.call(dialog);\n }\n }\n\n _renderFooter(dialog) {\n if (typeof dialog.footer === 'function') {\n\n return dialog.footer();\n\n } else if (dialog.footer !== '' && dialog.footer !== false && dialog.footer !== true) {\n\n return dialog.footer;\n\n } else if (dialog.footer === true) {\n\n if (!dialog.actions || typeof dialog.actions !== 'object') return '';\n\n const actionsArr = Object.entries(dialog.actions)\n .filter(([key, action]) => {\n if (action === false) return false;\n if (typeof action.visible !== 'undefined') return !!action.visible;\n return true;\n })\n .map(([key, action], idx) => ({ key, action, idx }));\n\n actionsArr.sort((a, b) => {\n const hasOnlyCloseAndRemove = actionsArr.length === 2 && \n actionsArr.some(item => item.key === 'close') && \n actionsArr.some(item => item.key === 'remove');\n \n if (hasOnlyCloseAndRemove) {\n if (a.key === 'close') return -1;\n if (b.key === 'close') return 1;\n if (a.key === 'remove') return 1;\n if (b.key === 'remove') return -1;\n }\n\n if (a.key === 'remove') return -1;\n if (b.key === 'remove') return 1;\n if (a.key === 'confirm') return 1;\n if (b.key === 'confirm') return -1;\n \n return a.idx - b.idx;\n });\n\n const btns = actionsArr.map(({ key, action }) => {\n let btnStyle = action.style ? action.style : action.primary ? 'btn-primary' : 'btn-secondary';\n if (key === 'remove') btnStyle = 'btn-remove';\n if (key === 'confirm' && (action.primary === 'undefined' || action.primary !== false)) btnStyle = 'btn-primary';\n let btnContent = action.content || key.charAt(0).toUpperCase() + key.slice(1);\n let btnClasses = action.classes ? ' ' + action.classes : '';\n let btnAttrs = action.attrs ? ' ' + action.attrs : '';\n let isCommonAction = ['confirm', 'close', 'remove'].includes(key);\n return `\n <button type=\"button\" class=\"btn ${btnStyle}${btnClasses}\"${btnAttrs} data-dialog-action=\"${key}\"${isCommonAction ? ` data-dialog-${key}` : ''}>\n ${btnContent}\n </button>\n `;\n });\n\n let footerHtml = '';\n\n if (btns.length > 2) {\n footerHtml = `\n ${btns[0]}\n <div class=\"spacer\"></div>\n ${btns[1]}\n ${btns.slice(2).join('\\n')}\n `;\n } else {\n footerHtml = btns.join('\\n');\n }\n\n return `\n <div class=\"dialog-footer\">\n ${footerHtml}\n </div>\n `;\n }\n\n return '';\n }\n\n _renderHeader(dialog) {\n let headerContent = '';\n const closeBtnHtml = `\n <button type=\"button\" data-dialog-action=\"close\" class=\"dialog-header-close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n </button>\n `;\n\n if (typeof dialog.header === 'function') {\n headerContent = dialog.header();\n } else if (dialog.header !== '' && dialog.header !== false && dialog.header !== true) {\n headerContent = dialog.header;\n } else if (dialog.header === true) {\n headerContent = `\n <div class=\"dialog-header\">\n <span class=\"dialog-title\">\n ${escapeHtml(dialog.title)}\n </span>\n ${closeBtnHtml}\n </div>\n `;\n } else {\n headerContent = `<div class=\"dialog-header\">${closeBtnHtml}</div>`;\n }\n\n return headerContent;\n }\n\n _renderTemplate(dialog) {\n const classes = dialog.classes ? ' ' + dialog.classes : '';\n const centered = dialog.centered ? ' dialog-centered' : '';\n const size = dialog.size ? ' dialog-' + dialog.size : '';\n const overFlowVisible = dialog.overflowVisible ? ' dialog-overflow-visible' : '';\n const uuid = ' data-dialog-uuid=\"' + dialog.uuid + '\"';\n const backdrop = dialog.backdrop ? ' data-dialog-backdrop=\"true\"' : ' data-dialog-backdrop=\"false\"';\n const maxBodyHeight = dialog.maxBodyHeight ? ' style=\"--cool-dialog-body-height: ' + dialog.maxBodyHeight + 'px\"' : '';\n const body = typeof dialog.body === 'function' ? dialog.body() : dialog.body;\n const footer = this._renderFooter(dialog);\n const header = this._renderHeader(dialog);\n\n return `\n <div class=\"dialog${classes}${centered}${size}${overFlowVisible}\"${uuid}${backdrop}>\n\n <div class=\"dialog-container\">\n\n <div class=\"dialog-content\">\n\n ${header}\n\n <div class=\"dialog-body\"${maxBodyHeight}>\n\n ${body}\n\n </div>\n\n ${footer}\n\n </div>\n\n </div>\n\n </div>\n `;\n }\n}\n\nDialog._jQueryInit();\n\nexport default Dialog;","import Section from './section';\nimport Sidebar from './sidebar';\nimport Popover from './popover';\nimport Select from './select';\nimport Dropdown from './dropdown';\nimport Tooltip from './tooltip';\nimport Collapse from './collapse';\nimport SectionTabs from './section-tabs';\nimport Toast from './toast';\nimport Dialog from './dialog';\nimport { resizeManager, scrollManager } from './utils';\n\nwindow.Cool = window.Cool || {};\nwindow.Cool.settings = window.Cool.settings || {};\n\nclass Common {\n static _sidebarInstance = null;\n static _sectionInstance = null;\n\n static refresh() {\n if (this._sectionInstance && this._sectionInstance.refresh) {\n this._sectionInstance.refresh();\n }\n\n Popover.initializeElements('[data-toggle=\"popover\"]', window.Cool.settings.popover);\n Select.initializeElements('[data-toggle=\"select\"]', window.Cool.settings.select);\n Dropdown.initializeElements('[data-toggle=\"dropdown\"]', window.Cool.settings.dropdown);\n Tooltip.initializeElements('[data-toggle=\"tooltip\"]', window.Cool.settings.tooltip);\n Collapse.initializeElements('[data-toggle=\"collapse\"]', window.Cool.settings.collapse);\n SectionTabs.initializeElements('[data-toggle=\"section-tabs\"]', window.Cool.settings.sectionTabs);\n }\n\n static initialize(opts = {}) {\n window.Cool.settings = opts;\n\n if (!this._sectionInstance) {\n this._sectionInstance = new Section(opts.section);\n }\n \n Popover.initializeElements('[data-toggle=\"popover\"]', opts.popover);\n Select.initializeElements('[data-toggle=\"select\"]', opts.select);\n Dropdown.initializeElements('[data-toggle=\"dropdown\"]', opts.dropdown);\n Tooltip.initializeElements('[data-toggle=\"tooltip\"]', opts.tooltip);\n Collapse.initializeElements('[data-toggle=\"collapse\"]', opts.collapse);\n SectionTabs.initializeElements('[data-toggle=\"section-tabs\"]', opts.sectionTabs);\n \n const sidebarLeft = document.querySelector('.sidebar-left');\n\n if (sidebarLeft) {\n this._sidebarInstance = new Sidebar(sidebarLeft, opts.sidebar);\n }\n \n new Toast(document.body, opts.toast);\n new Dialog(document.body, opts.dialog);\n }\n\n static initComponent(selector) {\n if (!selector) return;\n\n const selectors = Array.isArray(selector) ? selector : [selector];\n const instances = [];\n const initQueue = [];\n\n selectors.forEach(child => {\n const container = typeof child === 'string' ? document.querySelector(child) : child;\n if (!container) return;\n\n const elements = container.querySelectorAll('[data-toggle]');\n const allElements = container.hasAttribute('data-toggle') \n ? [container, ...Array.from(elements)] \n : Array.from(elements);\n\n allElements.forEach(el => {\n initQueue.push(el);\n });\n });\n\n const visibleQueue = [];\n const hiddenQueue = [];\n\n initQueue.forEach(el => {\n const rect = el.getBoundingClientRect();\n if (rect.top < window.innerHeight && rect.bottom > 0) {\n visibleQueue.push(el);\n } else {\n hiddenQueue.push(el);\n }\n });\n\n const allQueue = [...visibleQueue, ...hiddenQueue];\n const batchSize = 10;\n let index = 0;\n\n const processBatch = () => {\n const batch = allQueue.slice(index, index + batchSize);\n \n batch.forEach(el => {\n const toggleValue = el.getAttribute('data-toggle');\n let instance = null;\n\n switch (toggleValue) {\n case 'popover':\n instance = Popover.initializeElement(el, window.Cool.settings.popover);\n break;\n case 'select':\n instance = Select.initializeElement(el, window.Cool.settings.select);\n break;\n case 'dropdown':\n instance = Dropdown.initializeElement(el, window.Cool.settings.dropdown);\n break;\n case 'tooltip':\n instance = Tooltip.initializeElement(el, window.Cool.settings.tooltip);\n break;\n case 'collapse':\n instance = Collapse.initializeElement(el, window.Cool.settings.collapse);\n break;\n case 'section-tabs':\n instance = SectionTabs.initializeElement(el, window.Cool.settings.sectionTabs);\n break;\n }\n\n if (instance) instances.push(instance);\n });\n\n index += batchSize;\n\n if (index < allQueue.length) {\n if ('requestIdleCallback' in window) {\n requestIdleCallback(processBatch, { timeout: 50 });\n } else {\n setTimeout(processBatch, 0);\n }\n }\n };\n\n if (visibleQueue.length > 0) {\n processBatch();\n } else if ('requestIdleCallback' in window) {\n requestIdleCallback(processBatch, { timeout: 100 });\n } else {\n processBatch();\n }\n\n return instances;\n }\n \n static destroy() {\n if (this._sidebarInstance) {\n this._sidebarInstance.destroy();\n this._sidebarInstance = null;\n }\n\n if (this._sectionInstance) {\n this._sectionInstance.destroy();\n this._sectionInstance = null;\n }\n }\n\n static observeResize(element, callback) {\n if (!element || typeof callback !== 'function') {\n console.warn('Cool.observeResize requires an element and a callback function');\n return;\n }\n \n return resizeManager.observe(element, callback);\n }\n\n static unobserveResize(element) {\n if (!element) {\n console.warn('Cool.unobserveResize requires an element');\n return;\n }\n \n resizeManager.unobserve(element);\n }\n\n static addScrollListener(id, callback) {\n if (!id || typeof callback !== 'function') {\n console.warn('Cool.addScrollListener requires an id and a callback function');\n return;\n }\n \n scrollManager.add(id, callback);\n }\n\n static removeScrollListener(id) {\n if (!id) {\n console.warn('Cool.removeScrollListener requires an id');\n return;\n }\n \n scrollManager.remove(id);\n }\n\n static getSidebar() {\n return this._sidebarInstance;\n }\n\n static getSection() {\n return this._sectionInstance;\n }\n}\n\nwindow.Cool.initialize = Common.initialize.bind(Common);\nwindow.Cool.initComponent = Common.initComponent.bind(Common);\nwindow.Cool.refresh = Common.refresh.bind(Common);\nwindow.Cool.destroy = Common.destroy.bind(Common);\nwindow.Cool.observeResize = Common.observeResize.bind(Common);\nwindow.Cool.unobserveResize = Common.unobserveResize.bind(Common);\nwindow.Cool.addScrollListener = Common.addScrollListener.bind(Common);\nwindow.Cool.removeScrollListener = Common.removeScrollListener.bind(Common);\nwindow.Cool.getSidebar = Common.getSidebar.bind(Common);\nwindow.Cool.getSection = Common.getSection.bind(Common);\n\nexport default Common;","import Common from './src/common';\nimport Sidebar from './src/sidebar';\nimport Popover from './src/popover.js';\nimport Select from './src/select';\nimport Dropdown from './src/dropdown';\nimport Tooltip from './src/tooltip';\nimport SectionTabs from './src/section-tabs';\nimport Collapse from './src/collapse';\nimport Toast from './src/toast';\nimport Dialog from './src/dialog';\n\nexport default {\n Common,\n Sidebar,\n Popover,\n Select,\n Dropdown,\n Tooltip,\n SectionTabs,\n Collapse,\n Toast,\n Dialog\n}"],"mappings":"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","ignoreList":[]}