{"version":3,"sources":["webpack://opten.biopartner/./app/components/cookie-banner.ts","webpack://opten.biopartner/./app/components/countdown/countdown.ts","webpack://opten.biopartner/./app/components/detail-slider.ts","webpack://opten.biopartner/./app/components/fade-text.ts","webpack://opten.biopartner/./app/components/filterpage.ts","webpack://opten.biopartner/./app/components/map-interactive.ts","webpack://opten.biopartner/./app/components/map-searcher.ts","webpack://opten.biopartner/./app/components/navbar.ts","webpack://opten.biopartner/./app/components/select.ts","webpack://opten.biopartner/./app/components/shopfinder.ts","webpack://opten.biopartner/./app/components/slider.ts","webpack://opten.biopartner/./app/components/special-button.ts","webpack://opten.biopartner/./app/components/sticky-footer.ts","webpack://opten.biopartner/./app/components/sticky.ts","webpack://opten.biopartner/./app/components/subscribe.ts","webpack://opten.biopartner/./node_modules/@opten/animation/linear-tween/index.ts","webpack://opten.biopartner/./node_modules/@opten/collapse/index.ts","webpack://opten.biopartner/./node_modules/@opten/collapse/initializer/index.ts","webpack://opten.biopartner/./node_modules/@opten/common/new-guid/index.ts","webpack://opten.biopartner/./node_modules/@opten/compiler/factory/index.ts","webpack://opten.biopartner/./node_modules/@opten/compiler/index.ts","webpack://opten.biopartner/./node_modules/@opten/compiler/metadata/component.ts","webpack://opten.biopartner/./node_modules/@opten/compiler/reflector/index.ts","webpack://opten.biopartner/./node_modules/@opten/compiler/resolver/index.ts","webpack://opten.biopartner/./node_modules/@opten/compiler/util/decorators.ts","webpack://opten.biopartner/./node_modules/@opten/compiler/util/factories.ts","webpack://opten.biopartner/./node_modules/@opten/compiler/util/type.ts","webpack://opten.biopartner/./node_modules/@opten/cookie/get/index.ts","webpack://opten.biopartner/./node_modules/@opten/cookie/set/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/add-class/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/as-html-element/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/class-regex/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/create-node/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/first-by-class/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/get-class/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/get-css/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/get-parent-with-class/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/get-parents-or-self/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/get-parents/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/get-selector-element-from-element/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/get-selector-from-element/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/get-styles/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/get-window-scroll-top/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/has-class/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/is-ancestor-of-class/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/is-html-element/index.ts","webpack://opten.biopartner/./node_modules/@opten/dom/remove-class/index.ts","webpack://opten.biopartner/./node_modules/@opten/events/dispatch-custom-event/index.ts","webpack://opten.biopartner/./node_modules/@opten/events/event-namespace-factory/index.ts","webpack://opten.biopartner/./node_modules/@opten/keycodes/index.ts","webpack://opten.biopartner/./node_modules/@opten/map-helpers/fit-bounds-with-padding/index.ts","webpack://opten.biopartner/./node_modules/@opten/number/parse-css-unit/index.ts","webpack://opten.biopartner/./node_modules/@opten/overlay/index.ts","webpack://opten.biopartner/./node_modules/@opten/overlay/keyboard/overlay-keyboard-dispatcher.ts","webpack://opten.biopartner/./node_modules/@opten/overlay/overlay-options.ts","webpack://opten.biopartner/./node_modules/@opten/overlay/overlay.ts","webpack://opten.biopartner/./node_modules/@opten/overlay/position/connected-position-strategy.ts","webpack://opten.biopartner/./node_modules/@opten/overlay/position/connected-position.ts","webpack://opten.biopartner/./node_modules/@opten/overlay/position/global-position-strategy.ts","webpack://opten.biopartner/./node_modules/@opten/overlay/position/overlay-position-builder.ts","webpack://opten.biopartner/./node_modules/@opten/overlay/scroll/reposition-scroll-strategy.ts","webpack://opten.biopartner/./node_modules/@opten/reactive/debounce/index.ts","webpack://opten.biopartner/./node_modules/@opten/scroll/scroll-to-element/index.ts","webpack://opten.biopartner/./node_modules/@opten/scroll/scroll-to-id/index.ts","webpack://opten.biopartner/./node_modules/@opten/scroll/scroll-to-offset/index.ts","webpack://opten.biopartner/./node_modules/@opten/scroll/scroll-to/index.ts","webpack://opten.biopartner/./node_modules/@opten/select/index.ts","webpack://opten.biopartner/./node_modules/@opten/transition/add-transition-end-listener/index.ts","webpack://opten.biopartner/./node_modules/@opten/transition/get-transition-end-event-name/index.ts","webpack://opten.biopartner/./node_modules/@opten/viewport/is-element-clipped-by-scrolling/index.ts","webpack://opten.biopartner/./node_modules/@opten/viewport/is-element-scrolled-outside-view/index.ts","webpack://opten.biopartner/./node_modules/stickybits/dist/stickybits.es.js","webpack://opten.biopartner/./app/main.scss","webpack://opten.biopartner/webpack/bootstrap","webpack://opten.biopartner/webpack/runtime/define property getters","webpack://opten.biopartner/webpack/runtime/hasOwnProperty shorthand","webpack://opten.biopartner/webpack/runtime/make namespace object","webpack://opten.biopartner/./app/main.ts"],"names":["CookieBanner","Component","className","element","body","document","getCookie","this","style","display","setSpace","window","addEventListener","debounce","e","Array","from","getElementsByClassName","forEach","btn","preventDefault","remove","hide","setCookie","Infinity","removeAttribute","setAttribute","offsetHeight","CountdownComponent","dayWrapper","querySelector","hoursWrapper","minutesWrapper","secondsWrapper","resultWrapper","wrapper","now","Date","getTime","countdownDate","getAttribute","header","footer","addClass","interval","setInterval","countdown","countdownEnd","distance","days","Math","floor","hours","minutes","seconds","innerHTML","toString","clearInterval","removeClass","DetailSliderCustom","customIndexChange","customRefIndexChange","slidesRef","slider","tns","container","controls","nav","mouseDrag","loop","autoHeight","items","gutter","responsive","1460","992","768","sliderRef","arrowKeys","controlsContainer","getInfo","slideItems","slide","index","goTo","events","on","evt","indexToGoTo","getIndexToGoTo","setTimeout","updateSliderHeight","undefined","activateSlider","firstSlide","arrow","prevIndex","indexCached","textBox","object","hasClass","push","slides","i","FadeText","toggleStatus","maxHeight","text","title","teaser","toggler","showMoreText","showLessText","setProperty","IsTruncated","CalculateLines","ToggleText","clientHeight","getComputedStyle","lineHeight","replace","GetLineCount","scrollHeight","options","FilterPage","pagingSize","page","language","_options","selectors","content","selects","selectTag","tag","dropdown","dropdownToggle","tagsDropdown","searchText","searchButton","tagAll","tagAllActive","tagActive","resetAllActiveTagsElements","paging","pageBack","pageNext","pageJump","pageJumpAttribute","loading","contentLoading","contentYScroll","classes","active","hidden","contentLocation","wrapperId","searchValueText","tagValue","wrapperElement","dataLanguage","length","AOS","init","filter","Number","contentElement","tags","searchTextInput","allTags","toggleTag","searchTextButton","parentElement","which","keyCode","loadFilterElements","location","search","searchValues","substring","split","searchTextValue","decodeURIComponent","value","history","pushState","pathname","select","onChange","allTag","allTagClick","getParentWithClass","resetTags","resetAllActiveTags","event","updateSelectTag","target","that","newSelects","newTags","setPageDefault","loadMore","setPageToDefault","dataSearch","getFilters","removeOuterEmTagsAndAddClass","html","createElement","children","child","tagName","toLowerCase","childChildren","classList","add","outerHTML","moreButton","fetch","method","headers","credentials","then","response","contentType","get","includes","data","setPreviousNextJumpPageEvents","initContentFilter","reinitFilter","currentTarget","pageStep","loadPreviousPage","loadNextPage","loadJumpPage","activeTags","getTagsFromLocationHash","filters","setActiveTagsClasses","isTagActive","deactivateAllTag","isSelectOption","selectedIndex","addTagToFilters","activateAllTag","removeTagFromFilters","newHash","getTagsLocationHash","hash","decodeURI","o","indexOf","join","minHeight","doActivateTag","deactivateActiveTags","activateTag","deactivateTag","activateActiveTag","deactivateActiveTag","selectMenu","selectedTag","getTagValue","tagValueIndex","getTagValueIndex","splice","allTagActive","dropdownToggleBtn","filterAll","indexFilter","MapInteractiveComponent","links","querySelectorAll","map","id","url","logos","logo","link","find","open","MapSearcher","Cookiebot","consent","marketing","shopfinderMapInit","console","log","defaults","mapContainer","mapClass","typeSearchField","typeInputClass","filterSearchField","filterInputClass","locationSearchField","locationInputClass","locationContainer","locationContainerClass","accordeon","accordeonClass","google","maps","Map","zoom","mapInitialZoom","center","mapCenter","fullscreenControl","mapTypeControl","streetViewControl","styles","mapStyles","addListenerOnce","centerMap","oms","OverlappingMarkerSpiderfier","markersWontMove","markersWontHide","basicFormatEvents","circleFootSeparation","markerCluster","MarkerClusterer","maxZoom","clusterStyle","setCalculator","markers","numStyles","geoCoder","Geocoder","locations","locationClass","elem","createMapLocation","l","marker","setMap","addMarker","addListener","handleMarkerClick","input","key","isInputActiveByHash","checked","scrollToMapAnchorClass","item","scrollToElement","linearTween","lat","parseFloat","lng","name","tagsAttr","searchAttr","icon","iconActive","markerIcon","Marker","position","size","anchor","Size","width","height","Point","x","y","collapse","setIcon","val","dispatchCustomEvent","getSearchBounds","bounds","filterLocationsByBounds","getGeocodeSearchBounds","clearMarkers","searchAddress","getSearchAddress","searchTypes","searchFilters","anyFound","setUrlHash","contains","LatLng","some","every","hideLocation","showLocation","visible","removeMarker","accumulateLocationBounds","left","offsetWidth","fitBoundsWithPadding","top","setZoom","getZoom","visibles","reduce","extend","LatLngBounds","Promise","resolve","address","previousAddress","addRadiusToBounds","radiusBounds","previousBounds","geocode","region","results","status","GeocoderStatus","OK","geometry","trim","radius","ne","spherical","computeOffset","getNorthEast","sw","getSouthWest","textColor","Navbar","mobileBreakpoint","navbar","navbarToggler","backTop","stickyElem","dropdowns","dropdownTitles","scrollToElements","showBackTop","checkSticky","setHeaderHeight","parent","closest","closeAll","openNav","Modernizr","touch","innerWidth","closeNav","dropdownTitle","ev","closeOnOutsideClick","scrollTo","closeMainNav","imagesLoaded","isAncestorOfClass","getElementById","offset","scrollToId","scrollY","getBoundingClientRect","marginBottom","marginTop","SelectComponent","Select","Shopfinder","featureType","stylers","visibility","elementType","color","SliderCustom","initSlider","navContainer","lazyload","lazyloadSelector","SpecialButton","pageX","scrollX","pageY","StickyFooter","defaultOffset","setPos","documentHeight","innerHeight","bottom","StickyComponent","parentClass","stickyChangeClass","stickyClass","stuckClass","useStickyClasses","verticalPosition","SubscribeComponent","getElementsByTagName","trigger","mailField","localStorage","getItem","redirect","click","removeItem","setItem","href","timeElapsed","start","duration","CollapseComponent","Collapse","error","activeClass","activeParentClass","animateProp","collapsingClass","componentClass","showClass","showClassDesktop","desktopWidth","transitionDuration","isHideable","closeSiblings","useShowClassDesktop","dataParentSelector","dataTargetSelector","dataToggleSelector","hrefSelector","isTransitioning","eventNamespaceFn","eventNamespaceFactory","handleClick","getSelectorElementFromElement","getInstance","toggle","create","triggers","outerWidth","isOpen","show","selector","actives","collapseInstance","_handleShow","_handleClose","_addAriaAndCollapsedClass","collapseElement","addTransitionEndListener","c","r","random","components","rootElement","observables","componentType","component","resolver","Error","safeRootElement","node","compiler","compile","observe","set","MutationObserver","mutations","componentInitializer","mutation","addedNodes","isHTMLElement","asHTMLElement","comps","childList","subtree","reflector","Reflector","Resolver","Compiler","componentCache","constructor","has","Object","keys","queries","propName","query","nodes","descendants","cache","acc","concat","f","first","isType","onInit","makeDecorator","createComponent","makeMetadataFactory","typeOrFunc","parentCtor","getParentCtor","ownAnnotations","_ownAnnotations","annotations","propMetadata","parentPropMetadata","ownPropMetadata","_ownPropMetadata","decorators","hasOwnProperty","ANNOTATIONS","PROP_METADATA","ctor","parentProto","getPrototypeOf","prototype","QUERY_METADATA_IDENTIFIERS","type","typeMetadata","metadata","findLast","metadataName","propertyMetadata","_mergeWithPropertyMetadata","a","_merge","mergedQueries","res","propertyName","_getQueryMetadata","q","read","arr","condition","props","chainFn","typeFn","metaCtor","makeMetadataCtor","DecoratorFactory","args","call","annotationInstance","typeDecorator","cls","defineProperty","PropDecoratorFactory","apply","decoratorInstance","metaName","meta","unshift","values","factory","isTypeOf","obj","v","Type","Function","cookie","RegExp","encodeURIComponent","end","path","domain","secure","test","expires","String","toUTCString","keyStr","valueStr","domainStr","pathStr","secureStr","getClass","classRegexCache","firstElementChild","elements","computed","getStyles","getPropertyValue","firstByClass","getParents","getParentsOrSelf","parents","attribute","fallbackHref","getSelectorFromElement","substr","view","ownerDocument","defaultView","opener","pageYOffset","documentElement","parentNode","scrollTop","classRegex","includeSelf","nodeType","HTMLElement","nodeName","removeClassFactory","regex","eventName","CustomEvent","dispatchEvent","namespace","DOWN","ENTER","ESCAPE","SPACE","UP","padding","projection","getProjection","point1","fromLatLngToPoint","fitBounds","point2","pow","newPoint","fromPointToLatLng","right","unit","units","u","parsed","OverlayKeyboardDispatcher","attachedOverlays","keydownListener","overlay","_selectOverlayFromEvent","onKeyboardEvent","overlayRef","isAttached","_detach","overlayElement","removeEventListener","backdropClassName","hasBackdrop","Overlay","portalElement","attached","keyboardDispatcher","OverlayOptions","uuid","newGuid","scrollStrategy","attach","overlayContainerElement","createNode","insertBefore","lastElementChild","overlayClassName","appendChild","backdropToDetach","backdropElement","removeChild","pointerEvents","positionStrategy","sizeConfig","_updateElementSize","_attach","updatePosition","beforeOpen","afterOpened","beforeClose","afterClosed","dispose","disable","detachBackdrop","enable","_attachBackdrop","onAttached","hasAttached","detach","onDetached","_handleBackdropClick","requestAnimationFrame","formatCssUnit","minWidth","maxWidth","backdropClick","ConnectedPositionStrategy","originPos","overlayPos","connectedTo","offsetX","offsetY","scrollables","preferredPositions","applied","positionLocked","boundResizeChange","_handleResizeChange","bind","origin","withFallbackPosition","pane","lastConnectedPosition","recalculateLastPosition","_validatePositions","fallbackPoint","fallbackPosition","originRect","overlayRect","viewportSize","pos","originPoint","_getOriginConnectionPoint","overlayPoint","_getOverlayPoint","fitsInViewport","_setElementPosition","visibleArea","lastPosition","ConnectionPositionPair","isLocked","positions","slice","rect","originStartX","_getStartX","originEndX","_getEndX","originX","originY","overlayStartX","overlayStartY","overlayX","overlayY","leftOverflow","rightOverflow","topOverflow","bottomOverflow","_subtractOverflows","originBounds","overlayBounds","scrollContainerBounds","s","isOriginClipped","isElementClippedByScrolling","isOriginOutsideView","isElementScrolledOutsideView","isOverlayClipped","isOverlayOutsideView","verticalStyleProperty","horizontalStyleProperty","clientWidth","p","scrollableViewProperties","_getScrollVisibility","positionChange","ConnectedOverlayPositionChange","onPositionChange","overflows","currentValue","currentOverflow","max","pair","validateHorizontalPosition","validateVerticalPosition","property","connectionPair","GlobalPositionStrategy","cssPosition","topOffset","bottomOffset","leftOffset","rightOffset","alignItems","justifyContent","getOptions","updateSize","parentStyles","marginLeft","marginRight","OverlayPositionBuilder","elementRef","RepositionScrollStrategy","config","handleScroll","throttle","scrollThrottle","autoClose","update","parentRects","close","func","wait","immediate","timeout","result","context","arguments","later","callNow","clearTimeout","animation","offsetTop","scrollToOffset","animationFunction","timeStart","t","b","d","getWindowScrollTop","time","Window","Option","textContent","disabled","_disabled","_text","selectElement","highlighted","panelOpen","htmlSelectElement","_getSelectedIndex","activeIndex","_init","triggerRect","triggerElement","_createOverlay","_calculateOverlayPosition","_highlightCorrectOption","_scrollActiveOptionIntoView","_shouldForward","option","tabIndex","insertAdjacentHTML","_render","focus","stopPropagation","_handleKeydown","_emit","delta","KEYCODES","_updateActiveItem","_handleActiveIndex","panelHTML","_getOverlayOptions","_onPanelDone","transformOrigin","_calculateOverlayOffsetX","optionElements","_createPositionStrategy","primaryPosition","strategy","withOffsetX","withOffsetY","shouldForwardEvent","newValue","newLabel","_getOptionIndex","arrowHtml","iconHtml","current","itemHeight","_getItemHeight","scrollOffset","panelTop","_getPanelMaxHeight","panelHeight","min","maxScroll","selectedOptionOffset","scrollBuffer","_calculateOverlayScroll","_calculateOverlayOffsetY","_checkOverlayWithinViewport","paddingWidth","_getPanelToViewportPadding","topSpaceAvailable","bottomSpaceAvailable","panelHeightTop","abs","panelHeightBottom","_adjustPanelUp","_adjustPanelDown","_getOriginBasedOnOption","distanceBelowViewport","round","distanceAboveViewport","optionHeightAdjustment","optimalScrollPosition","maxOptionsDisplayed","parseCssUnit","getCss","createEvent","initEvent","selected","callback","fallbackDuration","called","listener","transitionEndEventName","getTransitionEndEventName","transitions","WebkitTransition","transition","scrollContainers","scrollContainerRect","clippedAbove","clippedBelow","clippedLeft","clippedRight","containerBounds","outsideAbove","outsideBelow","outsideLeft","outsideRight","_extends","assign","source","Stickybits","_this","version","userAgent","navigator","customStickyChangeNumber","noStyles","stickyBitStickyOffset","scrollEl","useFixed","useGetBoundingClientRect","applyStyle","positionVal","definePosition","instances","_this$props","verticalPositionStyle","positionStyle","els","_styles","el","instance","addInstance","manageState","_proto","stickyProp","prefix","head","_this2","isWin","se","getClosestParent","computeScrollOffsets","toggleClasses","state","stateChange","stateContainer","match","getTopPosition","topPosition","offsetParent","it","isCustom","isTop","scrollElOffset","stickyStart","stickyChangeOffset","parentBottom","stickyChange","stickyStop","cArray","rItem","_this3","change","stop","pv","sticky","stuck","vp","aS","ns","rAF","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","scroll","isSticky","isStuck","isStickyChange","_styles2","_classes","_styles3","_extends2","_classes2","_style$classes","stateStyles","default","_ref","stl","idx","updatedProps","_this4","updatedProp","removeInstance","_styles4","_classes3","cleanup","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","definition","enumerable","prop","Symbol","toStringTag","setViewportHeight","vh"],"mappings":"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AS,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,SAAS,SAAS,cAAc,cAAc,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,SAAS,SAAS,cAAc,cAAc,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,SAAS,SAAS,cAAc,cAAc,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,SAAS,SAAS,cAAc,cAAc,cAAc,cAAc,aAAa,aAAa,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,YAAY,YAAY,YAAY,YAAY,iBAAiB,iBAAiB,gBAAgB,gBAAgB,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,eAAe,eAAe,eAAe,iBAAiB,iBAAiB,gBAAgB,gBAAgB,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,eAAe,eAAe,eAAe,iBAAiB,iBAAiB,gBAAgB,gBAAgB,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,eAAe,eAAe,eAAe,iBAAiB,iBAAiB,gBAAgB,gBAAgB,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,eAAe,eAAe,eAAe,MAAQ,QAAQ,cAAc,cAAc,iBAAiB,iBAAiB,iBAAiB,iBAAiB,eAAe,eAAe,eAAe,eAAe,SAAW,WAAW,GAAK,KAAK,GAAK,KAAK,GAAK,KAAK,GAAK,KAAK,GAAK,KAAK,GAAK,KAAK,oBAAoB,oBAAoB,cAAc,cAAc,cAAc,cAAc,YAAY,YAAY,aAAa,aAAa,aAAa,aAAa,wBAAwB,wBAAwB,YAAY,YAAY,aAAa,aAAa,gBAAgB,gBAAgB,kBAAkB,kBAAkB,mBAAmB,mBAAmB,kBAAkB,kBAAkB,aAAa,aAAa,gBAAgB,gBAAgB,gBAAgB,gBAAgB,WAAW,WAAW,gBAAgB,gBAAgB,kBAAkB,kBAAkB,YAAY,YAAY,qBAAqB,qBAAqB,2BAA2B,2BAA2B,iCAAiC,iCAAiC,iCAAiC,iCAAiC,kCAAkC,kCAAkC,kCAAkC,kCAAkC,sCAAsC,sCAAsC,kCAAkC,kCAAkC,YAAY,YAAY,sBAAsB,sBAAsB,uBAAuB,uBAAuB,YAAY,YAAY,aAAa,aAAa,OAAO,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,YAAY,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,YAAY,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,YAAY,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UA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","file":"Scripts/main.js","sourcesContent":["import { Component } from '@opten/compiler/metadata/component';\r\nimport { setCookie } from '@opten/cookie/set';\r\nimport { getCookie } from '@opten/cookie/get';\r\nimport { debounce } from '@opten/reactive/debounce';\r\n\r\n@Component({ className: 'js-cookie-banner' })\r\nexport class CookieBanner {\r\n\tprivate body = document.body;\r\n\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tif (getCookie('cookiesAccepted') !== 'true') {\r\n\t\t\tthis.element.style.display = 'block';\r\n\t\t\tthis.setSpace();\r\n\t\t\twindow.addEventListener('resize', debounce((e) => {\r\n\t\t\t\tthis.setSpace();\r\n\t\t\t}, 100));\r\n\t\t\tArray.from(document.getElementsByClassName('js-cookie-banner-accept'))\r\n\t\t\t\t.forEach((btn) => btn.addEventListener('click', (e) => {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tthis.remove();\r\n\t\t\t\t}));\r\n\t\t} else {\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate remove() {\r\n\t\tsetCookie('cookiesAccepted', 'true', Infinity, '/');\r\n\t\tthis.hide();\r\n\t}\r\n\r\n\tprivate hide() {\r\n\t\tthis.element.style.display = 'none';\r\n\t\tthis.body.removeAttribute('style');\r\n\t}\r\n\r\n\tprivate setSpace() {\r\n\t\tthis.body.setAttribute('style', 'margin-bottom: ' + this.element.offsetHeight + 'px;');\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\n\r\nimport { debounce } from '@opten/reactive/debounce';\r\nimport { addClass } from '@opten/dom/add-class';\r\nimport { removeClass } from '@opten/dom/remove-class';\r\n\r\n@Component({ className: 'js-countdown' })\r\n\r\nexport class CountdownComponent {\r\n\tprivate now: number;\r\n\tprivate countdownDate: number;\r\n\tprivate interval: number;\r\n\r\n\tprivate distance: number;\r\n\tprivate days: number;\r\n\tprivate hours: number;\r\n\tprivate minutes: number;\r\n\tprivate seconds: number;\r\n\r\n\tprivate dayWrapper: HTMLElement;\r\n\tprivate hoursWrapper: HTMLElement;\r\n\tprivate minutesWrapper: HTMLElement;\r\n\tprivate secondsWrapper: HTMLElement;\r\n\r\n\tprivate resultWrapper: HTMLElement;\r\n\tprivate wrapper: HTMLElement;\r\n\r\n\r\n\tconstructor(private element: HTMLElement) {\r\n\r\n\t\tthis.dayWrapper = this.element.querySelector('.js-countdown-days');\r\n\t\tthis.hoursWrapper = this.element.querySelector('.js-countdown-hours');\r\n\t\tthis.minutesWrapper = this.element.querySelector('.js-countdown-minutes');\r\n\t\tthis.secondsWrapper = this.element.querySelector('.js-countdown-seconds');\r\n\r\n\t\tthis.resultWrapper = this.element.querySelector('.js-countdown-result');\r\n\t\tthis.wrapper = this.element.querySelector('.js-countdown-wrapper');\r\n\r\n\t\tthis.now = new Date().getTime();\r\n\t\tthis.countdownDate = new Date(this.element.getAttribute('data-countdown')).getTime();\r\n\r\n\t\tconst hideNav = this.element.getAttribute('data-hide-nav');\r\n\t\tif(hideNav === 'True'){\r\n\t\t\tconst header = document.querySelector('.js-nav');\r\n\t\t\tconst footer = document.querySelector('footer');\r\n\r\n\t\t\taddClass(header, 'd-none');\r\n\t\t\taddClass(footer, 'd-none');\r\n\t\t}\r\n\r\n\r\n\t\tif(this.countdownDate > 0 && this.countdownDate > this.now){\r\n\t\t\tthis.interval = setInterval(() => this.countdown(), 1000);\r\n\t\t} else {\r\n\t\t\tthis.countdownEnd();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate countdown() {\r\n\t\tthis.now = new Date().getTime();\r\n\t\tthis.distance = this.countdownDate - this.now;\r\n\t\tthis.days = Math.floor(this.distance / (1000 * 60 * 60 * 24));\r\n\t\tthis.hours = Math.floor((this.distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n\t\tthis.minutes = Math.floor((this.distance % (1000 * 60 * 60)) / (1000 * 60));\r\n\t\tthis.seconds = Math.floor((this.distance % (1000 * 60)) / 1000);\r\n\r\n\t\tthis.dayWrapper.innerHTML = this.days.toString();\r\n\t\tthis.hoursWrapper.innerHTML = this.hours.toString();\r\n\t\tthis.minutesWrapper.innerHTML = this.minutes.toString();\r\n\t\tthis.secondsWrapper.innerHTML = this.seconds.toString();\r\n\r\n\t\tif (this.distance < 0) {\r\n\t\t\tclearInterval(this.interval);\r\n\t\t\tthis.countdownEnd();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\r\n\tprivate countdownEnd(){\r\n\t\t// tslint:disable-next-line: no-inner-html\r\n\t\taddClass(this.wrapper, 'd-none');\r\n\t\tremoveClass(this.resultWrapper, 'd-none');\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { hasClass } from '@opten/dom/has-class';\r\nimport { addClass } from '@opten/dom/add-class';\r\nimport { removeClass } from '@opten/dom/remove-class';\r\n\r\ndeclare const tns: any;\r\n\r\n@Component({ className: 'js-detail-slider' })\r\nexport class DetailSliderCustom {\r\n\tprivate slider;\r\n\tprivate sliderRef;\r\n\tprivate customIndexChange = false;\r\n\tprivate customRefIndexChange = false;\r\n\r\n\tconstructor(public element: HTMLElement) {\r\n\t\tconst slidesRef = element.querySelector('.js-slides-ref');\r\n\t\tthis.slider = tns({\r\n\t\t\tcontainer: element.querySelector('.js-slides'),\r\n\t\t\tcontrols: false,\r\n\t\t\tnav: false,\r\n\t\t\tmouseDrag: true,\r\n\t\t\tloop: false,\r\n\t\t\tautoHeight: true,\r\n\t\t\titems: 1,\r\n\t\t\tgutter: 0,\r\n\t\t\tresponsive: {\r\n\t\t\t\t1460: {\r\n\t\t\t\t\titems: 5\r\n\t\t\t\t},\r\n\t\t\t\t992: {\r\n\t\t\t\t\titems: 3\r\n\t\t\t\t},\r\n\t\t\t\t768: {\r\n\t\t\t\t\titems: 2,\r\n\t\t\t\t\tgutter: 15\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (slidesRef !== null && slidesRef !== undefined) {\r\n\t\t\tthis.sliderRef = tns({\r\n\t\t\t\tarrowKeys: true,\r\n\t\t\t\tcontainer: element.querySelector('.js-slides-ref'),\r\n\t\t\t\tcontrolsContainer: element.querySelector('.js-arrows'),\r\n\t\t\t\tnav: false,\r\n\t\t\t\tmouseDrag: true,\r\n\t\t\t\tloop: false,\r\n\t\t\t\tautoHeight: true\r\n\t\t\t});\r\n\t\t\tArray.from(this.slider.getInfo().slideItems).forEach(\r\n\t\t\t\t(slide: any, index) => {\r\n\t\t\t\t\tslide.addEventListener('click', () => {\r\n\t\t\t\t\t\tthis.sliderRef.goTo(index);\r\n\t\t\t\t\t\t// this.activateSlider();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t\tthis.slider.events.on(\"indexChanged\", (evt) => {\r\n\t\t\t\tthis.customIndexChange = true;\r\n\t\t\t\tif (this.customRefIndexChange == false) {\r\n\t\t\t\t\tconst indexToGoTo = this.getIndexToGoTo(evt);\r\n\t\t\t\t\tif (indexToGoTo) {\r\n\t\t\t\t\t\tthis.sliderRef.goTo(indexToGoTo);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.customIndexChange = false;\r\n\t\t\t\t\tthis.customRefIndexChange = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.slider.events.on('newBreakpointEnd', evt => {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.slider.updateSliderHeight();\r\n\t\t\t\t\tthis.slider.goTo(0);\r\n\t\t\t\t}, 500);\r\n\t\t\t});\r\n\r\n\t\t\tif (this.sliderRef !== null && this.sliderRef !== undefined) {\r\n\t\t\t\tthis.sliderRef.events.on('indexChanged', evt => {\r\n\t\t\t\t\tthis.customRefIndexChange = true;\r\n\t\t\t\t\tif (this.customIndexChange == false) {\r\n\t\t\t\t\t\tconst indexToGoTo = this.getIndexToGoTo(evt);\r\n\t\t\t\t\t\tif (indexToGoTo) {\r\n\t\t\t\t\t\t\tthis.slider.goTo(indexToGoTo);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.customIndexChange = false;\r\n\t\t\t\t\t\tthis.customRefIndexChange = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tthis.sliderRef.events.on('transitionEnd', evt => {\r\n\t\t\t\t\tthis.activateSlider();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst firstSlide = element.getElementsByClassName(\r\n\t\t\t'js-slide'\r\n\t\t)[0] as HTMLElement;\r\n\t\taddClass(firstSlide, 'is-active');\r\n\r\n\t\tconst arrows = Array.from(\r\n\t\t\telement.getElementsByClassName('js-slider-arrow')\r\n\t\t);\r\n\t\tarrows.forEach(arrow => {\r\n\t\t\telement.addEventListener('click', () => {\r\n\t\t\t\t// this.activateSlider();\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprivate getIndexToGoTo(evt) {\r\n\t\tconst prevIndex = evt.indexCached ? evt.indexCached : 0;\r\n\t\tif (evt.index > prevIndex) {\r\n\t\t\treturn 'next';\r\n\t\t}\r\n\t\tif (evt.index < prevIndex) {\r\n\t\t\treturn 'prev';\r\n\t\t}\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tprivate activateSlider() {\r\n\t\tconst textBox = Array.from(\r\n\t\t\tthis.element.getElementsByClassName('js-slide-box')\r\n\t\t);\r\n\t\tlet object = [];\r\n\t\ttextBox.forEach(element => {\r\n\t\t\tif (hasClass(element, 'tns-slide-active')) {\r\n\t\t\t\tobject.push(1);\r\n\t\t\t} else {\r\n\t\t\t\tobject.push(0);\r\n\t\t\t}\r\n\t\t});\r\n\t\tconst slides = Array.from(\r\n\t\t\tthis.element.getElementsByClassName('js-slide')\r\n\t\t);\r\n\t\tlet i = 0;\r\n\t\tslides.forEach(element => {\r\n\t\t\tif (object[i] === 1) {\r\n\t\t\t\taddClass(element, 'is-active');\r\n\t\t\t} else {\r\n\t\t\t\tremoveClass(element, 'is-active');\r\n\t\t\t}\r\n\t\t\ti++;\r\n\t\t});\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { addClass } from '@opten/dom/add-class';\r\nimport { removeClass } from '@opten/dom/remove-class';\r\n\r\n@Component({ className: 'js-fade' })\r\nexport class FadeText {\r\n\tprivate toggleStatus = 'less';\r\n\t\r\n\tprivate text: HTMLElement;\r\n\tprivate title: HTMLElement;\r\n\tprivate teaser: HTMLElement;\r\n\r\n\tprivate toggler : Element;\r\n\tprivate maxHeight;\r\n\r\n\tprivate showMoreText;\r\n\tprivate showLessText;\r\n\r\n\r\n\tconstructor(public element: HTMLElement) {\r\n\t\tthis.maxHeight = element.getAttribute('data-max-heigth');\r\n\t\t\r\n\t\tthis.text = (element.getElementsByClassName('js-fade-text')[0] as HTMLElement);\r\n\t\tthis.title = (element.getElementsByClassName('js-fade-title')[0] as HTMLElement);\r\n\t\tthis.teaser = (element.getElementsByClassName('js-fade-teaser')[0] as HTMLElement);\r\n\t\tthis.toggler = element.getElementsByClassName('js-fade-toggler')[0];\r\n\t\tthis.showMoreText = this.toggler.getAttribute('data-showmoretext');\r\n\t\tthis.showLessText = this.toggler.getAttribute('data-showlesstext');\r\n\r\n\t\tthis.text.style.setProperty('--fade-max-heigth', this.maxHeight);\r\n\t\taddClass(this.text, \"u-text-fade\");\r\n\t\t\r\n\t\tif (this.text != null && this.text !== undefined && this.IsTruncated(this.text)) {\r\n\t\t\tthis.CalculateLines(this.text, this.teaser, this.maxHeight);\r\n\r\n\t\t\twindow.addEventListener('resize', () => {\r\n\t\t\t\tthis.CalculateLines(this.text, this.teaser, this.maxHeight);\r\n\t\t\t});\r\n\r\n\t\t\tthis.toggler.addEventListener('click', () => {\r\n\t\t\t\tthis.ToggleText();\r\n\t\t\t});\r\n\t\t}\r\n\t\telse { \r\n\t\t\taddClass(this.toggler, \"d-none\");\r\n\t\t\tremoveClass(this.toggler, \"d-block\");\r\n\r\n\t\t\tremoveClass(this.text,'u-text-fade')\r\n\t\t}\r\n\t}\r\n\t\r\n\tprivate ToggleText() {\r\n\t\tif (this.toggleStatus == 'less') {\r\n\t\t\tthis.toggler.innerHTML = this.showLessText;\r\n\t\t\tthis.toggleStatus = 'more';\r\n\t\t\t// removeClass(this.collapsedText, 'd-none');\r\n\t\t\tremoveClass(this.text, 'u-text-fade');\r\n\t\t} else if (this.toggleStatus == 'more') {\r\n\t\t\tthis.toggler.innerHTML = this.showMoreText;\r\n\t\t\tthis.toggleStatus = 'less';\r\n\t\t\t// addClass(this.collapsedText, 'd-none');\r\n\t\t\taddClass(this.text, 'u-text-fade');\r\n\r\n\t\t}\r\n\t}\r\n\r\n\tprivate GetLineCount(element: HTMLElement) { \r\n\t\treturn element.clientHeight / window.getComputedStyle(element).lineHeight.replace('px', '');\r\n\t}\r\n\r\n\tprivate CalculateLines(text: HTMLElement, teaser: HTMLElement, maxHeight:number) { \r\n\t\tif (this.IsTruncated(text) && this.GetLineCount(teaser) > 1) {\r\n\t\t\ttext.style.setProperty('--fade-max-heigth', maxHeight - (this.GetLineCount(teaser) - 1) + '');\r\n\t\t} else { \r\n\t\t\ttext.style.setProperty('--fade-max-heigth', maxHeight + '');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate IsTruncated(element: HTMLElement) { \r\n\t\treturn element.scrollHeight > element.clientHeight;\r\n\t}\r\n}\r\n","import { hasClass } from '@opten/dom/has-class';\r\nimport { addClass } from '@opten/dom/add-class';\r\nimport { removeClass } from '@opten/dom/remove-class';\r\nimport { forElementsByClassName } from '@opten/dom/for-elements-by-class-name';\r\nimport { getParentWithClass } from '@opten/dom/get-parent-with-class';\r\n// import { isMobile } from './../utilities/detection';\r\n\r\n// todo: better way? global?\r\n// declare const picturefill;\r\ndeclare var AOS;\r\n\r\nexport class FilterPageOptions {\r\n\tselectors: {\r\n\t\tcontent: string;\r\n\t\tselects: string;\r\n\t\tselectTag: string;\r\n\t\ttag: string;\r\n\t\tdropdown: string;\r\n\t\tdropdownToggle: string;\r\n\t\ttagsDropdown: string;\r\n\t\tsearchText: string;\r\n\t\tsearchButton: string;\r\n\t\ttagAll: string;\r\n\t\ttagAllActive: string;\r\n\t\ttagActive: string;\r\n\t\tresetAllActiveTagsElements: string;\r\n\t};\r\n\tpaging: {\r\n\t\tpageBack: string;\r\n\t\tpageNext: string;\r\n\t\tpageJump: string;\r\n\t\tpageJumpAttribute: string;\r\n\t\tpagingSize: string;\r\n\t};\r\n\tloading: {\r\n\t\tcontentLoading: string;\r\n\t\tcontentYScroll: number;\r\n\t};\r\n\tclasses: {\r\n\t\tactive: string;\r\n\t\thidden: string;\r\n\t};\r\n\r\n\tcontentLocation: string;\r\n\twrapperId: string;\r\n\tsearchValueText: string;\r\n\ttagValue: string;\r\n}\r\n\r\nexport class FilterPage {\r\n\tprivate wrapperElement: HTMLElement;\r\n\tprivate wrapperId: string;\r\n\tprivate contentElement: HTMLElement;\r\n\tprivate contentLocation: string;\r\n\tprivate tags: Array;\r\n\tprivate filters: Array;\r\n\tprivate activeTags: Array;\r\n\tprivate selects: Array;\r\n\tprivate searchTextInput: HTMLInputElement;\r\n\tprivate searchTextButton: HTMLElement;\r\n\tprivate resetAllActiveTagsElements: Array;\r\n\tprivate allTags: Array;\r\n\tprivate pagingSize: number = 6;\r\n\tprivate page: number = 1;\r\n\tprivate language: string = 'de-CH';\r\n\tprivate moreButton: HTMLElement;\r\n\r\n\tprivate _options: FilterPageOptions = {\r\n\t\tselectors: {\r\n\t\t\tcontent: 'js-filter__page__content',\r\n\t\t\tselects: 'js-filter__select',\r\n\t\t\tselectTag: 'js-filter__select__tag',\r\n\t\t\ttag: 'js-filter__tag',\r\n\t\t\tdropdown: 'js-filter__dropdown',\r\n\t\t\tdropdownToggle: 'js-filter__dropdown-toggle',\r\n\t\t\ttagsDropdown: 'js-filter-tags-dropdown',\r\n\t\t\tsearchText: 'js-filter__search-text',\r\n\t\t\tsearchButton: 'js-filter__search-button',\r\n\t\t\ttagAll: 'js-filter__tag-all',\r\n\t\t\ttagAllActive: 'js-filter__tag-all--active',\r\n\t\t\ttagActive: 'js-filter__tag-active',\r\n\t\t\tresetAllActiveTagsElements: 'js-filter__reset-all',\r\n\t\t},\r\n\t\tpaging: {\r\n\t\t\tpageBack: 'js-filter__page-back',\r\n\t\t\tpageNext: 'js-filter__page-next',\r\n\t\t\tpageJump: 'js-filter__page-jump',\r\n\t\t\tpageJumpAttribute: 'data-value',\r\n\t\t\tpagingSize: 'data-paging-size',\r\n\t\t},\r\n\t\tloading: {\r\n\t\t\tcontentLoading:\r\n\t\t\t\t'
',\r\n\t\t\tcontentYScroll: 0,\r\n\t\t},\r\n\t\tclasses: {\r\n\t\t\tactive: 'is--active',\r\n\t\t\thidden: 'is--hidden',\r\n\t\t},\r\n\t\tcontentLocation: 'data-location',\r\n\t\twrapperId: 'data-id',\r\n\t\tsearchValueText: 'search_text',\r\n\t\ttagValue: 'data-value',\r\n\t};\r\n\r\n\tconstructor(private wrapper: HTMLElement, options?: FilterPageOptions) {\r\n\t\tthis.language = document.body.getAttribute('data-language');\r\n\t\tthis.wrapperElement = wrapper;\r\n\t\tthis._options = { ...this._options, ...options };\r\n\t\tlet dataLanguage = document.body.getAttribute('data-language-long');\r\n\t\tif (dataLanguage && dataLanguage.length > 0) {\r\n\t\t\tthis.language = dataLanguage;\r\n\t\t}\r\n\t\tAOS.init();\r\n\t\tthis.init();\r\n\r\n\t\twindow.addEventListener('hashchange', () => this.filter());\r\n\r\n\t\tthis.filter();\r\n\t}\r\n\r\n\tprivate init() {\r\n\t\tthis.wrapperId = this.wrapperElement.getAttribute(this._options.wrapperId);\r\n\t\tthis.pagingSize = Number(\r\n\t\t\tthis.wrapperElement.getAttribute(this._options.paging.pagingSize),\r\n\t\t);\r\n\t\tthis.contentLocation = this.wrapperElement.getAttribute(\r\n\t\t\tthis._options.contentLocation,\r\n\t\t);\r\n\t\tthis.contentElement = this.wrapperElement.getElementsByClassName(\r\n\t\t\tthis._options.selectors.content,\r\n\t\t)[0] as HTMLElement;\r\n\t\tthis.selects = Array.from(\r\n\t\t\tthis.wrapperElement.getElementsByClassName(\r\n\t\t\t\tthis._options.selectors.selects,\r\n\t\t\t),\r\n\t\t);\r\n\t\tthis.tags = Array.from(\r\n\t\t\tthis.wrapperElement.getElementsByClassName(\r\n\t\t\t\tthis._options.selectors.tag,\r\n\t\t\t),\r\n\t\t);\r\n\t\tthis.searchTextInput = this.wrapperElement.getElementsByClassName(\r\n\t\t\tthis._options.selectors.searchText,\r\n\t\t)[0] as HTMLInputElement;\r\n\t\tthis.allTags = Array.from(\r\n\t\t\tthis.wrapperElement.getElementsByClassName(\r\n\t\t\t\tthis._options.selectors.tagAll,\r\n\t\t\t),\r\n\t\t);\r\n\t\tthis.resetAllActiveTagsElements = Array.from(\r\n\t\t\tthis.wrapperElement.getElementsByClassName(\r\n\t\t\t\tthis._options.selectors.resetAllActiveTagsElements,\r\n\t\t\t),\r\n\t\t);\r\n\r\n\t\tthis.tags.forEach((tag) => {\r\n\t\t\tif (!hasClass(tag, this._options.selectors.selectTag)) {\r\n\t\t\t\ttag.addEventListener('click', () => this.toggleTag(tag));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (this.searchTextInput != null) {\r\n\t\t\tthis.searchTextButton = this.searchTextInput.parentElement.getElementsByClassName(\r\n\t\t\t\tthis._options.selectors.searchButton,\r\n\t\t\t)[0] as HTMLElement;\r\n\r\n\t\t\tthis.searchTextInput.addEventListener('keypress', (e) => {\r\n\t\t\t\tconst key = e.which || e.keyCode;\r\n\t\t\t\tif (key === 13) {\r\n\t\t\t\t\t// 13 is enter\r\n\t\t\t\t\tthis.loadFilterElements();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (this.searchTextButton != null) {\r\n\t\t\t\tthis.searchTextButton.addEventListener('click', () =>\r\n\t\t\t\t\tthis.loadFilterElements(),\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (location.search.length > 0 && this.searchTextButton != null) {\r\n\t\t\t\tconst searchValues = location.search.substring(1).split('=');\r\n\t\t\t\tfor (const index in searchValues) {\r\n\t\t\t\t\tif (searchValues[index] === this._options.searchValueText) {\r\n\t\t\t\t\t\tlet searchTextValue = searchValues[Number(index) + 1];\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tsearchTextValue !== null &&\r\n\t\t\t\t\t\t\tsearchTextValue !== ''\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tsearchTextValue = decodeURIComponent(\r\n\t\t\t\t\t\t\t\tsearchTextValue,\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.searchTextInput.value = searchTextValue;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tconst query = window.location.search.substring(1);\r\n\r\n\t\t\t\t// is there anything there ?\r\n\t\t\t\tif (query.length) {\r\n\t\t\t\t\t// are the new history methods available ?\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\twindow.history !== undefined &&\r\n\t\t\t\t\t\twindow.history.pushState !== undefined\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\t// if pushstate exists, add a new state the the history, this changes the url without reloading the page\r\n\t\t\t\t\t\twindow.history.pushState(\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\tdocument.title,\r\n\t\t\t\t\t\t\twindow.location.pathname,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.selects && this.selects.length > 0) {\r\n\t\t\tthis.selects.forEach((select) => {\r\n\t\t\t\tselect.addEventListener('change', this.onChange);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.allTags && this.allTags.length > 0) {\r\n\t\t\tthis.allTags.forEach((allTag) =>\r\n\t\t\t\tallTag.addEventListener('click', () =>\r\n\t\t\t\t\tthis.allTagClick(\r\n\t\t\t\t\t\tgetParentWithClass(\r\n\t\t\t\t\t\t\tallTag,\r\n\t\t\t\t\t\t\t'js-filter-tags-dropdown',\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t),\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tthis.resetAllActiveTagsElements &&\r\n\t\t\tthis.resetAllActiveTagsElements.length > 0\r\n\t\t) {\r\n\t\t\tthis.resetAllActiveTagsElements.forEach((resetTags) =>\r\n\t\t\t\tresetTags.addEventListener('click', () =>\r\n\t\t\t\t\tthis.resetAllActiveTags(),\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate onChange(event: Event) {\r\n\t\tthis.updateSelectTag(event.target as HTMLSelectElement);\r\n\t}\r\n\r\n\tprivate initContentFilter() {\r\n\t\tconst that = this;\r\n\t\tif (this.contentElement != null) {\r\n\t\t\tconst newSelects = Array.from(\r\n\t\t\t\tthis.contentElement.getElementsByClassName(\r\n\t\t\t\t\tthis._options.selectors.selects,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t\tconst newTags = Array.from(\r\n\t\t\t\tthis.contentElement.getElementsByClassName(\r\n\t\t\t\t\tthis._options.selectors.tag,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\r\n\t\t\tif (newTags && newTags.length > 0) {\r\n\t\t\t\tnewTags.forEach((tag) => {\r\n\t\t\t\t\tif (!hasClass(tag, this._options.selectors.selectTag)) {\r\n\t\t\t\t\t\ttag.addEventListener('click', () =>\r\n\t\t\t\t\t\t\tthis.toggleTag(tag),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthat.tags.push(tag);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (newSelects && newSelects.length > 0) {\r\n\t\t\t\tnewSelects.forEach((select) => {\r\n\t\t\t\t\tselect.addEventListener('change', () =>\r\n\t\t\t\t\t\tthis.updateSelectTag(select),\r\n\t\t\t\t\t);\r\n\t\t\t\t\tthat.selects.push(select);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate loadFilterElements(setPageDefault: boolean = true, loadMore: boolean = false) {\r\n\t\tif (setPageDefault) {\r\n\t\t\tthis.setPageToDefault();\r\n\t\t}\r\n\t\tconst searchText =\r\n\t\t\tthis.searchTextInput != null ? this.searchTextInput.value : '';\r\n\r\n\t\tconst dataSearch =\r\n\t\t\t'id=' +\r\n\t\t\tthis.wrapperId +\r\n\t\t\t'&filter=' +\r\n\t\t\tthis.getFilters() +\r\n\t\t\t'&pagingSize=' +\r\n\t\t\tthis.pagingSize +\r\n\t\t\t'&page=' +\r\n\t\t\tthis.page +\r\n\t\t\t'&searchText=' +\r\n\t\t\tsearchText;\r\n\r\n\t\t// this.contentElement.parentElement.style.overflow = 'hidden';\r\n\r\n\t\t// Todo: Loader Button add next to more button\r\n\t\tif (loadMore) {\r\n\t\t\tif (this.page >= 2) {\r\n\t\t\t\tthis.moreButton = this.wrapperElement.querySelector('.js-filter__more');\r\n\t\t\t\tthis.moreButton.innerHTML = 'lädt';\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.contentElement.innerHTML = this._options.loading.contentLoading;\r\n\t\t}\r\n\r\n\t\tfetch('/umbraco/surface/' + this.contentLocation, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\r\n\t\t\t\t'accept-language': this.language,\r\n\t\t\t\t// todo: why? if we change to a api controller we don't have this problem...\r\n\t\t\t\t'X-Requested-With': 'XMLHttpRequest', // otherwise accept-language is ignored\r\n\t\t\t},\r\n\t\t\tbody: dataSearch,\r\n\t\t\tcredentials: 'include',\r\n\t\t})\r\n\t\t\t.then((response) => {\r\n\t\t\t\tconst contentType = response.headers.get('content-type');\r\n\t\t\t\tif (contentType && contentType.includes('text/html')) {\r\n\t\t\t\t\treturn response.text();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.then((data) => {\r\n\t\t\t\tif (data != null && data.length > 0) {\r\n\t\t\t\t\tif (loadMore) {\r\n\t\t\t\t\t\tif (this.page >= 2) {\r\n\t\t\t\t\t\t\tthis.moreButton.remove();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.contentElement.innerHTML = this.contentElement.innerHTML + removeOuterEmTagsAndAddClass(data);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.contentElement.innerHTML = removeOuterEmTagsAndAddClass(data);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.contentElement.removeAttribute('style');\r\n\t\t\t\t\tthis.setPreviousNextJumpPageEvents();\r\n\t\t\t\t\tthis.initContentFilter();\r\n\t\t\t\t\tthis.reinitFilter();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfunction removeOuterEmTagsAndAddClass(html) {\r\n\t\t\t\tlet container = document.createElement('div');\r\n\t\t\t\tcontainer.innerHTML = html;\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\tfor (let i = 0; i < container.children.length; i++) {\r\n\t\t\t\t\tlet child = container.children[i];\r\n\t\t\t\t\tif(child.tagName.toLowerCase() == \"em\") {\r\n\t\t\t\t\t\tlet childChildren = child.children;\r\n\t\t\t\t\t\tfor (let i = 0; i < childChildren.length; i++) {\r\n\t\t\t\t\t\t\tchild.children[i].classList.add('em'); // add em class to child instead\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcontainer.children[i].outerHTML = child.innerHTML; // removes parent\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn container.innerHTML;\r\n\t\t\t}\r\n\t}\r\n\r\n\tprivate loadPreviousPage(event: any) {\r\n\t\tevent.preventDefault();\r\n\t\tthis.page = this.page - 1 >= 1 ? this.page - 1 : 1;\r\n\t\tthis.loadFilterElements(false, true);\r\n\t}\r\n\r\n\tprivate loadNextPage(event: any) {\r\n\t\tevent.preventDefault();\r\n\t\tthis.page = this.page + 1;\r\n\t\tthis.loadFilterElements(false, true);\r\n\t}\r\n\r\n\tprivate loadJumpPage(event: any) {\r\n\t\tevent.preventDefault();\r\n\t\tconst element = event.target || event.currentTarget;\r\n\t\tthis.page = Number(\r\n\t\t\telement.getAttribute(this._options.paging.pageJumpAttribute),\r\n\t\t);\r\n\t\tthis.loadFilterElements(false, true);\r\n\t}\r\n\r\n\tprivate setPreviousNextJumpPageEvents() {\r\n\t\tconst pageBack = Array.from(\r\n\t\t\tthis.contentElement.getElementsByClassName(\r\n\t\t\t\tthis._options.paging.pageBack,\r\n\t\t\t),\r\n\t\t);\r\n\t\tconst pageNext = Array.from(\r\n\t\t\tthis.contentElement.getElementsByClassName(\r\n\t\t\t\tthis._options.paging.pageNext,\r\n\t\t\t),\r\n\t\t);\r\n\r\n\t\tconst pageJump = Array.from(\r\n\t\t\tthis.contentElement.getElementsByClassName(\r\n\t\t\t\tthis._options.paging.pageJump,\r\n\t\t\t),\r\n\t\t);\r\n\r\n\t\tif (pageBack.length > 0) {\r\n\t\t\tpageBack.forEach((pageStep) =>\r\n\t\t\t\tpageStep.addEventListener('click', (e) =>\r\n\t\t\t\t\tthis.loadPreviousPage(e),\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t}\r\n\t\tif (pageNext.length > 0) {\r\n\t\t\tpageNext.forEach((pageStep) =>\r\n\t\t\t\tpageStep.addEventListener('click', (e) => this.loadNextPage(e),\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (pageJump.length > 0) {\r\n\t\t\tpageJump.forEach((pageStep) =>\r\n\t\t\t\tpageStep.addEventListener('click', (e) => this.loadJumpPage(e)),\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setPageToDefault() {\r\n\t\tthis.page = 1;\r\n\t}\r\n\r\n\tprivate filter() {\r\n\t\tthis.reinitFilter();\r\n\t\tthis.loadFilterElements();\r\n\t}\r\n\r\n\tprivate reinitFilter() {\r\n\t\tthis.activeTags = this.getTagsFromLocationHash();\r\n\t\tthis.filters = [];\r\n\t\tthis.setActiveTagsClasses();\r\n\t}\r\n\r\n\tprivate setActiveTagsClasses() {\r\n\t\tthis.tags.forEach((tag) => {\r\n\t\t\tconst tagsDropdown = getParentWithClass(\r\n\t\t\t\ttag as HTMLElement,\r\n\t\t\t\tthis._options.selectors.tagsDropdown,\r\n\t\t\t);\r\n\t\t\tif (tagsDropdown != null) {\r\n\t\t\t\tif (hasClass(tag, this._options.selectors.tagActive)) {\r\n\t\t\t\t\taddClass(tag.parentElement, this._options.classes.hidden);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tremoveClass(\r\n\t\t\t\t\t\ttag.parentElement,\r\n\t\t\t\t\t\tthis._options.classes.hidden,\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.isTagActive(tag)) {\r\n\t\t\t\tif (tagsDropdown != null) {\r\n\t\t\t\t\tthis.deactivateAllTag(tagsDropdown);\r\n\t\t\t\t} else {\r\n\t\t\t\t\taddClass(tag, this._options.classes.active);\r\n\t\t\t\t\taddClass(tag.parentElement, this._options.classes.active);\r\n\t\t\t\t\tif (this.isSelectOption(tag)) {\r\n\t\t\t\t\t\t(tag.parentElement).selectedIndex = (tag).index;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.addTagToFilters(tag);\r\n\t\t\t} else {\r\n\t\t\t\tif (tagsDropdown != null) {\r\n\t\t\t\t\tconst allTagsActive = Array.from(\r\n\t\t\t\t\t\ttagsDropdown.getElementsByClassName(\r\n\t\t\t\t\t\t\tthis._options.selectors.tag +\r\n\t\t\t\t\t\t\t' ' +\r\n\t\t\t\t\t\t\tthis._options.selectors.tagActive,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t).filter(\r\n\t\t\t\t\t\t(tag) =>\r\n\t\t\t\t\t\t\thasClass(\r\n\t\t\t\t\t\t\t\ttag.parentElement,\r\n\t\t\t\t\t\t\t\tthis._options.classes.hidden,\r\n\t\t\t\t\t\t\t) !== true,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (allTagsActive.length === 0) {\r\n\t\t\t\t\t\tthis.activateAllTag(tagsDropdown);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tremoveClass(tag, this._options.classes.active);\r\n\t\t\t\t}\r\n\t\t\t\tthis.removeTagFromFilters(tag);\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.activeTags = this.filters;\r\n\t\tlet newHash = this.getTagsLocationHash();\r\n\r\n\t\tif (newHash && newHash.length > 1) {\r\n\t\t\tlocation.hash = newHash;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate getTagsFromLocationHash(): Array {\r\n\t\treturn decodeURI(location.hash)\r\n\t\t\t.split('/')\r\n\t\t\t.filter((o) => ['', '#'].indexOf(o) === -1);\r\n\t}\r\n\r\n\tprivate getTagsLocationHash(): string {\r\n\t\treturn '/' + this.activeTags.join('/');\r\n\t}\r\n\r\n\tprivate toggleTag(tag: Element): void {\r\n\r\n\t\tthis.contentElement.style.minHeight = this.contentElement.scrollHeight.toString() + 'px';\r\n\t\tthis.contentElement.innerHTML = '';\r\n\r\n\t\tconst doActivateTag = !this.isTagActive(tag);\r\n\t\tconst tagsDropdown = getParentWithClass(\r\n\t\t\ttag as HTMLElement,\r\n\t\t\tthis._options.selectors.tagsDropdown,\r\n\t\t);\r\n\t\tif (tagsDropdown != null) {\r\n\t\t\tthis.deactivateActiveTags(tagsDropdown);\r\n\t\t\tif (doActivateTag) {\r\n\t\t\t\tthis.activateTag(tag);\r\n\t\t\t} else {\r\n\t\t\t\tthis.deactivateTag(tag);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (doActivateTag) {\r\n\t\t\t\tthis.activateActiveTag(tag);\r\n\t\t\t} else {\r\n\t\t\t\tthis.deactivateActiveTag(tag);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateSelectTag(select: Element): void {\r\n\t\tconst selectMenu = select as HTMLSelectElement;\r\n\t\tconst selectedIndex = selectMenu.selectedIndex;\r\n\t\tconst selectedTag = selectMenu.options[selectedIndex] as Element;\r\n\t\tthis.deactivateActiveTags(select);\r\n\t\tif (selectedTag != null) {\r\n\t\t\tthis.activateActiveTag(selectedTag);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate resetAllActiveTags(): void {\r\n\t\tthis.filters = [];\r\n\t\tlocation.hash = '';\r\n\t\tthis.selects.forEach((select) => {\r\n\t\t\t(select as HTMLSelectElement).selectedIndex = 0;\r\n\t\t});\r\n\t\tif (this.searchTextInput) {\r\n\t\t\tthis.searchTextInput.value = '';\r\n\t\t}\r\n\t\tthis.loadFilterElements();\r\n\t}\r\n\r\n\tprivate isSelectOption(tag: Element): boolean {\r\n\t\treturn this.selects.indexOf(tag.parentElement) > -1;\r\n\t}\r\n\r\n\tprivate activateActiveTag(tag: Element) {\r\n\t\taddClass(tag, this._options.classes.active);\r\n\t\tthis.activateTag(tag);\r\n\t}\r\n\r\n\tprivate activateTag(tag: Element) {\r\n\t\tconst tagValue = this.getTagValue(tag);\r\n\t\tif (tagValue.length > 0) {\r\n\t\t\tthis.activeTags.push(tagValue);\r\n\t\t\tlocation.hash = this.getTagsLocationHash();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate deactivateTag(tag: Element) {\r\n\t\tconst tagValue = this.getTagValue(tag);\r\n\t\tif (tagValue.length > 0) {\r\n\t\t\tconst tagValueIndex = this.getTagValueIndex(tagValue);\r\n\t\t\tif (tagValueIndex > -1) {\r\n\t\t\t\tthis.activeTags.splice(tagValueIndex, 1);\r\n\t\t\t\tlocation.hash = this.getTagsLocationHash();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate deactivateActiveTags(tagsDropdown: Element): void {\r\n\t\tconst allTagsActive = Array.from(\r\n\t\t\ttagsDropdown.getElementsByClassName(\r\n\t\t\t\tthis._options.selectors.tag +\r\n\t\t\t\t' ' +\r\n\t\t\t\tthis._options.selectors.tagActive,\r\n\t\t\t),\r\n\t\t).filter(\r\n\t\t\t(tag) =>\r\n\t\t\t\thasClass(tag.parentElement, this._options.classes.hidden) !== true,\r\n\t\t);\r\n\t\tallTagsActive.forEach((tag) => this.deactivateTag(tag));\r\n\t\tconst tagsActive = Array.from(\r\n\t\t\ttagsDropdown.getElementsByClassName(\r\n\t\t\t\tthis._options.selectors.tag + ' ' + this._options.classes.active,\r\n\t\t\t),\r\n\t\t);\r\n\t\ttagsActive.forEach((tag) => this.deactivateActiveTag(tag));\r\n\t}\r\n\r\n\tprivate deactivateActiveTag(tag: Element): void {\r\n\t\tremoveClass(tag.parentElement, this._options.classes.active);\r\n\t\tremoveClass(tag, this._options.classes.active);\r\n\t\tthis.deactivateTag(tag);\r\n\t}\r\n\r\n\tprivate allTagClick(tagsDropdown: Element) {\r\n\t\tthis.deactivateActiveTags(tagsDropdown);\r\n\t\tthis.activateAllTag(tagsDropdown as HTMLElement);\r\n\t}\r\n\r\n\tprivate activateAllTag(tagsDropdown: HTMLElement) {\r\n\t\tif (this.allTags != null && this.allTags.length) {\r\n\t\t\tconst allTag = tagsDropdown.getElementsByClassName(\r\n\t\t\t\tthis._options.selectors.tagAll,\r\n\t\t\t)[0];\r\n\t\t\tconst allTagActive = tagsDropdown.getElementsByClassName(\r\n\t\t\t\tthis._options.selectors.tagAllActive,\r\n\t\t\t)[0];\r\n\t\t\tconst dropdownToggleBtn = getParentWithClass(\r\n\t\t\t\ttagsDropdown,\r\n\t\t\t\tthis._options.selectors.dropdown,\r\n\t\t\t).getElementsByClassName(this._options.selectors.dropdownToggle)[0];\r\n\t\t\tconst filterAll = this.getTagValue(allTag);\r\n\r\n\t\t\tif (filterAll !== 'undefined' && filterAll !== '') {\r\n\t\t\t\tthis.addTagToFilters(allTag);\r\n\t\t\t}\r\n\t\t\taddClass(allTag.parentElement, this._options.classes.hidden);\r\n\t\t\tremoveClass(\r\n\t\t\t\tallTagActive.parentElement,\r\n\t\t\t\tthis._options.classes.hidden,\r\n\t\t\t);\r\n\t\t\tremoveClass(dropdownToggleBtn, this._options.classes.active);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate deactivateAllTag(tagsDropdown: HTMLElement) {\r\n\t\tif (this.allTags != null && this.allTags.length) {\r\n\t\t\tconst allTag = tagsDropdown.getElementsByClassName(\r\n\t\t\t\tthis._options.selectors.tagAll,\r\n\t\t\t)[0];\r\n\t\t\tconst allTagActive = tagsDropdown.getElementsByClassName(\r\n\t\t\t\tthis._options.selectors.tagAllActive,\r\n\t\t\t)[0];\r\n\t\t\tconst dropdownToggleBtn = getParentWithClass(\r\n\t\t\t\ttagsDropdown,\r\n\t\t\t\tthis._options.selectors.dropdown,\r\n\t\t\t).getElementsByClassName(this._options.selectors.dropdownToggle)[0];\r\n\t\t\tconst filterAll = this.getTagValue(allTag);\r\n\r\n\t\t\tif (filterAll !== 'undefined' && filterAll !== '') {\r\n\t\t\t\tthis.removeTagFromFilters(allTag);\r\n\t\t\t}\r\n\t\t\tremoveClass(allTag.parentElement, this._options.classes.hidden);\r\n\t\t\taddClass(allTagActive.parentElement, this._options.classes.hidden);\r\n\t\t\taddClass(dropdownToggleBtn, this._options.classes.active);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate isTagActive(tag: Element): boolean {\r\n\t\treturn this.getTagValueIndex(this.getTagValue(tag)) > -1;\r\n\t}\r\n\r\n\tprivate getTagValueIndex(tagValue: string): number {\r\n\t\treturn this.activeTags.indexOf(tagValue);\r\n\t}\r\n\r\n\tprivate getTagValue(tag: Element): string {\r\n\t\treturn tag.getAttribute(this._options.tagValue);\r\n\t}\r\n\r\n\tprivate getFilters(): string {\r\n\t\treturn this.filters.toString();\r\n\t}\r\n\r\n\tprivate addTagToFilters(tag: Element) {\r\n\t\tconst tagValue = this.getTagValue(tag);\r\n\r\n\t\tif (tagValue !== 'undefined' && tagValue !== '') {\r\n\t\t\tif (this.filters.indexOf(tagValue) < 0) {\r\n\t\t\t\tthis.filters.push(tagValue);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tprivate removeTagFromFilters(tag: Element) {\r\n\t\tconst tagValue = this.getTagValue(tag);\r\n\r\n\t\tif (tagValue !== 'undefined' && tagValue !== '') {\r\n\t\t\tconst indexFilter = this.filters.indexOf(tagValue);\r\n\r\n\t\t\tif (indexFilter > -1) {\r\n\t\t\t\tthis.filters.splice(indexFilter, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default function filterpage(\r\n\twrapper: HTMLElement,\r\n\toptions?: FilterPageOptions,\r\n): FilterPage {\r\n\treturn new FilterPage(wrapper, options);\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { addClass } from '@opten/dom/add-class';\r\n\r\n@Component({ className: 'js-map-interactive' })\r\nexport class MapInteractiveComponent {\r\n\tconstructor(private element: HTMLSelectElement) {\r\n\t\tconst links = Array.from(\r\n\t\t\tthis.element.querySelectorAll('.js-map-interactive-link')\r\n\t\t)?.map((o) => ({\r\n\t\t\tid: o.getAttribute('data-id'),\r\n\t\t\turl: o.getAttribute('href'),\r\n\t\t}));\r\n\t\tconst logos = this.element.querySelectorAll(\r\n\t\t\t'[id$=\"-Logo\"]'\r\n\t\t);\r\n\t\tlogos?.forEach((logo) => {\r\n\t\t\tconst link = links?.find(\r\n\t\t\t\t(o) => logo.id.toLowerCase().indexOf(o.id) >= 0\r\n\t\t\t);\r\n\t\t\tif (link) {\r\n\t\t\t\taddClass(logo, 'map-interactive-logo');\r\n\t\t\t\tlogo.addEventListener('click', (e) => {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\twindow.open(link.url);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","import { scrollToElement } from '@opten/scroll/scroll-to-element';\r\nimport { dispatchCustomEvent } from '@opten/events/dispatch-custom-event';\r\nimport { hasClass } from '@opten/dom/has-class';\r\nimport { addClass } from '@opten/dom/add-class';\r\nimport { toggleClass } from '@opten/dom/toggle-class';\r\nimport { removeClass } from '@opten/dom/remove-class';\r\nimport { debounce } from '@opten/reactive/debounce';\r\nimport { fitBoundsWithPadding } from '@opten/map-helpers/fit-bounds-with-padding';\r\nimport { linearTween } from '@opten/animation/linear-tween';\r\nimport { isOverflown } from '@opten/dom/is-overflown';\r\n\r\nexport interface MapSearcherOptions {\r\n\tlocationClass?: string;\r\n\tmapClass?: string;\r\n\taccordeonClass?: string;\r\n\tscrollToMapAnchorClass?: string;\r\n\ttypeInputClass?: string;\r\n\tfilterInputClass?: string;\r\n\tlocationInputClass?: string;\r\n\tlocationContainerClass?: string;\r\n\tmarkerIcon?: {\r\n\t\turl: string;\r\n\t\tsize: { width: number; height: number };\r\n\t\tanchor: { x: number; y: number };\r\n\t};\r\n\tclusterStyle?: any;\r\n\tmapCenter?: {\r\n\t\tlat: number;\r\n\t\tlng: number;\r\n\t};\r\n\tmapInitialZoom?: 8;\r\n\tmaxZoom?: number;\r\n\tmapStyles?: any;\r\n\tradiusBounds?: number;\r\n}\r\n\r\ndeclare class OverlappingMarkerSpiderfier {\r\n\tconstructor(map: any, options: any);\r\n\tpublic addMarker(marker: any);\r\n}\r\n\r\ndeclare const Cookiebot: any;\r\n\r\ninterface MapsLocation {\r\n\telement: Element;\r\n\tmarker: google.maps.Marker;\r\n\tlat: number;\r\n\tlng: number;\r\n\tname: string;\r\n\ttags: string[];\r\n\tsearch: string[];\r\n\tvisible: boolean;\r\n}\r\n\r\nexport class MapSearcher {\r\n\r\n\tpublic static defaults: MapSearcherOptions = {\r\n\t\tlocationClass: 'js-map-searcher-location',\r\n\t\tmapClass: 'js-map-searcher-map',\r\n\t\taccordeonClass: 'js-map-searcher-accordeon',\r\n\t\tscrollToMapAnchorClass: 'js-map-searcher-scroll-to-map',\r\n\t\ttypeInputClass: 'js-map-searcher-type',\r\n\t\tfilterInputClass: 'js-map-searcher-filter',\r\n\t\tlocationInputClass: 'js-map-searcher-place',\r\n\t\tlocationContainerClass: 'js-map-searcher-location-wrapper',\r\n\t\tmarkerIcon: {\r\n\t\t\turl: '/images/map-marker.png',\r\n\t\t\tsize: { width: 45, height: 54 },\r\n\t\t\tanchor: { x: 22.5, y: 54 },\r\n\t\t},\r\n\t\tclusterStyle: [\r\n\t\t\t{\r\n\t\t\t\turl: '/images/map-cluster.png',\r\n\t\t\t\theight: 45,\r\n\t\t\t\twidth: 45,\r\n\t\t\t\ttextColor: 'white',\r\n\t\t\t}, {\r\n\t\t\t\turl: '/images/map-cluster2.png',\r\n\t\t\t\theight: 45,\r\n\t\t\t\twidth: 45,\r\n\t\t\t\ttextColor: 'white',\r\n\t\t\t},\r\n\t\t\t/*{\r\n\t\t\t\turl: '/images/map-cluster-blue.png',\r\n\t\t\t\theight: 45,\r\n\t\t\t\twidth: 45,\r\n\t\t\t\ttextColor: 'white',\r\n\t\t\t}, {\r\n\t\t\t\turl: '/images/map-cluster-blue2.png',\r\n\t\t\t\theight: 45,\r\n\t\t\t\twidth: 45,\r\n\t\t\t\ttextColor: 'white',\r\n\t\t\t},*/\r\n\t\t],\r\n\t\tmapCenter: { lat: 46.905358, lng: 8.423689 },\r\n\t\tmapInitialZoom: 8,\r\n\t\tmaxZoom: 15,\r\n\t\tmapStyles: [],\r\n\t\tradiusBounds: 7,\r\n\t};\r\n\r\n\tprivate typeSearchField: HTMLInputElement[];\r\n\tprivate filterSearchField: HTMLInputElement[];\r\n\tprivate locationSearchField: HTMLInputElement;\r\n\tprivate accordeon: HTMLElement;\r\n\tprivate mapContainer: HTMLElement;\r\n\tprivate locationContainer: HTMLElement;\r\n\tprivate options: MapSearcherOptions;\r\n\tprivate map: google.maps.Map;\r\n\tprivate oms: OverlappingMarkerSpiderfier;\r\n\tprivate markerCluster: MarkerClusterer;\r\n\tprivate geoCoder: google.maps.Geocoder;\r\n\tprivate locations: MapsLocation[];\r\n\tprivate previousAddress: string;\r\n\tprivate previousBounds: google.maps.LatLngBounds;\r\n\r\n\tconstructor(private element: HTMLElement, options?: MapSearcherOptions) {\r\n\t\twindow.addEventListener(\r\n\t\t\t'CookiebotOnAccept',\r\n\t\t\t(e) => {\r\n\t\t\t\tif (Cookiebot.consent.marketing) {\r\n\t\t\t\t\tthis.shopfinderMapInit();\r\n\t\t\t\t\tconsole.log(\"logged?\");\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfalse\r\n\t\t);\r\n\t\tif (Cookiebot.consent.marketing) {\r\n\t\t\tthis.shopfinderMapInit();\r\n\t\t\tconsole.log(\"logged 2?\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tprivate shopfinderMapInit() {\r\n\t\tthis.options = { ...MapSearcher.defaults, ...this.options };\r\n\r\n\t\tthis.mapContainer = this.element.querySelector(\r\n\t\t\t`.${this.options.mapClass}`,\r\n\t\t);\r\n\t\tthis.typeSearchField = Array.from(this.element.querySelectorAll(\r\n\t\t\t`.${this.options.typeInputClass}`,\r\n\t\t));\r\n\t\tthis.filterSearchField = Array.from(this.element.querySelectorAll(\r\n\t\t\t`.${this.options.filterInputClass}`,\r\n\t\t));\r\n\t\tthis.locationSearchField = this.element.querySelector(\r\n\t\t\t`.${this.options.locationInputClass}`,\r\n\t\t);\r\n\t\tthis.locationContainer = this.element.querySelector(\r\n\t\t\t`.${this.options.locationContainerClass}`,\r\n\t\t);\r\n\t\tthis.accordeon = this.element.querySelector(\r\n\t\t\t`.${this.options.accordeonClass}`,\r\n\t\t);\r\n\r\n\t\tthis.map = new google.maps.Map(this.mapContainer, {\r\n\t\t\tzoom: this.options.mapInitialZoom,\r\n\t\t\tcenter: this.options.mapCenter,\r\n\t\t\tfullscreenControl: false,\r\n\t\t\tmapTypeControl: false,\r\n\t\t\tstreetViewControl: false,\r\n\t\t\tstyles: this.options.mapStyles,\r\n\t\t});\r\n\t\tgoogle.maps.event.addListenerOnce(this.map, 'idle', () =>\r\n\t\t\tthis.centerMap(),\r\n\t\t);\r\n\r\n\t\tthis.oms = new OverlappingMarkerSpiderfier(this.map, {\r\n\t\t\tmarkersWontMove: true,\r\n\t\t\tmarkersWontHide: true,\r\n\t\t\tbasicFormatEvents: true,\r\n\t\t\tcircleFootSeparation: 50,\r\n\t\t});\r\n\r\n\t\tthis.markerCluster = new MarkerClusterer(this.map, [], {\r\n\t\t\tmaxZoom: this.options.maxZoom,\r\n\t\t\tstyles: this.options.clusterStyle,\r\n\t\t});\r\n\t\tthis.markerCluster.setCalculator((markers, numStyles) => {\r\n\t\t\t/*const differentIcons = markers.map((o) => o.getIcon().url.replace('-active.png', '.png')).reduce((total, amount) => {\r\n\t\t\t\tif (total.indexOf(amount) === -1) {\r\n\t\t\t\t\ttotal.push(amount);\r\n\t\t\t\t}\r\n\t\t\t\treturn total;\r\n\t\t\t}, []);\r\n\t\t\tif (markers.length >= 10) {\r\n\t\t\t\treturn { text: markers.length, index: differentIcons.length > 1 ? 4 : 2 };\r\n\t\t\t} else {\r\n\t\t\t\treturn { text: markers.length, index: differentIcons.length > 1 ? 3 : 1 };\r\n\t\t\t}*/\r\n\t\t\tif (markers.length >= 10) {\r\n\t\t\t\treturn { text: markers.length, index: 2 };\r\n\t\t\t} else {\r\n\t\t\t\treturn { text: markers.length, index: 1 };\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.geoCoder = new google.maps.Geocoder();\r\n\r\n\t\tthis.locations = Array.from(\r\n\t\t\tthis.element.getElementsByClassName(this.options.locationClass),\r\n\t\t).map((elem) => this.createMapLocation(elem));\r\n\r\n\t\tthis.locations.forEach((l) => {\r\n\t\t\tl.marker.setMap(this.map);\r\n\t\t\tthis.oms.addMarker(l.marker);\r\n\t\t\tthis.markerCluster.addMarker(l.marker);\r\n\r\n\t\t\tl.marker.addListener('spider_click', () => {\r\n\t\t\t\tthis.handleMarkerClick(l);\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\t[\r\n\t\t\t...this.typeSearchField,\r\n\t\t\t...this.filterSearchField,\r\n\t\t].forEach((input: HTMLInputElement) => {\r\n\t\t\t['change'].forEach((key) =>\r\n\t\t\t\tinput.addEventListener(\r\n\t\t\t\t\tkey,\r\n\t\t\t\t\tdebounce(() => {\r\n\t\t\t\t\t\tthis.search();\r\n\t\t\t\t\t}, 750, false),\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t\tif (this.isInputActiveByHash(input)) {\r\n\t\t\t\tinput.checked = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\t['keyup'].forEach((key) => this.locationSearchField.addEventListener(\r\n\t\t\tkey,\r\n\t\t\tdebounce(() => {\r\n\t\t\t\tthis.search();\r\n\t\t\t}, 750, false)\r\n\t\t));\r\n\r\n\t\tArray.from(\r\n\t\t\tdocument.getElementsByClassName(this.options.scrollToMapAnchorClass),\r\n\t\t).forEach((item: HTMLElement) =>\r\n\t\t\titem.addEventListener('click', () =>\r\n\t\t\t\tscrollToElement(this.mapContainer, linearTween, 300, -70),\r\n\t\t\t),\r\n\t\t);\r\n\r\n\t\tthis.search();\r\n\t}\r\n\r\n\tprivate createMapLocation(element: Element) {\r\n\t\tconst lat = parseFloat(element.getAttribute('data-lat'));\r\n\t\tconst lng = parseFloat(element.getAttribute('data-lng'));\r\n\t\tconst name = element.getAttribute('data-name');\r\n\t\tconst tagsAttr = element.getAttribute('data-tags');\r\n\t\tconst searchAttr = element.getAttribute('data-search');\r\n\t\tlet icon = element.getAttribute('data-icon');\r\n\t\tlet iconActive = element.getAttribute('data-icon-active');\r\n\t\ticon = icon ? icon : this.options.markerIcon.url;\r\n\t\ticonActive = iconActive ? iconActive : icon;\r\n\t\tlet tags = [];\r\n\t\tlet search = [];\r\n\t\tconst marker = new google.maps.Marker({\r\n\t\t\tposition: { lat, lng },\r\n\t\t\ticon: (({ url, size, anchor }) => ({\r\n\t\t\t\turl: icon,\r\n\t\t\t\tsize: new google.maps.Size(size.width, size.height),\r\n\t\t\t\tanchor: new google.maps.Point(anchor.x, anchor.y),\r\n\t\t\t}))(this.options.markerIcon),\r\n\t\t});\r\n\t\tif (tagsAttr) {\r\n\t\t\ttags = tagsAttr.split(',');\r\n\t\t}\r\n\t\tif (searchAttr) {\r\n\t\t\tsearch = searchAttr.split(',');\r\n\t\t}\r\n\t\t\r\n\t\tconst collapse = document.querySelector(element.getAttribute('data-target'));\r\n\t\tcollapse.addEventListener('show.opten.collapse', () => {\r\n\t\t\tmarker.setIcon({\r\n\t\t\t\turl: iconActive,\r\n\t\t\t\tsize: new google.maps.Size(this.options.markerIcon.size.width, this.options.markerIcon.size.height),\r\n\t\t\t\tanchor: new google.maps.Point(this.options.markerIcon.anchor.x, this.options.markerIcon.anchor.y),\r\n\t\t\t});\r\n\t\t});\r\n\t\tcollapse.addEventListener('hide.opten.collapse', () => {\r\n\t\t\tmarker.setIcon({\r\n\t\t\t\turl: icon,\r\n\t\t\t\tsize: new google.maps.Size(this.options.markerIcon.size.width, this.options.markerIcon.size.height),\r\n\t\t\t\tanchor: new google.maps.Point(this.options.markerIcon.anchor.x, this.options.markerIcon.anchor.y),\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\treturn {\r\n\t\t\telement,\r\n\t\t\tlat,\r\n\t\t\tlng,\r\n\t\t\tname,\r\n\t\t\ttags,\r\n\t\t\tsearch,\r\n\t\t\tmarker\r\n\t\t} as MapsLocation;\r\n\t}\r\n\r\n\tprivate isInputActiveByHash(input): boolean {\r\n\t\tif (location.hash && (input.getAttribute('type') == 'radio' || input.getAttribute('type') == 'checkbox')) {\r\n\t\t\tconst val = input.getAttribute('value');\r\n\t\t\tif (val && location.hash.toLowerCase().indexOf(val.toLowerCase()) != -1) {\r\n\t\t\t\tif (hasClass(this.accordeon, 'is-active') == false) {\r\n\t\t\t\t\tdispatchCustomEvent(this.accordeon, 'click');\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprivate setUrlHash(hash) {\r\n\t\tif (location.hash != hash) {\r\n\t\t\tif (history.pushState) {\r\n\t\t\t\thistory.pushState(null, null, hash);\r\n\t\t\t} else {\r\n\t\t\t\tlocation.hash = hash;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate search() {\r\n\t\tthis.getSearchBounds().then((bounds) => {\r\n\t\t\tconst anyFound = this.filterLocationsByBounds(bounds);\r\n\t\t\tif (anyFound == false) {\r\n\t\t\t\tthis.getGeocodeSearchBounds().then((bounds) => {\r\n\t\t\t\t\tthis.filterLocationsByBounds(bounds);\r\n\t\t\t\t\tthis.centerMap(bounds);\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tthis.centerMap(bounds);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate filterLocationsByBounds(bounds: google.maps.LatLngBounds) {\r\n\t\tthis.markerCluster.clearMarkers();\r\n\t\tconst searchAddress = this.getSearchAddress();\r\n\t\tconst searchTypes = this.typeSearchField.filter((o) => o.checked).map((o) => o.value).filter((o) => o != '');\r\n\t\tconst searchFilters = this.filterSearchField.filter((o) => o.checked).map((o) => o.value).filter((o) => o != '');\r\n\t\tlet anyFound = false;\r\n\t\tthis.setUrlHash('#' + searchTypes.join('/'));\r\n\t\tthis.locations.forEach((l) => {\r\n\t\t\tif (\r\n\t\t\t\t(\r\n\t\t\t\t\t!searchAddress ||\r\n\t\t\t\t\t(\r\n\t\t\t\t\t\tsearchAddress &&\r\n\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\tbounds && bounds.contains(\r\n\t\t\t\t\t\t\t\t\tnew google.maps.LatLng(l.lat, l.lng),\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t) ||\r\n\t\t\t\t\t\t\tl.search.some((o) => o.indexOf(searchAddress) >= 0) ||\r\n\t\t\t\t\t\t\tl.name.toLowerCase() == searchAddress\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t)\r\n\t\t\t\t) &&\r\n\t\t\t\t(\r\n\t\t\t\t\t(searchTypes.length == 0 || l.tags.some((o) => searchTypes.indexOf(o) >= 0)) &&\r\n\t\t\t\t\t(searchFilters.length == 0 || searchFilters.every((o) => l.tags.indexOf(o) >= 0))\r\n\t\t\t\t)\r\n\t\t\t) {\r\n\t\t\t\tthis.showLocation(l);\r\n\t\t\t\tanyFound = true;\r\n\t\t\t} else {\r\n\t\t\t\tthis.hideLocation(l);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn anyFound;\r\n\t}\r\n\r\n\tprivate showLocation(l: MapsLocation) {\r\n\t\tl.visible = true;\r\n\t\tl.marker.setMap(this.map);\r\n\t\tthis.markerCluster.addMarker(l.marker);\r\n\t}\r\n\r\n\tprivate hideLocation(l: MapsLocation) {\r\n\t\tl.visible = false;\r\n\t\tl.marker.setMap(null);\r\n\t\tthis.markerCluster.removeMarker(l.marker);\r\n\t}\r\n\r\n\tprivate handleMarkerClick(location: MapsLocation) {\r\n\t\tdispatchCustomEvent(location.element, 'click');\r\n\t\tif (hasClass(this.accordeon, 'is-active')) {\r\n\t\t\tdispatchCustomEvent(this.accordeon, 'click');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate centerMap(bounds) {\r\n\t\tif (this.locations && this.locations.length > 0) {\r\n\t\t\tif (!bounds) {\r\n\t\t\t\tbounds = this.accumulateLocationBounds(this.locations);\r\n\t\t\t}\r\n\t\t\tconst top = 20;\r\n\t\t\tlet left = this.locationContainer.offsetWidth * 0.3;\r\n\t\t\tif (hasClass(this.accordeon, 'is-active')) {\r\n\t\t\t\tleft = this.locationContainer.offsetWidth;\r\n\t\t\t}\r\n\t\t\tif (window.getComputedStyle(this.locationContainer).position != 'absolute') {\r\n\t\t\t\tleft = 20;\r\n\t\t\t}\r\n\r\n\t\t\tfitBoundsWithPadding(this.map, bounds, { top, left });\r\n\t\t\tthis.setZoom();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setZoom() {\r\n\t\tif (this.map.getZoom() > this.options.maxZoom) {\r\n\t\t\tthis.map.setZoom(this.options.maxZoom);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate accumulateLocationBounds(locations: MapsLocation[]) {\r\n\t\tlet visibles = locations.filter((o) => o.visible);\r\n\t\tif (!visibles || visibles.length === 0) {\r\n\t\t\tvisibles = locations;\r\n\t\t}\r\n\t\treturn visibles.reduce(\r\n\t\t\t(bounds, l) => bounds.extend(new google.maps.LatLng(l.lat, l.lng)),\r\n\t\t\tnew google.maps.LatLngBounds()\r\n\t\t);\r\n\t}\r\n\r\n\tprivate getSearchBounds() {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tresolve(null);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate getGeocodeSearchBounds() {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\tconst address = this.getSearchAddress();\r\n\t\t\tif (address) {\r\n\t\t\t\tif (address === this.previousAddress) {\r\n\t\t\t\t\tresolve(\r\n\t\t\t\t\t\tthis.addRadiusToBounds(\r\n\t\t\t\t\t\t\tthis.options.radiusBounds,\r\n\t\t\t\t\t\t\tthis.previousBounds,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.geoCoder.geocode({ address, region: \"CH\" }, (results, status) => {\r\n\t\t\t\t\t\tif (status === google.maps.GeocoderStatus.OK) {\r\n\t\t\t\t\t\t\tconst bounds = results[0].geometry.bounds;\r\n\t\t\t\t\t\t\tthis.previousAddress = address;\r\n\t\t\t\t\t\t\tthis.previousBounds = bounds;\r\n\t\t\t\t\t\t\tresolve(\r\n\t\t\t\t\t\t\t\tthis.addRadiusToBounds(\r\n\t\t\t\t\t\t\t\t\tthis.options.radiusBounds,\r\n\t\t\t\t\t\t\t\t\tbounds,\r\n\t\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.previousAddress = undefined;\r\n\t\t\t\t\t\t\tthis.previousBounds = undefined;\r\n\t\t\t\t\t\t\tresolve(null);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tresolve(null);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate getSearchAddress() {\r\n\t\tconst address = this.locationSearchField.value;\r\n\t\tif (address) {\r\n\t\t\treturn address.trim().toLowerCase();\r\n\t\t}\r\n\t\treturn '';\r\n\t}\r\n\r\n\tprivate addRadiusToBounds(\r\n\t\tradius: number,\r\n\t\tbounds: google.maps.LatLngBounds,\r\n\t) {\r\n\t\tif (!bounds) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst ne = google.maps.geometry.spherical.computeOffset(\r\n\t\t\tbounds.getNorthEast(),\r\n\t\t\tradius * 1000,\r\n\t\t\t45,\r\n\t\t);\r\n\t\tconst sw = google.maps.geometry.spherical.computeOffset(\r\n\t\t\tbounds.getSouthWest(),\r\n\t\t\tradius * 1000,\r\n\t\t\t225,\r\n\t\t);\r\n\t\treturn new google.maps.LatLngBounds(sw, ne);\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { hasClass } from '@opten/dom/has-class';\r\nimport { addClass } from '@opten/dom/add-class';\r\nimport { removeClass } from '@opten/dom/remove-class';\r\nimport { isAncestorOfClass } from '@opten/dom/is-ancestor-of-class';\r\nimport { scrollToId } from '@opten/scroll/scroll-to-id';\r\nimport dispatchCustomEvent from '@opten/events/dispatch-custom-event';\r\nimport { debounce } from '@opten/reactive/debounce';\r\n\r\ndeclare const imagesLoaded: any;\r\ndeclare const Modernizr: any;\r\n\r\n@Component({ className: 'js-nav' })\r\nexport class Navbar {\r\n\tprivate mobileBreakpoint = 992;\r\n\tprivate stickyElem: HTMLElement;\r\n\tprivate dropdowns: HTMLElement[];\r\n\tprivate dropdownTitles: HTMLElement[];\r\n\tprivate scrollToElements: HTMLElement[];\r\n\tprivate navbar: HTMLElement;\r\n\tprivate navbarToggler: HTMLElement;\r\n\tprivate backTop: HTMLElement;\r\n\r\n\tconstructor(public element: HTMLElement) {\r\n\t\tthis.navbar = document.getElementsByClassName(\r\n\t\t\t'js-header'\r\n\t\t)[0] as HTMLElement;\r\n\t\tthis.navbarToggler = document.getElementsByClassName(\r\n\t\t\t'c-navbar__toggler'\r\n\t\t)[0] as HTMLElement;\r\n\t\tthis.backTop = document.getElementsByClassName(\r\n\t\t\t'js-back-top'\r\n\t\t)[0] as HTMLElement;\r\n\t\tthis.stickyElem = element.getElementsByClassName(\r\n\t\t\t'js-nav-sticky'\r\n\t\t)[0] as HTMLElement;\r\n\t\tthis.dropdowns = Array.from(\r\n\t\t\telement.getElementsByClassName('js-nav-dropdown')\r\n\t\t) as HTMLElement[];\r\n\t\tthis.dropdownTitles = Array.from(\r\n\t\t\telement.getElementsByClassName('js-nav-title')\r\n\t\t) as HTMLElement[];\r\n\t\tthis.scrollToElements = Array.from(\r\n\t\t\tdocument.getElementsByClassName('js-scroll-to')\r\n\t\t) as HTMLElement[];\r\n\r\n\t\tthis.showBackTop();\r\n\t\tthis.checkSticky();\r\n\t\twindow.addEventListener('scroll', () => {\r\n\t\t\tthis.checkSticky();\r\n\t\t\tthis.showBackTop();\r\n\t\t});\r\n\r\n\t\tthis.setHeaderHeight();\r\n\t\twindow.addEventListener('resize', debounce(() => {\r\n\t\t\tthis.setHeaderHeight();\r\n\t\t}, 300));\r\n\r\n\t\tthis.dropdowns.forEach((dropdown) => {\r\n\t\t\tconst parent = dropdown.closest('.c-navbar__item');\r\n\t\t\tconst toggler = parent.querySelector('a') as HTMLElement;\r\n\t\t\ttoggler.addEventListener('click', (e) => {\r\n\t\t\t\tif (hasClass(parent, 'is-open')) {\r\n\t\t\t\t\t// dont close, open page - this.closeNav(e, parent);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.closeAll();\r\n\t\t\t\t\tthis.openNav(e, parent);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif (Modernizr.touch == false) {\r\n\t\t\t\tparent.addEventListener('mouseenter', (e) => {\r\n\t\t\t\t\tif (window.innerWidth >= this.mobileBreakpoint) {\r\n\t\t\t\t\t\tthis.openNav(e, parent);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tparent.addEventListener('mouseleave', (e) => {\r\n\t\t\t\t\tif (window.innerWidth >= this.mobileBreakpoint) {\r\n\t\t\t\t\t\tthis.closeNav(e, parent);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.dropdownTitles.forEach((dropdownTitle) => {\r\n\t\t\tdropdownTitle.addEventListener('click', (e) => {\r\n\t\t\t\tthis.closeNav(e, dropdownTitle.closest('.c-navbar__item'));\r\n\t\t\t});\r\n\t\t});\r\n\t\tdocument.addEventListener('click', (ev) =>\r\n\t\t\tthis.closeOnOutsideClick(ev.target)\r\n\t\t);\r\n\r\n\t\tthis.scrollToElements.forEach((target) => {\r\n\t\t\ttarget.addEventListener('click', (e) => {\r\n\t\t\t\tthis.scrollTo(target.getAttribute('href'));\r\n\t\t\t\tthis.closeAll();\r\n\t\t\t\tthis.closeMainNav();\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tnew imagesLoaded(\r\n\t\t\tdocument.body,\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.scrollTo(location.hash);\r\n\t\t\t}, 300)\r\n\t\t);\r\n\t}\r\n\r\n\tprivate openNav(event, item) {\r\n\t\tevent.preventDefault();\r\n\t\taddClass(item, 'is-open');\r\n\t}\r\n\r\n\tprivate closeNav(event, item) {\r\n\t\tevent.preventDefault();\r\n\t\tremoveClass(item, 'is-open');\r\n\t}\r\n\r\n\tprivate closeAll() {\r\n\t\tthis.dropdowns.forEach((dropdown) => {\r\n\t\t\tconst parent = dropdown.parentElement;\r\n\t\t\tremoveClass(parent, 'is-open');\r\n\t\t});\r\n\t}\r\n\r\n\tprivate closeMainNav() {\r\n\t\tif (hasClass(this.navbarToggler, 'is-active')) {\r\n\t\t\tdispatchCustomEvent(this.navbarToggler, 'click');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate closeOnOutsideClick(target) {\r\n\t\tif (isAncestorOfClass(target, 'c-navbar', true) == false) {\r\n\t\t\tthis.closeAll();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate scrollTo(item) {\r\n\t\tif (item) {\r\n\t\t\tconst target = item.replace('#', '');\r\n\t\t\tif (document.getElementById(target)) {\r\n\t\t\t\tconst offset = this.navbar.offsetHeight * -1;\r\n\t\t\t\tscrollToId(target, undefined, undefined, offset);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate showBackTop() {\r\n\t\tif (window.scrollY > 100) {\r\n\t\t\taddClass(document.body, 'is-scrolled');\r\n\t\t\taddClass(this.backTop, 'fade--show');\r\n\t\t} else {\r\n\t\t\tremoveClass(document.body, 'is-scrolled');\r\n\t\t\tremoveClass(this.backTop, 'fade--show');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate checkSticky() {\r\n\t\tif (\r\n\t\t\thasClass(this.stickyElem, 'is-sticky') === false &&\r\n\t\t\tthis.stickyElem.getBoundingClientRect().top <= 0\r\n\t\t) {\r\n\t\t\tthis.element.style.marginBottom =\r\n\t\t\t\tthis.stickyElem.offsetHeight + 'px';\r\n\t\t\taddClass(this.stickyElem, 'is-sticky');\r\n\t\t} else if (\r\n\t\t\thasClass(this.stickyElem, 'is-sticky') &&\r\n\t\t\tthis.element.getBoundingClientRect().top +\r\n\t\t\t\tthis.element.offsetHeight >=\r\n\t\t\t\t0\r\n\t\t) {\r\n\t\t\tremoveClass(this.stickyElem, 'is-sticky');\r\n\t\t\tthis.element.removeAttribute('style');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate setHeaderHeight() {\r\n\t\tthis.element.style.marginTop = `${this.navbar.offsetHeight}px`;\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\n\r\nimport { Option, Select } from '@opten/select';\r\n\r\n@Component({ className: 'js-select' })\r\nexport class SelectComponent {\r\n\tprivate select: Select;\r\n\r\n\tconstructor(private element: HTMLSelectElement) {\r\n\t\tthis.select = new Select(element);\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { MapSearcher } from './map-searcher';\r\n\r\n@Component({ className: 'js-shopfinder' })\r\nexport class Shopfinder {\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tconst mapSearcher = new MapSearcher(this.element, {\r\n\t\t\tmapStyles: [\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'administrative.land_parcel',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'off',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'administrative.neighborhood',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'off',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'landscape',\r\n\t\t\t\t\telementType: 'geometry.fill',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'on',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'landscape',\r\n\t\t\t\t\telementType: 'labels.icon',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'off',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'poi',\r\n\t\t\t\t\telementType: 'labels.text',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'off',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'poi.business',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'off',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'road',\r\n\t\t\t\t\telementType: 'geometry.fill',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcolor: '#ffffff',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'road',\r\n\t\t\t\t\telementType: 'geometry.stroke',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcolor: '#ffffff',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'road',\r\n\t\t\t\t\telementType: 'labels',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'off',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'road',\r\n\t\t\t\t\telementType: 'labels.icon',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'off',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'road.arterial',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'off',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'road.highway',\r\n\t\t\t\t\telementType: 'labels',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'simplified',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'road.local',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'off',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'transit',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'off',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tfeatureType: 'water',\r\n\t\t\t\t\telementType: 'labels.text',\r\n\t\t\t\t\tstylers: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvisibility: 'off',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t});\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { debounce } from '@opten/reactive/debounce';\r\n\r\ndeclare const tns: any;\r\n\r\n@Component({ className: 'js-slider' })\r\nexport class SliderCustom {\r\n\tconstructor(public element: HTMLElement) {\r\n\t\tthis.initSlider(element);\r\n\t\t// Array.from(document.getElementsByClassName('js-slider')).forEach(elementSlider => {\r\n\t\t// });\r\n\t}\r\n\r\n\tprivate getIndexToGoTo(evt) {\r\n\t\tconst prevIndex = evt.indexCached ? evt.indexCached : 0;\r\n\t\tif (evt.index > prevIndex) {\r\n\t\t\treturn 'next';\r\n\t\t}\r\n\t\tif (evt.index < prevIndex) {\r\n\t\t\treturn 'prev';\r\n\t\t}\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tprivate initSlider(element: Element) {\r\n\t\tlet customRefIndexChange = false;\r\n\t\tlet customIndexChange = true;\r\n\r\n\t\tconst slidesRef = document.querySelector('.js-slides-ref');\r\n\t\tconst slider = tns({\r\n\t\t\tcontainer: element.querySelector('.js-slides'),\r\n\t\t\tnavContainer: element.querySelector('.js-dots'),\r\n\t\t\tcontrolsContainer: element.querySelector('.js-arrows'),\r\n\t\t\tarrowKeys: true,\r\n\t\t\tmouseDrag: true,\r\n\t\t\tloop: false,\r\n\t\t\tautoHeight: true,\r\n\t\t\tlazyload: true,\r\n\t\t\tlazyloadSelector: '--lazy',\r\n\t\t});\r\n\t\tif (slidesRef) {\r\n\t\t\tconst sliderRef = tns({\r\n\t\t\t\tcontainer: element.querySelector('.js-slides-ref'),\r\n\t\t\t\tcontrols: false,\r\n\t\t\t\tnav: false,\r\n\t\t\t\tmouseDrag: true,\r\n\t\t\t\tloop: false,\r\n\t\t\t\tautoHeight: true,\r\n\t\t\t});\r\n\t\t\tslider.events.on('indexChanged', (evt) => {\r\n\t\t\t\tif (customRefIndexChange == false) {\r\n\t\t\t\t\tconst indexToGoTo = this.getIndexToGoTo(evt);\r\n\t\t\t\t\tif (indexToGoTo) {\r\n\t\t\t\t\t\tsliderRef.goTo(indexToGoTo);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcustomIndexChange = false;\r\n\t\t\t\t\tcustomRefIndexChange = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\r\n\t\t}\r\n\t\tsetTimeout(() => {\r\n\t\t\tslider.updateSliderHeight();\r\n\t\t}, 500);\r\n\t\twindow.addEventListener('resize', debounce((e) => {\r\n\t\t\tslider.updateSliderHeight();\r\n\t\t}, 100));\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\n\r\n@Component({ className: 'js-special-button' })\r\nexport class SpecialButton {\r\n\tconstructor(public element: HTMLElement) {\r\n\t\tthis.element.addEventListener('mousemove', (e) => {\r\n\t\t\tconst x = e.pageX - this.element.getBoundingClientRect().left - window.scrollX;\r\n\t\t\tconst y = e.pageY - this.element.getBoundingClientRect().top - window.scrollY;\r\n\r\n\t\t\tthis.element.style.setProperty('--x', `${ x }px`);\r\n\t\t\tthis.element.style.setProperty('--y', `${ y }px`);\r\n\t\t});\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { debounce } from '@opten/reactive/debounce';\r\n\r\n@Component({ className: 'js-sticky-footer' })\r\nexport class StickyFooter {\r\n\tprivate defaultOffset: number;\r\n\tprivate footer: HTMLElement;\r\n\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tthis.footer = document.querySelector('footer') as HTMLElement;\r\n\t\tthis.defaultOffset = parseFloat(window.getComputedStyle(this.element).marginBottom);\r\n\r\n\t\twindow.addEventListener('scroll', () => this.setPos());\r\n\t\twindow.addEventListener('resize', () => {\r\n\t\t\tdebounce(() => this.setPos(), 300);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate setPos() {\r\n\t\tconst documentHeight = document.body.clientHeight;\r\n\t\tconst scrollBottom = window.scrollY + window.innerHeight;\r\n\t\tconst footerHeight = this.footer.clientHeight;\r\n\t\tlet offset = (scrollBottom) - (documentHeight - footerHeight + this.defaultOffset);\r\n\t\tif (offset < 0) {\r\n\t\t\toffset = 0;\r\n\t\t}\r\n\t\tthis.element.style.bottom = offset + 'px';\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport stickybits from 'stickybits';\r\n\r\n@Component({ className: 'js-sticky' })\r\nexport class StickyComponent {\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tstickybits(this.element, {\r\n\t\t\tparentClass: 'js-sticky-parent',\r\n\t\t\tstickyChangeClass: 'is-sticky-change',\r\n\t\t\tstickyClass: 'is-sticky',\r\n\t\t\tstuckClass: 'is-stuck',\r\n\t\t\tuseStickyClasses: true,\r\n\t\t\tverticalPosition: 'bottom',\r\n\t\t\t// stickyBitStickyOffset: 150,\r\n\t\t\t// useFixed: true,\r\n\t\t});\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\n\r\n@Component({ className: 'js-subscribe' })\r\n\r\nexport class SubscribeComponent {\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tconst target = element.getAttribute('data-target');\r\n\t\tconst input = element.getElementsByTagName('input')[0];\r\n\t\tconst trigger = element.getElementsByClassName('js-subscribe-button')[0] as HTMLElement;\r\n\t\tconst mailField = document.getElementsByClassName('formemail')[0];\r\n\t\tconst data = window.localStorage.getItem('data');\r\n\r\n\t\ttrigger.addEventListener('click', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tthis.redirect(input.value, target);\r\n\t\t});\r\n\r\n\t\t// output all local storage\r\n\t\t// for (let i = 0; i < localStorage.length; i++) {\r\n\t\t// \tconsole.log(localStorage.getItem(localStorage.key(i)));\r\n\t\t// }\r\n\r\n\t\tif (input != null) {\r\n\t\t\tinput.addEventListener('keyup', (event) => {\r\n\t\t\tif (event.keyCode === 13) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\ttrigger.click();\r\n\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (data != null) {\r\n\t\t\t// get field and fill it up\r\n\t\t\t// console.log(data);\r\n\t\t\tif (mailField != null) {\r\n\t\t\t\tconst mailFieldInput = mailField.getElementsByTagName('input')[0];\r\n\t\t\t\tmailFieldInput.value = data;\r\n\t\t\t\twindow.localStorage.removeItem('data');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate redirect(data, target: string) {\r\n\t\twindow.localStorage.setItem('data', data);\r\n\t\twindow.location.href = target;\r\n\t}\r\n}\r\n","export function linearTween(\n\ttimeElapsed: number,\n\tstart: number,\n\tdistance: number,\n\tduration: number\n) {\n\treturn (distance * timeElapsed) / duration + start;\n}\n","import { Component } from '@opten/compiler/metadata/component';\nimport { Collapse } from './initializer';\n\n@Component({ className: 'js-collapse' })\nexport class CollapseComponent {\n\tcollapse: Collapse;\n\tconstructor(private element: HTMLElement) {\n\t\tthis.collapse = new Collapse(element, {});\n\t}\n}\n","import { addClass } from '@opten/dom/add-class';\nimport { hasClass } from '@opten/dom/has-class';\nimport { removeClass } from '@opten/dom/remove-class';\n\nimport { getSelectorElementFromElement } from '@opten/dom/get-selector-element-from-element';\nimport { addTransitionEndListener } from '@opten/transition/add-transition-end-listener';\n\nimport { eventNamespaceFactory } from '@opten/events/event-namespace-factory';\n\nconst stringCollapse = 'Collapse';\n\nexport interface CollapseOptions {\n\tcomponentClass?: string;\n\tactiveClass?: string;\n\tactiveParentClass?: string;\n\tshowClass?: string;\n\tshowClassDesktop?: string;\n\tdesktopWidth?: number;\n\tcollapsingClass?: string;\n\tparentElement?: HTMLElement;\n\ttransitionDuration?: number;\n\tanimateProp?: 'height' | 'width' | false;\n\tisHideable?: boolean;\n\tcloseSiblings?: boolean;\n\tuseShowClassDesktop?: boolean;\n\tdataParentSelector?: string;\n\tdataTargetSelector?: string;\n\tdataToggleSelector?: string;\n\threfSelector?: string;\n}\n\nexport class Collapse {\n\t// TODO: Uggly naming\n\tget toggles(): HTMLElement[] {\n\t\treturn this.triggers;\n\t}\n\n\tconstructor(public element: HTMLElement, options?: CollapseOptions) {\n\t\tthis.options = {\n\t\t\t...this.options,\n\t\t\t...options,\n\t\t};\n\n\t\tif (!this.options.parentElement) {\n\t\t\tthis.options.parentElement = getSelectorElementFromElement(\n\t\t\t\telement,\n\t\t\t\tthis.options.dataParentSelector,\n\t\t\t\tfalse\n\t\t\t);\n\t\t}\n\n\t\tthis.init();\n\t}\n\tprivate options: CollapseOptions = {\n\t\tactiveClass: 'is-active',\n\t\tactiveParentClass: 'is-active',\n\t\tanimateProp: 'height',\n\t\tcollapsingClass: 'collapse--collapsing',\n\t\tcomponentClass: 'collapse',\n\t\tshowClass: 'collapse--show',\n\t\tshowClassDesktop: 'collapse--md-show',\n\t\tdesktopWidth: 1024,\n\t\ttransitionDuration: 600,\n\t\tisHideable: true,\n\t\tcloseSiblings: true,\n\t\tuseShowClassDesktop: false,\n\t\tdataParentSelector: 'data-parent',\n\t\tdataTargetSelector: 'data-target',\n\t\tdataToggleSelector: 'data-toggle',\n\t\threfSelector: 'href',\n\t};\n\n\tprivate parent: HTMLElement;\n\tprivate triggers: HTMLElement[];\n\n\tprivate target: Element;\n\tprivate isTransitioning = false; // when true it will prevent click handlers\n\n\t// event names\n\tprivate eventNamespaceFn = eventNamespaceFactory('opten.collapse');\n\n\tstatic getInstance(\n\t\telement: HTMLElement,\n\t\toptions?: CollapseOptions,\n\t\tcreate = true\n\t) {\n\t\tlet data = element[stringCollapse] as Collapse;\n\n\t\tif (!data && create) {\n\t\t\tdata = new Collapse(element, options);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tisOpen(): boolean {\n\t\tif (\n\t\t\tthis.options.useShowClassDesktop &&\n\t\t\twindow.outerWidth >= this.options.desktopWidth &&\n\t\t\thasClass(this.element, this.options.showClassDesktop)\n\t\t) {\n\t\t\taddClass(this.element, this.options.showClass);\n\t\t}\n\t\tremoveClass(this.element, this.options.showClassDesktop);\n\t\treturn hasClass(this.element, this.options.showClass);\n\t}\n\n\ttoggle() {\n\t\tif (this.isOpen()) {\n\t\t\tif (this.options.isHideable) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.show();\n\t\t}\n\t}\n\n\tshow() {\n\t\tif (this.isTransitioning || this.isOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.closeSiblings && this.parent) {\n\t\t\tconst selector = `[${this.options.dataParentSelector}=\"#${this.parent.id}\"]`;\n\t\t\tconst actives = Array.from(\n\t\t\t\tthis.parent.querySelectorAll(\n\t\t\t\t\t`${selector}.${this.options.showClass}, ${selector}.${this.options.collapsingClass}`\n\t\t\t\t)\n\t\t\t).filter((active) => active !== this.target);\n\n\t\t\tif (actives && actives.length) {\n\t\t\t\tconst anyTransitioning = actives.filter((active) => {\n\t\t\t\t\tconst collapseInstance = active[stringCollapse] as Collapse;\n\t\t\t\t\treturn collapseInstance && collapseInstance.isTransitioning;\n\t\t\t\t});\n\n\t\t\t\tif (anyTransitioning.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tactives.forEach((active) =>\n\t\t\t\t\tCollapse.getInstance(active as HTMLElement).hide()\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis._handleShow(this.element, this.triggers);\n\t}\n\n\thide() {\n\t\tif (this.isTransitioning || !this.isOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._handleClose(this.element, this.triggers);\n\t}\n\n\tdestroy() {\n\t\tconst element = this.element;\n\n\t\tif (element[stringCollapse]) {\n\t\t\telement[stringCollapse] = null;\n\n\t\t\tremoveClass(element, this.options.componentClass);\n\t\t\tremoveClass(element, this.options.collapsingClass);\n\t\t\tremoveClass(element, this.options.showClass);\n\n\t\t\tif (this.options.animateProp) {\n\t\t\t\telement.style[this.options.animateProp] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate init() {\n\t\t// todo: only initalize once, like bootstrap does it?\n\t\tthis.triggers = Array.from(\n\t\t\tdocument.querySelectorAll(\n\t\t\t\t`[${this.options.hrefSelector}=\"#${this.element.id}\"], [${this.options.dataTargetSelector}=\"#${this.element.id}\"]`\n\t\t\t)\n\t\t);\n\n\t\t// todo: why do we need that?\n\t\tconst toggles = Array.from(\n\t\t\tdocument.querySelectorAll(\n\t\t\t\t`[${this.options.dataToggleSelector}=\"collapse\"]`\n\t\t\t)\n\t\t);\n\t\tfor (const toggle of toggles) {\n\t\t\tconst target = getSelectorElementFromElement(\n\t\t\t\ttoggle,\n\t\t\t\tthis.options.dataTargetSelector\n\t\t\t);\n\t\t\tif (target !== null && target === this.element) {\n\t\t\t\tthis.target = target;\n\t\t\t\tthis.triggers.push(toggle as HTMLElement);\n\t\t\t}\n\t\t}\n\n\t\tthis.parent = this.options.parentElement;\n\n\t\t// init\n\t\tif (!(stringCollapse in this.element)) {\n\t\t\t// prevent adding event handlers twice\n\t\t\tthis.triggers.forEach((trigger) =>\n\t\t\t\ttrigger.addEventListener('click', this.handleClick, false)\n\t\t\t);\n\t\t}\n\n\t\tif (this.parent) {\n\t\t\tArray.from(\n\t\t\t\tthis.parent.querySelectorAll(\n\t\t\t\t\t`[${this.options.dataToggleSelector}=\"collapse\"][${this.options.dataParentSelector}=\"#${this.parent.id}\"]`\n\t\t\t\t)\n\t\t\t).forEach((element) => {\n\t\t\t\tthis._addAriaAndCollapsedClass(\n\t\t\t\t\tgetSelectorElementFromElement(\n\t\t\t\t\t\telement,\n\t\t\t\t\t\tthis.options.dataTargetSelector\n\t\t\t\t\t),\n\t\t\t\t\t[element]\n\t\t\t\t);\n\t\t\t});\n\t\t} else {\n\t\t\tthis._addAriaAndCollapsedClass(this.element, this.triggers);\n\t\t}\n\n\t\taddClass(this.element, this.options.componentClass);\n\n\t\tthis.element[stringCollapse] = this;\n\t}\n\n\tprivate handleClick = (event: Event) => {\n\t\t// preventDefault only for elements (which change the URL) not inside the collapsible element\n\t\tconst trigger = event && (event.currentTarget as HTMLElement);\n\t\tif (trigger && trigger.tagName === 'A') {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tconst target = getSelectorElementFromElement(\n\t\t\ttrigger,\n\t\t\tthis.options.dataTargetSelector\n\t\t);\n\t\tlet data = target[stringCollapse] as Collapse;\n\n\t\tif (!data) {\n\t\t\tdata = trigger[stringCollapse] as Collapse;\n\t\t}\n\n\t\tif (target) {\n\t\t\tCollapse.getInstance(target, data.options).toggle();\n\t\t}\n\t};\n\n\tprivate _handleShow(collapseElement: HTMLElement, triggers?: Element[]) {\n\t\tthis.eventNamespaceFn(collapseElement, 'show');\n\n\t\tremoveClass(collapseElement, this.options.componentClass);\n\t\taddClass(collapseElement, this.options.collapsingClass);\n\t\tif (this.options.animateProp) {\n\t\t\tcollapseElement.style[this.options.animateProp] =\n\t\t\t\tcollapseElement.scrollHeight + 'px';\n\t\t}\n\n\t\tif (triggers && triggers.length) {\n\t\t\ttriggers.forEach((trigger) => {\n\t\t\t\taddClass(trigger, this.options.activeClass);\n\t\t\t\ttrigger.setAttribute('aria-expanded', 'true');\n\t\t\t});\n\t\t}\n\n\t\tif (this.parent) {\n\t\t\taddClass(this.parent, this.options.activeClass);\n\t\t}\n\n\t\tthis.isTransitioning = true;\n\n\t\taddTransitionEndListener(\n\t\t\tcollapseElement,\n\t\t\t() => {\n\t\t\t\tremoveClass(collapseElement, this.options.collapsingClass);\n\t\t\t\taddClass(collapseElement, this.options.componentClass);\n\t\t\t\taddClass(collapseElement, this.options.showClass);\n\n\t\t\t\tthis.isTransitioning = false;\n\t\t\t\tif (this.options.animateProp) {\n\t\t\t\t\tcollapseElement.style[this.options.animateProp] = null;\n\t\t\t\t}\n\n\t\t\t\tthis.eventNamespaceFn(collapseElement, 'shown');\n\t\t\t},\n\t\t\tthis.options.transitionDuration\n\t\t);\n\t}\n\n\tprivate _handleClose(collapseElement: HTMLElement, triggers?: Element[]) {\n\t\tthis.eventNamespaceFn(collapseElement, 'hide');\n\n\t\tif (this.options.animateProp) {\n\t\t\tcollapseElement.style[this.options.animateProp] =\n\t\t\t\tcollapseElement.scrollHeight + 'px';\n\t\t}\n\n\t\taddClass(collapseElement, this.options.collapsingClass);\n\t\tremoveClass(collapseElement, this.options.componentClass);\n\t\tremoveClass(collapseElement, this.options.showClass);\n\t\t// force reflow to enable transition\n\t\tcollapseElement.offsetWidth; // tslint:disable-line\n\n\t\tif (triggers && triggers.length) {\n\t\t\ttriggers.forEach((trigger) => {\n\t\t\t\tconst target = getSelectorElementFromElement(\n\t\t\t\t\ttrigger,\n\t\t\t\t\tthis.options.dataTargetSelector\n\t\t\t\t);\n\n\t\t\t\tif (target !== null) {\n\t\t\t\t\tif (!hasClass(target, this.options.showClass)) {\n\t\t\t\t\t\tremoveClass(trigger, this.options.activeClass);\n\t\t\t\t\t\ttrigger.setAttribute('aria-expanded', 'false');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this.parent) {\n\t\t\tconst selector = `[${this.options.dataParentSelector}=\"#${this.parent.id}\"]`;\n\t\t\tconst actives = Array.from(\n\t\t\t\tthis.parent.querySelectorAll(\n\t\t\t\t\t`${selector}.${this.options.showClass}, ${selector}.${this.options.collapsingClass}`\n\t\t\t\t)\n\t\t\t).filter((o) => o !== collapseElement);\n\n\t\t\tif (this.parent && actives.length === 0) {\n\t\t\t\tremoveClass(this.parent, this.options.activeParentClass);\n\t\t\t}\n\t\t}\n\n\t\tthis.isTransitioning = true;\n\t\tif (this.options.animateProp) {\n\t\t\tcollapseElement.style[this.options.animateProp] = null;\n\t\t}\n\n\t\taddTransitionEndListener(\n\t\t\tcollapseElement,\n\t\t\t() => {\n\t\t\t\tthis.isTransitioning = false;\n\n\t\t\t\tremoveClass(collapseElement, this.options.collapsingClass);\n\t\t\t\taddClass(collapseElement, this.options.componentClass);\n\n\t\t\t\tif (this.options.animateProp) {\n\t\t\t\t\tcollapseElement.style[this.options.animateProp] = null;\n\t\t\t\t}\n\n\t\t\t\tthis.eventNamespaceFn(collapseElement, 'hidden');\n\t\t\t},\n\t\t\tthis.options.transitionDuration\n\t\t);\n\t}\n\n\tprivate _addAriaAndCollapsedClass(element: Element, triggers: Element[]) {\n\t\tif (element) {\n\t\t\tconst isOpen = hasClass(element, this.options.showClass);\n\n\t\t\tif (triggers && triggers.length) {\n\t\t\t\ttriggers.forEach((trigger) => {\n\t\t\t\t\tisOpen\n\t\t\t\t\t\t? addClass(trigger, this.options.activeClass)\n\t\t\t\t\t\t: removeClass(trigger, this.options.activeClass);\n\n\t\t\t\t\ttrigger.setAttribute(\n\t\t\t\t\t\t'aria-expanded',\n\t\t\t\t\t\tisOpen.toString().toLowerCase()\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function collapse(\n\telement: HTMLElement,\n\toptions?: CollapseOptions\n): Collapse {\n\tconsole.error(\n\t\t'collapse deprecated: use new Collapse(element, options) instead. (initialized elements can be accessed via Collapse.getInstance()'\n\t);\n\tlet data = element[stringCollapse] as Collapse;\n\n\tif (!data) {\n\t\tdata = new Collapse(element, options);\n\t}\n\n\treturn data;\n}\n","export function newGuid(): string {\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tconst r = (Math.random() * 16) | 0,\n\t\t\tv = c == 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n}\n","import { asHTMLElement } from '@opten/dom/as-html-element';\nimport { hasClass } from '@opten/dom/has-class';\nimport { isHTMLElement } from '@opten/dom/is-html-element';\n\nimport { Compiler } from '../';\nimport { Component } from '../metadata/component';\nimport { Reflector } from '../reflector';\nimport { Resolver } from '../resolver';\n\n// todo: cache, static, inject?\nconst reflector = new Reflector();\nconst resolver = new Resolver(reflector);\nconst compiler = new Compiler(resolver);\n\nexport function factory(components: any[]) {\n\treturn (rootElement: HTMLElement) => {\n\t\tconst observables = new Map();\n\t\tcomponents.forEach((componentType) => {\n\t\t\t// todo: inject resolver, or cache?\n\t\t\t// todo: static or something to cache?\n\t\t\tconst component = resolver.resolve(componentType);\n\n\t\t\tif (component) {\n\t\t\t\tconst safeRootElement =\n\t\t\t\t\trootElement === document.body ? document : rootElement;\n\t\t\t\tArray.from(\n\t\t\t\t\tsafeRootElement.getElementsByClassName(component.className)\n\t\t\t\t).forEach((node) =>\n\t\t\t\t\tcompiler.compile(component, node as HTMLElement, componentType)\n\t\t\t\t);\n\n\t\t\t\tif (component.observe) {\n\t\t\t\t\tobservables.set(component, componentType);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`No @Component annotation for ${\n\t\t\t\t\t\tcomponentType ? componentType.name : componentType\n\t\t\t\t\t} found!`\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\tif (observables.size) {\n\t\t\tnew MutationObserver((mutations) => {\n\t\t\t\tconst componentInitializer = new Map void>();\n\n\t\t\t\tmutations.forEach((mutation) => {\n\t\t\t\t\tobservables.forEach((value, key) =>\n\t\t\t\t\t\tArray.from(mutation.addedNodes)\n\t\t\t\t\t\t\t.filter((node) => isHTMLElement(node))\n\t\t\t\t\t\t\t.map((node) => asHTMLElement(node))\n\t\t\t\t\t\t\t.forEach((node) => {\n\t\t\t\t\t\t\t\tconst comps = Array.from(\n\t\t\t\t\t\t\t\t\tnode.getElementsByClassName(key.className)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif (hasClass(node, key.className)) {\n\t\t\t\t\t\t\t\t\tcomps.push(node);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcomps.forEach((component) => {\n\t\t\t\t\t\t\t\t\tcomponentInitializer.set(component as HTMLElement, () =>\n\t\t\t\t\t\t\t\t\t\tcompiler.compile(key, component as HTMLElement, value)\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tcomponentInitializer.forEach((c) => c());\n\t\t\t}).observe(document.body, {\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true,\n\t\t\t});\n\t\t}\n\t};\n}\n","import { Component } from './metadata/component';\nimport { Query } from './metadata/di';\nimport { OnInit } from './metadata/lifecycle';\nimport { Resolver } from './resolver';\nimport { isType } from './util/type';\n\n// todo: move whole project to @opten/initializer?\nexport class Compiler {\n\tprivate componentCache = new Map();\n\n\tconstructor(private resolver: Resolver) {}\n\n\tcompile(\n\t\tcomponent: Component,\n\t\tnode: HTMLElement,\n\t\tcomponentType: /*Type*/ any\n\t) {\n\t\t// todo: cache everything?\n\n\t\t// todo: cache that also?\n\t\tconst constructor = new componentType(node);\n\n\t\tif (this.componentCache.has(node)) {\n\t\t\tthis.componentCache.get(node).push(constructor);\n\t\t} else {\n\t\t\tthis.componentCache.set(node, [constructor]);\n\t\t}\n\n\t\tObject.keys(component.queries).forEach((propName) => {\n\t\t\tconst query: Query = component.queries[propName];\n\n\t\t\t// todo: why do we have to inject the resolver?\n\t\t\t// can we not get the class name by some other way?\n\t\t\tconst target = this.resolver.resolve(query.selector);\n\n\t\t\tif (target) {\n\t\t\t\tconst targetNode = query.descendants ? node : document;\n\t\t\t\tconst nodes = targetNode.getElementsByClassName(target.className);\n\n\t\t\t\tconst cache = Array.from(nodes)\n\t\t\t\t\t.filter((o) => (query.filter ? query.filter(o) : true))\n\t\t\t\t\t.map((e) => this.componentCache.get(e as HTMLElement))\n\t\t\t\t\t.filter((e) => e !== undefined && e !== null)\n\t\t\t\t\t.reduce((acc, val) => acc.concat(val), [])\n\t\t\t\t\t.filter((f) => f.constructor === query.selector);\n\n\t\t\t\tconstructor[propName] = query.first ? cache[0] : cache;\n\t\t\t}\n\t\t});\n\n\t\tif (isType(constructor.onInit)) {\n\t\t\t(constructor as OnInit).onInit();\n\t\t}\n\t}\n}\n","import { makeDecorator, TypeDecorator } from '../util/decorators';\nimport { makeMetadataFactory, MetadataFactory } from '../util/factories';\n\nexport interface ComponentDecorator {\n\t(obj: Component): TypeDecorator;\n\tnew (obj: Component): Component;\n}\n\nexport interface Component {\n\tclassName?: string;\n\tobserve?: boolean;\n\tqueries?: { [key: string]: any };\n}\n\n// tslint:disable-next-line:variable-name\nexport const Component: ComponentDecorator = makeDecorator(\n\t'Component',\n\t(c: Component = {}) => ({ ...c })\n);\n\nexport const createComponent: MetadataFactory = makeMetadataFactory<\n\tComponent\n>('Component', (c: Component = {}) => ({ ...c }));\n","import { ANNOTATIONS, PROP_METADATA } from '../util/decorators';\nimport { isType, Type } from '../util/type';\n\n// todo: @opten/reflector? or @opten/initializer/reflector?\nexport class Reflector {\n\tannotations(typeOrFunc: Type): any[] {\n\t\tif (!isType(typeOrFunc)) {\n\t\t\treturn [];\n\t\t}\n\t\tconst parentCtor = getParentCtor(typeOrFunc);\n\t\tconst ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];\n\t\tconst parentAnnotations =\n\t\t\tparentCtor !== Object ? this.annotations(parentCtor) : [];\n\t\treturn parentAnnotations.concat(ownAnnotations);\n\t}\n\n\tpropMetadata(typeOrFunc: any): { [key: string]: any[] } {\n\t\tif (!isType(typeOrFunc)) {\n\t\t\treturn {};\n\t\t}\n\t\tconst parentCtor = getParentCtor(typeOrFunc);\n\t\tconst propMetadata: { [key: string]: any[] } = {};\n\t\tif (parentCtor !== Object) {\n\t\t\tconst parentPropMetadata = this.propMetadata(parentCtor);\n\t\t\tObject.keys(parentPropMetadata).forEach((propName) => {\n\t\t\t\tpropMetadata[propName] = parentPropMetadata[propName];\n\t\t\t});\n\t\t}\n\t\tconst ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);\n\t\tif (ownPropMetadata) {\n\t\t\tObject.keys(ownPropMetadata).forEach((propName) => {\n\t\t\t\tconst decorators: any[] = [];\n\t\t\t\tif (propMetadata.hasOwnProperty(propName)) {\n\t\t\t\t\tdecorators.push(...propMetadata[propName]);\n\t\t\t\t}\n\t\t\t\tdecorators.push(...ownPropMetadata[propName]);\n\t\t\t\tpropMetadata[propName] = decorators;\n\t\t\t});\n\t\t}\n\t\treturn propMetadata;\n\t}\n\n\tprivate _ownAnnotations(\n\t\ttypeOrFunc: Type,\n\t\tparentCtor: any\n\t): any[] | null {\n\t\t// API for metadata created by invoking the decorators.\n\t\tif (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {\n\t\t\treturn (typeOrFunc as any)[ANNOTATIONS];\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate _ownPropMetadata(\n\t\ttypeOrFunc: any,\n\t\tparentCtor: any\n\t): { [key: string]: any[] } | null {\n\t\t// API for metadata created by invoking the decorators.\n\t\tif (typeOrFunc.hasOwnProperty(PROP_METADATA)) {\n\t\t\treturn (typeOrFunc as any)[PROP_METADATA];\n\t\t}\n\t\treturn null;\n\t}\n}\n\nfunction getParentCtor(ctor: Type): Type {\n\tconst parentProto = Object.getPrototypeOf(ctor.prototype);\n\tconst parentCtor = parentProto ? parentProto.constructor : null;\n\t// Note: We always use `Object` as the null value\n\t// to simplify checking later on.\n\treturn parentCtor || Object;\n}\n","import { Component, createComponent } from '../metadata/component';\nimport { Query } from '../metadata/di';\nimport { Reflector } from '../reflector';\n\nconst QUERY_METADATA_IDENTIFIERS = [\n\t'ComponentRef',\n\t'ComponentRefs',\n\t'ChildRef',\n\t'ChildrenRef',\n];\n\n// todo: @opten/resolver? or @opten/initializer/resolver?\nexport class Resolver {\n\tconstructor(private reflector: Reflector) {}\n\n\t// propertyCache = new Map();\n\n\tresolve(type: any /*Type*/): Component | null {\n\t\tconst typeMetadata = this.reflector.annotations(type);\n\n\t\tif (typeMetadata) {\n\t\t\tconst metadata = findLast(\n\t\t\t\ttypeMetadata,\n\t\t\t\t(c) => c && c.metadataName === 'Component'\n\t\t\t);\n\n\t\t\tif (metadata) {\n\t\t\t\tconst propertyMetadata = this.reflector.propMetadata(type);\n\n\t\t\t\treturn this._mergeWithPropertyMetadata(\n\t\t\t\t\tmetadata,\n\t\t\t\t\tpropertyMetadata,\n\t\t\t\t\ttype\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _mergeWithPropertyMetadata(\n\t\tcomponent: Component,\n\t\tpropertyMetadata: { [key: string]: any[] },\n\t\tcomponentType: /*Type*/ any\n\t): Component {\n\t\tconst queries: { [key: string]: any } = {};\n\n\t\tObject.keys(propertyMetadata).forEach((propName: string) => {\n\t\t\tconst query = findLast(propertyMetadata[propName], (a) =>\n\t\t\t\tQUERY_METADATA_IDENTIFIERS.some((i) => i && i === a.metadataName)\n\t\t\t);\n\n\t\t\tif (query) {\n\t\t\t\tqueries[propName] = query;\n\t\t\t}\n\t\t});\n\n\t\treturn this._merge(component, queries, componentType);\n\t}\n\n\tprivate _merge(\n\t\tcomponent: Component,\n\t\tqueries: { [key: string]: any },\n\t\tcomponentType: /*Type*/ any\n\t): Component {\n\t\tconst mergedQueries = component.queries\n\t\t\t? { ...component.queries, ...queries }\n\t\t\t: queries;\n\n\t\treturn createComponent({\n\t\t\tclassName: component.className,\n\t\t\tobserve: component.observe,\n\t\t\tqueries: mergedQueries,\n\t\t});\n\t}\n\n\tprivate _getQueriesMetadata(queries: { [key: string]: Query }): any[] {\n\t\tconst res: any[] = [];\n\n\t\tObject.keys(queries).forEach((propertyName: string) => {\n\t\t\tconst query = queries[propertyName];\n\t\t\tres.push(this._getQueryMetadata(query, propertyName));\n\t\t});\n\n\t\treturn res;\n\t}\n\n\tprivate _getQueryMetadata(q: Query, propertyName: string): any {\n\t\treturn {\n\t\t\tdescendants: q.descendants,\n\t\t\tfirst: q.first,\n\t\t\tpropertyName,\n\t\t\tread: false,\n\t\t\tselector: q.selector,\n\t\t};\n\t}\n}\n\nfunction findLast(arr: T[], condition: (value: T) => boolean): T | null {\n\tfor (let i = arr.length - 1; i >= 0; i--) {\n\t\tif (condition(arr[i])) {\n\t\t\treturn arr[i];\n\t\t}\n\t}\n\treturn null;\n}\n","import { Type } from './type';\n\nexport const ANNOTATIONS = '__annotations__';\nexport const PROP_METADATA = '__prop__metadata__';\n\nexport interface TypeDecorator {\n\t// Invoke as ES7 decorator.\n\t>(type: T): T;\n\n\t// Make TypeDecorator assignable to built-in ParameterDecorator type.\n\t// ParameterDecorator is declared in lib.d.ts as a `declare type`\n\t// so we cannot declare this interface as a subtype.\n\t// see https://github.com/angular/angular/issues/3379#issuecomment-126169417\n\t(\n\t\ttarget: object,\n\t\tpropertyKey?: string | symbol,\n\t\tparameterIndex?: number\n\t): void;\n}\n\nexport function makeDecorator(\n\tname: string,\n\tprops?: (...args: any[]) => any,\n\tparentClass?: any,\n\tchainFn?: (fn: TypeDecorator) => void,\n\ttypeFn?: (type: Type, ...args: any[]) => void\n): {\n\tnew (...args: any[]): any;\n\t(...args: any[]): any;\n\t(...args: any[]): (cls: any) => any;\n} {\n\tconst metaCtor = makeMetadataCtor(props);\n\n\tfunction DecoratorFactory(...args: any[]): (cls: any) => any {\n\t\tif (this instanceof DecoratorFactory) {\n\t\t\tmetaCtor.call(this, ...args);\n\t\t\treturn this;\n\t\t}\n\n\t\tconst annotationInstance = new (DecoratorFactory as any)(...args);\n\t\tconst typeDecorator: TypeDecorator = (cls: Type) => {\n\t\t\tif (typeFn) {\n\t\t\t\ttypeFn(cls, ...args);\n\t\t\t}\n\t\t\t// Use of Object.defineProperty is important since it creates non-enumerable property which\n\t\t\t// prevents the property is copied during subclassing.\n\t\t\tconst annotations = cls.hasOwnProperty(ANNOTATIONS)\n\t\t\t\t? (cls as any)[ANNOTATIONS]\n\t\t\t\t: Object.defineProperty(cls, ANNOTATIONS, { value: [] })[ANNOTATIONS];\n\t\t\tannotations.push(annotationInstance);\n\t\t\treturn cls;\n\t\t};\n\t\tif (chainFn) {\n\t\t\tchainFn(typeDecorator);\n\t\t}\n\t\treturn typeDecorator;\n\t}\n\n\tif (parentClass) {\n\t\tDecoratorFactory.prototype = Object.create(parentClass.prototype);\n\t}\n\n\tDecoratorFactory.prototype.metadataName = name;\n\treturn DecoratorFactory as any;\n}\n\nfunction makeMetadataCtor(props?: (...args: any[]) => any): any {\n\treturn function ctor(...args: any[]) {\n\t\tif (props) {\n\t\t\tconst values = props(...args);\n\t\t\tfor (const propName in values) {\n\t\t\t\tif (values.hasOwnProperty(propName)) {\n\t\t\t\t\tthis[propName] = values[propName];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport function makePropDecorator(\n\tname: string,\n\tprops?: (...args: any[]) => any,\n\tparentClass?: any\n): any {\n\tconst metaCtor = makeMetadataCtor(props);\n\n\tfunction PropDecoratorFactory(...args: any[]): any {\n\t\tif (this instanceof PropDecoratorFactory) {\n\t\t\tmetaCtor.apply(this, args);\n\t\t\treturn this;\n\t\t}\n\n\t\tconst decoratorInstance = new (PropDecoratorFactory as any)(...args);\n\n\t\treturn function PropDecorator(target: any, metaName: string) {\n\t\t\tconst constructor = target.constructor;\n\t\t\t// Use of Object.defineProperty is important since it creates non-enumerable property which\n\t\t\t// prevents the property is copied during subclassing.\n\t\t\tconst meta = constructor.hasOwnProperty(PROP_METADATA)\n\t\t\t\t? (constructor as any)[PROP_METADATA]\n\t\t\t\t: Object.defineProperty(constructor, PROP_METADATA, {\n\t\t\t\t\t\tvalue: {},\n\t\t\t\t })[PROP_METADATA];\n\t\t\tmeta[metaName] = (meta.hasOwnProperty(metaName) && meta[metaName]) || [];\n\t\t\tmeta[metaName].unshift(decoratorInstance);\n\t\t};\n\t}\n\n\tif (parentClass) {\n\t\tPropDecoratorFactory.prototype = Object.create(parentClass.prototype);\n\t}\n\n\tPropDecoratorFactory.prototype.metadataName = name;\n\treturn PropDecoratorFactory;\n}\n","export interface MetadataFactory {\n\t(...args: any[]): T;\n\tmetadataName: string;\n\tisTypeOf(obj: any): obj is T;\n}\n\nexport function makeMetadataFactory(\n\tname: string,\n\tprops?: (...args: any[]) => T\n): MetadataFactory {\n\tconst factory: any = (...args: any[]) => {\n\t\tconst values = props ? props(...args) : {};\n\t\treturn {\n\t\t\tmetadataName: name,\n\t\t\t...values,\n\t\t};\n\t};\n\tfactory.isTypeOf = (obj: any) => obj && obj.metadataName === name;\n\tfactory.metadataName = name;\n\treturn factory;\n}\n","// tslint:disable-next-line:variable-name\nexport const Type = Function;\n\nexport function isType(v: any): v is Type {\n\treturn typeof v === 'function';\n}\n\nexport type Type = new (...args: any[]) => T;\n","export function getCookie(key: string) {\n\tif (!key) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\tdecodeURIComponent(\n\t\t\tdocument.cookie.replace(\n\t\t\t\tnew RegExp(\n\t\t\t\t\t`(?:(?:^|.*;)\\\\s*${encodeURIComponent(key).replace(\n\t\t\t\t\t\t/[\\-\\.\\+\\*]/g,\n\t\t\t\t\t\t'\\\\$&'\n\t\t\t\t\t)}\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$`\n\t\t\t\t),\n\t\t\t\t'$1'\n\t\t\t)\n\t\t) || null\n\t);\n}\n","export function setCookie(\n\tkey: string,\n\tvalue: string,\n\tend: number | string | Date,\n\tpath = '/',\n\tdomain = '',\n\tsecure = false\n) {\n\tif (!key || /^(?:expires|max\\-age|path|domain|secure)$/i.test(key)) {\n\t\treturn false;\n\t}\n\tlet expires = '';\n\tif (end) {\n\t\tswitch (end.constructor) {\n\t\t\tcase Number:\n\t\t\t\texpires =\n\t\t\t\t\tend === Infinity\n\t\t\t\t\t\t? '; expires=Fri, 31 Dec 9999 23:59:59 GMT'\n\t\t\t\t\t\t: '; max-age=' + end;\n\t\t\t\tbreak;\n\t\t\tcase String:\n\t\t\t\texpires = `; expires=${end}`;\n\t\t\t\tbreak;\n\t\t\tcase Date:\n\t\t\t\texpires = `; expires=${(end as Date).toUTCString()}`;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\texpires = '';\n\t\t}\n\t}\n\tconst keyStr = encodeURIComponent(key);\n\tconst valueStr = encodeURIComponent(value);\n\tconst domainStr = `${domain ? `; domain=${domain}` : ''}`;\n\tconst pathStr = `${path ? `; path=${path}` : ''}`;\n\tconst secureStr = `${secure ? '; secure' : ''}`;\n\tdocument.cookie = `${keyStr}=${valueStr}${expires}${domainStr}${pathStr}${secureStr}`;\n\n\treturn true;\n}\n","import { getClass } from '../get-class';\r\nimport { hasClass } from '../has-class';\r\n\r\nexport function addClass(element: Element, className: string) {\r\n\tif (element && !hasClass(element, className)) {\r\n\t\telement.setAttribute('class', getClass(element).trim() + ' ' + className);\r\n\t}\r\n}\r\n","import { isHTMLElement } from '../is-html-element';\r\n\r\nexport function asHTMLElement(o: any): HTMLElement {\r\n\tif (isHTMLElement(o)) {\r\n\t\treturn o as HTMLElement;\r\n\t}\r\n\treturn null;\r\n}\r\n","const classRegexCache = {};\r\nexport function classRegex(className: string): RegExp {\r\n\tif (!classRegexCache[className]) {\r\n\t\tclassRegexCache[className] = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\r\n\t}\r\n\treturn classRegexCache[className];\r\n}\r\n","export function createNode(html: string): HTMLElement {\r\n\tlet element = document.createElement('div') as HTMLElement;\r\n\telement.innerHTML = html;\r\n\telement = element.firstElementChild as HTMLElement;\r\n\treturn element;\r\n}\r\n","import { hasClass } from '../has-class';\r\n\r\nexport function firstByClass(\r\n\telements: HTMLElement[],\r\n\tclassName: string\r\n): HTMLElement {\r\n\tfor (const parent of elements as HTMLElement[]) {\r\n\t\tif (hasClass(parent, className)) {\r\n\t\t\treturn parent;\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n","export function getClass(element: Element) {\r\n\treturn element.getAttribute('class') || '';\r\n}\r\n","import { getStyles } from '../get-styles';\r\n\r\nexport function getCss(\r\n\telement: Element,\r\n\tname: string,\r\n\tcomputed?: CSSStyleDeclaration\r\n): string {\r\n\tcomputed = computed || getStyles(element);\r\n\r\n\tif (computed) {\r\n\t\treturn computed.getPropertyValue(name) || computed[name];\r\n\t}\r\n\r\n\treturn undefined;\r\n}\r\n","import { firstByClass } from '../first-by-class';\r\nimport { getParents } from '../get-parents';\r\n\r\nexport function getParentWithClass(\r\n\telement: HTMLElement,\r\n\tclassName: string\r\n): HTMLElement {\r\n\treturn firstByClass(getParents(element), className);\r\n}\r\n","import { isHTMLElement } from '../is-html-element';\r\n\r\nexport function getParentsOrSelf(element: HTMLElement): HTMLElement[] {\r\n\tconst parents: HTMLElement[] = [];\r\n\r\n\tif (element && isHTMLElement(element)) {\r\n\t\tparents.push(element);\r\n\r\n\t\tif (element.parentElement) {\r\n\t\t\tparents.push.apply(parents, getParentsOrSelf(element.parentElement));\r\n\t\t}\r\n\t}\r\n\r\n\treturn parents;\r\n}\r\n","import { getParentsOrSelf } from '../get-parents-or-self';\r\n\r\nexport function getParents(element: HTMLElement) {\r\n\treturn getParentsOrSelf(element.parentElement);\r\n}\r\n","import { getSelectorFromElement } from '../get-selector-from-element';\r\n\r\nexport function getSelectorElementFromElement(\r\n\telement: Element,\r\n\tattribute = 'data-target',\r\n\tfallbackHref = true\r\n): HTMLElement {\r\n\tconst selector = getSelectorFromElement(element, attribute, fallbackHref);\r\n\r\n\tif (selector && selector.indexOf('#') === 0) {\r\n\t\treturn document.getElementById(selector.substr(1, selector.length - 1));\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n","export function getSelectorFromElement(\r\n\telement: Element,\r\n\tattribute = 'data-target',\r\n\tfallbackHref = true\r\n): string {\r\n\tlet selector = element.getAttribute(attribute);\r\n\r\n\tif (!selector && fallbackHref) {\r\n\t\tselector = element.getAttribute('href') || '';\r\n\t\tselector = /^#.*/i.test(selector) ? selector : null;\r\n\t}\r\n\r\n\treturn selector;\r\n}\r\n","export function getStyles(element: Element) {\r\n\tlet view = element.ownerDocument.defaultView;\r\n\r\n\tif (!view || !view.opener) {\r\n\t\tview = window;\r\n\t}\r\n\r\n\treturn view.getComputedStyle(element);\r\n}\r\n","export function getWindowScrollTop() {\r\n\treturn window.pageYOffset !== undefined\r\n\t\t? window.pageYOffset\r\n\t\t: ((document.documentElement ||\r\n\t\t\t\tdocument.body.parentNode ||\r\n\t\t\t\tdocument.body) as HTMLElement).scrollTop;\r\n}\r\n","import { classRegex } from '../class-regex';\r\nimport { getClass } from '../get-class';\r\n\r\nexport function hasClass(element: Element, className: string): boolean {\r\n\treturn element && classRegex(className).test(getClass(element));\r\n}\r\n","import { hasClass } from '../has-class';\r\n\r\nexport function isAncestorOfClass(\r\n\telement: Element,\r\n\tclassName: string,\r\n\tincludeSelf: boolean\r\n): boolean {\r\n\tlet parent = element.parentElement;\r\n\tif (includeSelf && hasClass(element, className)) {\r\n\t\treturn true;\r\n\t}\r\n\twhile (parent && parent.nodeType && parent.nodeType === 1) {\r\n\t\tif (hasClass(parent, className)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tparent = parent.parentElement;\r\n\t}\r\n\treturn false;\r\n}\r\n","export function isHTMLElement(o: any) {\r\n\treturn typeof HTMLElement === 'object'\r\n\t\t? o instanceof HTMLElement\r\n\t\t: o &&\r\n\t\t\t\ttypeof o === 'object' &&\r\n\t\t\t\to !== null &&\r\n\t\t\t\to.nodeType === 1 &&\r\n\t\t\t\ttypeof o.nodeName === 'string';\r\n}\r\n","import { classRegex } from '../class-regex';\r\nimport { getClass } from '../get-class';\r\nimport { hasClass } from '../has-class';\r\n\r\nexport function removeClass(element: Element, className: string) {\r\n\tif (element && hasClass(element, className)) {\r\n\t\tconst regex = classRegex(className);\r\n\t\telement.setAttribute('class', getClass(element).replace(regex, ' ').trim());\r\n\t}\r\n}\r\n\r\nexport function removeClassFactory(className: string) {\r\n\treturn (element: Element) => {\r\n\t\tremoveClass(element, className);\r\n\t};\r\n}\r\n\r\nexport function removeClassOnCollection(\r\n\telements: Element[],\r\n\tclassName: string\r\n) {\r\n\telements.forEach(removeClassFactory(className));\r\n}\r\n","export function dispatchCustomEvent(element: EventTarget, eventName: string) {\n\tconst event = new CustomEvent(eventName);\n\telement.dispatchEvent(event);\n}\n","import { dispatchCustomEvent } from '../dispatch-custom-event';\n\nexport function eventNamespaceFactory(namespace: string) {\n\treturn (element: EventTarget, eventName: string) =>\n\t\tdispatchCustomEvent(element, eventName + '.' + namespace);\n}\n","export const KEYCODES = {\n\tDOWN: 40,\n\tENTER: 13,\n\tESCAPE: 27,\n\tSPACE: 32,\n\tUP: 38,\n};\n","// TODO: cannot import typings and somehow ts does not know where to look for\r\n//import 'googlemaps';\r\n\r\nexport class FitBoundsPadding {\r\n\ttop? = 0;\r\n\tleft? = 0;\r\n\tbottom? = 0;\r\n\tright? = 0;\r\n}\r\n\r\nexport function fitBoundsWithPadding(\r\n\tmap: google.maps.Map,\r\n\tbounds: google.maps.LatLngBounds,\r\n\tpadding: FitBoundsPadding\r\n) {\r\n\tconst projection = map.getProjection();\r\n\tif (projection) {\r\n\t\t// copying the bounds object, since we will extend it\r\n\t\tbounds = new google.maps.LatLngBounds(\r\n\t\t\tbounds.getSouthWest(),\r\n\t\t\tbounds.getNorthEast()\r\n\t\t);\r\n\r\n\t\t// SW\r\n\t\tlet point1 = projection.fromLatLngToPoint(bounds.getSouthWest());\r\n\t\tmap.fitBounds(bounds);\r\n\r\n\t\tlet point2 = new google.maps.Point(\r\n\t\t\t(typeof padding.left === 'number' ? padding.left : 0) /\r\n\t\t\t\tMath.pow(2, map.getZoom()) || 0,\r\n\t\t\t(typeof padding.bottom === 'number' ? padding.bottom : 0) /\r\n\t\t\t\tMath.pow(2, map.getZoom()) || 0\r\n\t\t);\r\n\r\n\t\tlet newPoint = projection.fromPointToLatLng(\r\n\t\t\tnew google.maps.Point(point1.x - point2.x, point1.y + point2.y)\r\n\t\t);\r\n\r\n\t\tbounds.extend(newPoint);\r\n\r\n\t\tpoint1 = projection.fromLatLngToPoint(bounds.getNorthEast());\r\n\t\tpoint2 = new google.maps.Point(\r\n\t\t\t(typeof padding.right === 'number' ? padding.right : 0) /\r\n\t\t\t\tMath.pow(2, map.getZoom()) || 0,\r\n\t\t\t(typeof padding.top === 'number' ? padding.top : 0) /\r\n\t\t\t\tMath.pow(2, map.getZoom()) || 0\r\n\t\t);\r\n\t\tnewPoint = projection.fromPointToLatLng(\r\n\t\t\tnew google.maps.Point(point1.x + point2.x, point1.y - point2.y)\r\n\t\t);\r\n\r\n\t\tbounds.extend(newPoint);\r\n\t\tmap.fitBounds(bounds);\r\n\t}\r\n}\r\n","export function parseCssUnit(unit: string): number {\n\tconst units = ['px', 'rem', 'em'];\n\n\tif (!unit || !units.filter((u) => unit.indexOf(u) !== -1).length) {\n\t\treturn 0;\n\t}\n\n\tlet parsed = unit.replace(',', '.');\n\tunits.forEach((u) => (parsed = parsed.replace(u, '')));\n\n\treturn Number(parsed);\n}\n","export * from './position/connected-position-strategy';\r\nexport * from './position/connected-position';\r\nexport * from './position/global-position-strategy';\r\nexport * from './position/overlay-position-builder';\r\nexport * from './position/position-strategy';\r\nexport * from './overlay-options';\r\nexport * from './overlay';\r\n","import { Overlay } from '../overlay';\r\n\r\nexport class OverlayKeyboardDispatcher {\r\n\t/** Currently attached overlays in the order they were attached. */\r\n\tprivate attachedOverlays: Overlay[] = [];\r\n\r\n\tprivate document: Document;\r\n\tprivate isAttached: boolean;\r\n\r\n\tconstructor(document: Document) {\r\n\t\tthis.document = document;\r\n\t}\r\n\r\n\t/** Add a new overlay to the list of attached overlay refs. */\r\n\tadd(overlayRef: Overlay): void {\r\n\t\t// Lazily start dispatcher once first overlay is added\r\n\t\tif (!this.isAttached) {\r\n\t\t\tthis.document.body.addEventListener(\r\n\t\t\t\t'keydown',\r\n\t\t\t\tthis.keydownListener,\r\n\t\t\t\ttrue\r\n\t\t\t);\r\n\t\t\tthis.isAttached = true;\r\n\t\t}\r\n\r\n\t\tthis.attachedOverlays.push(overlayRef);\r\n\t}\r\n\r\n\t/** Remove an overlay from the list of attached overlay refs. */\r\n\tremove(overlayRef: Overlay): void {\r\n\t\tconst index = this.attachedOverlays.indexOf(overlayRef);\r\n\r\n\t\tif (index > -1) {\r\n\t\t\tthis.attachedOverlays.splice(index, 1);\r\n\t\t}\r\n\r\n\t\t// Remove the global listener once there are no more overlays.\r\n\t\tif (this.attachedOverlays.length === 0) {\r\n\t\t\tthis._detach();\r\n\t\t}\r\n\t}\r\n\r\n\t/** Select the appropriate overlay from a keydown event. */\r\n\tprivate _selectOverlayFromEvent(event: KeyboardEvent): Overlay {\r\n\t\t// Check if any overlays contain the event\r\n\t\tconst targetedOverlay = this.attachedOverlays.find((overlay) => {\r\n\t\t\treturn (\r\n\t\t\t\toverlay.overlayElement === event.target ||\r\n\t\t\t\toverlay.overlayElement.contains(event.target as HTMLElement)\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\t// Use the overlay if it exists, otherwise choose the most recently attached one\r\n\t\treturn (\r\n\t\t\ttargetedOverlay || this.attachedOverlays[this.attachedOverlays.length - 1]\r\n\t\t);\r\n\t}\r\n\r\n\t/** Detaches the global keyboard event listener. */\r\n\tprivate _detach() {\r\n\t\tif (this.isAttached) {\r\n\t\t\tthis.document.body.removeEventListener(\r\n\t\t\t\t'keydown',\r\n\t\t\t\tthis.keydownListener,\r\n\t\t\t\ttrue\r\n\t\t\t);\r\n\t\t\tthis.isAttached = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/** Keyboard event listener that will be attached to the body. */\r\n\tprivate keydownListener = (event: KeyboardEvent) => {\r\n\t\tif (this.attachedOverlays.length) {\r\n\t\t\t// Dispatch keydown event to the correct overlay.\r\n\t\t\tconst overlay = this._selectOverlayFromEvent(event);\r\n\r\n\t\t\tif (overlay.onKeyboardEvent) {\r\n\t\t\t\toverlay.onKeyboardEvent(event);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}\r\n","import { PositionStrategy } from './position/position-strategy';\r\nimport { ScrollStrategy } from './scroll/scroll-strategy';\r\n\r\nexport class OverlayOptions {\r\n\tpositionStrategy?: PositionStrategy;\r\n\tscrollStrategy?: ScrollStrategy;\r\n\tclassName? = 'c-overlay';\r\n\toverlayClassName?: string;\r\n\tbackdropClassName? = 'c-overlay-dark-backdrop';\r\n\thasBackdrop? = true;\r\n\twidth?: number | string;\r\n\theight?: number | string;\r\n\tminWidth?: number | string;\r\n\tminHeight?: number | string;\r\n\tmaxWidth?: number | string;\r\n\tmaxHeight?: number | string;\r\n\ttransitionDuration? = 300;\r\n\r\n\tconstructor(options?: OverlayOptions) {\r\n\t\tif (options) {\r\n\t\t\tObject.keys(options)\r\n\t\t\t\t.filter((key) => typeof options[key] !== 'undefined')\r\n\t\t\t\t.forEach((key) => (this[key] = options[key]));\r\n\t\t}\r\n\t}\r\n}\r\n","import { addClass } from '@opten/dom/add-class';\r\nimport { newGuid } from '@opten/common/new-guid';\r\nimport { createNode } from '@opten/dom/create-node';\r\nimport { isAncestorOfClass } from '@opten/dom/is-ancestor-of-class';\r\nimport { removeClass } from '@opten/dom/remove-class';\r\nimport { addTransitionEndListener } from '@opten/transition/add-transition-end-listener';\r\n\r\nimport { OverlayOptions } from './overlay-options';\r\nimport { OverlayKeyboardDispatcher } from './keyboard/overlay-keyboard-dispatcher';\r\n\r\n// todo: do it more like angular with backdrop configuration etc...\r\nexport class Overlay {\r\n\toverlayElement: HTMLElement;\r\n\tonAttached: () => void;\r\n\tonDetached: () => void;\r\n\tbeforeOpen: () => void;\r\n\tbeforeClose: () => void;\r\n\tafterOpened: () => void;\r\n\tafterClosed: () => void;\r\n\tonKeyboardEvent: (event: KeyboardEvent) => void;\r\n\tbackdropClick: (event: MouseEvent) => void;\r\n\r\n\tprivate uuid: string;\r\n\tprivate options: OverlayOptions;\r\n\tprivate overlayContainerElement: HTMLElement;\r\n\tprivate backdropElement: HTMLElement;\r\n\tprivate attached = false;\r\n\tprivate keyboardDispatcher = new OverlayKeyboardDispatcher(document);\r\n\r\n\tconstructor(public portalElement: HTMLElement, options?: OverlayOptions) {\r\n\t\tthis.options = new OverlayOptions(options);\r\n\r\n\t\tthis.uuid = newGuid();\r\n\r\n\t\tif (options.scrollStrategy) {\r\n\t\t\toptions.scrollStrategy.attach(this);\r\n\t\t}\r\n\t}\r\n\r\n\tcreate() {\r\n\t\t// we want to re-use existing containers\r\n\t\t// so search it in the dom before we create it again!\r\n\t\tconst overlayContainerElement = document.getElementsByClassName(\r\n\t\t\t`${this.options.className}__container`\r\n\t\t)[0] as HTMLElement;\r\n\r\n\t\tif (overlayContainerElement) {\r\n\t\t\tthis.overlayContainerElement = overlayContainerElement;\r\n\t\t} else {\r\n\t\t\tthis.overlayContainerElement = createNode(\r\n\t\t\t\t`
`\r\n\t\t\t);\r\n\r\n\t\t\tdocument.body.insertBefore(\r\n\t\t\t\tthis.overlayContainerElement,\r\n\t\t\t\tdocument.body.lastElementChild\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tthis.overlayElement = createNode(\r\n\t\t\t`
`\r\n\t\t);\r\n\r\n\t\tif (this.options.overlayClassName) {\r\n\t\t\taddClass(this.overlayElement, this.options.overlayClassName);\r\n\t\t}\r\n\r\n\t\tthis.overlayContainerElement.appendChild(this.overlayElement);\r\n\t}\r\n\r\n\thasAttached() {\r\n\t\treturn this.attached;\r\n\t}\r\n\r\n\tdetachBackdrop() {\r\n\t\tconst backdropToDetach = this.backdropElement;\r\n\r\n\t\tif (backdropToDetach) {\r\n\t\t\tconst finishDetach = () => {\r\n\t\t\t\t// It may not be attached to anything in certain cases (e.g. unit tests).\r\n\t\t\t\tif (backdropToDetach && backdropToDetach.parentNode) {\r\n\t\t\t\t\tbackdropToDetach.parentNode.removeChild(backdropToDetach);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// It is possible that a new portal has been attached to this overlay since we started\r\n\t\t\t\t// removing the backdrop. If that is the case, only clear the backdrop reference if it\r\n\t\t\t\t// is still the same instance that we started to remove.\r\n\t\t\t\tif (this.backdropElement === backdropToDetach) {\r\n\t\t\t\t\tthis.backdropElement = null;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tremoveClass(backdropToDetach, 'is-showing');\r\n\r\n\t\t\tif (this.options.backdropClassName) {\r\n\t\t\t\tremoveClass(backdropToDetach, this.options.backdropClassName);\r\n\t\t\t}\r\n\r\n\t\t\taddTransitionEndListener(backdropToDetach, finishDetach, 500);\r\n\r\n\t\t\t// If the backdrop doesn't have a transition, the `transitionend` event won't fire.\r\n\t\t\t// In this case we make it unclickable and we try to remove it after a delay.\r\n\t\t\tbackdropToDetach.style.pointerEvents = 'none';\r\n\t\t}\r\n\t}\r\n\r\n\t/** Updates the position of the overlay based on the position strategy. */\r\n\tupdatePosition() {\r\n\t\tif (this.options.positionStrategy) {\r\n\t\t\tthis.options.positionStrategy.apply();\r\n\t\t}\r\n\t}\r\n\r\n\tgetOptions() {\r\n\t\treturn this.options;\r\n\t}\r\n\r\n\t/** Update the size properties of the overlay. */\r\n\tupdateSize(sizeConfig: OverlaySizeConfig) {\r\n\t\tthis.options = { ...this.options, ...sizeConfig };\r\n\t\tthis._updateElementSize();\r\n\t}\r\n\r\n\topen() {\r\n\t\tthis._attach();\r\n\r\n\t\t// Update the position once, so that the overlay will be fully rendered\r\n\t\t// before attempting to position it, as the position may depend on the size of the rendered\r\n\t\t// content.\r\n\t\tthis.updatePosition();\r\n\r\n\t\t// animate\r\n\t\taddClass(this.portalElement, 'is-showing');\r\n\r\n\t\tif (this.beforeOpen) {\r\n\t\t\tthis.beforeOpen();\r\n\t\t}\r\n\r\n\t\t// todo: Aniamte like Angular Material?\r\n\t\taddTransitionEndListener(\r\n\t\t\tthis.portalElement,\r\n\t\t\t() => {\r\n\t\t\t\tremoveClass(this.portalElement, 'is-showing');\r\n\t\t\t\taddClass(this.portalElement, 'is-visible');\r\n\r\n\t\t\t\tif (this.afterOpened) {\r\n\t\t\t\t\tthis.afterOpened();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tthis.options.transitionDuration\r\n\t\t);\r\n\t}\r\n\r\n\tclose() {\r\n\t\tthis._detach();\r\n\r\n\t\t// animate\r\n\t\taddClass(this.portalElement, 'is-fade-out');\r\n\r\n\t\tif (this.beforeClose) {\r\n\t\t\tthis.beforeClose();\r\n\t\t}\r\n\r\n\t\taddTransitionEndListener(\r\n\t\t\tthis.portalElement,\r\n\t\t\t() => {\r\n\t\t\t\tremoveClass(this.portalElement, 'is-fade-out');\r\n\t\t\t\t// todo: why?! otherwise animation only works once...\r\n\t\t\t\tremoveClass(this.portalElement, 'is-showing');\r\n\t\t\t\tremoveClass(this.portalElement, 'is-visible');\r\n\r\n\t\t\t\t// should be called by caller\r\n\t\t\t\t// this._dispose();\r\n\r\n\t\t\t\tif (this.afterClosed) {\r\n\t\t\t\t\tthis.afterClosed();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tthis.options.transitionDuration\r\n\t\t);\r\n\t}\r\n\r\n\t/** Cleans up the overlay from the DOM. */\r\n\tdispose() {\r\n\t\tif (this.portalElement && this.portalElement.parentElement) {\r\n\t\t\tthis.portalElement.parentElement!.removeChild(this.portalElement);\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tthis.options.positionStrategy &&\r\n\t\t\tthis.options.positionStrategy.dispose\r\n\t\t) {\r\n\t\t\tthis.options.positionStrategy.dispose();\r\n\t\t}\r\n\r\n\t\tif (this.options.scrollStrategy) {\r\n\t\t\tthis.options.scrollStrategy.disable();\r\n\t\t}\r\n\r\n\t\tthis.detachBackdrop();\r\n\r\n\t\t// Remove this overlay from keyboard dispatcher tracking\r\n\t\tthis.keyboardDispatcher.remove(this);\r\n\t}\r\n\r\n\tprivate _attach() {\r\n\t\t// todo: do it like angular so we have this method public\r\n\t\t// and we transfer the portalElement over here?\r\n\t\t// it should work with referencing the portalElement in e.g. select.ts\r\n\t\t// to calculate stuff. Because it works in menu.ts too (this.menu.portalElement.parentElement is c-overlay)!\r\n\t\t// Maybe then we can use ._overlayRef.position()... instead of OverlayPositionBuilder\r\n\r\n\t\tif (this.options.positionStrategy) {\r\n\t\t\tthis.options.positionStrategy.attach(this);\r\n\t\t}\r\n\r\n\t\tif (this.options.scrollStrategy) {\r\n\t\t\tthis.options.scrollStrategy.enable();\r\n\t\t}\r\n\r\n\t\tthis.overlayElement.appendChild(this.portalElement);\r\n\r\n\t\tthis._updateElementSize();\r\n\r\n\t\tthis.overlayElement.style.pointerEvents = 'auto';\r\n\r\n\t\tif (this.options.hasBackdrop) {\r\n\t\t\tthis._attachBackdrop();\r\n\t\t}\r\n\r\n\t\tthis.attached = true;\r\n\r\n\t\t// Track this overlay by the keyboard dispatcher\r\n\t\tthis.keyboardDispatcher.add(this);\r\n\r\n\t\tif (this.onAttached) {\r\n\t\t\tthis.onAttached();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _detach() {\r\n\t\tif (!this.hasAttached()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.detachBackdrop();\r\n\r\n\t\t// When the overlay is detached, the element should disable pointer events.\r\n\t\t// This is necessary because otherwise the element will cover the page and disable\r\n\t\t// pointer events therefore. Depends on the position strategy and the applied boundaries.\r\n\t\tthis.overlayElement.style.pointerEvents = 'none';\r\n\r\n\t\tif (this.options.positionStrategy && this.options.positionStrategy.detach) {\r\n\t\t\tthis.options.positionStrategy.detach();\r\n\t\t}\r\n\r\n\t\tif (this.options.scrollStrategy) {\r\n\t\t\tthis.options.scrollStrategy.disable();\r\n\t\t}\r\n\r\n\t\t// Remove this overlay from keyboard dispatcher tracking\r\n\t\tthis.keyboardDispatcher.remove(this);\r\n\r\n\t\tif (this.onDetached) {\r\n\t\t\tthis.onDetached();\r\n\t\t}\r\n\t}\r\n\r\n\t/** Attaches a backdrop for this overlay. */\r\n\tprivate _attachBackdrop() {\r\n\t\tthis.backdropElement = createNode(\r\n\t\t\t`
`\r\n\t\t);\r\n\r\n\t\tif (this.options.backdropClassName) {\r\n\t\t\taddClass(this.backdropElement, this.options.backdropClassName);\r\n\t\t}\r\n\r\n\t\t// Insert the backdrop before the overlay in the DOM order,\r\n\t\t// in order to handle stacked overlays properly.\r\n\t\tthis.overlayElement.parentElement!.insertBefore(\r\n\t\t\tthis.backdropElement,\r\n\t\t\tthis.overlayElement\r\n\t\t);\r\n\r\n\t\t// Forward backdrop clicks such that the consumer of the overlay can perform whatever\r\n\t\t// action desired when such a click occurs (usually closing the overlay).\r\n\t\tthis.backdropElement.addEventListener('click', (event: MouseEvent) =>\r\n\t\t\tthis._handleBackdropClick(event)\r\n\t\t);\r\n\r\n\t\t// Add class to fade-in the backdrop after one frame.\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tif (this.backdropElement) {\r\n\t\t\t\taddClass(this.backdropElement, 'is-showing');\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/** Updates the size of the overlay element based on the overlay config. */\r\n\tprivate _updateElementSize() {\r\n\t\tif (this.options.width || this.options.width === 0) {\r\n\t\t\tthis.overlayElement.style.width = formatCssUnit(this.options.width);\r\n\t\t}\r\n\r\n\t\tif (this.options.height || this.options.height === 0) {\r\n\t\t\tthis.overlayElement.style.height = formatCssUnit(this.options.height);\r\n\t\t}\r\n\r\n\t\tif (this.options.minWidth || this.options.minWidth === 0) {\r\n\t\t\tthis.overlayElement.style.minWidth = formatCssUnit(this.options.minWidth);\r\n\t\t}\r\n\r\n\t\tif (this.options.minHeight || this.options.minHeight === 0) {\r\n\t\t\tthis.overlayElement.style.minHeight = formatCssUnit(\r\n\t\t\t\tthis.options.minHeight\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (this.options.maxWidth || this.options.maxWidth === 0) {\r\n\t\t\tthis.overlayElement.style.maxWidth = formatCssUnit(this.options.maxWidth);\r\n\t\t}\r\n\r\n\t\tif (this.options.maxHeight || this.options.maxHeight === 0) {\r\n\t\t\tthis.overlayElement.style.maxHeight = formatCssUnit(\r\n\t\t\t\tthis.options.maxHeight\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _handleBackdropClick(event: MouseEvent) {\r\n\t\tif (\r\n\t\t\t!isAncestorOfClass(event.target as Element, this.options.className, true)\r\n\t\t) {\r\n\t\t\tif (this.backdropClick) {\r\n\t\t\t\tthis.backdropClick(event);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function overlay(\r\n\telement: HTMLElement,\r\n\toptions?: OverlayOptions\r\n): Overlay {\r\n\tconst overlayRef = new Overlay(element, options);\r\n\r\n\toverlayRef.create();\r\n\r\n\treturn overlayRef;\r\n}\r\n\r\nfunction formatCssUnit(value: number | string) {\r\n\t// todo: @opten/typescript?\r\n\treturn typeof value === 'string' ? (value as string) : `${value}px`;\r\n}\r\n\r\n/** Size properties for an overlay. */\r\nexport interface OverlaySizeConfig {\r\n\twidth?: number | string;\r\n\theight?: number | string;\r\n\tminWidth?: number | string;\r\n\tminHeight?: number | string;\r\n\tmaxWidth?: number | string;\r\n\tmaxHeight?: number | string;\r\n}\r\n","import { isElementClippedByScrolling } from '@opten/viewport/is-element-clipped-by-scrolling';\r\nimport { isElementScrolledOutsideView } from '@opten/viewport/is-element-scrolled-outside-view';\r\n\r\nimport { PositionStrategy } from './position-strategy';\r\n\r\nimport {\r\n\tConnectionPositionPair,\r\n\tOriginConnectionPosition,\r\n\tOverlayConnectionPosition,\r\n\tScrollingVisibility,\r\n\tConnectedOverlayPositionChange,\r\n\tvalidateHorizontalPosition,\r\n\tvalidateVerticalPosition,\r\n} from './connected-position';\r\n\r\nimport { Overlay } from '../overlay';\r\n\r\nexport class ConnectedPositionStrategy implements PositionStrategy {\r\n\tonPositionChange: (change: ConnectedOverlayPositionChange) => void;\r\n\r\n\t/** The offset in pixels for the overlay connection point on the x-axis */\r\n\tprivate offsetX = 0;\r\n\r\n\t/** The offset in pixels for the overlay connection point on the y-axis */\r\n\tprivate offsetY = 0;\r\n\r\n\t/** The Scrollable containers used to check scrollable view properties on position change. */\r\n\tprivate scrollables: HTMLElement[] = [];\r\n\r\n\t/** Ordered list of preferred positions, from most to least desirable. */\r\n\tprivate preferredPositions: ConnectionPositionPair[] = [];\r\n\r\n\t/** The origin element against which the overlay will be positioned. */\r\n\tprivate origin: HTMLElement;\r\n\r\n\t/** The overlay pane element. */\r\n\tprivate pane: HTMLElement;\r\n\r\n\t/** The last position to have been calculated as the best fit position. */\r\n\tprivate lastConnectedPosition: ConnectionPositionPair;\r\n\r\n\t/** Whether the position strategy is applied currently. */\r\n\tprivate applied = false;\r\n\r\n\t/** Whether the overlay position is locked. */\r\n\tprivate positionLocked = false;\r\n\r\n\tprivate boundResizeChange = this._handleResizeChange.bind(this);\r\n\r\n\tconstructor(\r\n\t\toriginPos: OriginConnectionPosition,\r\n\t\toverlayPos: OverlayConnectionPosition,\r\n\t\tprivate connectedTo: HTMLElement,\r\n\t\tprivate document: Document\r\n\t) {\r\n\t\tthis.origin = this.connectedTo;\r\n\t\tthis.withFallbackPosition(originPos, overlayPos);\r\n\t}\r\n\r\n\t/** Ordered list of preferred positions, from most to least desirable. */\r\n\tget positions(): ConnectionPositionPair[] {\r\n\t\treturn this.preferredPositions;\r\n\t}\r\n\r\n\t/** Attach this position strategy to an overlay. */\r\n\tattach(overlayRef: Overlay): void {\r\n\t\tthis.pane = overlayRef.overlayElement;\r\n\r\n\t\twindow.addEventListener('resize', this.boundResizeChange);\r\n\t}\r\n\r\n\t/** @docs-private */\r\n\tdetach() {\r\n\t\tthis.applied = false;\r\n\t\twindow.removeEventListener('resize', this.boundResizeChange);\r\n\t}\r\n\r\n\t/** Disposes all resources used by the position strategy. */\r\n\tdispose() {\r\n\t\tthis.detach();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the position of the overlay element, using whichever preferred position relative\r\n\t * to the origin fits on-screen.\r\n\t * @docs-private\r\n\t */\r\n\tapply(): void {\r\n\t\t// If the position has been applied already (e.g. when the overlay was opened) and the\r\n\t\t// consumer opted into locking in the position, re-use the old position, in order to\r\n\t\t// prevent the overlay from jumping around.\r\n\t\tif (this.applied && this.positionLocked && this.lastConnectedPosition) {\r\n\t\t\tthis.recalculateLastPosition();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._validatePositions();\r\n\t\tthis.applied = true;\r\n\r\n\t\t// We need the bounding rects for the origin and the overlay to determine how to position\r\n\t\t// the overlay relative to the origin.\r\n\t\tconst element = this.pane;\r\n\t\tconst originRect = this.origin.getBoundingClientRect();\r\n\t\tconst overlayRect = element.getBoundingClientRect();\r\n\r\n\t\t// We use the viewport size to determine whether a position would go off-screen.\r\n\t\tconst viewportSize = {\r\n\t\t\twidth: window.innerWidth,\r\n\t\t\theight: window.innerHeight,\r\n\t\t};\r\n\r\n\t\t// Fallback point if none of the fallbacks fit into the viewport.\r\n\t\tlet fallbackPoint: OverlayPoint | undefined;\r\n\t\tlet fallbackPosition: ConnectionPositionPair | undefined;\r\n\r\n\t\t// We want to place the overlay in the first of the preferred positions such that the\r\n\t\t// overlay fits on-screen.\r\n\t\tfor (const pos of this.preferredPositions) {\r\n\t\t\t// Get the (x, y) point of connection on the origin, and then use that to get the\r\n\t\t\t// (top, left) coordinate for the overlay at `pos`.\r\n\t\t\tconst originPoint = this._getOriginConnectionPoint(originRect, pos);\r\n\t\t\tconst overlayPoint = this._getOverlayPoint(\r\n\t\t\t\toriginPoint,\r\n\t\t\t\toverlayRect,\r\n\t\t\t\tviewportSize,\r\n\t\t\t\tpos\r\n\t\t\t);\r\n\r\n\t\t\t// If the overlay in the calculated position fits on-screen, put it there and we're done.\r\n\t\t\tif (overlayPoint.fitsInViewport) {\r\n\t\t\t\tthis._setElementPosition(element, overlayRect, overlayPoint, pos);\r\n\r\n\t\t\t\t// Save the last connected position in case the position needs to be re-calculated.\r\n\t\t\t\tthis.lastConnectedPosition = pos;\r\n\r\n\t\t\t\treturn;\r\n\t\t\t} else if (\r\n\t\t\t\t!fallbackPoint ||\r\n\t\t\t\tfallbackPoint.visibleArea < overlayPoint.visibleArea\r\n\t\t\t) {\r\n\t\t\t\tfallbackPoint = overlayPoint;\r\n\t\t\t\tfallbackPosition = pos;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// If none of the preferred positions were in the viewport, take the one\r\n\t\t// with the largest visible area.\r\n\t\tthis._setElementPosition(\r\n\t\t\telement,\r\n\t\t\toverlayRect,\r\n\t\t\tfallbackPoint!,\r\n\t\t\tfallbackPosition!\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Re-positions the overlay element with the trigger in its last calculated position,\r\n\t * even if a position higher in the \"preferred positions\" list would now fit. This\r\n\t * allows one to re-align the panel without changing the orientation of the panel.\r\n\t */\r\n\trecalculateLastPosition(): void {\r\n\t\t// If the overlay has never been positioned before, do nothing.\r\n\t\tif (!this.lastConnectedPosition) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._validatePositions();\r\n\r\n\t\tconst originRect = this.origin.getBoundingClientRect();\r\n\t\tconst overlayRect = this.pane.getBoundingClientRect();\r\n\t\tconst viewportSize = {\r\n\t\t\twidth: window.innerWidth,\r\n\t\t\theight: window.innerHeight,\r\n\t\t};\r\n\t\tconst lastPosition =\r\n\t\t\tthis.lastConnectedPosition || this.preferredPositions[0];\r\n\r\n\t\tconst originPoint = this._getOriginConnectionPoint(\r\n\t\t\toriginRect,\r\n\t\t\tlastPosition\r\n\t\t);\r\n\t\tconst overlayPoint = this._getOverlayPoint(\r\n\t\t\toriginPoint,\r\n\t\t\toverlayRect,\r\n\t\t\tviewportSize,\r\n\t\t\tlastPosition\r\n\t\t);\r\n\t\tthis._setElementPosition(\r\n\t\t\tthis.pane,\r\n\t\t\toverlayRect,\r\n\t\t\toverlayPoint,\r\n\t\t\tlastPosition\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the list of Scrollable containers that host the origin element so that\r\n\t * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\r\n\t * Scrollable must be an ancestor element of the strategy's origin element.\r\n\t */\r\n\twithScrollableContainers(scrollables: HTMLElement[]): this {\r\n\t\tthis.scrollables = scrollables;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a new preferred fallback position.\r\n\t * @param originPos\r\n\t * @param overlayPos\r\n\t */\r\n\twithFallbackPosition(\r\n\t\toriginPos: OriginConnectionPosition,\r\n\t\toverlayPos: OverlayConnectionPosition,\r\n\t\toffsetX?: number,\r\n\t\toffsetY?: number\r\n\t): this {\r\n\t\tconst position = new ConnectionPositionPair(\r\n\t\t\toriginPos,\r\n\t\t\toverlayPos,\r\n\t\t\toffsetX,\r\n\t\t\toffsetY\r\n\t\t);\r\n\t\tthis.preferredPositions.push(position);\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets an offset for the overlay's connection point on the x-axis\r\n\t * @param offset New offset in the X axis.\r\n\t */\r\n\twithOffsetX(offset: number): this {\r\n\t\tthis.offsetX = offset;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets an offset for the overlay's connection point on the y-axis\r\n\t * @param offset New offset in the Y axis.\r\n\t */\r\n\twithOffsetY(offset: number): this {\r\n\t\tthis.offsetY = offset;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets whether the overlay's position should be locked in after it is positioned\r\n\t * initially. When an overlay is locked in, it won't attempt to reposition itself\r\n\t * when the position is re-applied (e.g. when the user scrolls away).\r\n\t * @param isLocked Whether the overlay should locked in.\r\n\t */\r\n\twithLockedPosition(isLocked: boolean): this {\r\n\t\tthis.positionLocked = isLocked;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Overwrites the current set of positions with an array of new ones.\r\n\t * @param positions Position pairs to be set on the strategy.\r\n\t */\r\n\twithPositions(positions: ConnectionPositionPair[]): this {\r\n\t\tthis.preferredPositions = positions.slice();\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the origin element, relative to which to position the overlay.\r\n\t * @param origin Reference to the new origin element.\r\n\t */\r\n\tsetOrigin(origin: HTMLElement): this {\r\n\t\tthis.origin = origin;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the horizontal (x) \"start\" dimension\r\n\t * @param rect\r\n\t */\r\n\tprivate _getStartX(rect: ClientRect): number {\r\n\t\treturn rect.left;\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the horizontal (x) \"end\" dimension\r\n\t * @param rect\r\n\t */\r\n\tprivate _getEndX(rect: ClientRect): number {\r\n\t\treturn rect.right;\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.\r\n\t * @param originRect\r\n\t * @param pos\r\n\t */\r\n\tprivate _getOriginConnectionPoint(\r\n\t\toriginRect: ClientRect,\r\n\t\tpos: ConnectionPositionPair\r\n\t): Point {\r\n\t\tconst originStartX = this._getStartX(originRect);\r\n\t\tconst originEndX = this._getEndX(originRect);\r\n\r\n\t\tlet x: number;\r\n\t\tif (pos.originX === 'center') {\r\n\t\t\tx = originStartX + originRect.width / 2;\r\n\t\t} else {\r\n\t\t\tx = pos.originX === 'start' ? originStartX : originEndX;\r\n\t\t}\r\n\r\n\t\tlet y: number;\r\n\t\tif (pos.originY === 'center') {\r\n\t\t\ty = originRect.top + originRect.height / 2;\r\n\t\t} else {\r\n\t\t\ty = pos.originY === 'top' ? originRect.top : originRect.bottom;\r\n\t\t}\r\n\r\n\t\treturn { x, y };\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the (x, y) coordinate of the top-left corner of the overlay given a given position and\r\n\t * origin point to which the overlay should be connected, as well as how much of the element\r\n\t * would be inside the viewport at that position.\r\n\t */\r\n\tprivate _getOverlayPoint(\r\n\t\toriginPoint: Point,\r\n\t\toverlayRect: ClientRect,\r\n\t\tviewportSize: { width: number; height: number },\r\n\t\tpos: ConnectionPositionPair\r\n\t): OverlayPoint {\r\n\t\t// Calculate the (overlayStartX, overlayStartY), the start of the potential overlay position\r\n\t\t// relative to the origin point.\r\n\t\tlet overlayStartX: number;\r\n\t\tif (pos.overlayX === 'center') {\r\n\t\t\toverlayStartX = -overlayRect.width / 2;\r\n\t\t} else if (pos.overlayX === 'start') {\r\n\t\t\toverlayStartX = 0;\r\n\t\t} else {\r\n\t\t\toverlayStartX = -overlayRect.width;\r\n\t\t}\r\n\r\n\t\tlet overlayStartY: number;\r\n\t\tif (pos.overlayY === 'center') {\r\n\t\t\toverlayStartY = -overlayRect.height / 2;\r\n\t\t} else {\r\n\t\t\toverlayStartY = pos.overlayY === 'top' ? 0 : -overlayRect.height;\r\n\t\t}\r\n\r\n\t\t// The (x, y) offsets of the overlay based on the current position.\r\n\t\tconst offsetX =\r\n\t\t\ttypeof pos.offsetX === 'undefined' ? this.offsetX : pos.offsetX;\r\n\t\tconst offsetY =\r\n\t\t\ttypeof pos.offsetY === 'undefined' ? this.offsetY : pos.offsetY;\r\n\r\n\t\t// The (x, y) coordinates of the overlay.\r\n\t\tconst x = originPoint.x + overlayStartX + offsetX;\r\n\t\tconst y = originPoint.y + overlayStartY + offsetY;\r\n\r\n\t\t// How much the overlay would overflow at this position, on each side.\r\n\t\tconst leftOverflow = 0 - x;\r\n\t\tconst rightOverflow = x + overlayRect.width - viewportSize.width;\r\n\t\tconst topOverflow = 0 - y;\r\n\t\tconst bottomOverflow = y + overlayRect.height - viewportSize.height;\r\n\r\n\t\t// Visible parts of the element on each axis.\r\n\t\tconst visibleWidth = this._subtractOverflows(\r\n\t\t\toverlayRect.width,\r\n\t\t\tleftOverflow,\r\n\t\t\trightOverflow\r\n\t\t);\r\n\t\tconst visibleHeight = this._subtractOverflows(\r\n\t\t\toverlayRect.height,\r\n\t\t\ttopOverflow,\r\n\t\t\tbottomOverflow\r\n\t\t);\r\n\r\n\t\t// The area of the element that's within the viewport.\r\n\t\tconst visibleArea = visibleWidth * visibleHeight;\r\n\t\tconst fitsInViewport =\r\n\t\t\toverlayRect.width * overlayRect.height === visibleArea;\r\n\r\n\t\treturn { x, y, fitsInViewport, visibleArea };\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the view properties of the trigger and overlay, including whether they are clipped\r\n\t * or completely outside the view of any of the strategy's scrollables.\r\n\t */\r\n\tprivate _getScrollVisibility(overlay: HTMLElement): ScrollingVisibility {\r\n\t\tconst originBounds = this.origin.getBoundingClientRect();\r\n\t\tconst overlayBounds = overlay.getBoundingClientRect();\r\n\t\tconst scrollContainerBounds = this.scrollables.map((s) =>\r\n\t\t\ts.getBoundingClientRect()\r\n\t\t);\r\n\r\n\t\treturn {\r\n\t\t\tisOriginClipped: isElementClippedByScrolling(\r\n\t\t\t\toriginBounds,\r\n\t\t\t\tscrollContainerBounds\r\n\t\t\t),\r\n\t\t\tisOriginOutsideView: isElementScrolledOutsideView(\r\n\t\t\t\toriginBounds,\r\n\t\t\t\tscrollContainerBounds\r\n\t\t\t),\r\n\t\t\tisOverlayClipped: isElementClippedByScrolling(\r\n\t\t\t\toverlayBounds,\r\n\t\t\t\tscrollContainerBounds\r\n\t\t\t),\r\n\t\t\tisOverlayOutsideView: isElementScrolledOutsideView(\r\n\t\t\t\toverlayBounds,\r\n\t\t\t\tscrollContainerBounds\r\n\t\t\t),\r\n\t\t};\r\n\t}\r\n\r\n\t/** Physically positions the overlay element to the given coordinate. */\r\n\tprivate _setElementPosition(\r\n\t\telement: HTMLElement,\r\n\t\toverlayRect: ClientRect,\r\n\t\toverlayPoint: Point,\r\n\t\tpos: ConnectionPositionPair\r\n\t) {\r\n\t\t// We want to set either `top` or `bottom` based on whether the overlay wants to appear above\r\n\t\t// or below the origin and the direction in which the element will expand.\r\n\t\tconst verticalStyleProperty = pos.overlayY === 'bottom' ? 'bottom' : 'top';\r\n\r\n\t\t// When using `bottom`, we adjust the y position such that it is the distance\r\n\t\t// from the bottom of the viewport rather than the top.\r\n\t\tconst y =\r\n\t\t\tverticalStyleProperty === 'top'\r\n\t\t\t\t? overlayPoint.y\r\n\t\t\t\t: this.document.documentElement.clientHeight -\r\n\t\t\t\t (overlayPoint.y + overlayRect.height);\r\n\r\n\t\tconst horizontalStyleProperty = pos.overlayX === 'end' ? 'right' : 'left';\r\n\r\n\t\t// When we're setting `right`, we adjust the x position such that it is the distance\r\n\t\t// from the right edge of the viewport rather than the left edge.\r\n\t\tconst x =\r\n\t\t\thorizontalStyleProperty === 'left'\r\n\t\t\t\t? overlayPoint.x\r\n\t\t\t\t: this.document.documentElement.clientWidth -\r\n\t\t\t\t (overlayPoint.x + overlayRect.width);\r\n\r\n\t\t// Reset any existing styles. This is necessary in case the preferred position has\r\n\t\t// changed since the last `apply`.\r\n\t\t['top', 'bottom', 'left', 'right'].forEach(\r\n\t\t\t(p) => (element.style[p] = null)\r\n\t\t);\r\n\r\n\t\telement.style[verticalStyleProperty] = `${y}px`;\r\n\t\telement.style[horizontalStyleProperty] = `${x}px`;\r\n\r\n\t\t// Notify that the position has been changed along with its change properties.\r\n\t\tconst scrollableViewProperties = this._getScrollVisibility(element);\r\n\t\tconst positionChange = new ConnectedOverlayPositionChange(\r\n\t\t\tpos,\r\n\t\t\tscrollableViewProperties\r\n\t\t);\r\n\r\n\t\tif (this.onPositionChange) {\r\n\t\t\tthis.onPositionChange(positionChange);\r\n\t\t}\r\n\t}\r\n\r\n\t/** Subtracts the amount that an element is overflowing on an axis from it's length. */\r\n\tprivate _subtractOverflows(length: number, ...overflows: number[]): number {\r\n\t\treturn overflows.reduce((currentValue: number, currentOverflow: number) => {\r\n\t\t\treturn currentValue - Math.max(currentOverflow, 0);\r\n\t\t}, length);\r\n\t}\r\n\r\n\t/** Validates that the current position match the expected values. */\r\n\tprivate _validatePositions(): void {\r\n\t\tif (!this.preferredPositions.length) {\r\n\t\t\tthrow Error(\r\n\t\t\t\t'ConnectedPositionStrategy: At least one position is required.'\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// TODO(crisbeto): remove these once Angular's template type\r\n\t\t// checking is advanced enough to catch these cases.\r\n\t\tthis.preferredPositions.forEach((pair) => {\r\n\t\t\tvalidateHorizontalPosition('originX', pair.originX);\r\n\t\t\tvalidateVerticalPosition('originY', pair.originY);\r\n\t\t\tvalidateHorizontalPosition('overlayX', pair.overlayX);\r\n\t\t\tvalidateVerticalPosition('overlayY', pair.overlayY);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate _handleResizeChange() {\r\n\t\tthis.apply();\r\n\t}\r\n}\r\n\r\n/** A simple (x, y) coordinate. */\r\n// tslint:disable-next-line:interface-name\r\ninterface Point {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\n/**\r\n * Expands the simple (x, y) coordinate by adding info about whether the\r\n * element would fit inside the viewport at that position, as well as\r\n * how much of the element would be visible.\r\n */\r\n// tslint:disable-next-line:interface-name\r\ninterface OverlayPoint extends Point {\r\n\tvisibleArea: number;\r\n\tfitsInViewport: boolean;\r\n}\r\n","/** Horizontal dimension of a connection point on the perimeter of the origin or overlay element. */\r\nexport type HorizontalConnectionPos = 'start' | 'center' | 'end';\r\n\r\n/** Vertical dimension of a connection point on the perimeter of the origin or overlay element. */\r\nexport type VerticalConnectionPos = 'top' | 'center' | 'bottom';\r\n\r\n/** A connection point on the origin element. */\r\n// tslint:disable-next-line:interface-name\r\nexport interface OriginConnectionPosition {\r\n\toriginX: HorizontalConnectionPos;\r\n\toriginY: VerticalConnectionPos;\r\n}\r\n\r\n/** A connection point on the overlay element. */\r\n// tslint:disable-next-line:interface-name\r\nexport interface OverlayConnectionPosition {\r\n\toverlayX: HorizontalConnectionPos;\r\n\toverlayY: VerticalConnectionPos;\r\n}\r\n\r\n/** The points of the origin element and the overlay element to connect. */\r\nexport class ConnectionPositionPair {\r\n\t/** X-axis attachment point for connected overlay origin. Can be 'start', 'end', or 'center'. */\r\n\toriginX: HorizontalConnectionPos;\r\n\t/** Y-axis attachment point for connected overlay origin. Can be 'top', 'bottom', or 'center'. */\r\n\toriginY: VerticalConnectionPos;\r\n\t/** X-axis attachment point for connected overlay. Can be 'start', 'end', or 'center'. */\r\n\toverlayX: HorizontalConnectionPos;\r\n\t/** Y-axis attachment point for connected overlay. Can be 'top', 'bottom', or 'center'. */\r\n\toverlayY: VerticalConnectionPos;\r\n\r\n\tconstructor(\r\n\t\torigin: OriginConnectionPosition,\r\n\t\toverlay: OverlayConnectionPosition,\r\n\t\tpublic offsetX?: number,\r\n\t\tpublic offsetY?: number\r\n\t) {\r\n\t\tthis.originX = origin.originX;\r\n\t\tthis.originY = origin.originY;\r\n\t\tthis.overlayX = overlay.overlayX;\r\n\t\tthis.overlayY = overlay.overlayY;\r\n\t}\r\n}\r\n\r\n/**\r\n * Set of properties regarding the position of the origin and overlay relative to the viewport\r\n * with respect to the containing Scrollable elements.\r\n *\r\n * The overlay and origin are clipped if any part of their bounding client rectangle exceeds the\r\n * bounds of any one of the strategy's Scrollable's bounding client rectangle.\r\n *\r\n * The overlay and origin are outside view if there is no overlap between their bounding client\r\n * rectangle and any one of the strategy's Scrollable's bounding client rectangle.\r\n *\r\n * ----------- -----------\r\n * | outside | | clipped |\r\n * | view | --------------------------\r\n * | | | | | |\r\n * ---------- | ----------- |\r\n * -------------------------- | |\r\n * | | | Scrollable |\r\n * | | | |\r\n * | | --------------------------\r\n * | Scrollable |\r\n * | |\r\n * --------------------------\r\n *\r\n * @docs-private\r\n */\r\nexport class ScrollingVisibility {\r\n\tisOriginClipped: boolean;\r\n\tisOriginOutsideView: boolean;\r\n\tisOverlayClipped: boolean;\r\n\tisOverlayOutsideView: boolean;\r\n}\r\n\r\n/** The change event emitted by the strategy when a fallback position is used. */\r\nexport class ConnectedOverlayPositionChange {\r\n\tconstructor(\r\n\t\t/** The position used as a result of this change. */\r\n\t\tpublic connectionPair: ConnectionPositionPair,\r\n\t\tpublic scrollableViewProperties?: ScrollingVisibility\r\n\t) {}\r\n}\r\n\r\n/**\r\n * Validates whether a vertical position property matches the expected values.\r\n * @param property Name of the property being validated.\r\n * @param value Value of the property being validated.\r\n * @docs-private\r\n */\r\nexport function validateVerticalPosition(\r\n\tproperty: string,\r\n\tvalue: VerticalConnectionPos\r\n) {\r\n\tif (value !== 'top' && value !== 'bottom' && value !== 'center') {\r\n\t\tthrow Error(\r\n\t\t\t`ConnectedPosition: Invalid ${property} '${value}'. ` +\r\n\t\t\t\t\"Expected 'top', 'bottom' or 'center'.\"\r\n\t\t);\r\n\t}\r\n}\r\n\r\n/**\r\n * Validates whether a horizontal position property matches the expected values.\r\n * @param property Name of the property being validated.\r\n * @param value Value of the property being validated.\r\n * @docs-private\r\n */\r\nexport function validateHorizontalPosition(\r\n\tproperty: string,\r\n\tvalue: HorizontalConnectionPos\r\n) {\r\n\tif (value !== 'start' && value !== 'end' && value !== 'center') {\r\n\t\tthrow Error(\r\n\t\t\t`ConnectedPosition: Invalid ${property} '${value}'. ` +\r\n\t\t\t\t\"Expected 'start', 'end' or 'center'.\"\r\n\t\t);\r\n\t}\r\n}\r\n","import { addClass } from '@opten/dom/add-class';\r\nimport { PositionStrategy } from './position-strategy';\r\nimport { Overlay } from '../overlay';\r\n\r\n/**\r\n * A strategy for positioning overlays. Using this strategy, an overlay is given an\r\n * explicit position relative to the browser's viewport. We use flexbox, instead of\r\n * transforms, in order to avoid issues with subpixel rendering which can cause the\r\n * element to become blurry.\r\n */\r\nexport class GlobalPositionStrategy implements PositionStrategy {\r\n\t/** The overlay to which this strategy is attached. */\r\n\tprivate overlayRef: Overlay;\r\n\r\n\tprivate cssPosition = 'static';\r\n\tprivate topOffset = '';\r\n\tprivate bottomOffset = '';\r\n\tprivate leftOffset = '';\r\n\tprivate rightOffset = '';\r\n\tprivate alignItems = '';\r\n\tprivate justifyContent = '';\r\n\tprivate width = '';\r\n\tprivate height = '';\r\n\r\n\t/** A lazily-created wrapper for the overlay element that is used as a flex container. */\r\n\tprivate wrapper: HTMLElement | null = null;\r\n\r\n\tconstructor(private document: Document) {}\r\n\r\n\tattach(overlayRef: Overlay): void {\r\n\t\tconst options = overlayRef.getOptions();\r\n\r\n\t\tthis.overlayRef = overlayRef;\r\n\r\n\t\tif (this.width && !options.width) {\r\n\t\t\toverlayRef.updateSize({ width: this.width });\r\n\t\t}\r\n\r\n\t\tif (this.height && !options.height) {\r\n\t\t\toverlayRef.updateSize({ height: this.height });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the top position of the overlay. Clears any previously set vertical position.\r\n\t * @param value New top offset.\r\n\t */\r\n\ttop(value = ''): this {\r\n\t\tthis.bottomOffset = '';\r\n\t\tthis.topOffset = value;\r\n\t\tthis.alignItems = 'flex-start';\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the left position of the overlay. Clears any previously set horizontal position.\r\n\t * @param value New left offset.\r\n\t */\r\n\tleft(value = ''): this {\r\n\t\tthis.rightOffset = '';\r\n\t\tthis.leftOffset = value;\r\n\t\tthis.justifyContent = 'flex-start';\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the bottom position of the overlay. Clears any previously set vertical position.\r\n\t * @param value New bottom offset.\r\n\t */\r\n\tbottom(value = ''): this {\r\n\t\tthis.topOffset = '';\r\n\t\tthis.bottomOffset = value;\r\n\t\tthis.alignItems = 'flex-end';\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the right position of the overlay. Clears any previously set horizontal position.\r\n\t * @param value New right offset.\r\n\t */\r\n\tright(value = ''): this {\r\n\t\tthis.leftOffset = '';\r\n\t\tthis.rightOffset = value;\r\n\t\tthis.justifyContent = 'flex-end';\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Centers the overlay horizontally with an optional offset.\r\n\t * Clears any previously set horizontal position.\r\n\t *\r\n\t * @param offset Overlay offset from the horizontal center.\r\n\t */\r\n\tcenterHorizontally(offset = ''): this {\r\n\t\tthis.left(offset);\r\n\t\tthis.justifyContent = 'center';\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Centers the overlay vertically with an optional offset.\r\n\t * Clears any previously set vertical position.\r\n\t *\r\n\t * @param offset Overlay offset from the vertical center.\r\n\t */\r\n\tcenterVertically(offset = ''): this {\r\n\t\tthis.top(offset);\r\n\t\tthis.alignItems = 'center';\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Apply the position to the element.\r\n\t * @docs-private\r\n\t *\r\n\t * @returns Resolved when the styles have been applied.\r\n\t */\r\n\tapply() {\r\n\t\t// Since the overlay ref applies the strategy asynchronously, it could\r\n\t\t// have been disposed before it ends up being applied. If that is the\r\n\t\t// case, we shouldn't do anything.\r\n\t\tif (!this.overlayRef.hasAttached()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst element = this.overlayRef.overlayElement;\r\n\r\n\t\tif (!this.wrapper && element.parentNode) {\r\n\t\t\tthis.wrapper = this.document.createElement('div');\r\n\t\t\taddClass(this.wrapper, 'c-overlay__global'); // todo: settings?\r\n\t\t\telement.parentNode.insertBefore(this.wrapper!, element);\r\n\t\t\tthis.wrapper!.appendChild(element);\r\n\t\t}\r\n\r\n\t\tconst parentStyles = (element.parentNode as HTMLElement).style;\r\n\t\tconst options = this.overlayRef.getOptions();\r\n\r\n\t\telement.style.position = this.cssPosition;\r\n\t\telement.style.marginLeft = options.width === '100%' ? '0' : this.leftOffset;\r\n\t\telement.style.marginTop = options.height === '100%' ? '0' : this.topOffset;\r\n\t\telement.style.marginBottom = this.bottomOffset;\r\n\t\telement.style.marginRight = this.rightOffset;\r\n\r\n\t\tparentStyles.justifyContent =\r\n\t\t\toptions.width === '100%' ? 'flex-start' : this.justifyContent;\r\n\t\tparentStyles.alignItems =\r\n\t\t\toptions.height === '100%' ? 'flex-start' : this.alignItems;\r\n\t}\r\n\r\n\t/** Removes the wrapper element from the DOM. */\r\n\tdispose() {\r\n\t\tif (this.wrapper && this.wrapper.parentNode) {\r\n\t\t\tthis.wrapper.parentNode.removeChild(this.wrapper);\r\n\t\t\tthis.wrapper = null;\r\n\t\t}\r\n\t}\r\n}\r\n","import {\r\n\tOriginConnectionPosition,\r\n\tOverlayConnectionPosition,\r\n} from './connected-position';\r\nimport { ConnectedPositionStrategy } from './connected-position-strategy';\r\nimport { GlobalPositionStrategy } from './global-position-strategy';\r\n\r\nexport class OverlayPositionBuilder {\r\n\t/**\r\n\t * Creates a global position strategy.\r\n\t */\r\n\tglobal(): GlobalPositionStrategy {\r\n\t\treturn new GlobalPositionStrategy(document);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a relative position strategy.\r\n\t * @param elementRef\r\n\t * @param originPos\r\n\t * @param overlayPos\r\n\t */\r\n\tconnectedTo(\r\n\t\telementRef: HTMLElement,\r\n\t\toriginPos: OriginConnectionPosition,\r\n\t\toverlayPos: OverlayConnectionPosition\r\n\t): ConnectedPositionStrategy {\r\n\t\treturn new ConnectedPositionStrategy(\r\n\t\t\toriginPos,\r\n\t\t\toverlayPos,\r\n\t\t\telementRef,\r\n\t\t\tdocument\r\n\t\t);\r\n\t}\r\n}\r\n","import { isElementScrolledOutsideView } from '@opten/viewport/is-element-scrolled-outside-view';\r\n\r\nimport { ScrollStrategy } from './scroll-strategy';\r\nimport { Overlay } from '../overlay';\r\n\r\n/**\r\n * Config options for the RepositionScrollStrategy.\r\n */\r\n// tslint:disable-next-line:interface-name\r\nexport interface RepositionScrollStrategyConfig {\r\n\t/** Time in milliseconds to throttle the scroll events. */\r\n\tscrollThrottle?: number;\r\n\r\n\t/** Whether to close the overlay once the user has scrolled away completely. */\r\n\tautoClose?: boolean;\r\n}\r\n\r\n/**\r\n * Strategy that will update the element position as the user is scrolling.\r\n */\r\nexport class RepositionScrollStrategy implements ScrollStrategy {\r\n\tprivate overlayRef: Overlay;\r\n\tprivate applied = false;\r\n\r\n\tconstructor(private config?: RepositionScrollStrategyConfig) {}\r\n\r\n\t/** Attaches this scroll strategy to an overlay. */\r\n\tattach(overlayRef: Overlay) {\r\n\t\tthis.overlayRef = overlayRef;\r\n\t}\r\n\r\n\t/** Enables repositioning of the attached overlay on scroll. */\r\n\tenable() {\r\n\t\tif (!this.applied) {\r\n\t\t\twindow.addEventListener('scroll', this.handleScroll);\r\n\t\t\tthis.applied = true;\r\n\t\t}\r\n\t}\r\n\r\n\t/** Disables repositioning of the attached overlay on scroll. */\r\n\tdisable() {\r\n\t\tif (this.applied) {\r\n\t\t\twindow.removeEventListener('scroll', this.handleScroll);\r\n\t\t\tthis.applied = false;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate handleScroll = () => {\r\n\t\tconst throttle = this.config ? this.config.scrollThrottle : 0;\r\n\t\tconst autoClose = this.config ? this.config.autoClose : true;\r\n\r\n\t\tconst update = () => {\r\n\t\t\tthis.overlayRef.updatePosition();\r\n\r\n\t\t\tif (autoClose) {\r\n\t\t\t\tconst overlayRect = this.overlayRef.overlayElement.getBoundingClientRect();\r\n\t\t\t\tconst { width, height } = {\r\n\t\t\t\t\twidth: window.innerWidth,\r\n\t\t\t\t\theight: window.innerHeight,\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// todo: include all ancestor scroll containers here once\r\n\t\t\t\t// we have a way of exposing the trigger element to the scroll strategy.\r\n\t\t\t\tconst parentRects = [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twidth,\r\n\t\t\t\t\t\theight,\r\n\t\t\t\t\t\tbottom: height,\r\n\t\t\t\t\t\tright: width,\r\n\t\t\t\t\t\ttop: 0,\r\n\t\t\t\t\t\tleft: 0,\r\n\t\t\t\t\t},\r\n\t\t\t\t];\r\n\r\n\t\t\t\tif (isElementScrolledOutsideView(overlayRect, parentRects)) {\r\n\t\t\t\t\tthis.disable();\r\n\t\t\t\t\tthis.overlayRef.close();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tif (throttle > 0) {\r\n\t\t\tsetTimeout(() => update(), throttle);\r\n\t\t} else {\r\n\t\t\tupdate();\r\n\t\t}\r\n\t};\r\n}\r\n","export function debounce(func: Function, wait: number, immediate?: boolean) {\n\tlet timeout;\n\tlet result;\n\treturn function debounceFn() {\n\t\tconst context = this;\n\t\tconst args = arguments;\n\t\tconst later = () => {\n\t\t\ttimeout = null;\n\t\t\tif (!immediate) {\n\t\t\t\tresult = func.apply(context, args);\n\t\t\t}\n\t\t};\n\t\tconst callNow = immediate && !timeout;\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(later, wait);\n\t\tif (callNow) {\n\t\t\tresult = func.apply(context, args);\n\t\t}\n\t\treturn result;\n\t};\n}\n","import { AnimationFunction } from '@opten/animation/animation-function';\r\nimport { linearTween } from '@opten/animation/linear-tween';\r\nimport { scrollToOffset } from '../scroll-to-offset';\r\n\r\nexport function scrollToElement(\r\n\ttarget: Element,\r\n\tanimation: AnimationFunction = linearTween,\r\n\tduration = 300,\r\n\toffset = 0,\r\n\twrapper: HTMLElement | Window = window\r\n) {\r\n\tconst top =\r\n\t\twrapper !== window\r\n\t\t\t? (target as HTMLElement).offsetTop - (wrapper as HTMLElement).scrollTop\r\n\t\t\t: target.getBoundingClientRect().top;\r\n\r\n\treturn scrollToOffset(top, animation, duration, offset, wrapper);\r\n}\r\n","import { AnimationFunction } from '@opten/animation/animation-function';\r\nimport { linearTween } from '@opten/animation/linear-tween';\r\nimport { scrollToElement } from '../scroll-to-element';\r\n\r\nexport function scrollToId(\r\n\tid: string,\r\n\tanimationFunction: AnimationFunction = linearTween,\r\n\tduration = 300,\r\n\toffset = 0,\r\n\twrapper: HTMLElement | Window = window\r\n) {\r\n\treturn scrollToElement(\r\n\t\tdocument.getElementById(id),\r\n\t\tanimationFunction,\r\n\t\tduration,\r\n\t\toffset,\r\n\t\twrapper\r\n\t);\r\n}\r\n","import { AnimationFunction } from '@opten/animation/animation-function';\r\nimport { linearTween } from '@opten/animation/linear-tween';\r\nimport { scrollTo } from '../scroll-to';\r\n\r\nexport function scrollToOffset(\r\n\tdistance: number,\r\n\tanimationFunction: AnimationFunction = linearTween,\r\n\tduration = 300,\r\n\toffset = 0,\r\n\twrapper: HTMLElement | Window = window\r\n) {\r\n\tscrollTo(distance + offset, animationFunction, duration, wrapper);\r\n}\r\n","import { AnimationFunction } from '@opten/animation/animation-function';\r\nimport { getWindowScrollTop } from '@opten/dom/get-window-scroll-top';\r\n\r\nexport function scrollTo(\r\n\tdistance: number,\r\n\tanimationFunction: AnimationFunction = (t, b, c, d) => {\r\n\t\treturn (c * t) / d + b;\r\n\t},\r\n\tduration = 300,\r\n\twrapper: HTMLElement | Window = window\r\n) {\r\n\tlet start = getWindowScrollTop();\r\n\tlet timeStart: number;\r\n\tlet timeElapsed: number;\r\n\r\n\tif (wrapper instanceof HTMLElement) {\r\n\t\tstart = wrapper.scrollTop;\r\n\t}\r\n\r\n\trequestAnimationFrame.call(window, (time) => {\r\n\t\ttimeStart = time;\r\n\t\tloop(time);\r\n\t});\r\n\r\n\tfunction loop(time) {\r\n\t\ttimeElapsed = time - timeStart;\r\n\r\n\t\tif (wrapper instanceof Window) {\r\n\t\t\twrapper.scrollTo(\r\n\t\t\t\t0,\r\n\t\t\t\tanimationFunction(timeElapsed, start, distance, duration)\r\n\t\t\t);\r\n\r\n\t\t\tif (timeElapsed < duration) {\r\n\t\t\t\trequestAnimationFrame.call(window, loop);\r\n\t\t\t} else {\r\n\t\t\t\twrapper.scrollTo(0, start + distance);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\twrapper.scrollTop = animationFunction(\r\n\t\t\t\ttimeElapsed,\r\n\t\t\t\tstart,\r\n\t\t\t\tdistance,\r\n\t\t\t\tduration\r\n\t\t\t);\r\n\r\n\t\t\tif (timeElapsed < duration) {\r\n\t\t\t\trequestAnimationFrame.call(window, loop);\r\n\t\t\t} else {\r\n\t\t\t\twrapper.scrollTop = start + distance;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import { newGuid } from '@opten/common/new-guid';\nimport { addClass } from '@opten/dom/add-class';\nimport { removeClass } from '@opten/dom/remove-class';\nimport { createNode } from '@opten/dom/create-node';\nimport { KEYCODES } from '@opten/keycodes';\nimport {\n\toverlay,\n\tOverlay,\n\tOverlayOptions,\n\tConnectedPositionStrategy,\n\tOverlayPositionBuilder,\n\tOriginConnectionPosition,\n\tOverlayConnectionPosition,\n} from '../overlay';\nimport { parseCssUnit } from '@opten/number/parse-css-unit';\nimport { getCss } from '@opten/dom/get-css';\nimport { RepositionScrollStrategy } from '../overlay/scroll/reposition-scroll-strategy';\n\n/**\n * The following style constants are necessary to save here in order\n * to properly calculate the alignment of the selected option over\n * the trigger element.\n */\n\nexport class SelectOptions {\n\tclasses: {\n\t\tcomponent: string;\n\t\tactive: string;\n\t\thighlighted: string;\n\t\tdisabled: string;\n\t\ticonHtml?: string;\n\t};\n}\n\nexport class Option {\n\tconstructor(private element: HTMLOptionElement) {\n\t\t// this properties are cached\n\t\tthis.text = (this.element.textContent || '').trim();\n\t\tthis.disabled = this.element.disabled;\n\t}\n\n\tget disabled() {\n\t\treturn this._disabled;\n\t}\n\tset disabled(value: boolean) {\n\t\tthis._disabled = value;\n\t}\n\tprivate _disabled: boolean;\n\n\tget text() {\n\t\treturn this._text;\n\t}\n\tset text(value: string) {\n\t\tthis._text = value;\n\t}\n\tprivate _text: string;\n\n\tget value() {\n\t\t// don't cache value, might change!\n\t\treturn (this.element.value || '').trim();\n\t}\n}\n\nexport class Select {\n\tprivate overlayRef: Overlay;\n\tprivate position: ConnectedPositionStrategy;\n\n\tprivate select: HTMLElement;\n\tprivate options: Option[];\n\tprivate selectedIndex: number;\n\tprivate activeIndex: number;\n\tprivate uuid: string;\n\n\tprivate triggerElement: HTMLElement;\n\tprivate triggerRect: ClientRect;\n\tprivate optionElements: HTMLElement[];\n\n\tpublic name: string;\n\tpublic htmlSelectElement: HTMLSelectElement;\n\n\tget value() {\n\t\t// don't cache value, might change!\n\t\treturn (this.htmlSelectElement.value || '').trim();\n\t}\n\n\tprivate config: SelectOptions = {\n\t\tclasses: {\n\t\t\tcomponent: 'c-select',\n\t\t\tactive: 'is-active',\n\t\t\thighlighted: 'is-highlighted',\n\t\t\tdisabled: 'is-disabled',\n\t\t},\n\t};\n\n\t/** The scroll position of the overlay panel, calculated to center the selected option. */\n\tprivate scrollTop = 0;\n\n\t/**\n\t * The y-offset of the overlay panel in relation to the trigger's top start corner.\n\t * This must be adjusted to align the selected option text over the trigger text.\n\t * when the panel opens. Will change based on the y-position of the selected option.\n\t */\n\tprivate offsetY = 0;\n\n\t/**\n\t * This position config ensures that the top \"start\" corner of the overlay\n\t * is aligned with with the top \"start\" of the origin by default (overlapping\n\t * the trigger completely). If the panel cannot fit below the trigger, it\n\t * will fall back to a position above the trigger.\n\t */\n\tprivate positions = [\n\t\t{\n\t\t\toriginX: 'start',\n\t\t\toriginY: 'top',\n\t\t\toverlayX: 'start',\n\t\t\toverlayY: 'top',\n\t\t},\n\t\t{\n\t\t\toriginX: 'start',\n\t\t\toriginY: 'bottom',\n\t\t\toverlayX: 'start',\n\t\t\toverlayY: 'bottom',\n\t\t},\n\t];\n\n\t/** Whether or not the overlay panel is open. */\n\tprivate panelOpen = false;\n\n\tprivate panelHTML: string;\n\n\tconstructor(\n\t\tprivate selectElement: HTMLSelectElement,\n\t\toptions?: SelectOptions\n\t) {\n\t\tthis.name = this.selectElement.name;\n\t\tthis.htmlSelectElement = this.selectElement;\n\n\t\tthis.config = { ...this.config, ...options };\n\n\t\tthis.selectedIndex = this._getSelectedIndex();\n\n\t\tthis.activeIndex = !this.selectedIndex ? 0 : this.selectedIndex;\n\n\t\tthis.uuid = newGuid();\n\n\t\tthis._init();\n\t}\n\n\topen(): void {\n\t\t// todo: implement disabled?\n\t\tif (\n\t\t\t/*this.disabled ||*/ !this.options ||\n\t\t\t!this.options.length ||\n\t\t\tthis.panelOpen\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.triggerRect = this.triggerElement.getBoundingClientRect();\n\n\t\tthis.panelOpen = true;\n\t\tthis._createOverlay().open();\n\n\t\tthis._calculateOverlayPosition();\n\t\tthis._highlightCorrectOption();\n\t\tthis._scrollActiveOptionIntoView();\n\t}\n\n\tclose(): void {\n\t\tif (this.panelOpen) {\n\t\t\tthis.overlayRef.close();\n\n\t\t\t// todo: gets called twice?\n\t\t\t// todo: correct? forward events\n\t\t\tthis._shouldForward('blur');\n\t\t}\n\t}\n\n\ttoggle(): void {\n\t\tthis.panelOpen ? this.close() : this.open();\n\t}\n\n\tprivate _init() {\n\t\t// todo: set arias like Angular Material\n\t\tthis.options = Array.from(this.selectElement.children).map(\n\t\t\t(option: HTMLOptionElement) => new Option(option)\n\t\t);\n\n\t\tthis.selectElement.tabIndex = -1;\n\t\tthis.selectElement.setAttribute('aria-hidden', 'true');\n\t\tthis.selectElement.setAttribute('data-select', this.uuid);\n\t\tthis.selectElement.insertAdjacentHTML('afterend', this._render());\n\t\tthis.selectElement.addEventListener('focus', () => {\n\t\t\tthis.select.focus();\n\t\t\tthis.open();\n\t\t});\n\n\t\tthis.select = document.getElementById(this.uuid);\n\t\tthis.select.tabIndex = 0;\n\t\tthis.select.className += ' ' + this.selectElement.className;\n\n\t\tthis.triggerElement = this.select.getElementsByClassName(\n\t\t\t`${this.config.classes.component}__trigger`\n\t\t)[0] as HTMLElement;\n\n\t\tthis.triggerElement.addEventListener('click', (event) => {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tthis.toggle();\n\t\t});\n\n\t\tthis.select.addEventListener('keydown', (event: KeyboardEvent) =>\n\t\t\tthis._handleKeydown(event)\n\t\t);\n\n\t\tthis.selectElement.addEventListener('change', () =>\n\t\t\tthis._emit(this.options[this.selectElement.selectedIndex], false)\n\t\t);\n\t}\n\n\tprivate _handleActiveIndex(event: KeyboardEvent) {\n\t\tconst delta = event.keyCode === KEYCODES.UP ? -1 : 1;\n\n\t\tif (this.activeIndex + delta <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.activeIndex + delta >= this.options.length) {\n\t\t\treturn;\n\t\t}\n\n\t\t// continue to move up/down the list until it finds an item that is not disabled\n\t\tfor (let i = 1; i <= this.options.length; i++) {\n\t\t\tconst index =\n\t\t\t\t(this.activeIndex + delta * i + this.options.length) %\n\t\t\t\tthis.options.length;\n\t\t\tconst item = this.options[index];\n\n\t\t\tif (!item.disabled) {\n\t\t\t\tthis._updateActiveItem(index);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _updateActiveItem(index: number) {\n\t\tthis.activeIndex = index;\n\t}\n\n\tprivate _handleKeydown(event: KeyboardEvent) {\n\t\tswitch (event.keyCode) {\n\t\t\tcase KEYCODES.SPACE:\n\t\t\t\tthis.toggle();\n\t\t\t\tbreak;\n\t\t\tcase KEYCODES.DOWN:\n\t\t\tcase KEYCODES.UP:\n\t\t\t\tthis._handleActiveIndex(event);\n\n\t\t\t\t// todo: something like subscribe on selectedIndex change\n\t\t\t\t// so we can call this method there\n\t\t\t\tif (this.panelOpen) {\n\t\t\t\t\tthis._highlightCorrectOption();\n\t\t\t\t\tthis._scrollActiveOptionIntoView();\n\t\t\t\t} else {\n\t\t\t\t\tthis._emit(this.options[this.activeIndex]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase KEYCODES.ESCAPE:\n\t\t\t\tif (this.panelOpen) {\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase KEYCODES.ENTER:\n\t\t\t\tif (!this.panelOpen) {\n\t\t\t\t\tthis.toggle();\n\t\t\t\t} else {\n\t\t\t\t\tthis._emit(this.options[this.activeIndex]);\n\n\t\t\t\t\t// todo: something like subscribe on activeIndex change\n\t\t\t\t\t// so we can call this method there\n\t\t\t\t\tthis._highlightCorrectOption();\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t}\n\n\t/**\n\t * This method creates the overlay from the provided select's template and saves its\n\t * OverlayRef so that it can be attached to the DOM when open is called.\n\t */\n\tprivate _createOverlay(): Overlay {\n\t\tif (!this.overlayRef) {\n\t\t\tthis.overlayRef = overlay(\n\t\t\t\tcreateNode(this.panelHTML),\n\t\t\t\tthis._getOverlayOptions()\n\t\t\t);\n\n\t\t\tthis.overlayRef.backdropClick = () => this.close();\n\n\t\t\tthis.overlayRef.afterOpened = () => this._onPanelDone();\n\n\t\t\tthis.overlayRef.afterClosed = () => this.overlayRef.dispose();\n\n\t\t\tthis.overlayRef.onAttached = () => {\n\t\t\t\tthis.overlayRef.portalElement.style.transformOrigin = 'top'; // set initial origin\n\t\t\t\tthis._calculateOverlayOffsetX();\n\t\t\t\tthis.overlayRef.portalElement.scrollTop = this.scrollTop;\n\t\t\t};\n\n\t\t\t// todo: better way? we need that here because of the RepositionScrollStrategy\n\t\t\tthis.overlayRef.onDetached = () => (this.panelOpen = false);\n\n\t\t\tthis.optionElements = Array.from(\n\t\t\t\tthis.overlayRef.portalElement.getElementsByClassName(\n\t\t\t\t\t`${this.config.classes.component}__panel__option`\n\t\t\t\t)\n\t\t\t) as HTMLElement[];\n\n\t\t\tthis.optionElements.forEach((option, index) => {\n\t\t\t\toption.addEventListener('click', () => {\n\t\t\t\t\tconst option = this.options[index];\n\n\t\t\t\t\tif (option.disabled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._emit(option);\n\n\t\t\t\t\t// todo: something like subscribe on selectedIndex change\n\t\t\t\t\t// so we can call this method there\n\t\t\t\t\tthis._highlightCorrectOption();\n\t\t\t\t\tthis.close();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this.overlayRef;\n\t}\n\n\tprivate _getOverlayOptions(): OverlayOptions {\n\t\treturn new OverlayOptions({\n\t\t\tscrollStrategy: new RepositionScrollStrategy(),\n\t\t\tpositionStrategy: this.position = this._createPositionStrategy(),\n\t\t\tbackdropClassName: 'c-overlay-transparent-backdrop',\n\t\t\thasBackdrop: true,\n\t\t});\n\t}\n\n\tprivate _createPositionStrategy(): ConnectedPositionStrategy {\n\t\tconst primaryPosition = this.positions[0];\n\t\tconst originPoint = {\n\t\t\toriginX: primaryPosition.originX,\n\t\t\toriginY: primaryPosition.originY,\n\t\t} as OriginConnectionPosition;\n\t\tconst overlayPoint = {\n\t\t\toverlayX: primaryPosition.overlayX,\n\t\t\toverlayY: primaryPosition.overlayY,\n\t\t} as OverlayConnectionPosition;\n\n\t\t// todo: like angular material this.overlayRef.position()?\n\t\tconst strategy = new OverlayPositionBuilder()\n\t\t\t.connectedTo(this.triggerElement, originPoint, overlayPoint)\n\t\t\t.withOffsetX(0)\n\t\t\t.withOffsetY(this.offsetY);\n\n\t\tfor (let i = 1; i < this.positions.length; i++) {\n\t\t\tstrategy.withFallbackPosition(\n\t\t\t\t{\n\t\t\t\t\toriginX: this.positions[i].originX,\n\t\t\t\t\toriginY: this.positions[i].originY,\n\t\t\t\t} as OriginConnectionPosition,\n\t\t\t\t{\n\t\t\t\t\toverlayX: this.positions[i].overlayX,\n\t\t\t\t\toverlayY: this.positions[i].overlayY,\n\t\t\t\t} as OverlayConnectionPosition\n\t\t\t);\n\t\t}\n\n\t\treturn strategy;\n\t}\n\n\tprivate _emit(option: Option, shouldForwardEvent: boolean = true) {\n\t\tconst newValue = option.value;\n\t\tconst newLabel = option.text;\n\n\t\tthis.triggerElement.getElementsByClassName(\n\t\t\t`${this.config.classes.component}__trigger__value-text`\n\t\t)[0].textContent = newLabel;\n\t\tthis.triggerElement.setAttribute('data-value', newValue);\n\n\t\tthis.selectElement.value = newValue;\n\t\tthis.selectedIndex = this._getOptionIndex(option);\n\t\tthis.activeIndex = this.selectedIndex;\n\t\tthis.selectElement.selectedIndex = this.selectedIndex;\n\n\t\tif (shouldForwardEvent) {\n\t\t\tthis._shouldForward('change');\n\t\t}\n\t}\n\n\tprivate _render(): string {\n\t\tconst options = this.options.reduce((value, option, index) => {\n\t\t\treturn `${value}
\n ${option.text}\n
`;\n\t\t}, '');\n\n\t\tconst arrowHtml =\n\t\t\tthis.config.classes.iconHtml !== undefined &&\n\t\t\tthis.config.classes.iconHtml !== null &&\n\t\t\tthis.config.classes.iconHtml.length > 0\n\t\t\t\t? this.config.classes.iconHtml\n\t\t\t\t: ``;\n\n\t\tconst trigger = this.options\n\t\t\t.filter((option, index) => {\n\t\t\t\treturn index === this.selectedIndex;\n\t\t\t})\n\t\t\t.reduce((value, option) => {\n\t\t\t\treturn `${value}
\n \n \n ${option.text}\n \n \n ${arrowHtml}\n
`;\n\t\t\t}, '');\n\n\t\tthis.panelHTML = `
${options}
`;\n\n\t\treturn `
${trigger}
`;\n\t}\n\n\t/** Gets the index of the provided option in the option list. */\n\tprivate _getOptionIndex(option: Option): number | undefined {\n\t\treturn this.options.reduce(\n\t\t\t(result: number, current: Option, index: number) => {\n\t\t\t\treturn result === undefined\n\t\t\t\t\t? option === current\n\t\t\t\t\t\t? index\n\t\t\t\t\t\t: undefined\n\t\t\t\t\t: result;\n\t\t\t},\n\t\t\tundefined\n\t\t);\n\t}\n\n\t/** Scrolls the active option into view. */\n\tprivate _scrollActiveOptionIntoView(): void {\n\t\tconst itemHeight = this._getItemHeight();\n\t\tconst activeOptionIndex = this.activeIndex || 0;\n\t\tconst scrollOffset = activeOptionIndex * itemHeight;\n\t\tconst panelTop = this.overlayRef.portalElement.scrollTop;\n\t\tconst maxHeight = this._getPanelMaxHeight();\n\n\t\tif (scrollOffset < panelTop) {\n\t\t\tthis.overlayRef.portalElement.scrollTop = scrollOffset;\n\t\t} else if (scrollOffset + itemHeight > panelTop + maxHeight) {\n\t\t\tthis.overlayRef.portalElement.scrollTop = Math.max(\n\t\t\t\t0,\n\t\t\t\tscrollOffset - maxHeight + itemHeight\n\t\t\t);\n\t\t}\n\t}\n\n\t/** Calculates the scroll position and x- and y-offsets of the overlay panel. */\n\tprivate _calculateOverlayPosition(): void {\n\t\tconst itemHeight = this._getItemHeight();\n\t\tconst items = this.options.length;\n\t\tconst panelHeight = Math.min(items * itemHeight, this._getPanelMaxHeight());\n\t\tconst scrollContainerHeight = items * itemHeight;\n\n\t\t// The farthest the panel can be scrolled before it hits the bottom\n\t\tconst maxScroll = scrollContainerHeight - panelHeight;\n\n\t\t// If no value is selected we open the popup to the first item.\n\t\tconst selectedOptionOffset = this.selectedIndex!;\n\n\t\t// We must maintain a scroll buffer so the selected option will be scrolled to the\n\t\t// center of the overlay panel rather than the top.\n\t\tconst scrollBuffer = panelHeight / 2;\n\t\tthis.scrollTop = this._calculateOverlayScroll(\n\t\t\tselectedOptionOffset,\n\t\t\tscrollBuffer,\n\t\t\tmaxScroll\n\t\t);\n\t\tthis.offsetY = this._calculateOverlayOffsetY(\n\t\t\tselectedOptionOffset,\n\t\t\tscrollBuffer,\n\t\t\tmaxScroll\n\t\t);\n\n\t\tthis._checkOverlayWithinViewport(maxScroll);\n\t\tthis.position.withOffsetY(this.offsetY);\n\t}\n\n\t/**\n\t * Checks that the attempted overlay position will fit within the viewport.\n\t * If it will not fit, tries to adjust the scroll position and the associated\n\t * y-offset so the panel can open fully on-screen. If it still won't fit,\n\t * sets the offset back to 0 to allow the fallback position to take over.\n\t */\n\tprivate _checkOverlayWithinViewport(maxScroll: number): void {\n\t\tconst itemHeight = this._getItemHeight();\n\t\tconst maxHeight = this._getPanelMaxHeight();\n\t\tconst viewportSize = {\n\t\t\twidth: window.innerWidth,\n\t\t\theight: window.innerHeight,\n\t\t};\n\t\tconst paddingWidth = this._getPanelToViewportPadding();\n\n\t\tconst topSpaceAvailable = this.triggerRect.top - paddingWidth;\n\t\tconst bottomSpaceAvailable =\n\t\t\tviewportSize.height - this.triggerRect.bottom - paddingWidth;\n\n\t\tconst panelHeightTop = Math.abs(this.offsetY);\n\t\tconst totalPanelHeight = Math.min(\n\t\t\tthis.options.length * itemHeight,\n\t\t\tmaxHeight\n\t\t);\n\t\tconst panelHeightBottom =\n\t\t\ttotalPanelHeight - panelHeightTop - this.triggerRect.height;\n\n\t\tif (panelHeightBottom > bottomSpaceAvailable) {\n\t\t\tthis._adjustPanelUp(panelHeightBottom, bottomSpaceAvailable);\n\t\t} else if (panelHeightTop > topSpaceAvailable) {\n\t\t\tthis._adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll);\n\t\t} else {\n\t\t\tthis.overlayRef.portalElement.style.transformOrigin = this._getOriginBasedOnOption();\n\t\t}\n\t}\n\n\t/** Adjusts the overlay panel up to fit in the viewport. */\n\tprivate _adjustPanelUp(\n\t\tpanelHeightBottom: number,\n\t\tbottomSpaceAvailable: number\n\t) {\n\t\t// Browsers ignore fractional scroll offsets, so we need to round.\n\t\tconst distanceBelowViewport = Math.round(\n\t\t\tpanelHeightBottom - bottomSpaceAvailable\n\t\t);\n\n\t\t// Scrolls the panel up by the distance it was extending past the boundary, then\n\t\t// adjusts the offset by that amount to move the panel up into the viewport.\n\t\tthis.scrollTop -= distanceBelowViewport;\n\t\tthis.offsetY -= distanceBelowViewport;\n\t\tthis.overlayRef.portalElement.style.transformOrigin = this._getOriginBasedOnOption();\n\n\t\t// If the panel is scrolled to the very top, it won't be able to fit the panel\n\t\t// by scrolling, so set the offset to 0 to allow the fallback position to take\n\t\t// effect.\n\t\tif (this.triggerRect.top + this.scrollTop <= 0) {\n\t\t\tthis.scrollTop = 0;\n\t\t\tthis.offsetY = 0;\n\t\t\tthis.overlayRef.portalElement.style.transformOrigin = '50% bottom 0px';\n\t\t}\n\t}\n\n\t/** Adjusts the overlay panel down to fit in the viewport. */\n\tprivate _adjustPanelDown(\n\t\tpanelHeightTop: number,\n\t\ttopSpaceAvailable: number,\n\t\tmaxScroll: number\n\t) {\n\t\t// Browsers ignore fractional scroll offsets, so we need to round.\n\t\tconst distanceAboveViewport = Math.round(\n\t\t\tpanelHeightTop - topSpaceAvailable\n\t\t);\n\n\t\t// Scrolls the panel down by the distance it was extending past the boundary, then\n\t\t// adjusts the offset by that amount to move the panel down into the viewport.\n\t\tthis.scrollTop += distanceAboveViewport;\n\t\tthis.offsetY += distanceAboveViewport;\n\t\tthis.overlayRef.portalElement.style.transformOrigin = this._getOriginBasedOnOption();\n\n\t\t// If the panel is scrolled to the very bottom, it won't be able to fit the\n\t\t// panel by scrolling, so set the offset to 0 to allow the fallback position\n\t\t// to take effect.\n\t\tif (this.triggerRect.top + this.scrollTop >= maxScroll) {\n\t\t\tthis.scrollTop = maxScroll;\n\t\t\tthis.offsetY = 0;\n\t\t\tthis.overlayRef.portalElement.style.transformOrigin = '50% top 0px';\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/** Sets the transform origin point based on the selected option. */\n\tprivate _getOriginBasedOnOption(): string {\n\t\tconst itemHeight = this._getItemHeight();\n\t\tconst optionHeightAdjustment = (itemHeight - this.triggerRect.height) / 2;\n\t\tconst originY =\n\t\t\tMath.abs(this.offsetY) - optionHeightAdjustment + itemHeight / 2;\n\t\treturn `50% ${originY}px 0px`;\n\t}\n\n\t/**\n\t * Calculates the scroll position of the select's overlay panel.\n\t *\n\t * Attempts to center the selected option in the panel. If the option is\n\t * too high or too low in the panel to be scrolled to the center, it clamps the\n\t * scroll position to the min or max scroll positions respectively.\n\t */\n\tprivate _calculateOverlayScroll(\n\t\tselectedIndex: number,\n\t\tscrollBuffer: number,\n\t\tmaxScroll: number\n\t): number {\n\t\tconst itemHeight = this._getItemHeight();\n\t\tconst optionOffsetFromScrollTop = itemHeight * selectedIndex;\n\t\tconst halfOptionHeight = itemHeight / 2;\n\n\t\t// Starts at the optionOffsetFromScrollTop, which scrolls the option to the top of the\n\t\t// scroll container, then subtracts the scroll buffer to scroll the option down to\n\t\t// the center of the overlay panel. Half the option height must be re-added to the\n\t\t// scrollTop so the option is centered based on its middle, not its top edge.\n\t\tconst optimalScrollPosition =\n\t\t\toptionOffsetFromScrollTop - scrollBuffer + halfOptionHeight;\n\t\treturn Math.min(Math.max(0, optimalScrollPosition), maxScroll);\n\t}\n\n\t/**\n\t * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.\n\t * This must be adjusted to align the selected option text over the trigger text when\n\t * the panel opens. Will change based on LTR or RTL text direction. Note that the offset\n\t * can't be calculated until the panel has been attached, because we need to know the\n\t * content width in order to constrain the panel within the viewport.\n\t */\n\tprivate _calculateOverlayOffsetX(): void {\n\t\tconst overlayRect = this.overlayRef.overlayElement.getBoundingClientRect();\n\t\tconst viewportSize = {\n\t\t\twidth: window.innerWidth,\n\t\t\theight: window.innerHeight,\n\t\t};\n\t\tconst paddingWidth = this._getPanelToViewportPadding();\n\t\tlet offsetX = 0;\n\n\t\t// todo: multiple\n\t\t// Adjust the offset, depending on the option padding.\n\t\t// offsetX = this.selectedIndex ? padding.panel * 2 : padding.panel;\n\n\t\t// Invert the offset in LTR.\n\t\toffsetX *= -1;\n\n\t\t// Determine how much the select overflows on each side.\n\t\tconst leftOverflow = 0 - (overlayRect.left + offsetX);\n\t\tconst rightOverflow =\n\t\t\toverlayRect.right +\n\t\t\toffsetX -\n\t\t\tviewportSize.width; /* +\n padding.panel * 2*/\n\n\t\t// If the element overflows on either side, reduce the offset to allow it to fit.\n\t\tif (leftOverflow > 0) {\n\t\t\toffsetX += leftOverflow + paddingWidth;\n\t\t} else if (rightOverflow > 0) {\n\t\t\toffsetX -= rightOverflow + paddingWidth;\n\t\t}\n\n\t\t// Set the offset directly\n\t\tthis.position.withOffsetX(offsetX);\n\t\tthis.overlayRef.updatePosition();\n\t}\n\n\t/**\n\t * Calculates the y-offset of the select's overlay panel in relation to the\n\t * top start corner of the trigger. It has to be adjusted in order for the\n\t * selected option to be aligned over the trigger when the panel opens.\n\t */\n\tprivate _calculateOverlayOffsetY(\n\t\tselectedIndex: number,\n\t\tscrollBuffer: number,\n\t\tmaxScroll: number\n\t): number {\n\t\tconst itemHeight = this._getItemHeight();\n\t\tconst optionHeightAdjustment = (itemHeight - this.triggerRect.height) / 2;\n\t\tconst maxHeight = this._getPanelMaxHeight();\n\t\tconst maxOptionsDisplayed = Math.floor(maxHeight / itemHeight);\n\t\tconst items = this.options.length;\n\t\tlet optionOffsetFromPanelTop: number;\n\n\t\tif (this.scrollTop === 0) {\n\t\t\toptionOffsetFromPanelTop = selectedIndex * itemHeight;\n\t\t} else if (this.scrollTop === maxScroll) {\n\t\t\tconst firstDisplayedIndex = items - maxOptionsDisplayed;\n\t\t\tconst selectedDisplayIndex = selectedIndex - firstDisplayedIndex;\n\n\t\t\t// The first item is partially out of the viewport. Therefore we need to calculate what\n\t\t\t// portion of it is shown in the viewport and account for it in our offset.\n\t\t\tconst partialItemHeight =\n\t\t\t\titemHeight - ((items * itemHeight - maxHeight) % itemHeight);\n\n\t\t\t// Because the panel height is longer than the height of the options alone,\n\t\t\t// there is always extra padding at the top or bottom of the panel. When\n\t\t\t// scrolled to the very bottom, this padding is at the top of the panel and\n\t\t\t// must be added to the offset.\n\t\t\toptionOffsetFromPanelTop =\n\t\t\t\tselectedDisplayIndex * itemHeight + partialItemHeight;\n\t\t} else {\n\t\t\t// If the option was scrolled to the middle of the panel using a scroll buffer,\n\t\t\t// its offset will be the scroll buffer minus the half height that was added to\n\t\t\t// center it.\n\t\t\toptionOffsetFromPanelTop = scrollBuffer - itemHeight / 2;\n\t\t}\n\n\t\t// The final offset is the option's offset from the top, adjusted for the height\n\t\t// difference, multiplied by -1 to ensure that the overlay moves in the correct\n\t\t// direction up the page.\n\t\treturn optionOffsetFromPanelTop * -1 - optionHeightAdjustment;\n\t}\n\n\tprivate _highlightCorrectOption() {\n\t\tthis.optionElements.forEach((option) => {\n\t\t\tremoveClass(option, this.config.classes.active);\n\t\t\tremoveClass(option, this.config.classes.highlighted);\n\t\t});\n\n\t\taddClass(\n\t\t\tthis.optionElements[this.selectedIndex],\n\t\t\tthis.config.classes.active\n\t\t);\n\n\t\tif (this.selectedIndex !== this.activeIndex) {\n\t\t\taddClass(\n\t\t\t\tthis.optionElements[this.activeIndex],\n\t\t\t\tthis.config.classes.highlighted\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate _getPanelToViewportPadding() {\n\t\tconst option = this.optionElements[0]!;\n\n\t\t// todo: cache?\n\t\tconst padding = parseCssUnit(getCss(option, 'padding-left'));\n\n\t\treturn Math.round(padding / 2);\n\t}\n\n\tprivate _getPanelMaxHeight(): number {\n\t\t// todo: cache?\n\t\treturn parseCssUnit(getCss(this.overlayRef.portalElement!, 'max-height'));\n\t}\n\n\tprivate _getItemHeight(): number {\n\t\treturn this.optionElements[0]!.offsetHeight!;\n\t}\n\n\t/**\n\t * When the panel element is finished transforming in (though not fading in), it\n\t * emits an event and focuses an option if the panel is open.\n\t */\n\tprivate _onPanelDone(): void {\n\t\tif (this.panelOpen) {\n\t\t\tthis.scrollTop = 0;\n\t\t} else {\n\t\t\tthis.position.withOffsetX(0);\n\t\t}\n\t}\n\n\t/**\n\t * Forward events to the