{"version":3,"file":"Scripts/main.js","mappings":"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,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,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,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,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,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,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,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,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,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,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,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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","sources":["webpack://opten.zeller/./app/components/anchor.ts","webpack://opten.zeller/./app/components/cookie-consent.ts","webpack://opten.zeller/./app/components/cross-selling/cross-selling.ts","webpack://opten.zeller/./app/components/dialog.ts","webpack://opten.zeller/./app/components/filtermixitup.ts","webpack://opten.zeller/./app/components/filterpage.ts","webpack://opten.zeller/./app/components/header.ts","webpack://opten.zeller/./app/components/highlight-bottom.ts","webpack://opten.zeller/./app/components/highlight-teaser.ts","webpack://opten.zeller/./app/components/hin-login.ts","webpack://opten.zeller/./app/components/input-fields-filled.ts","webpack://opten.zeller/./app/components/login.ts","webpack://opten.zeller/./app/components/map-extended/map-extended.ts","webpack://opten.zeller/./app/components/mega-dropdown.ts","webpack://opten.zeller/./app/components/navbar/index.ts","webpack://opten.zeller/./app/components/navbar/navbar-mega-dropdown.ts","webpack://opten.zeller/./app/components/navbar/navbar-toggler.ts","webpack://opten.zeller/./app/components/navbar/navbar.ts","webpack://opten.zeller/./app/components/product-disclaimer.ts","webpack://opten.zeller/./app/components/product-map/index.ts","webpack://opten.zeller/./app/components/search/index.ts","webpack://opten.zeller/./app/components/search/search-autocomplete.ts","webpack://opten.zeller/./app/components/search/search-toggler.ts","webpack://opten.zeller/./app/components/search/search.ts","webpack://opten.zeller/./app/components/selftest-valued-poitbased.ts","webpack://opten.zeller/./app/components/slider.ts","webpack://opten.zeller/./app/components/text-image-slider.ts","webpack://opten.zeller/./app/utilities/cookie.ts","webpack://opten.zeller/./app/utilities/detection.ts","webpack://opten.zeller/./app/utilities/scroll-helper.ts","webpack://opten.zeller/../node_modules/fast-deep-equal/index.js","webpack://opten.zeller/../src/index.ts","webpack://opten.zeller/../node_modules/tslib/tslib.es6.js","webpack://opten.zeller/../src/cluster.ts","webpack://opten.zeller/../src/algorithms/utils.ts","webpack://opten.zeller/../src/algorithms/core.ts","webpack://opten.zeller/../src/algorithms/grid.ts","webpack://opten.zeller/../src/algorithms/noop.ts","webpack://opten.zeller/../src/algorithms/supercluster.ts","webpack://opten.zeller/../src/renderer.ts","webpack://opten.zeller/../src/markerclusterer.ts","webpack://opten.zeller/../src/overlay-view-safe.ts","webpack://opten.zeller/./node_modules/@opten/animation/ease-in-out-quad/index.js","webpack://opten.zeller/./node_modules/@opten/animation/linear-tween/index.js","webpack://opten.zeller/./node_modules/@opten/breadcrumb/index.js","webpack://opten.zeller/./node_modules/@opten/collapse/initializer/index.js","webpack://opten.zeller/./node_modules/@opten/common/new-guid/index.js","webpack://opten.zeller/./node_modules/@opten/compiler/factory/index.js","webpack://opten.zeller/./node_modules/@opten/compiler/index.js","webpack://opten.zeller/./node_modules/@opten/compiler/metadata/component.js","webpack://opten.zeller/./node_modules/@opten/compiler/metadata/di.js","webpack://opten.zeller/./node_modules/@opten/compiler/reflector/index.js","webpack://opten.zeller/./node_modules/@opten/compiler/resolver/index.js","webpack://opten.zeller/./node_modules/@opten/compiler/util/decorators.js","webpack://opten.zeller/./node_modules/@opten/compiler/util/factories.js","webpack://opten.zeller/./node_modules/@opten/compiler/util/type.js","webpack://opten.zeller/./node_modules/@opten/cross-selling/box/index.js","webpack://opten.zeller/./node_modules/@opten/cross-selling/component/index.js","webpack://opten.zeller/./node_modules/@opten/cross-selling/helpers/index.js","webpack://opten.zeller/./node_modules/@opten/cross-selling/index.js","webpack://opten.zeller/./node_modules/@opten/dialog/dialog.js","webpack://opten.zeller/./node_modules/@opten/dialog/index.js","webpack://opten.zeller/./node_modules/@opten/dom/add-class/index.js","webpack://opten.zeller/./node_modules/@opten/dom/as-html-element/index.js","webpack://opten.zeller/./node_modules/@opten/dom/change-class/index.js","webpack://opten.zeller/./node_modules/@opten/dom/class-regex/index.js","webpack://opten.zeller/./node_modules/@opten/dom/create-node/index.js","webpack://opten.zeller/./node_modules/@opten/dom/first-by-class/index.js","webpack://opten.zeller/./node_modules/@opten/dom/get-class/index.js","webpack://opten.zeller/./node_modules/@opten/dom/get-css/index.js","webpack://opten.zeller/./node_modules/@opten/dom/get-offset/index.js","webpack://opten.zeller/./node_modules/@opten/dom/get-parent-with-class/index.js","webpack://opten.zeller/./node_modules/@opten/dom/get-parents-or-self/index.js","webpack://opten.zeller/./node_modules/@opten/dom/get-parents/index.js","webpack://opten.zeller/./node_modules/@opten/dom/get-selector-element-from-element/index.js","webpack://opten.zeller/./node_modules/@opten/dom/get-selector-from-element/index.js","webpack://opten.zeller/./node_modules/@opten/dom/get-siblings/index.js","webpack://opten.zeller/./node_modules/@opten/dom/get-styles/index.js","webpack://opten.zeller/./node_modules/@opten/dom/get-window-scroll-top/index.js","webpack://opten.zeller/./node_modules/@opten/dom/has-class/index.js","webpack://opten.zeller/./node_modules/@opten/dom/is-ancestor-of-class/index.js","webpack://opten.zeller/./node_modules/@opten/dom/is-html-element/index.js","webpack://opten.zeller/./node_modules/@opten/dom/remove-class/index.js","webpack://opten.zeller/./node_modules/@opten/dom/toggle-class/index.js","webpack://opten.zeller/./node_modules/@opten/events/dispatch-custom-event/index.js","webpack://opten.zeller/./node_modules/@opten/events/event-namespace-factory/index.js","webpack://opten.zeller/./node_modules/@opten/keycodes/index.js","webpack://opten.zeller/./node_modules/@opten/menu/component.js","webpack://opten.zeller/./node_modules/@opten/menu/index.js","webpack://opten.zeller/./node_modules/@opten/menu/menu-trigger.js","webpack://opten.zeller/./node_modules/@opten/menu/menu.js","webpack://opten.zeller/./node_modules/@opten/number/parse-css-unit/index.js","webpack://opten.zeller/./node_modules/@opten/overlay/index.js","webpack://opten.zeller/./node_modules/@opten/overlay/keyboard/overlay-keyboard-dispatcher.js","webpack://opten.zeller/./node_modules/@opten/overlay/overlay-options.js","webpack://opten.zeller/./node_modules/@opten/overlay/overlay.js","webpack://opten.zeller/./node_modules/@opten/overlay/position/connected-position-strategy.js","webpack://opten.zeller/./node_modules/@opten/overlay/position/connected-position.js","webpack://opten.zeller/./node_modules/@opten/overlay/position/global-position-strategy.js","webpack://opten.zeller/./node_modules/@opten/overlay/position/overlay-position-builder.js","webpack://opten.zeller/./node_modules/@opten/overlay/scroll/reposition-scroll-strategy.js","webpack://opten.zeller/./node_modules/@opten/player/index.ts","webpack://opten.zeller/./node_modules/@opten/row-element-equal-height/index.ts","webpack://opten.zeller/./node_modules/@opten/scroll/scroll-to-offset/index.js","webpack://opten.zeller/./node_modules/@opten/scroll/scroll-to/index.js","webpack://opten.zeller/./node_modules/@opten/select/index.js","webpack://opten.zeller/./node_modules/@opten/slider/arrows-responsive-behavior/index.ts","webpack://opten.zeller/./node_modules/@opten/slider/as-nav-for-behavior/index.ts","webpack://opten.zeller/./node_modules/@opten/slider/collapse-slider-behavior/index.ts","webpack://opten.zeller/./node_modules/@opten/slider/dots-responsive-behavior/index.ts","webpack://opten.zeller/./node_modules/@opten/slider/index.ts","webpack://opten.zeller/./node_modules/@opten/slider/lory.js","webpack://opten.zeller/./node_modules/@opten/sticky/stick-to-parent.ts","webpack://opten.zeller/./node_modules/@opten/svg/svg-to-inline/index.ts","webpack://opten.zeller/./node_modules/@opten/transition/add-transition-end-listener/index.js","webpack://opten.zeller/./node_modules/@opten/transition/get-transition-end-event-name/index.js","webpack://opten.zeller/./node_modules/@opten/viewport/is-element-clipped-by-scrolling/index.js","webpack://opten.zeller/./node_modules/@opten/viewport/is-element-scrolled-outside-view/index.js","webpack://opten.zeller/./node_modules/fast-deep-equal/index.js","webpack://opten.zeller/./node_modules/kdbush/src/index.js","webpack://opten.zeller/./node_modules/kdbush/src/range.js","webpack://opten.zeller/./node_modules/kdbush/src/sort.js","webpack://opten.zeller/./node_modules/kdbush/src/within.js","webpack://opten.zeller/./node_modules/supercluster/index.js","webpack://opten.zeller/./app/main.scss","webpack://opten.zeller/webpack/bootstrap","webpack://opten.zeller/webpack/runtime/define property getters","webpack://opten.zeller/webpack/runtime/hasOwnProperty shorthand","webpack://opten.zeller/webpack/runtime/make namespace object","webpack://opten.zeller/webpack/runtime/node module decorator","webpack://opten.zeller/./app/main.ts"],"sourcesContent":["import { Component } from '@opten/compiler/metadata/component';\r\nimport { OnInit } from '@opten/compiler/metadata/lifecycle';\r\nimport getOffset from '@opten/dom/get-offset';\r\nimport collapse from '@opten/collapse/initializer';\r\nimport getSelectorElementFromElement from '@opten/dom/get-selector-element-from-element';\r\nimport getCss from '@opten/dom/get-css';\r\nimport parseCssUnit from '@opten/number/parse-css-unit';\r\nimport { getStickyOffset } from '../utilities/scroll-helper';\r\nimport hasClass from '@opten/dom/has-class';\r\n\r\n// todo: way to bind it do data-anchor?\r\n@Component({ className: 'js-anchor' })\r\nexport class Anchor implements OnInit {\r\n private _cookieConsent: HTMLElement;\r\n\r\n\r\n constructor(private element: HTMLElement) {\r\n this._cookieConsent = document.getElementsByClassName(\r\n 'js-cookie-consent'\r\n )[0] as HTMLElement;\r\n // check if we have a cookie consent (animation)\r\n if (this._cookieConsent) {\r\n // wait till cookie has animated\r\n this._cookieConsent.addEventListener(\r\n 'shown.zeller.cookie-consent',\r\n this._handleCookieConsent\r\n );\r\n }\r\n }\r\n\r\n onInit() {\r\n this._check();\r\n window.addEventListener('hashchange', () => this._check());\r\n window.addEventListener('popstate', () => this._check());\r\n\r\n }\r\n\r\n private _check() {\r\n if (this._canScroll()) {\r\n\r\n /*if (this._cookieConsent) {// check if we have a cookie consent (animation)\r\n // wait till cookie has animated\r\n this._cookieConsent.addEventListener(\r\n 'shown.zeller.cookie-consent',\r\n this._handleCookieConsent\r\n );\r\n } else {*/ \r\n // otherwise just scroll to the element\r\n var sidebarPanel = document.getElementById('c-sidebar-panel');\r\n if(sidebarPanel && hasClass(sidebarPanel, '--collapsed') == false){\r\n var closeElement = Array.from(document.getElementsByClassName('js-sidebar-close')) as Array;\r\n if(closeElement){\r\n closeElement[0].click();\r\n setTimeout(()=>{\r\n this._scroll();\r\n },650);\r\n }\r\n }\r\n else{\r\n this._scroll();\r\n }\r\n /*}*/\r\n }\r\n }\r\n\r\n private _canScroll(): boolean {\r\n const hash = window.location.hash;\r\n\r\n return hash && hash.indexOf('#anchor-') !== -1;\r\n }\r\n\r\n private getElement(): HTMLElement {\r\n if (this._canScroll()) {\r\n return this.element.querySelector(\r\n `[data-anchor='${window.location.hash.substring(1)}']`\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _scroll() {\r\n const element = this.getElement();\r\n\r\n if (element) {\r\n // check if it's an accordion element, so we can open it\r\n if (element.getAttribute('data-toggle') === 'collapse') {\r\n const target = getSelectorElementFromElement(\r\n element,\r\n 'data-target',\r\n true\r\n );\r\n\r\n if (target) {\r\n const api = collapse(target);\r\n\r\n // check if the collapse is already open\r\n // because then the shown event might not be triggered!\r\n if (api.isOpen()) {\r\n this._animate();\r\n } else {\r\n target.addEventListener(\r\n 'shown.opten.collapse',\r\n this._handleCollapse\r\n );\r\n\r\n api.show();\r\n }\r\n } else {\r\n // fallback\r\n this._animate();\r\n }\r\n } else {\r\n // otherwise just scroll to the element...\r\n this._animate();\r\n }\r\n }\r\n }\r\n\r\n private _animate() {\r\n const element = this.getElement();\r\n\r\n if (element) {\r\n let offset = getOffset(element).top();\r\n\r\n offset += parseCssUnit(getCss(element, 'margin-top')) * -1;\r\n offset += getStickyOffset() * -1;\r\n\r\n offset = Math.round(offset);\r\n\r\n window.scrollTo(0, offset);\r\n }\r\n }\r\n\r\n private _handleCollapse = () => {\r\n this._animate();\r\n\r\n this._cookieConsent.removeEventListener(\r\n 'shown.opten.collapse',\r\n this._handleCollapse\r\n );\r\n }\r\n\r\n private _handleCookieConsent = () => {\r\n this._scroll();\r\n\r\n this._cookieConsent.removeEventListener(\r\n 'shown.zeller.cookie-consent',\r\n this._handleCookieConsent\r\n );\r\n }\r\n}\r\n","import parseCssUnit from '@opten/number/parse-css-unit';\r\nimport getCss from '@opten/dom/get-css';\r\nimport addClass from '@opten/dom/add-class';\r\nimport animation from '@opten/animation/ease-in-out-quad';\r\nimport eventNamespaceFactory from '@opten/events/event-namespace-factory';\r\nimport { setCookie } from '../utilities/cookie';\r\n\r\nexport class CookieConsentOptions {\r\n className?: string;\r\n approveClassName?: string;\r\n showAfter: number;\r\n animationDuration?: number;\r\n // closeClassName?: string;\r\n cookie: {\r\n expirationInDays?: number;\r\n domain?: string;\r\n path?: string;\r\n secure?: boolean;\r\n };\r\n}\r\n\r\n// todo: Global in @opten/typescript?\r\nexport class CookieConsent {\r\n private _options: CookieConsentOptions = {\r\n className: 'js-cookie-consent',\r\n approveClassName: 'js-cookie-consent-approve',\r\n showAfter: 600,\r\n animationDuration: 350,\r\n // closeClassName: 'js-cookie-consent-close',\r\n cookie: {\r\n expirationInDays: 356,\r\n secure: false\r\n }\r\n };\r\n\r\n private _cookieKey: string;\r\n private _height: number;\r\n private _attributeName: string = 'data-cookie-consent';\r\n\r\n // prevent multiple resizings to add more height\r\n // if it's the same height as before!\r\n private _cachedHeight: number | null = null;\r\n\r\n private _boundResize = this._handleResize.bind(this);\r\n\r\n private _eventNamespaceFn = eventNamespaceFactory('zeller.cookie-consent');\r\n\r\n constructor(\r\n private _stickyElements: Array,\r\n options: CookieConsentOptions\r\n ) {\r\n this._options = { ...this._options, ...options };\r\n\r\n if (this._options.showAfter) {\r\n setTimeout(() => this._init(), this._options.showAfter);\r\n } else {\r\n this._init();\r\n }\r\n }\r\n\r\n private _init() {\r\n const banner = this._getBanner();\r\n\r\n if (banner) {\r\n this._cookieKey = banner.getAttribute('data-cookie-key');\r\n\r\n if (this._cookieKey) {\r\n Array.from(\r\n document.getElementsByClassName(\r\n this._options.approveClassName\r\n )\r\n ).forEach(button =>\r\n button.addEventListener('click', event =>\r\n this._handleClick(event, true)\r\n )\r\n );\r\n\r\n this._eventNamespaceFn(banner, 'show');\r\n\r\n this._animate(\r\n banner,\r\n 0,\r\n banner.offsetHeight,\r\n this._options.animationDuration,\r\n () => {\r\n this._handleResize();\r\n\r\n window.addEventListener('resize', this._boundResize);\r\n\r\n this._eventNamespaceFn(banner, 'shown');\r\n }\r\n );\r\n\r\n /*Array.from(\r\n document.getElementsByClassName(\r\n this._options.closeClassName\r\n )\r\n ).forEach(button =>\r\n button.addEventListener('click', event =>\r\n this._handleClick(event, false)\r\n )\r\n );*/\r\n\r\n /* addClass(banner, '--show');\r\n this._handleResize();\r\n window.addEventListener('resize', this._boundResize);*/\r\n }\r\n }\r\n }\r\n\r\n private _animate(\r\n banner: HTMLElement,\r\n start: number,\r\n distance: number,\r\n duration: number,\r\n complete: Function\r\n ) {\r\n if (banner) {\r\n // todo: function in @opten/events?\r\n let timeStart: number;\r\n let timeElapsed: number;\r\n\r\n const loop = time => {\r\n timeElapsed = time - timeStart;\r\n\r\n banner.style.height = `${animation(\r\n timeElapsed,\r\n start,\r\n distance,\r\n duration\r\n )}px`;\r\n\r\n // todo: encapsulate?\r\n this._handleResize();\r\n\r\n if (timeElapsed < duration) {\r\n requestAnimationFrame.call(window, loop);\r\n } else {\r\n banner.style.height = null;\r\n complete();\r\n }\r\n };\r\n\r\n requestAnimationFrame.call(window, time => {\r\n timeStart = time;\r\n // todo: encapsulate?\r\n addClass(banner, '--show');\r\n loop(time);\r\n });\r\n }\r\n }\r\n\r\n private _getBanner(): HTMLElement {\r\n return document.getElementsByClassName(\r\n this._options.className\r\n )[0] as HTMLElement;\r\n }\r\n\r\n private _update(banner?: HTMLElement) {\r\n if (banner) {\r\n this._setSticky(document.body, 'margin-top', false);\r\n this._setElements(false);\r\n } else {\r\n this._setSticky(document.body, 'margin-top', true);\r\n this._setElements(true);\r\n }\r\n }\r\n\r\n private _setElements(remove: boolean) {\r\n if (this._stickyElements) {\r\n this._stickyElements.forEach(sticky =>\r\n this._setSticky(sticky, 'top', remove)\r\n );\r\n }\r\n }\r\n\r\n private _setSticky(sticky: HTMLElement, style: string, remove: boolean) {\r\n const attributeName = `${this._attributeName}-${style}`;\r\n\r\n if (!remove) {\r\n const calculated = parseCssUnit(getCss(sticky, style));\r\n sticky.setAttribute(attributeName, calculated.toString());\r\n sticky.style[style] = `${calculated + this._height}px`;\r\n } else if (sticky.hasAttribute(attributeName)) {\r\n const calculated = Number(sticky.getAttribute(attributeName));\r\n\r\n if (calculated && calculated > 0) {\r\n sticky.style[style] = `${calculated}px`;\r\n } else {\r\n sticky.style[style] = null;\r\n }\r\n\r\n sticky.removeAttribute(attributeName);\r\n }\r\n }\r\n\r\n private _handleClick(event: Event, setCookie: boolean) {\r\n event.preventDefault();\r\n\r\n if (setCookie) {\r\n this._setCookie();\r\n }\r\n\r\n const banner = this._getBanner();\r\n\r\n if (banner) {\r\n this._eventNamespaceFn(banner, 'hide');\r\n\r\n // todo: animation?\r\n // todo: kill events?\r\n banner.parentElement.removeChild(banner);\r\n\r\n this._eventNamespaceFn(banner, 'hidden');\r\n\r\n // remove attributes, height, ...\r\n this._update();\r\n\r\n // kills events\r\n window.removeEventListener('resize', this._boundResize);\r\n }\r\n }\r\n\r\n private _setCookie(): void {\r\n if (!this._cookieKey) {\r\n throw new Error(\r\n `Cookie-Consent: Cannot set Cookie, no key defined!`\r\n );\r\n }\r\n\r\n const date = new Date();\r\n date.setDate(\r\n date.getDate() + (this._options.cookie.expirationInDays || 365)\r\n );\r\n\r\n setCookie(\r\n this._cookieKey,\r\n 'true',\r\n date,\r\n this._options.cookie.secure,\r\n this._options.cookie.path,\r\n this._options.cookie.domain\r\n );\r\n }\r\n\r\n private _handleResize() {\r\n const banner = this._getBanner();\r\n\r\n if (banner) {\r\n this._height = Math.round(banner.getBoundingClientRect().height);\r\n\r\n if (this._cachedHeight !== this._height) {\r\n this._setSticky(document.body, 'margin-top', true);\r\n this._setElements(true);\r\n\r\n this._cachedHeight = this._height;\r\n this._update(banner);\r\n\r\n this._eventNamespaceFn(banner, 'resize');\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default function cookieConsent(\r\n stickyElements: Array,\r\n options: CookieConsentOptions\r\n): CookieConsent {\r\n return new CookieConsent(stickyElements, options);\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport parseCssUnit from '@opten/number/parse-css-unit';\r\nimport getCss from '@opten/dom/get-css';\r\n\r\nimport { PAD_WIDTH } from '../../utilities/detection';\r\nimport { getStickyOffset } from '../../utilities/scroll-helper';\r\n\r\nimport crossSelling from '@opten/cross-selling';\r\nimport hasClass from '@opten/dom/has-class';\r\n\r\n@Component({ className: 'js-cross-selling' })\r\nexport default class CrossSelling {\r\n constructor(private element: HTMLElement) {\r\n let gutterBottom = 0;\r\n gutterBottom += 32;//parseCssUnit(getCss(element, 'margin-top'));\r\n gutterBottom += parseCssUnit(getCss(element, 'margin-bottom'));\r\n\r\n crossSelling(element, {\r\n offsetTop: hasClass(element,'--with-offset-top') ? getStickyOffset() : 0,\r\n gutterTop: 0,//getStickyOffset(),\r\n gutterBottom: Math.round(gutterBottom),\r\n breakpoints: {\r\n maxWidth: PAD_WIDTH\r\n }\r\n });\r\n }\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { PAD_WIDTH } from '../utilities/detection';\r\nimport { dialog } from '@opten/dialog';\r\n\r\n@Component({ className: 'js-dialog' })\r\nexport default class Dialog {\r\n // todo: better way?\r\n private _api: any;\r\n\r\n constructor(private element: HTMLElement) {\r\n this._api = dialog(element, {\r\n maxWidth: PAD_WIDTH\r\n });\r\n }\r\n\r\n toggle() {\r\n // todo: better way?\r\n this._api._toggle();\r\n }\r\n}\r\n","export class FilterMixitupOptions {\r\n\tclassNames: {\r\n block?:string;\r\n elementContainer?:string;\r\n elementFilter?:string;\r\n elementSort?:string;\r\n elementMultimix?:string;\r\n elementToggle?:string;\r\n modifierActive?: string;\r\n modifierDisabled?: string;\r\n modifierFailed?: string;\r\n delineatorElement?: string;\r\n delineatorModifier?: string;\r\n };\r\n\tload: {\r\n filter?: string;\r\n sort?:string;\r\n };\r\n selectors: {\r\n filter?: string;\r\n mixElement?: string;\r\n };\r\n animation: {\r\n enable?: boolean;\r\n effects?: string;\r\n effectsIn?: string;\r\n effectsOut?: string;\r\n duration?: number;\r\n easing?: string;\r\n applyPerspective?: boolean;\r\n perspectiveDistance?: string;\r\n perspectiveOrigin?: string;\r\n queue?: boolean;\r\n queueLimit?: number;\r\n animateResizeContainer?: boolean;\r\n animateResizeTargets?: boolean;\r\n staggerSequence?: Function;\r\n reverseOut?: boolean;\r\n nudge?: boolean;\r\n clampHeight?: boolean;\r\n clampWidth?: boolean;\r\n };\r\n}\r\n\r\ndeclare var mixitup;\r\n\r\nexport class FilterMixitup {\r\n\tprivate _wrapperElement: HTMLElement;\r\n\tprivate _filters: HTMLElement[];\r\n private _mixer: any;\r\n private _options: FilterMixitupOptions = {\r\n classNames: {\r\n block:'filter__mixitup',\r\n elementContainer:'filter__container',\r\n elementFilter:'filter__element',\r\n elementSort:'filter__element',\r\n elementMultimix:'filter__element',\r\n elementToggle:'filter__element',\r\n modifierActive: 'active',\r\n modifierDisabled: 'disabled',\r\n modifierFailed: 'failed',\r\n delineatorElement: '__',\r\n delineatorModifier: '--'\r\n },\r\n load:{\r\n filter:'all',\r\n sort:'default:asc'\r\n },\r\n selectors: {\r\n mixElement: '.js-filter__mixitup__element',\r\n filter: '.js-filter__mixitup__filter__element',\r\n },\r\n animation: {\r\n enable: true,\r\n effects: 'fade scale',\r\n effectsIn: '',\r\n effectsOut: '',\r\n duration: 600,\r\n easing: 'ease',\r\n applyPerspective: true,\r\n perspectiveDistance: '3000px',\r\n perspectiveOrigin: '50% 50%',\r\n queue: true,\r\n queueLimit: 3,\r\n animateResizeContainer: true,\r\n animateResizeTargets: false,\r\n staggerSequence: null,\r\n reverseOut: false,\r\n nudge: true,\r\n clampHeight: true,\r\n clampWidth: true\r\n }\r\n\t};\r\n\r\n constructor(private wrapper: HTMLElement, options?: FilterMixitupOptions) {\r\n this._wrapperElement = wrapper;\r\n this._options = { ...this._options, ...options };\r\n\t\tthis.init();\r\n }\r\n\r\n private init() {\r\n\t\tthis._filters = Array.from(this._wrapperElement.querySelectorAll(this._options.selectors.filter)) as HTMLElement[];\r\n this._mixer = mixitup(this._wrapperElement, {\r\n classNames: {\r\n block:this._options.classNames.block,\r\n elementContainer:this._options.classNames.elementContainer,\r\n elementFilter:this._options.classNames.elementFilter,\r\n elementSort:this._options.classNames.elementSort,\r\n elementMultimix:this._options.classNames.elementMultimix,\r\n elementToggle:this._options.classNames.elementToggle,\r\n modifierActive: this._options.classNames.modifierActive,\r\n modifierDisabled: this._options.classNames.modifierDisabled,\r\n modifierFailed: this._options.classNames.modifierFailed,\r\n delineatorElement: this._options.classNames.delineatorElement,\r\n delineatorModifier: this._options.classNames.delineatorModifier\r\n },\r\n\t\t\tselectors: {\r\n\t\t\t\ttarget: this._options.selectors.mixElement,\r\n\t\t\t\tcontrol: this._options.selectors.filter\r\n\t\t\t},\r\n\t\t\tload: {\r\n filter: this._options.load.filter,\r\n sort: this._options.load.sort\r\n\t\t\t},\r\n\t\t\tanimation: {\r\n\t\t\t\tenable: this._options.animation.enable,\r\n effects: this._options.animation.effects,\r\n effectsIn: this._options.animation.effectsIn,\r\n effectsOut: this._options.animation.effectsOut,\r\n\t\t\t\tduration: this._options.animation.duration,\r\n easing: this._options.animation.easing,\r\n applyPerspective: this._options.animation.applyPerspective,\r\n\t\t\t\tperspectiveDistance: this._options.animation.perspectiveDistance,\r\n\t\t\t\tperspectiveOrigin:this._options.animation.perspectiveOrigin,\r\n\t\t\t\tqueue:this._options.animation.queue,\r\n\t\t\t\tqueueLimit:this._options.animation.queueLimit,\r\n\t\t\t\tanimateResizeContainer: this._options.animation.animateResizeContainer,\r\n\t\t\t\tanimateResizeTargets:this._options.animation.animateResizeTargets,\r\n\t\t\t\tstaggerSequence:this._options.animation.staggerSequence,\r\n reverseOut:this._options.animation.reverseOut,\r\n nudge: this._options.animation.nudge,\r\n clampHeight: this._options.animation.clampHeight,\r\n clampWidth: this._options.animation.clampWidth\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this._filters){\r\n\t\t\tthis._filters.forEach(filter => filter.tagName === 'SELECT' ? filter.addEventListener('change',() => this.onChangeSelect(filter)) : null);\r\n\t\t}\r\n\t}\r\n\t\r\n\tprivate onChangeSelect(select: Element) {\r\n\t\tthis._mixer.filter(this.updateSelectTag(select));\r\n\t}\r\n\t\r\n\tprivate updateSelectTag(select: Element): string {\r\n\t\tvar filter = '';\r\n const selectMenu = select;\r\n const selectedIndex = selectMenu.selectedIndex;\r\n const selectedTag = selectMenu.options[selectedIndex];\r\n if (selectedTag != null) {\r\n filter = selectedTag.getAttribute('data-filter');\r\n\t\t}\r\n\t\treturn filter;\r\n }\r\n}\r\n\r\nexport default function filtermixitup(\r\n wrapper: HTMLElement,\r\n options?: FilterMixitupOptions\r\n): FilterMixitup {\r\n return new FilterMixitup(wrapper, options);\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\nimport {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 selectors: {\r\n content: string;\r\n selects: string;\r\n selectTag: string;\r\n tag: string;\r\n dropdown: string;\r\n dropdownToggle: string;\r\n tagsDropdown: string;\r\n searchText: string;\r\n searchButton: string;\r\n tagAll: string;\r\n tagAllActive: string;\r\n tagActive: string;\r\n resetAllActiveTagsElements: string;\r\n };\r\n paging: {\r\n pageBack: string;\r\n pageNext: string;\r\n pageJump: string;\r\n pageJumpAttribute: string;\r\n pagingSize: string;\r\n };\r\n loading: {\r\n contentLoading: string;\r\n contentYScroll: number;\r\n };\r\n classes: {\r\n active: string;\r\n hidden: string;\r\n };\r\n\r\n contentLocation: string;\r\n wrapperId: string;\r\n searchValueText: string;\r\n tagValue: string;\r\n}\r\n\r\nexport class FilterPage {\r\n private wrapperElement: HTMLElement;\r\n private wrapperId: string;\r\n private contentElement: HTMLElement;\r\n private contentLocation: string;\r\n private tags: Array;\r\n private filters: Array;\r\n private activeTags: Array;\r\n private selects: Array;\r\n private searchTextInput: HTMLInputElement;\r\n private searchTextButton: HTMLElement;\r\n private resetAllActiveTagsElements: Array;\r\n private allTags: Array;\r\n private pagingSize: number = 15;\r\n private page: number = 1;\r\n private language: string = 'de-CH';\r\n\r\n private _options: FilterPageOptions = {\r\n selectors: {\r\n content: 'js-filter__page__content',\r\n selects: 'js-filter__select',\r\n selectTag: 'js-filter__select__tag',\r\n tag: 'js-filter__tag',\r\n dropdown: 'js-filter__dropdown',\r\n dropdownToggle: 'js-filter__dropdown-toggle',\r\n tagsDropdown: 'js-filter-tags-dropdown',\r\n searchText: 'js-filter__search-text',\r\n searchButton: 'js-filter__search-button',\r\n tagAll: 'js-filter__tag-all',\r\n tagAllActive: 'js-filter__tag-all--active',\r\n tagActive: 'js-filter__tag-active',\r\n resetAllActiveTagsElements: 'js-filter__reset-all'\r\n },\r\n paging: {\r\n pageBack: 'js-filter__page-back',\r\n pageNext: 'js-filter__page-next',\r\n pageJump: 'js-filter__page-jump',\r\n pageJumpAttribute: 'data-value',\r\n pagingSize: 'data-paging-size'\r\n },\r\n loading: {\r\n contentLoading:\r\n '
',\r\n contentYScroll: 0\r\n },\r\n classes: {\r\n active: '--active',\r\n hidden: '--hidden'\r\n },\r\n contentLocation: 'data-location',\r\n wrapperId: 'data-id',\r\n searchValueText: 'search_text',\r\n tagValue: 'data-value'\r\n };\r\n\r\n constructor(private wrapper: HTMLElement, options?: FilterPageOptions) {\r\n this.wrapperElement = wrapper;\r\n this._options = { ...this._options, ...options };\r\n var dataLanguage = document.body.getAttribute('data-language-long');\r\n if(dataLanguage && dataLanguage.length > 0){\r\n this.language = dataLanguage;\r\n }\r\n\r\n this.init();\r\n\r\n window.addEventListener('hashchange', () => this.filter());\r\n\r\n this.filter();\r\n }\r\n\r\n private init() {\r\n this.wrapperId = this.wrapperElement.getAttribute(this._options.wrapperId);\r\n this.pagingSize = Number(\r\n this.wrapperElement.getAttribute(this._options.paging.pagingSize)\r\n );\r\n this.contentLocation = this.wrapperElement.getAttribute(\r\n this._options.contentLocation\r\n );\r\n this.contentElement = this.wrapperElement.getElementsByClassName(\r\n this._options.selectors.content\r\n )[0];\r\n this.selects = Array.from(\r\n this.wrapperElement.getElementsByClassName(\r\n this._options.selectors.selects\r\n )\r\n );\r\n this.tags = Array.from(\r\n this.wrapperElement.getElementsByClassName(\r\n this._options.selectors.tag\r\n )\r\n );\r\n this.searchTextInput = this.wrapperElement.getElementsByClassName(\r\n this._options.selectors.searchText\r\n )[0];\r\n this.allTags = Array.from(\r\n this.wrapperElement.getElementsByClassName(\r\n this._options.selectors.tagAll\r\n )\r\n );\r\n this.resetAllActiveTagsElements = Array.from(\r\n this.wrapperElement.getElementsByClassName(\r\n this._options.selectors.resetAllActiveTagsElements\r\n )\r\n );\r\n\r\n this.tags.forEach(tag => {\r\n if (!hasClass(tag, this._options.selectors.selectTag)) {\r\n tag.addEventListener('click', () => this.toggleTag(tag));\r\n }\r\n });\r\n\r\n if (this.searchTextInput != null) {\r\n this.searchTextButton = this.searchTextInput.parentElement.getElementsByClassName(\r\n this._options.selectors.searchButton\r\n )[0];\r\n\r\n this.searchTextInput.addEventListener('keypress', e => {\r\n const key = e.which || e.keyCode;\r\n if (key === 13) {\r\n // 13 is enter\r\n this.loadFilterElements();\r\n }\r\n });\r\n\r\n if (this.searchTextButton != null) {\r\n this.searchTextButton.addEventListener('click', () =>\r\n this.loadFilterElements()\r\n );\r\n }\r\n\r\n if (location.search.length > 0 && this.searchTextButton != null) {\r\n const searchValues = location.search.substring(1).split('=');\r\n for (const index in searchValues) {\r\n if (searchValues[index] === this._options.searchValueText) {\r\n let searchTextValue = searchValues[Number(index) + 1];\r\n if (\r\n searchTextValue !== null &&\r\n searchTextValue !== ''\r\n ) {\r\n searchTextValue = decodeURIComponent(\r\n searchTextValue\r\n );\r\n }\r\n this.searchTextInput.value = searchTextValue;\r\n break;\r\n }\r\n }\r\n const query = window.location.search.substring(1);\r\n\r\n // is there anything there ?\r\n if (query.length) {\r\n // are the new history methods available ?\r\n if (\r\n window.history !== undefined &&\r\n window.history.pushState !== undefined\r\n ) {\r\n // if pushstate exists, add a new state the the history, this changes the url without reloading the page\r\n window.history.pushState(\r\n {},\r\n document.title,\r\n window.location.pathname\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.selects && this.selects.length > 0) {\r\n this.selects.forEach(select => {\r\n select.addEventListener('change', this.onChange);\r\n });\r\n }\r\n\r\n if (this.allTags && this.allTags.length > 0) {\r\n this.allTags.forEach(allTag =>\r\n allTag.addEventListener('click', () =>\r\n this.allTagClick(\r\n getParentWithClass(\r\n allTag,\r\n 'js-filter-tags-dropdown'\r\n )\r\n )\r\n )\r\n );\r\n }\r\n\r\n if (\r\n this.resetAllActiveTagsElements &&\r\n this.resetAllActiveTagsElements.length > 0\r\n ) {\r\n this.resetAllActiveTagsElements.forEach(resetTags =>\r\n resetTags.addEventListener('click', () =>\r\n this.resetAllActiveTags()\r\n )\r\n );\r\n }\r\n }\r\n\r\n private onChange(event: Event) {\r\n this.updateSelectTag(event.target as HTMLSelectElement);\r\n }\r\n\r\n private initContentFilter() {\r\n const that = this;\r\n if (this.contentElement != null) {\r\n const newSelects = Array.from(\r\n this.contentElement.getElementsByClassName(\r\n this._options.selectors.selects\r\n )\r\n );\r\n const newTags = Array.from(\r\n this.contentElement.getElementsByClassName(\r\n this._options.selectors.tag\r\n )\r\n );\r\n\r\n if (newTags && newTags.length > 0) {\r\n newTags.forEach(tag => {\r\n if (!hasClass(tag, this._options.selectors.selectTag)) {\r\n tag.addEventListener('click', () =>\r\n this.toggleTag(tag)\r\n );\r\n }\r\n that.tags.push(tag);\r\n });\r\n }\r\n if (newSelects && newSelects.length > 0) {\r\n newSelects.forEach(select => {\r\n select.addEventListener('change', () =>\r\n this.updateSelectTag(select)\r\n );\r\n that.selects.push(select);\r\n });\r\n }\r\n }\r\n }\r\n\r\n private loadFilterElements(setPageDefault: boolean = true) {\r\n if (setPageDefault) {\r\n this.setPageToDefault();\r\n }\r\n const searchText =\r\n this.searchTextInput != null ? this.searchTextInput.value : '';\r\n const dataSearch =\r\n 'id=' +\r\n this.wrapperId +\r\n '&filter=' +\r\n this.getFilters() +\r\n '&pagingSize=' +\r\n this.pagingSize +\r\n '&page=' +\r\n this.page +\r\n '&searchText=' +\r\n searchText;\r\n\r\n this.contentElement.parentElement.style.overflow = 'hidden';\r\n this.contentElement.innerHTML = this._options.loading.contentLoading;\r\n\r\n fetch('/umbraco/surface/' + this.contentLocation, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n 'accept-language': this.language,\r\n // todo: why? if we change to a api controller we don't have this problem...\r\n 'X-Requested-With': 'XMLHttpRequest' // otherwise accept-language is ignored\r\n },\r\n body: dataSearch,\r\n credentials: 'include'\r\n })\r\n .then(response => {\r\n const contentType = response.headers.get('content-type');\r\n if (contentType && contentType.includes('text/html')) {\r\n return response.text();\r\n }\r\n })\r\n .then(data => {\r\n if (data != null && data.length > 0) {\r\n this.contentElement.parentElement.style.overflow = null;\r\n this.contentElement.innerHTML = data;\r\n this.setPreviousNextJumpPageEvents();\r\n this.initContentFilter();\r\n this.reinitFilter();\r\n \r\n setTimeout( AOS.init({\r\n offset: 0,\r\n disable: function() { return isMobile(); }\r\n }),10)\r\n //picturefill();\r\n\r\n // todo: change here to other offsettop ? this.contentElement.offsetTop + this._options.loading.contentYScroll;\r\n //window.scrollTo(0, this.contentElement.offsetTop + this._options.loading.contentYScroll);\r\n }\r\n });\r\n }\r\n\r\n private loadPreviousPage(event: any) {\r\n event.preventDefault();\r\n this.page = this.page - 1 >= 1 ? this.page - 1 : 1;\r\n this.loadFilterElements(false);\r\n }\r\n\r\n private loadNextPage(event: any) {\r\n event.preventDefault();\r\n this.page = this.page + 1;\r\n this.loadFilterElements(false);\r\n }\r\n\r\n private loadJumpPage(event: any) {\r\n event.preventDefault();\r\n const element = event.target || event.currentTarget;\r\n this.page = Number(\r\n element.getAttribute(this._options.paging.pageJumpAttribute)\r\n );\r\n this.loadFilterElements(false);\r\n }\r\n\r\n private setPreviousNextJumpPageEvents() {\r\n const pageBack = Array.from(\r\n this.contentElement.getElementsByClassName(\r\n this._options.paging.pageBack\r\n )\r\n );\r\n const pageNext = Array.from(\r\n this.contentElement.getElementsByClassName(\r\n this._options.paging.pageNext\r\n )\r\n );\r\n\r\n const pageJump = Array.from(\r\n this.contentElement.getElementsByClassName(\r\n this._options.paging.pageJump\r\n )\r\n );\r\n\r\n if (pageBack.length > 0) {\r\n pageBack.forEach(pageStep =>\r\n pageStep.addEventListener('click', e =>\r\n this.loadPreviousPage(e)\r\n )\r\n );\r\n }\r\n if (pageNext.length > 0) {\r\n pageNext.forEach(pageStep =>\r\n pageStep.addEventListener('click', e => this.loadNextPage(e))\r\n );\r\n }\r\n\r\n if (pageJump.length > 0) {\r\n pageJump.forEach(pageStep =>\r\n pageStep.addEventListener('click', e => this.loadJumpPage(e))\r\n );\r\n }\r\n }\r\n\r\n private setPageToDefault() {\r\n this.page = 1;\r\n }\r\n\r\n private filter() {\r\n this.reinitFilter();\r\n this.loadFilterElements();\r\n }\r\n\r\n private reinitFilter() {\r\n this.activeTags = this.getTagsFromLocationHash();\r\n this.filters = [];\r\n this.setActiveTagsClasses();\r\n }\r\n\r\n private setActiveTagsClasses() {\r\n this.tags.forEach(tag => {\r\n const tagsDropdown = getParentWithClass(\r\n tag,\r\n this._options.selectors.tagsDropdown\r\n );\r\n if (tagsDropdown != null) {\r\n if (hasClass(tag, this._options.selectors.tagActive)) {\r\n addClass(tag.parentElement, this._options.classes.hidden);\r\n } else {\r\n removeClass(\r\n tag.parentElement,\r\n this._options.classes.hidden\r\n );\r\n }\r\n }\r\n\r\n if (this.isTagActive(tag)) {\r\n if (tagsDropdown != null) {\r\n this.deactivateAllTag(tagsDropdown);\r\n } else {\r\n addClass(tag, this._options.classes.active);\r\n if (this.isSelectOption(tag)) {\r\n (tag.parentElement).selectedIndex = (tag).index;\r\n }\r\n }\r\n this.addTagToFilters(tag);\r\n } else {\r\n if (tagsDropdown != null) {\r\n const allTagsActive = Array.from(\r\n tagsDropdown.getElementsByClassName(\r\n this._options.selectors.tag +\r\n ' ' +\r\n this._options.selectors.tagActive\r\n )\r\n ).filter(\r\n tag =>\r\n hasClass(\r\n tag.parentElement,\r\n this._options.classes.hidden\r\n ) !== true\r\n );\r\n if (allTagsActive.length === 0) {\r\n this.activateAllTag(tagsDropdown);\r\n }\r\n } else {\r\n removeClass(tag, this._options.classes.active);\r\n }\r\n this.removeTagFromFilters(tag);\r\n }\r\n });\r\n this.activeTags = this.filters;\r\n let newHash = this.getTagsLocationHash();\r\n \r\n if(newHash && newHash.length > 1){\r\n location.hash = newHash;\r\n }\r\n }\r\n\r\n private getTagsFromLocationHash(): Array {\r\n return location.hash\r\n .split('/')\r\n .filter(o => ['', '#'].indexOf(o) === -1);\r\n }\r\n\r\n private getTagsLocationHash(): string {\r\n return '/' + this.activeTags.join('/');\r\n }\r\n\r\n private toggleTag(tag: Element): void {\r\n const doActivateTag = !this.isTagActive(tag);\r\n const tagsDropdown = getParentWithClass(\r\n tag,\r\n this._options.selectors.tagsDropdown\r\n );\r\n if (tagsDropdown != null) {\r\n this.deactivateActiveTags(tagsDropdown);\r\n if (doActivateTag) {\r\n this.activateTag(tag);\r\n } else {\r\n this.deactivateTag(tag);\r\n }\r\n } else {\r\n if (doActivateTag) {\r\n this.activateActiveTag(tag);\r\n } else {\r\n this.deactivateActiveTag(tag);\r\n }\r\n }\r\n }\r\n\r\n private updateSelectTag(select: Element): void {\r\n const selectMenu = select;\r\n const selectedIndex = selectMenu.selectedIndex;\r\n const selectedTag = selectMenu.options[selectedIndex];\r\n this.deactivateActiveTags(select);\r\n if (selectedTag != null) {\r\n this.activateActiveTag(selectedTag);\r\n }\r\n }\r\n\r\n private resetAllActiveTags(): void {\r\n this.filters = [];\r\n location.hash = '';\r\n this.selects.forEach(select => {\r\n (select).selectedIndex = 0;\r\n });\r\n if(this.searchTextInput){\r\n this.searchTextInput.value = '';\r\n }\r\n this.loadFilterElements();\r\n }\r\n\r\n private isSelectOption(tag: Element): boolean {\r\n return this.selects.indexOf(tag.parentElement) > -1;\r\n }\r\n\r\n private activateActiveTag(tag: Element) {\r\n addClass(tag, this._options.classes.active);\r\n this.activateTag(tag);\r\n }\r\n\r\n private activateTag(tag: Element) {\r\n const tagValue = this.getTagValue(tag);\r\n if (tagValue.length > 0) {\r\n this.activeTags.push(tagValue);\r\n location.hash = this.getTagsLocationHash();\r\n }\r\n }\r\n\r\n private deactivateTag(tag: Element) {\r\n const tagValue = this.getTagValue(tag);\r\n if (tagValue.length > 0) {\r\n const tagValueIndex = this.getTagValueIndex(tagValue);\r\n if (tagValueIndex > -1) {\r\n this.activeTags.splice(tagValueIndex, 1);\r\n location.hash = this.getTagsLocationHash();\r\n }\r\n }\r\n }\r\n\r\n private deactivateActiveTags(tagsDropdown: Element): void {\r\n const allTagsActive = Array.from(\r\n tagsDropdown.getElementsByClassName(\r\n this._options.selectors.tag +\r\n ' ' +\r\n this._options.selectors.tagActive\r\n )\r\n ).filter(\r\n tag =>\r\n hasClass(tag.parentElement, this._options.classes.hidden) !==\r\n true\r\n );\r\n allTagsActive.forEach(tag => this.deactivateTag(tag));\r\n const tagsActive = Array.from(\r\n tagsDropdown.getElementsByClassName(\r\n this._options.selectors.tag + ' ' + this._options.classes.active\r\n )\r\n );\r\n tagsActive.forEach(tag => this.deactivateActiveTag(tag));\r\n }\r\n\r\n private deactivateActiveTag(tag: Element): void {\r\n removeClass(tag, this._options.classes.active);\r\n this.deactivateTag(tag);\r\n }\r\n\r\n private allTagClick(tagsDropdown: Element) {\r\n this.deactivateActiveTags(tagsDropdown);\r\n this.activateAllTag(tagsDropdown);\r\n }\r\n\r\n private activateAllTag(tagsDropdown: HTMLElement) {\r\n if (this.allTags != null && this.allTags.length) {\r\n const allTag = tagsDropdown.getElementsByClassName(\r\n this._options.selectors.tagAll\r\n )[0];\r\n const allTagActive = tagsDropdown.getElementsByClassName(\r\n this._options.selectors.tagAllActive\r\n )[0];\r\n const dropdownToggleBtn = getParentWithClass(\r\n tagsDropdown,\r\n this._options.selectors.dropdown\r\n ).getElementsByClassName(this._options.selectors.dropdownToggle)[0];\r\n const filterAll = this.getTagValue(allTag);\r\n\r\n if (filterAll !== 'undefined' && filterAll !== '') {\r\n this.addTagToFilters(allTag);\r\n }\r\n addClass(allTag.parentElement, this._options.classes.hidden);\r\n removeClass(\r\n allTagActive.parentElement,\r\n this._options.classes.hidden\r\n );\r\n removeClass(dropdownToggleBtn, this._options.classes.active);\r\n }\r\n }\r\n\r\n private deactivateAllTag(tagsDropdown: HTMLElement) {\r\n if (this.allTags != null && this.allTags.length) {\r\n const allTag = tagsDropdown.getElementsByClassName(\r\n this._options.selectors.tagAll\r\n )[0];\r\n const allTagActive = tagsDropdown.getElementsByClassName(\r\n this._options.selectors.tagAllActive\r\n )[0];\r\n const dropdownToggleBtn = getParentWithClass(\r\n tagsDropdown,\r\n this._options.selectors.dropdown\r\n ).getElementsByClassName(this._options.selectors.dropdownToggle)[0];\r\n const filterAll = this.getTagValue(allTag);\r\n\r\n if (filterAll !== 'undefined' && filterAll !== '') {\r\n this.removeTagFromFilters(allTag);\r\n }\r\n removeClass(allTag.parentElement, this._options.classes.hidden);\r\n addClass(allTagActive.parentElement, this._options.classes.hidden);\r\n addClass(dropdownToggleBtn, this._options.classes.active);\r\n }\r\n }\r\n\r\n private isTagActive(tag: Element): boolean {\r\n return this.getTagValueIndex(this.getTagValue(tag)) > -1;\r\n }\r\n\r\n private getTagValueIndex(tagValue: string): number {\r\n return this.activeTags.indexOf(tagValue);\r\n }\r\n\r\n private getTagValue(tag: Element): string {\r\n return tag.getAttribute(this._options.tagValue);\r\n }\r\n\r\n private getFilters(): string {\r\n return this.filters.toString();\r\n }\r\n\r\n private addTagToFilters(tag: Element) {\r\n const tagValue = this.getTagValue(tag);\r\n\r\n if (tagValue !== 'undefined' && tagValue !== '') {\r\n if (this.filters.indexOf(tagValue) < 0) {\r\n this.filters.push(tagValue);\r\n }\r\n }\r\n }\r\n private removeTagFromFilters(tag: Element) {\r\n const tagValue = this.getTagValue(tag);\r\n\r\n if (tagValue !== 'undefined' && tagValue !== '') {\r\n const indexFilter = this.filters.indexOf(tagValue);\r\n\r\n if (indexFilter > -1) {\r\n this.filters.splice(indexFilter, 1);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default function filterpage(\r\n wrapper: HTMLElement,\r\n options?: FilterPageOptions\r\n): FilterPage {\r\n return new FilterPage(wrapper, options);\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { OnInit } from '@opten/compiler/metadata/lifecycle';\r\nimport addClass from '@opten/dom/add-class';\r\nimport hasClass from '@opten/dom/has-class';\r\nimport removeClass from '@opten/dom/remove-class';\r\nimport getWindowScrollTop from '@opten/dom/get-window-scroll-top';\r\nimport parseCssUnit from '@opten/number/parse-css-unit';\r\nimport getCss from '@opten/dom/get-css';\r\n\r\n@Component({ className: 'js-header' })\r\nexport default class Header implements OnInit {\r\n private _height: number;\r\n private _paddingTop: number | null = null;\r\n\r\n // prevent multiple resizings to add more height\r\n // if it's the same height as before!\r\n private _cachedHeight: number | null = null;\r\n\r\n // if we don't have a tangram,\r\n // we always want to show the shadow!\r\n private _handleBoxShadow: boolean = true;\r\n\r\n constructor(private element: HTMLElement) {\r\n this._handleBoxShadow = !hasClass(element, '--shadow');\r\n }\r\n\r\n onInit() {\r\n addClass(this.element, '--sticky');\r\n\r\n this._handleScroll();\r\n window.addEventListener('scroll', () => this._handleScroll());\r\n\r\n this._handleResize();\r\n window.addEventListener('resize', () => this._handleResize());\r\n }\r\n\r\n private _update() {\r\n if (this._paddingTop == null) {\r\n this._paddingTop = parseCssUnit(getCss(document.body, 'padding-top'));\r\n }\r\n\r\n document.body.style.paddingTop = `${this._paddingTop + this._height}px`;\r\n }\r\n\r\n private _handleScroll() {\r\n if (this._handleBoxShadow) {\r\n if (getWindowScrollTop() >= this._height) {\r\n addClass(this.element, '--shadow');\r\n } else {\r\n removeClass(this.element, '--shadow');\r\n }\r\n }\r\n }\r\n\r\n private _handleResize() {\r\n this._height = Math.round(this.element.getBoundingClientRect().height);\r\n\r\n if (this._cachedHeight !== this._height) {\r\n this._cachedHeight = this._height;\r\n this._update();\r\n }\r\n }\r\n}\r\n","import addClass from \"@opten/dom/add-class\";\r\nimport getSelectorElementFromElement from \"@opten/dom/get-selector-element-from-element\";\r\nimport removeClass from \"@opten/dom/remove-class\";\r\n\r\nexport class HighlightBottomOptions {\r\n selectors?: {\r\n header: string;\r\n close: string;\r\n };\r\n classes?: {\r\n active: string;\r\n visible: string;\r\n slidedOut: string;\r\n };\r\n}\r\n\r\n\r\nexport class HighlightBottom {\r\n private _element: HTMLElement;\r\n private _closeElement: HTMLElement;\r\n private _headerElement: HTMLElement;\r\n private _eventListenerDestroy = event => {\r\n this._destroyElement();\r\n };\r\n private _options: HighlightBottomOptions = {\r\n selectors: {\r\n header: 'js-highlight-bottom__header',\r\n close: 'js-highlight-bottom__close'\r\n },\r\n classes: {\r\n active: 'is--active',\r\n visible: 'is--visible',\r\n slidedOut: 'is--slidedout'\r\n }\r\n };\r\n\r\n constructor(private element: HTMLElement, options?: HighlightBottomOptions) {\r\n this._element = element;\r\n this._options = { ...this._options, ...options };\r\n this._headerElement = this._element.getElementsByClassName(\r\n this._options.selectors.header\r\n )[0] as HTMLElement;\r\n this._closeElement = this._element.getElementsByClassName(\r\n this._options.selectors.close\r\n )[0] as HTMLElement;\r\n this._init();\r\n }\r\n\r\n private _init() {\r\n const content = getSelectorElementFromElement(\r\n this._headerElement,\r\n 'data-target',\r\n true\r\n );\r\n \r\n if (content) {\r\n content.addEventListener('show.opten.collapse', () => this._handleOpen());\r\n content.addEventListener('shown.opten.collapse', () => this._handleOpened());\r\n\r\n content.addEventListener('hide.opten.collapse', () => this._handleClose());\r\n content.addEventListener('hidden.opten.collapse', () => this._handleClosed());\r\n }\r\n this._initSlideInAfterDelay();\r\n\r\n }\r\n private _initSlideInAfterDelay(){\r\n if(this._element.hasAttribute('data-delay')){\r\n let delayTime = parseInt(this._element.getAttribute('data-delay'), 10);\r\n delayTime = delayTime > 0 ? delayTime : 3;\r\n setTimeout(() => this._handleSlideIn(), delayTime * 1000);\r\n }\r\n }\r\n private _handleSlideIn(){\r\n removeClass(this._element, this._options.classes.slidedOut);\r\n }\r\n private _handleOpen(){\r\n addClass(this._element, this._options.classes.visible);\r\n }\r\n private _handleOpened(){\r\n addClass(this._element, this._options.classes.active);\r\n this._closeElement.addEventListener('click', this._eventListenerDestroy);\r\n }\r\n private _handleClose(){\r\n removeClass(this._element, this._options.classes.active);\r\n removeClass(this._element, this._options.classes.visible);\r\n\r\n }\r\n private _handleClosed(){\r\n this._closeElement.removeEventListener('click', this._eventListenerDestroy);\r\n }\r\n\r\n\r\n private _destroyElement() {\r\n if(this._element != null){\r\n this._element.parentNode.removeChild(this._element);\r\n }\r\n }\r\n}\r\n\r\nexport function highlightBottom(\r\n wrapper: HTMLElement,\r\n options?: HighlightBottomOptions\r\n): HighlightBottom {\r\n return new HighlightBottom(wrapper, options);\r\n}\r\n","import addClass from '@opten/dom/add-class';\r\nimport hasClass from '@opten/dom/has-class';\r\nimport removeClass from '@opten/dom/remove-class';\r\nimport parseCssUnit from '@opten/number/parse-css-unit';\r\n\r\nexport class HighlightTeaserOptions {\r\n selectors?: {\r\n content: string;\r\n body: string;\r\n };\r\n classes?: {\r\n active: string;\r\n visible: string;\r\n };\r\n}\r\nexport class HighlightTeaser {\r\n\r\n private _element: HTMLElement;\r\n private _contentElement: HTMLElement;\r\n private _bodyElement: HTMLElement;\r\n\r\n private _scrolling = false;\r\n private _oldYScrollPosition = 0.0;\r\n private _yScrollPosition = 0.0;\r\n\r\n private _topPositionElement = 0.0;\r\n private _bottomPositionElement = 0.0;\r\n private _contentMinimumPosition = -100;\r\n private _contentMinimumPositionReached = false;\r\n private _contentAnimationArea = false;\r\n private _easeScrolling = 1.02;\r\n\r\n private _options: HighlightTeaserOptions = {\r\n selectors: {\r\n content: 'js-highlight-teaser__content',\r\n body: 'js-body'\r\n },\r\n classes: {\r\n active: 'c-highlight-teaser--is-active',\r\n visible: 'c-highlight-teaser--is-visible'\r\n }\r\n };\r\n _contentPosition: number;\r\n constructor(private element: HTMLElement, options?: HighlightTeaserOptions) {\r\n this._element = element;\r\n this._options = { ...this._options, ...options };\r\n this._contentElement = this._element.getElementsByClassName(\r\n this._options.selectors.content\r\n )[0] as HTMLElement;\r\n this._bodyElement = document.getElementsByClassName(\r\n this._options.selectors.body\r\n )[0] as HTMLElement;\r\n this._init();\r\n }\r\n private _init() {\r\n\r\n this._topPositionElement = this._element.getBoundingClientRect().top;\r\n this._bottomPositionElement = this.element.getBoundingClientRect().bottom;\r\n window.scrollTo(0, 0);\r\n\r\n\r\n window.addEventListener('scroll', () => {\r\n this._oldYScrollPosition = this._yScrollPosition;\r\n this._yScrollPosition = window.scrollY || window.pageYOffset;\r\n\r\n\r\n if (!this._scrolling) {\r\n window.requestAnimationFrame(() => {\r\n this._updateHighlightTeaser();\r\n this._scrolling = false;\r\n });\r\n\r\n this._scrolling = true;\r\n }\r\n });\r\n }\r\n\r\n private _updateHighlightTeaser() {\r\n const windowHeight = window.innerHeight;\r\n const windowHeightHalf = windowHeight / 2;\r\n const contentMaxPosition = windowHeight / 4;\r\n const bottomSpace = 50;\r\n if (this._yScrollPosition >= (this._topPositionElement + 15 - windowHeightHalf)) {\r\n if (hasClass(this._bodyElement, this._options.classes.visible)) {\r\n let yDeltaScrolled = this._yScrollPosition - this._oldYScrollPosition;\r\n const scollDirectionIsDown = yDeltaScrolled > 0;\r\n yDeltaScrolled = yDeltaScrolled * this._easeScrolling;\r\n const currentContentPosition = parseCssUnit(this._contentElement.style.marginTop);\r\n if (scollDirectionIsDown) { //scroll down\r\n this._contentAnimationArea = false;\r\n if (this._contentMinimumPositionReached && ((this._yScrollPosition + windowHeight) >= this._bottomPositionElement)) {\r\n if (hasClass(this._bodyElement, this._options.classes.active)) {\r\n removeClass(this._bodyElement, this._options.classes.active);\r\n }\r\n }\r\n else if (currentContentPosition > this._contentMinimumPosition) {\r\n let newContentPosition = currentContentPosition - yDeltaScrolled;\r\n newContentPosition = newContentPosition < this._contentMinimumPosition ? this._contentMinimumPosition : newContentPosition;\r\n newContentPosition = parseFloat(newContentPosition.toFixed(2));\r\n this._contentElement.style.marginTop = newContentPosition + 'px';\r\n\r\n if (newContentPosition === this._contentMinimumPosition) {\r\n this._bottomPositionElement = this.element.getBoundingClientRect().bottom;\r\n this._contentMinimumPositionReached = true;\r\n }\r\n }\r\n }\r\n else { //scroll up\r\n const diffBottom = this._contentElement.getBoundingClientRect().bottom - this._yScrollPosition;\r\n \r\n if(this._contentMinimumPositionReached && diffBottom <= bottomSpace && diffBottom >=0){\r\n if (hasClass(this._bodyElement, this._options.classes.active) === false) {\r\n addClass(this._bodyElement, this._options.classes.active);\r\n this._contentMinimumPositionReached = false;\r\n this._contentAnimationArea = true;\r\n }\r\n }\r\n if(this._contentMinimumPositionReached === false || this._contentAnimationArea){\r\n if (currentContentPosition < contentMaxPosition) {\r\n let newContentPosition = currentContentPosition - yDeltaScrolled;\r\n newContentPosition = newContentPosition > contentMaxPosition ? contentMaxPosition : newContentPosition;\r\n newContentPosition = parseFloat(newContentPosition.toFixed(2));\r\n this._contentElement.style.marginTop = newContentPosition + 'px';\r\n if (newContentPosition === contentMaxPosition) {\r\n this._contentMinimumPositionReached = false;\r\n }\r\n } \r\n }\r\n \r\n\r\n }\r\n\r\n }\r\n else {\r\n addClass(this._bodyElement, this._options.classes.active);\r\n this._contentElement.style.marginTop = contentMaxPosition + 'px';\r\n addClass(this._bodyElement, this._options.classes.visible);\r\n }\r\n }\r\n else {\r\n removeClass(this._bodyElement, this._options.classes.active);\r\n removeClass(this._bodyElement, this._options.classes.visible);\r\n this._contentMinimumPositionReached = false;\r\n }\r\n }\r\n}\r\n\r\nexport function highlightTeaser(\r\n wrapper: HTMLElement,\r\n options?: HighlightTeaserOptions\r\n): HighlightTeaser {\r\n return new HighlightTeaser(wrapper, options);\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\n\r\n@Component({ className: 'js-hin-login' })\r\nexport class HinLoginComponent {\r\n //private form: HTMLFormElement;\r\n constructor(private element: HTMLElement) {\r\n this.onHinClick();\r\n //this.form = document.querySelector('.js-hin-form') as HTMLFormElement;\r\n }\r\n\r\n onHinClick() {\r\n this.element.addEventListener('click', () => {\r\n var myFormData = new FormData();\r\n fetch('/umbraco/surface/HinLoginAccountSurface/RequestLogin', {\r\n method: 'GET'\r\n }).then(res => res.json()\r\n ).then(txt => {\r\n myFormData.append('SAMLRequest', txt.authnRequest);\r\n console.log('Send Request to HIN');\r\n var myForm = document.getElementsByClassName('js-hin-form')[0] as HTMLFormElement;\r\n myForm.querySelector('[name=\"SAMLRequest\"]').setAttribute('value', txt.authnRequest);\r\n myForm.submit();\r\n // var newTab = window.open('', '_blank');\r\n // if (newTab) {\r\n // newTab.document.open();\r\n // newTab.document.write(txt.responseText);\r\n // newTab.document.close();\r\n // }\r\n //console.log(txt.responseText);\r\n // fetch('https://test.fed.hin.ch/saml/2.0/idp', {\r\n // method: 'POST',\r\n // body: myFormData\r\n // }).then(resp => {\r\n // if (!resp.ok) {\r\n // throw new Error(`HTTP error! Status: ${resp.status}`);\r\n // }\r\n // if (resp.status === 302) {\r\n // // Another fetch\r\n // }\r\n // return resp.text(); // or resp.text() or whatever the server sends\r\n // }).then(body => {\r\n // var startIndex = body.indexOf('name=\"SAMLResponse\"') + 27;\r\n // var endIndex = body.indexOf('\" type=\"hidden\">');\r\n // if (startIndex > 27 && endIndex > startIndex){\r\n // var response = body.substring(startIndex, endIndex);\r\n // fetch('/umbraco/surface/HinLoginAccountSurface/AssertLogin?SAMLResponse=' + response, {\r\n // method: 'GET'\r\n // });\r\n // }\r\n // }).catch(error => {\r\n // // TODO handle error\r\n // console.error(error);\r\n // });\r\n });\r\n // if (response.ok) {\r\n // myFormData.append('SAMLRequest', await response.text());\r\n // }\r\n\r\n // Will have to perform further actions\r\n });\r\n }\r\n}","import { Component } from '@opten/compiler/metadata/component';\r\nimport { OnInit } from '@opten/compiler/metadata/lifecycle';\r\nimport addClass from '@opten/dom/add-class';\r\nimport removeClass from '@opten/dom/remove-class';\r\nimport hasClass from '@opten/dom/has-class';\r\n\r\n@Component({ className: 'js-form__field__input', observe: true })\r\nexport default class InputFieldsFilled implements OnInit {\r\n constructor(private _element: HTMLInputElement | HTMLSelectElement) {}\r\n\r\n onInit(): void {\r\n if (hasClass(this._element, 'js-select')) {\r\n // todo: @SelfRef(Select)?\r\n // todo: we cannot use that, we don't know when initialized\r\n /*const select = document.querySelector(\r\n `[data-select='${this._element.id}']`\r\n ) as HTMLSelectElement;*/\r\n const select = this._element.parentElement.getElementsByTagName(\r\n 'select'\r\n )[0];\r\n\r\n if (select) {\r\n // todo: somehow the select is too slow\r\n // when we trigger change, because then it animates the label\r\n // so we attach extra events...\r\n /*select.addEventListener('focus', () =>\r\n addClass(this._element, '--is-filled')\r\n );\r\n select.addEventListener(\r\n 'blur',\r\n () => select.value || this._checkValue(select)\r\n );*/\r\n this._checkValue(select);\r\n select.addEventListener('change', () =>\r\n this._checkValue(select)\r\n );\r\n }\r\n } else if (hasClass(this._element, 'js-datepicker-field')) {\r\n const hidden = this._element.parentElement.querySelector(\r\n `input[type='hidden'][name='${this._element.name.replace(\r\n '_datepicker',\r\n ''\r\n )}']`\r\n ) as HTMLInputElement;\r\n\r\n if (hidden) {\r\n this._checkValue(hidden);\r\n hidden.addEventListener('change', () => this._checkValue(hidden));\r\n }\r\n this._element.addEventListener('change', () => this._checkValue());\r\n } else {\r\n this._checkValue();\r\n this._element.addEventListener('input', () => this._checkValue());\r\n }\r\n }\r\n\r\n private _checkValue(\r\n element: HTMLInputElement | HTMLSelectElement = this._element\r\n ) {\r\n if (element.tagName === 'select') {\r\n // todo: why?\r\n if ($ && $.validator && element.value) {\r\n $(element).valid();\r\n }\r\n }\r\n\r\n if (element.value) {\r\n addClass(this._element, '--is-filled');\r\n } else {\r\n removeClass(this._element, '--is-filled');\r\n }\r\n }\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\n\r\n@Component({ className: 'js-login' })\r\nexport default class Login {\r\n private wrapper: HTMLElement;\r\n private formVariants: NodeListOf;\r\n private startView: HTMLElement;\r\n private btnNext: HTMLElement;\r\n private loginSelectionWrapper: HTMLElement;\r\n private openView: HTMLElement | null;\r\n private btnBacks: NodeListOf;\r\n\r\n constructor(private element: HTMLElement) {\r\n console.log('login');\r\n this.wrapper = element.querySelector('.js-login-wrapper') as HTMLElement;\r\n this.formVariants = element.querySelectorAll('[data-state]') as NodeListOf;\r\n this.btnNext = element.querySelector('.js-login-selection-next') as HTMLElement;\r\n this.loginSelectionWrapper = element.querySelector('.js-login-selection') as HTMLElement;\r\n this.startView = element.querySelector('.js-login-start') as HTMLElement;\r\n this.btnBacks = element.querySelectorAll('.js-login-back') as NodeListOf;\r\n\r\n this.updateOpenView();\r\n this.setupBackButtonListener();\r\n\r\n document.addEventListener('change', () => {\r\n this.updateOpenView();\r\n this.setupBackButtonListener();\r\n });\r\n\r\n this.btnNext.addEventListener('click', () => {\r\n const loginSelection = this.loginSelectionWrapper.querySelector('input[type=\"radio\"]:checked') as HTMLInputElement;\r\n if (loginSelection) {\r\n const id = loginSelection.id.replace('-radio', '');\r\n const matchingNextView = Array.from(this.formVariants).find(o => (o as HTMLElement).id === id);\r\n\r\n if (matchingNextView) {\r\n if (this.openView) {\r\n this.openView.setAttribute('data-state', 'closed');\r\n }\r\n matchingNextView.setAttribute('data-state', 'open');\r\n this.openView = matchingNextView; \r\n this.setupBackButtonListener();\r\n }\r\n }\r\n });\r\n }\r\n\r\n private updateOpenView(): void {\r\n this.openView = Array.from(this.formVariants).find(o => (o as HTMLElement).getAttribute('data-state') === \"open\") || null;\r\n }\r\n\r\n private setupBackButtonListener(): void {\r\n this.btnBacks.forEach(btnBack => {\r\n btnBack.removeEventListener('click', this.handleBackButtonClick);\r\n });\r\n\r\n if (this.openView) {\r\n const backButtonInOpenView = this.openView.querySelector('.js-login-back') as HTMLElement;\r\n if (backButtonInOpenView) {\r\n backButtonInOpenView.addEventListener('click', this.handleBackButtonClick);\r\n }\r\n }\r\n }\r\n\r\n private handleBackButtonClick = () => {\r\n if (this.openView) {\r\n this.openView.setAttribute('data-state', 'closed');\r\n }\r\n if (this.startView) {\r\n this.startView.setAttribute('data-state', 'open');\r\n this.openView = this.startView;\r\n }\r\n }\r\n}\r\n","import toggleClass from '@opten/dom/toggle-class';\r\ndeclare const google: any;\r\n\r\nclass MapMarkerExtended {\r\n\tmarker: any;\r\n\tclassName: string;\r\n\tconstructor(element, className) {\r\n\t\tthis.marker = element;\r\n\t\tthis.className = className;\r\n\t}\r\n}\r\n\r\nexport interface MapExtendedOptions {\r\n\tzoom?: number;\r\n\tdraggable?: boolean;\r\n\turlLocation?: string;\r\n\turlDatacenter?: string;\r\n\tanimation?: google.maps.Animation;\r\n\tmapStyles?: any;\r\n\tstyledMapName?: string;\r\n\tmapMarkerClasses?: string[];\r\n\tshowMapMarkerClasses?: string[];\r\n\thasMapMarkerClassesButtonIfMultiple?: boolean;\r\n\tmapMarkerClassesButtonActiveClass?: string;\r\n\tmapMarkerInfoClass?: string;\r\n\tmapTypes?: google.maps.MapTypeId[];\r\n\tmapTypeControlStyle?: google.maps.MapTypeControlStyle;\r\n\tfitToBounds?: boolean;\r\n}\r\nexport class MapExtended {\r\n\tprivate _options: MapExtendedOptions = {\r\n\t\tdraggable: screen.width < 1025 === false,\r\n\t\tanimation: google.maps.Animation.DROP,\r\n\t\tmapStyles: null,\r\n\t\tmapMarkerClasses: ['map-location'],\r\n\t\tshowMapMarkerClasses: ['map-location'],\r\n\t\thasMapMarkerClassesButtonIfMultiple: false,\r\n\t\tmapMarkerClassesButtonActiveClass: '--active',\r\n\t\tmapMarkerInfoClass: 'c-map-extended__information__marker',\r\n\t\tmapTypes: [\r\n\t\t\tgoogle.maps.MapTypeId.ROADMAP,\r\n\t\t\tgoogle.maps.MapTypeId.TERRAIN,\r\n\t\t\tgoogle.maps.MapTypeId.SATELLITE,\r\n\t\t\tgoogle.maps.MapTypeId.HYBRID,\r\n\t\t],\r\n\t\tmapTypeControlStyle: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,\r\n\t\tfitToBounds: true,\r\n\t};\r\n\tprivate _mapMarkers: MapMarkerExtended[] = [];\r\n\tprivate _element: HTMLElement;\r\n\tprivate _currentInfoWindow = null;\r\n\tprivate _bounds: google.maps.LatLngBounds;\r\n\r\n\tconstructor(element: HTMLElement, options?: MapExtendedOptions) {\r\n\t\tthis._element = element;\r\n\t\tthis._options = { ...this._options, ...options };\r\n\t\tthis.init();\r\n\t\tif (\r\n\t\t\tthis._options.hasMapMarkerClassesButtonIfMultiple &&\r\n\t\t\tthis._options.mapMarkerClasses.length > 1\r\n\t\t) {\r\n\t\t\tthis._options.mapMarkerClasses\r\n\t\t\t\t.map((markerClass) => document.getElementById(markerClass))\r\n\t\t\t\t.filter((markerElement) => markerElement != null)\r\n\t\t\t\t.forEach((markerElement) =>\r\n\t\t\t\t\tmarkerElement.addEventListener('click', () =>\r\n\t\t\t\t\t\tthis.showHideMapMarkerClass(markerElement)\r\n\t\t\t\t\t)\r\n\t\t\t\t);\r\n\t\t}\r\n\t}\r\n\tinit() {\r\n\t\tif (typeof google === 'object' && typeof google.maps === 'object') {\r\n\t\t\tconst id = this._element.getAttribute('data-map-id');\r\n\t\t\tconst zoom = this._element.getAttribute('data-zoom');\r\n\t\t\tlet mapZoom;\r\n\t\t\tif (typeof zoom === 'undefined' || zoom == null) {\r\n\t\t\t\tmapZoom = this._options.zoom;\r\n\t\t\t} else {\r\n\t\t\t\tmapZoom = zoom;\r\n\t\t\t}\r\n\t\t\t// TODO: Why are thos never set??\r\n\t\t\t// tslint:disable-next-line:prefer-const\r\n\t\t\tlet lat;\r\n\t\t\t// tslint:disable-next-line:prefer-const\r\n\t\t\tlet lng;\r\n\t\t\tthis._bounds = new google.maps.LatLngBounds();\r\n\t\t\tconst mapTypes = this._options.mapTypes as any[];\r\n\t\t\tif (this._options.mapStyles != null) {\r\n\t\t\t\tmapTypes.push('map_style');\r\n\t\t\t}\r\n\t\t\tconst mapOptions = {\r\n\t\t\t\tzoom: +mapZoom,\r\n\t\t\t\tcenter: new google.maps.LatLng(lat, lng),\r\n\t\t\t\tdraggable: true,\r\n\t\t\t\tmapTypeControlOptions: {\r\n\t\t\t\t\tmapTypeIds: mapTypes,\r\n\t\t\t\t\tstyle: this._options.mapTypeControlStyle,\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t\tconst map = new google.maps.Map(document.getElementById(id), mapOptions);\r\n\t\t\tif (this._options.mapStyles != null) {\r\n\t\t\t\tconst nameMap =\r\n\t\t\t\t\tthis._options.styledMapName != null\r\n\t\t\t\t\t\t? this._options.styledMapName\r\n\t\t\t\t\t\t: 'Map';\r\n\t\t\t\tconst styledMap = new google.maps.StyledMapType(\r\n\t\t\t\t\tthis._options.mapStyles,\r\n\t\t\t\t\t{ name: nameMap }\r\n\t\t\t\t);\r\n\t\t\t\tmap.mapTypes.set('map_style', styledMap);\r\n\t\t\t\tmap.setMapTypeId('map_style');\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\tthis._options.mapMarkerClasses != null &&\r\n\t\t\t\tthis._options.mapMarkerClasses.length > 0\r\n\t\t\t) {\r\n\t\t\t\tthis._options.mapMarkerClasses.forEach((markerClass) => {\r\n\t\t\t\t\tconst markersClass = Array.from(\r\n\t\t\t\t\t\tthis._element.getElementsByClassName(markerClass)\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (markersClass.length > 0) {\r\n\t\t\t\t\t\tconst showMarker =\r\n\t\t\t\t\t\t\tthis._options.showMapMarkerClasses.indexOf(markerClass) > -1;\r\n\t\t\t\t\t\tmarkersClass.forEach((markerClassInfo) =>\r\n\t\t\t\t\t\t\tthis.createMarkerClass(\r\n\t\t\t\t\t\t\t\tmarkerClassInfo,\r\n\t\t\t\t\t\t\t\tmarkerClass,\r\n\t\t\t\t\t\t\t\tmap,\r\n\t\t\t\t\t\t\t\tshowMarker\r\n\t\t\t\t\t\t\t)\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\tif (this._options.fitToBounds) {\r\n\t\t\t\tmap.fitBounds(this._bounds);\r\n\t\t\t}\r\n\t\t\tif (mapZoom != null && mapZoom > 0) {\r\n\t\t\t\tgoogle.maps.event.addListenerOnce(map, 'idle', () => {\r\n\t\t\t\t\tmap.setZoom(+mapZoom);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconsole.error('Google Maps API is not included');\r\n\t\t}\r\n\t}\r\n\tcreateMarkerClass(markerClassInfo, markerClass, map, showMarker) {\r\n\t\tconst markerInfoData = markerClassInfo;\r\n\t\tconst dataCoordinates = markerInfoData.getAttribute('data-coordinates');\r\n const latlng = dataCoordinates.replace(' ', '').split(',');\r\n\t\tconst mapMarkerIcon = markerInfoData.getAttribute('data-marker');\r\n\t\tconst mapMarkerWidth = markerInfoData.getAttribute('data-marker-width');\r\n\t\tconst mapMarkerHeight = markerInfoData.getAttribute('data-marker-height');\r\n\t\tconst mapMarkerOriginX = markerInfoData.getAttribute(\r\n\t\t\t'data-marker-origin-x'\r\n\t\t);\r\n\t\tconst mapMarkerOriginY = markerInfoData.getAttribute(\r\n\t\t\t'data-marker-origin-y'\r\n\t\t);\r\n\t\tconst mapMarkerAnchorX = markerInfoData.getAttribute(\r\n\t\t\t'data-marker-anchor-x'\r\n\t\t);\r\n\t\tconst mapMarkerAnchorY = markerInfoData.getAttribute(\r\n\t\t\t'data-marker-anchor-y'\r\n\t\t);\r\n\t\tconst mapMarkerInfoArray = Array.from(\r\n\t\t\tmarkerInfoData.getElementsByClassName(this._options.mapMarkerInfoClass)\r\n\t\t);\r\n\t\tlet mapMarkerInfo = '';\r\n\t\tif (mapMarkerInfoArray.length > 0) {\r\n\t\t\tmapMarkerInfo = markerInfoData.innerHTML;\r\n\t\t}\r\n\t\tthis.createMarker(\r\n\t\t\tlatlng[0], latlng[1],\r\n\t\t\tmapMarkerIcon,\r\n\t\t\tmapMarkerWidth,\r\n\t\t\tmapMarkerHeight,\r\n\t\t\tmapMarkerOriginX,\r\n\t\t\tmapMarkerOriginY,\r\n\t\t\tmapMarkerAnchorX,\r\n\t\t\tmapMarkerAnchorY,\r\n\t\t\tmapMarkerInfo,\r\n\t\t\tmap,\r\n\t\t\tshowMarker,\r\n\t\t\tmarkerClass\r\n\t\t);\r\n\t}\r\n\tcreateMarker(\r\n\t\tlat,\r\n\t\tlng,\r\n\t\tmapMarkerIcon,\r\n\t\tmapMarkerWidth,\r\n\t\tmapMarkerHeight,\r\n\t\tmapMarkerOriginX,\r\n\t\tmapMarkerOriginY,\r\n\t\tmapMarkerAnchorX,\r\n\t\tmapMarkerAnchorY,\r\n\t\tmapMarkerInfo,\r\n\t\tmap,\r\n\t\tshowMarker,\r\n\t\tmarkerClass\r\n\t) {\r\n\t\tconst marker = new google.maps.Marker({\r\n\t\t\tposition: new google.maps.LatLng(+lat, +lng),\r\n\t\t\tmap,\r\n\t\t\ticon: {\r\n\t\t\t\tsize: new google.maps.Size(+mapMarkerWidth, +mapMarkerHeight),\r\n\t\t\t\torigin: new google.maps.Point(+mapMarkerOriginX, +mapMarkerOriginY),\r\n\t\t\t\tanchor: new google.maps.Point(+mapMarkerAnchorX, +mapMarkerAnchorY),\r\n\t\t\t\turl: mapMarkerIcon,\r\n\t\t\t},\r\n\t\t\tvisible: showMarker,\r\n\t\t});\r\n\t\tthis._bounds.extend(marker.getPosition());\r\n\t\tif (mapMarkerInfo !== '') {\r\n\t\t\tconst infoWindow = new google.maps.InfoWindow({\r\n\t\t\t\tcontent: mapMarkerInfo,\r\n\t\t\t});\r\n\t\t\tmarker.addListener('click', () => {\r\n\t\t\t\tconst wasCurrentWindow =\r\n\t\t\t\t\tthis._currentInfoWindow != null &&\r\n\t\t\t\t\tthis._currentInfoWindow === infoWindow;\r\n\t\t\t\tif (this._currentInfoWindow != null) {\r\n\t\t\t\t\tthis._currentInfoWindow.close();\r\n\t\t\t\t}\r\n\t\t\t\tif (\r\n\t\t\t\t\tthis._currentInfoWindow == null ||\r\n\t\t\t\t\tthis._currentInfoWindow !== infoWindow\r\n\t\t\t\t) {\r\n\t\t\t\t\tinfoWindow.open(map, marker);\r\n\t\t\t\t\tthis._currentInfoWindow = infoWindow;\r\n\t\t\t\t} else if (wasCurrentWindow) {\r\n\t\t\t\t\tthis._currentInfoWindow = null;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tmarker.addListener('mouseover', () => {\r\n\t\t\t\tif (\r\n\t\t\t\t\tthis._currentInfoWindow != null &&\r\n\t\t\t\t\tthis._currentInfoWindow !== infoWindow\r\n\t\t\t\t) {\r\n\t\t\t\t\tthis._currentInfoWindow.close();\r\n\t\t\t\t}\r\n\t\t\t\tif (\r\n\t\t\t\t\tthis._currentInfoWindow == null ||\r\n\t\t\t\t\tthis._currentInfoWindow !== infoWindow\r\n\t\t\t\t) {\r\n\t\t\t\t\tinfoWindow.open(map, marker);\r\n\t\t\t\t\tthis._currentInfoWindow = infoWindow;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis._mapMarkers.push(new MapMarkerExtended(marker, markerClass));\r\n\t}\r\n\tshowHideMapMarkerClass(button) {\r\n\t\tconst className = button.id;\r\n\t\ttoggleClass(button, this._options.mapMarkerClassesButtonActiveClass);\r\n\t\tconst visible = button.classList.contains(\r\n\t\t\tthis._options.mapMarkerClassesButtonActiveClass\r\n\t\t); // show if checked, otherwise hide\r\n\t\tif (className.length != null && className.length > 0) {\r\n\t\t\tthis._mapMarkers\r\n\t\t\t\t.filter((mapMarker) => mapMarker.className === className)\r\n\t\t\t\t.forEach((mapMarker) => mapMarker.marker.setVisible(visible));\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function mapExtended(\r\n\telement: HTMLElement,\r\n\toptions?: MapExtendedOptions\r\n): MapExtended {\r\n\treturn new MapExtended(element, options);\r\n}\r\n","import addClass from '@opten/dom/add-class';\r\nimport removeClass from '@opten/dom/remove-class';\r\nimport addTransitionEndListener from '@opten/transition/add-transition-end-listener';\r\n\r\nconst transitionDuration = 600;\r\n\r\nexport function showMegaDropdown(\r\n dropdown: HTMLElement,\r\n backdropElement?: HTMLElement,\r\n callback?: () => void\r\n) {\r\n if (callback) {\r\n addTransitionEndListener(\r\n dropdown,\r\n () => callback(),\r\n transitionDuration\r\n );\r\n }\r\n\r\n addClass(dropdown, '--show');\r\n\r\n if (backdropElement) {\r\n addClass(backdropElement, '--show');\r\n }\r\n}\r\n\r\nexport function hideMegaDropdown(\r\n dropdown: HTMLElement,\r\n backdropElement?: HTMLElement,\r\n callback?: () => void\r\n) {\r\n // add fade-out class for faster animations\r\n addClass(dropdown, '--fade-out');\r\n removeClass(dropdown, '--show');\r\n\r\n if (backdropElement) {\r\n // add fade-out class for faster animations\r\n addClass(backdropElement, '--fade-out');\r\n removeClass(backdropElement, '--show');\r\n }\r\n\r\n addTransitionEndListener(\r\n dropdown,\r\n () => {\r\n // remove fade-out so if we hover again, they're still slow\r\n removeClass(dropdown, '--fade-out');\r\n\r\n if (backdropElement) {\r\n // remove fade-out so if we hover again, they're still slow\r\n removeClass(backdropElement, '--fade-out');\r\n }\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n },\r\n transitionDuration\r\n );\r\n}\r\n","export * from './navbar';\r\nexport * from './navbar-toggler';\r\nexport * from './navbar-mega-dropdown';\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { ComponentRef } from '@opten/compiler/metadata/di';\r\nimport { OnInit } from '@opten/compiler/metadata/lifecycle';\r\nimport { showMegaDropdown, hideMegaDropdown } from '../mega-dropdown';\r\nimport { isPad } from '../../utilities/detection';\r\nimport { getStickyOffset } from '../../utilities/scroll-helper';\r\nimport isAncestorOfClass from '@opten/dom/is-ancestor-of-class';\r\nimport removeClass from '@opten/dom/remove-class';\r\nimport hasClass from '@opten/dom/has-class';\r\n\r\n// const mouseEnterDuration = 300;\r\n\r\n// todo: update arias also in dekstop e.g. for mega-dropdown\r\n@Component({ className: 'js-navbar-mega-dropdown-toggler' })\r\nexport class NavbarMegaDropdown implements OnInit {\r\n private _backdropElement: HTMLElement;\r\n private _dropdownElement: HTMLElement;\r\n private _dropdownElements: Array;\r\n\r\n get _isOpen(): boolean {\r\n return hasClass(this._dropdownElement, '--show');\r\n }\r\n\r\n // used to know if we're still animating\r\n // private _timeout: number | null = null;\r\n\r\n // private _boundShow = this._handleShow.bind(this);\r\n // private _boundHide = this._handleHide.bind(this);\r\n\r\n constructor(private element: HTMLElement) {\r\n this._backdropElement = document.getElementsByClassName(\r\n 'js-navbar-backdrop'\r\n )[0] as HTMLElement;\r\n\r\n this._dropdownElement = element.parentElement.getElementsByClassName(\r\n 'js-navbar-mega-dropdown'\r\n )[0] as HTMLElement;\r\n\r\n this._dropdownElements = Array.from(\r\n document.getElementsByClassName('js-navbar-mega-dropdown')\r\n ) as Array;\r\n }\r\n\r\n onInit() {\r\n this._handleResize();\r\n window.addEventListener('resize', () => this._handleResize());\r\n }\r\n\r\n private _addDesktopListeners() {\r\n if (!isPad()) {\r\n this.element.addEventListener('click', this._handleClick);\r\n this._backdropElement.addEventListener(\r\n 'click',\r\n this._handleBackdropClick\r\n );\r\n // this.element.addEventListener('mouseenter', this._boundShow);\r\n // this.element.addEventListener('mouseleave', this._boundHide);\r\n }\r\n }\r\n\r\n private _removeDesktopListener() {\r\n if (isPad()) {\r\n this.element.removeEventListener('click', this._handleClick);\r\n this._backdropElement.removeEventListener(\r\n 'click',\r\n this._handleBackdropClick\r\n );\r\n // this.element.removeEventListener('mouseenter', this._boundShow);\r\n // this.element.removeEventListener('mouseleave', this._boundHide);\r\n }\r\n }\r\n\r\n private _setContainerHeight() {\r\n const container = this._dropdownElement\r\n .firstElementChild as HTMLElement;\r\n\r\n const stickyOffset = getStickyOffset();\r\n if (container && stickyOffset) {\r\n container.style.maxHeight = `calc(100vh - ${stickyOffset}px)`;\r\n }\r\n }\r\n\r\n private _handleResize() {\r\n if (isPad()) {\r\n this._removeDesktopListener();\r\n } else {\r\n this._setContainerHeight();\r\n this._addDesktopListeners();\r\n }\r\n }\r\n\r\n public toggle() {\r\n this._isOpen ? this.hide() : this.show();\r\n }\r\n\r\n public show() {\r\n if (this._isOpen) {\r\n return;\r\n }\r\n\r\n // check if another one is open, to hide it except the backdrop\r\n const anyOpen =\r\n this._dropdownElements.map(dropdown => hasClass(dropdown, '--show'))\r\n .length > 0;\r\n\r\n this._dropdownElements.forEach(dropdown => {\r\n if (hasClass(dropdown, '--show')) {\r\n hideMegaDropdown(dropdown);\r\n }\r\n\r\n // nicer animation because we already have one open!\r\n dropdown.style.transition = anyOpen ? 'none' : null;\r\n });\r\n\r\n showMegaDropdown(this._dropdownElement, this._backdropElement);\r\n\r\n }\r\n\r\n public hide() {\r\n if (!this._isOpen) {\r\n return;\r\n }\r\n\r\n hideMegaDropdown(this._dropdownElement, this._backdropElement);\r\n }\r\n\r\n private _handleClick = (event: MouseEvent) => {\r\n event.preventDefault();\r\n\r\n this.toggle();\r\n }\r\n\r\n private _handleBackdropClick = (event: MouseEvent) => {\r\n event.preventDefault();\r\n\r\n this.hide();\r\n }\r\n\r\n /*private _handleShow(event: MouseEvent) {\r\n // add an delay so we don't show it directly when the user\r\n // hover over the link\r\n if (this._timeout != null) {\r\n // don't do anything if we still animating\r\n return;\r\n }\r\n\r\n const animate = !this._dropdownElement.style.transition;\r\n\r\n if (animate) {\r\n this._timeout = setTimeout(\r\n () =>\r\n showMegaDropdown(\r\n this._dropdownElement,\r\n this._backdropElement\r\n ),\r\n mouseEnterDuration\r\n );\r\n } else {\r\n showMegaDropdown(this._dropdownElement, this._backdropElement);\r\n }\r\n\r\n // close the search so we don't have to handle the backdrop\r\n // by re-adding it if the search is open...\r\n if (this._search) {\r\n this._search.close();\r\n }\r\n }\r\n\r\n private _handleHide(event: MouseEvent) {\r\n const toElement = (event.relatedTarget ||\r\n event.toElement) as HTMLElement;\r\n\r\n // nicer animation, if we go over an other element\r\n // we just hide it instead of animate it\r\n if (\r\n !toElement ||\r\n !isAncestorOfClass(\r\n toElement,\r\n 'js-navbar-mega-dropdown-toggler',\r\n true\r\n )\r\n ) {\r\n this._dropdownElements.forEach(\r\n dropdown => (dropdown.style.transition = null)\r\n );\r\n } else {\r\n this._dropdownElements.forEach(\r\n dropdown => (dropdown.style.transition = 'none')\r\n );\r\n }\r\n\r\n this.hide();\r\n\r\n if (this._timeout) {\r\n clearTimeout(this._timeout);\r\n this._timeout = null;\r\n }\r\n }*/\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { ComponentRef, ComponentRefs } from '@opten/compiler/metadata/di';\r\nimport { OnInit } from '@opten/compiler/metadata/lifecycle';\r\nimport { Navbar } from './navbar';\r\nimport { isPad } from '../../utilities/detection';\r\nimport { NavbarMegaDropdown } from './navbar-mega-dropdown';\r\n\r\n@Component({ className: 'js-navbar-toggler' })\r\nexport class NavbarToggler implements OnInit {\r\n @ComponentRef(Navbar) _navbar: Navbar;\r\n @ComponentRefs(NavbarMegaDropdown) _dropdowns: Array;\r\n\r\n constructor(private element: HTMLElement) {}\r\n\r\n onInit() {\r\n this.element.addEventListener('click', event => {\r\n event.preventDefault();\r\n\r\n if (isPad()) {\r\n\r\n this._navbar.toggle();\r\n } else {\r\n const target = event.target as HTMLElement;\r\n\r\n target.blur(); // remove focus\r\n\r\n this._dropdowns.forEach(dropdown => dropdown.hide());\r\n }\r\n });\r\n }\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { OnInit } from '@opten/compiler/metadata/lifecycle';\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 getSelectorElementFromElement from '@opten/dom/get-selector-element-from-element';\r\nimport { Collapse } from '@opten/collapse/initializer';\r\nimport { isPad } from '../../utilities/detection';\r\nimport { lockScrollbar, unlockScrollbar } from '../../utilities/scroll-helper';\r\n\r\n// todo: @opten/typescrpit?\r\n@Component({ className: 'js-navbar' })\r\nexport class Navbar implements OnInit {\r\n private _backdropElement: HTMLElement;\r\n\r\n private _header: HTMLElement;\r\n\r\n private _navbarTogglerElements: Array;\r\n private _navbar1stLevelElements: Array;\r\n private _navbar2ndLevelElements: Array;\r\n private _navbarHeaderElements: Array;\r\n\r\n private _mainScrollElement: HTMLElement;\r\n private _scrollableElements: Array;\r\n private _togglerElements: Array;\r\n\r\n private _isOpen: boolean = false;\r\n\r\n\r\n constructor(private element: HTMLElement) {\r\n this._backdropElement = document.getElementsByClassName(\r\n 'js-navbar-backdrop'\r\n )[0] as HTMLElement;\r\n\r\n // todo: @ComponentRef()?\r\n this._header = document.getElementsByClassName(\r\n 'js-header'\r\n )[0] as HTMLElement;\r\n\r\n this._navbar1stLevelElements = Array.from(\r\n document.querySelectorAll(`[id^=\"c-navbar-nav-\"]`)\r\n );\r\n\r\n this._navbar2ndLevelElements = Array.from(\r\n document.querySelectorAll(`[id^=\"c-navbar-collapse-\"]`)\r\n );\r\n\r\n // not navbar because we could also have some in the header\r\n this._navbarTogglerElements = Array.from(\r\n this._header.querySelectorAll(`[data-toggle='navbar']`)\r\n );\r\n\r\n this._navbarHeaderElements = Array.from(\r\n document.getElementsByClassName('js-navbar-header')\r\n ) as Array;\r\n\r\n this._mainScrollElement = Array.from(element.children).filter(o =>\r\n hasClass(o, 'c-navbar__scrollable')\r\n )[0] as HTMLElement;\r\n\r\n this._scrollableElements = Array.from(\r\n this.element.getElementsByClassName('c-navbar__scrollable')\r\n ) as Array;\r\n\r\n this._togglerElements = Array.from(\r\n document.getElementsByClassName('js-navbar-toggler')\r\n ) as Array;\r\n }\r\n\r\n onInit() {\r\n this._navbarTogglerElements.forEach(toggler => {\r\n toggler.addEventListener('click', event => {\r\n event.preventDefault();\r\n\r\n const target = getSelectorElementFromElement(toggler);\r\n\r\n if (target) {\r\n this._click(target);\r\n }\r\n });\r\n });\r\n\r\n this._backdropElement.addEventListener('click', () => this.close());\r\n\r\n this._handleResize();\r\n window.addEventListener('resize', () => this._handleResize());\r\n }\r\n\r\n private _handleNavbarHeaderClick = (event: MouseEvent) => {\r\n event.preventDefault();\r\n addClass((event.target as Element).parentElement, '--collapsed');\r\n\r\n this._scrollableElements.forEach(scrollable =>\r\n this._removeScrollable(scrollable)\r\n );\r\n\r\n this._setScrollable(this._mainScrollElement);\r\n }\r\n\r\n private _addMobileListeners() {\r\n if (isPad()) {\r\n this._navbarHeaderElements.forEach(header =>\r\n header.addEventListener('click', this._handleNavbarHeaderClick)\r\n );\r\n }\r\n }\r\n\r\n private _removeMobileListeners() {\r\n if (!isPad()) {\r\n this._navbarHeaderElements.forEach(header =>\r\n header.removeEventListener(\r\n 'click',\r\n this._handleNavbarHeaderClick\r\n )\r\n );\r\n }\r\n }\r\n\r\n private _handleResize() {\r\n if (this._isOpen) {\r\n this.toggle();\r\n }\r\n\r\n if (isPad()) {\r\n this._addMobileListeners();\r\n\r\n const height = Math.round(\r\n this._header.getBoundingClientRect().height\r\n );\r\n\r\n // make the headers same height as the header itself\r\n Array.from(\r\n this.element.getElementsByClassName('c-navbar__header')\r\n ).forEach(header => {\r\n (header as HTMLElement).style.height = `${height}px`;\r\n });\r\n\r\n this._navbar1stLevelElements.forEach(navbar => {\r\n const isOpen =\r\n hasClass(\r\n document.querySelector(`a[href='${navbar.id}']`),\r\n '--active'\r\n ) || navbar.getElementsByClassName('--active').length;\r\n\r\n if (isOpen) {\r\n Collapse.getInstance(navbar as HTMLElement).show()\r\n } else {\r\n Collapse.getInstance(navbar as HTMLElement).hide()\r\n }\r\n });\r\n\r\n this._navbar2ndLevelElements.forEach(element =>\r\n Collapse.getInstance(element as HTMLElement).destroy()\r\n );\r\n } else {\r\n this._removeMobileListeners();\r\n\r\n // reset height, because we don't need it\r\n this._scrollableElements.forEach(\r\n scrollable => (scrollable.style.height = null)\r\n );\r\n\r\n this._navbar1stLevelElements.forEach(navbar =>\r\n Collapse.getInstance(navbar as HTMLElement).destroy()\r\n );\r\n\r\n this._navbar2ndLevelElements.forEach(element =>\r\n this._collapse(\r\n element,\r\n element.getElementsByClassName('--active').length > 0\r\n )\r\n );\r\n }\r\n }\r\n\r\n public toggle() {\r\n this._isOpen ? this.close() : this.open();\r\n }\r\n\r\n public open() {\r\n if (this._isOpen) {\r\n return;\r\n }\r\n\r\n // mostly for iOS devices\r\n lockScrollbar(() => {\r\n removeClass(this.element, '--collapsed');\r\n\r\n // set the width to the navbar-toggler\r\n const left = Math.round(\r\n this._togglerElements[0].getBoundingClientRect().left\r\n );\r\n /*this.element.style.width = `${left}px`;*/\r\n\r\n addClass(this._backdropElement, '--show');\r\n\r\n this._togglerElements.forEach(toggler =>\r\n addClass(toggler, '--expanded')\r\n );\r\n\r\n // check if we're on a page (a container already has --scroll)\r\n // so we don't apply the scroll class otherwise we might cut off\r\n // a sub-navigation.\r\n const hasScroll = this._scrollableElements.filter(o =>\r\n hasClass(o, '--scroll')\r\n );\r\n\r\n if (!hasScroll.length) {\r\n this._setScrollable(this._mainScrollElement);\r\n }\r\n addClass(this._header, '--expanded');\r\n this._isOpen = true;\r\n });\r\n }\r\n\r\n public close() {\r\n if (!this._isOpen) {\r\n return;\r\n }\r\n\r\n addClass(this.element, '--collapsed');\r\n this.element.style.width = null; // reset to default\r\n removeClass(this._backdropElement, '--show');\r\n\r\n this._togglerElements.forEach(toggler =>\r\n removeClass(toggler, '--expanded')\r\n );\r\n\r\n // mostly for iOS devices\r\n unlockScrollbar();\r\n\r\n if (!isPad()) {\r\n this._navbar1stLevelElements.forEach(navbar =>\r\n Collapse.getInstance(navbar as HTMLElement).hide()\r\n );\r\n }\r\n removeClass(this._header, '--expanded');\r\n this._isOpen = false;\r\n }\r\n\r\n private _click(target: HTMLElement) {\r\n if (isPad()) {\r\n if (!this._isOpen) {\r\n\r\n // todo: better way? if we have a slower animation you see the other closing...\r\n // maybe we have some --collapsed in the cshtml\r\n // because we're on a certain page\r\n // so close all of them...\r\n this._navbar2ndLevelElements.forEach(navbar =>\r\n addClass(navbar.firstElementChild, '--collapsed')\r\n );\r\n\r\n this.open();\r\n }\r\n\r\n if (hasClass(target, '--collapsed')) {\r\n removeClass(target, '--collapsed');\r\n\r\n const scrollable = target.getElementsByClassName(\r\n 'c-navbar__scrollable'\r\n )[0] as HTMLElement;\r\n\r\n this._scrollableElements.forEach(o =>\r\n this._removeScrollable(o)\r\n );\r\n this._setScrollable(scrollable);\r\n }\r\n } else {\r\n // todo: better set data-toggle='navbar' to 'collapse' if desktop?\r\n // todo: closest?\r\n const collapseElement = target.parentElement;\r\n const isOpen = Collapse.getInstance(collapseElement as HTMLElement).isOpen();\r\n\r\n this._collapse(collapseElement, !isOpen);\r\n\r\n // close others because we cannot use data-parent\r\n // otherwise the mobile will be strange...\r\n this._navbar2ndLevelElements\r\n .filter(t => t !== collapseElement)\r\n .forEach(target => this._collapse(target, false));\r\n }\r\n }\r\n\r\n private _collapse(target: HTMLElement, show: boolean) {\r\n const navbar = target.getElementsByClassName('c-navbar')[0];\r\n\r\n const toggler = document.querySelector(\r\n `a[href='#${navbar.id}']`\r\n ) as HTMLElement;\r\n\r\n if (show) {\r\n Collapse.getInstance(target as HTMLElement).show();\r\n } else {\r\n Collapse.getInstance(target as HTMLElement).hide();\r\n }\r\n\r\n this._updateAria(toggler, show);\r\n }\r\n\r\n private _setScrollable(element: HTMLElement) {\r\n let height = Math.round(this._header.getBoundingClientRect().height);\r\n\r\n const titleElement = Array.from(element.parentElement.children).filter(\r\n o => hasClass(o, 'c-navbar__title')\r\n )[0];\r\n\r\n if (titleElement) {\r\n height += Math.round(titleElement.getBoundingClientRect().height);\r\n }\r\n\r\n element.style.height = `calc(100% - ${height}px)`;\r\n\r\n removeClass(element, '--lock');\r\n addClass(element, '--scroll');\r\n }\r\n\r\n private _removeScrollable(element: HTMLElement) {\r\n element.style.height = null;\r\n\r\n addClass(element, '--lock');\r\n removeClass(element, '--scroll');\r\n }\r\n\r\n private _updateAria(toggler: HTMLElement, isOpen: boolean) {\r\n toggler.setAttribute('aria-expanded', isOpen.toString().toLowerCase());\r\n }\r\n}\r\n","import { setCookie } from '../utilities/cookie';\r\n\r\nexport class ProductDisclaimerOptions{\r\n selectors?: {\r\n content: string;\r\n disclaimer: string;\r\n confirm: string;\r\n };\r\n cookie: {\r\n expirationInDays?: number;\r\n domain?: string;\r\n path?: string;\r\n secure?: boolean;\r\n };\r\n loading?: {\r\n contentLoading: string;\r\n contentYScroll: number;\r\n };\r\n contentLocation?: string;\r\n wrapperId?: string;\r\n}\r\n\r\nexport class ProductDisclaimer{\r\n private _element: HTMLElement;\r\n private _contentElement: HTMLElement;\r\n private _disclaimerElement: HTMLElement;\r\n private _language: string = 'de-CH';\r\n\r\n private _cookieKey: string;\r\n private _options: ProductDisclaimerOptions = {\r\n selectors: {\r\n content: 'js-product-disclaimer__content',\r\n disclaimer: 'js-product-disclaimer__disclaimer',\r\n confirm: 'js-product-disclaimer__disclaimer__confirm'\r\n },\r\n cookie: {\r\n expirationInDays: 1,\r\n secure: false\r\n },\r\n loading: {\r\n contentLoading:\r\n '
',\r\n contentYScroll: 0\r\n },\r\n contentLocation: 'data-location',\r\n wrapperId: 'data-id'\r\n }\r\n\r\n\r\n constructor(private element: HTMLElement, options?: ProductDisclaimerOptions) {\r\n this._element = element;\r\n this._options = { ...this._options, ...options };\r\n this._contentElement = this._element.getElementsByClassName(\r\n this._options.selectors.content\r\n )[0];\r\n var dataLanguage = document.body.getAttribute('data-language-long');\r\n if(dataLanguage && dataLanguage.length > 0){\r\n this._language = dataLanguage;\r\n }\r\n this._init();\r\n }\r\n\r\n private _init(){\r\n this._disclaimerElement = this._getDisclaimer();\r\n if(this._disclaimerElement){\r\n this._cookieKey = this._disclaimerElement.getAttribute('data-cookie-key');\r\n if (this._cookieKey) {\r\n Array.from(\r\n this._disclaimerElement.getElementsByClassName(\r\n this._options.selectors.confirm\r\n )\r\n ).forEach(button =>\r\n button.addEventListener('click', event =>\r\n this._handleClick(event, true)\r\n )\r\n );\r\n }\r\n }\r\n \r\n }\r\n private _getDisclaimer(): HTMLElement {\r\n return document.getElementsByClassName(\r\n this._options.selectors.disclaimer\r\n )[0] as HTMLElement;\r\n }\r\n\r\n private _handleClick(event: Event, setCookie: boolean) {\r\n event.preventDefault();\r\n\r\n // if (setCookie) {\r\n // this._setCookie();\r\n // }\r\n this._disclaimerElement.parentElement.removeChild(this._disclaimerElement);\r\n const contentId = this._element.getAttribute(this._options.wrapperId);\r\n const contentLocation = this._element.getAttribute(this._options.contentLocation);\r\n\r\n const dataSearch = 'id=' + contentId;\r\n this._contentElement.parentElement.style.overflow = 'hidden';\r\n this._contentElement.innerHTML = this._options.loading.contentLoading;\r\n\r\n fetch('/umbraco/surface/' + contentLocation, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n 'accept-language': this._language,\r\n // todo: why? if we change to a api controller we don't have this problem...\r\n 'X-Requested-With': 'XMLHttpRequest' // otherwise accept-language is ignored\r\n },\r\n body: dataSearch,\r\n credentials: 'include'\r\n })\r\n .then(response => {\r\n const contentType = response.headers.get('content-type');\r\n if (contentType && contentType.includes('text/html')) {\r\n return response.text();\r\n }\r\n })\r\n .then(data => {\r\n if (data != null && data.length > 0) {\r\n this._contentElement.parentElement.style.overflow = null;\r\n this._contentElement.innerHTML = data;\r\n }\r\n });\r\n }\r\n\r\n private _setCookie(): void {\r\n if (!this._cookieKey) {\r\n throw new Error(\r\n `Product-Disclaimer: Cannot set Cookie, no key defined!`\r\n );\r\n }\r\n\r\n const date = new Date();\r\n date.setDate(\r\n date.getDate() + (this._options.cookie.expirationInDays || 1)\r\n );\r\n\r\n setCookie(\r\n this._cookieKey,\r\n 'true',\r\n date,\r\n this._options.cookie.secure,\r\n this._options.cookie.path,\r\n this._options.cookie.domain\r\n );\r\n }\r\n}\r\n\r\nexport default function productDisclaimer(\r\n wrapper: HTMLElement,\r\n options?: ProductDisclaimerOptions\r\n): ProductDisclaimer {\r\n return new ProductDisclaimer(wrapper, options);\r\n}\r\n","import { Loader } from \"@googlemaps/js-api-loader\";\r\nimport { MarkerClusterer } from \"@googlemaps/markerclusterer\";\r\n\r\nimport { Component } from \"@opten/compiler/metadata/component\";\r\n\r\ndeclare type OverlappingMarkerSpiderfier\t= any;\r\n\r\ndeclare global {\r\n interface Window {\r\n googleMapsComponent: ProductMapComponent;\r\n }\r\n}\r\n\r\ninterface Location {\r\n id: string;\r\n address: string;\r\n latitude: string;\r\n longitude: string;\r\n name: string;\r\n telephone: string;\r\n website: string;\r\n city: string;\r\n zip: string;\r\n logo: string;\r\n email: string;\r\n partner: number;\r\n}\r\n\r\n@Component({ className: \"js-location-filter-page\" })\r\nexport class ProductMapComponent {\r\n map: google.maps.Map;\r\n switzerland = { lat: 46.955, lng: 8.3 };\r\n apiKey: string;\r\n locations: Location[];\r\n inputLng: HTMLInputElement;\r\n inputLat: HTMLInputElement;\r\n geocoder: google.maps.Geocoder;\r\n\r\n fields: HTMLInputElement[];\r\n button: HTMLElement;\r\n hasInitialMarkerCoords: boolean = false;\r\n buyNowString: string;\r\n markerClass: string;\r\n markerUrl: string;\r\n markers: { marker: google.maps.Marker; location: Location }[] = [];\r\n markerClusterer: MarkerClusterer;\r\n locationFilterPage: HTMLElement;\r\n tags: HTMLElement[];\r\n searchTextInput: HTMLInputElement;\r\n activeTagValues: number[] = [];\r\n resetFilters: HTMLButtonElement;\r\n infoWindow: google.maps.InfoWindow;\r\n mapButton: HTMLElement;\r\n listButton: HTMLElement;\r\n listView: HTMLElement;\r\n listEntries: HTMLElement[];\r\n searchButton: HTMLElement;\r\n\t\toms: OverlappingMarkerSpiderfier;\r\n\r\n constructor(private element: HTMLElement) {\r\n var mapElement = element.getElementsByClassName(\r\n \"js-product-map\"\r\n )[0] as HTMLElement;\r\n this.apiKey = mapElement.dataset.apikey;\r\n this.buyNowString = mapElement.dataset.buynow;\r\n this.markerClass = mapElement.dataset.markerclass;\r\n this.markerUrl = mapElement.dataset.marker;\r\n this.locations = JSON.parse(mapElement.dataset.locations).map((o) =>\r\n JSON.parse(o)\r\n );\r\n\r\n const loader = new Loader({\r\n apiKey: this.apiKey,\r\n version: \"weekly\",\r\n });\r\n\r\n this.locationFilterPage = element;\r\n this.tags = Array.from(\r\n element.getElementsByClassName(\"js-location-filter__tag\")\r\n ).map((o) => o as HTMLElement);\r\n this.searchTextInput = element.getElementsByClassName(\r\n \"js-location-filter__search-text\"\r\n )[0] as HTMLInputElement;\r\n this.resetFilters = element.getElementsByClassName(\r\n \"js-location-filter__reset-all\"\r\n )[0] as HTMLButtonElement;\r\n this.mapButton = element.getElementsByClassName(\r\n \"js-location-filter__map-button\"\r\n )[0] as HTMLElement;\r\n this.listButton = element.getElementsByClassName(\r\n \"js-location-filter__list-button\"\r\n )[0] as HTMLElement;\r\n this.listView = element.getElementsByClassName(\r\n \"js-product-list\"\r\n )[0] as HTMLElement;\r\n this.searchButton = element.getElementsByClassName(\r\n \"js-location-filter__search-button\"\r\n )[0] as HTMLElement;\r\n this.listEntries = Array.from(\r\n element.getElementsByClassName(\"js-location-filter__list-entry\")\r\n ) as HTMLElement[];\r\n\r\n this.searchTextInput.addEventListener(\"keypress\", (e) => {\r\n if (e.key === \"Enter\") {\r\n // 13 is enter\r\n this.filterElements();\r\n }\r\n });\r\n\r\n this.searchButton.addEventListener(\"click\", (_) => this.filterElements());\r\n\r\n this.mapButton.addEventListener(\"click\", (e) => {\r\n this.listButton.classList.remove(\"--selected\");\r\n this.mapButton.classList.add(\"--selected\");\r\n mapElement.classList.add(\"--visible\");\r\n this.listView.classList.remove(\"--visible\");\r\n });\r\n\r\n this.listButton.addEventListener(\"click\", (e) => {\r\n this.mapButton.classList.remove(\"--selected\");\r\n this.listButton.classList.add(\"--selected\");\r\n this.listView.classList.add(\"--visible\");\r\n mapElement.classList.remove(\"--visible\");\r\n });\r\n\r\n this.resetFilters.addEventListener(\"click\", () => {\r\n this.searchTextInput.value = \"\";\r\n this.activeTagValues = [];\r\n this.tags.forEach((tag) => tag.classList.remove(\"--active\"));\r\n this.filterElements();\r\n });\r\n\r\n this.tags.forEach((tag) => {\r\n tag.addEventListener(\"click\", () => {\r\n tag.classList.toggle(\"--active\");\r\n this.addOrRemoveTagValue(+tag.dataset.value);\r\n this.filterElements();\r\n });\r\n });\r\n\r\n loader.load().then(() => {\r\n this.loadMap(mapElement);\r\n });\r\n\r\n this.geocoder = new google.maps.Geocoder();\r\n }\r\n\r\n filterElements() {\r\n let searchValue = this.searchTextInput.value.toLowerCase();\r\n\r\n if (searchValue == \"\" && this.activeTagValues.length == 0) {\r\n this.markers.forEach(({ location, marker }) => {\r\n marker.setVisible(true);\r\n\t\t\t\t\t\t\t\tthis.oms.addMarker(marker);\r\n this.markerClusterer.addMarker(marker);\r\n });\r\n\r\n this.listEntries.forEach((entry) => entry.classList.add(\"--visible\"));\r\n\r\n this.map.setZoom(8);\r\n google.maps.event.addListenerOnce(this.map, \"bounds_changed\", () => {\r\n this.map.setZoom(8);\r\n });\r\n this.map.setCenter(this.switzerland);\r\n\r\n return;\r\n }\r\n\r\n this.getSearchBounds(searchValue).then((bounds) => {\r\n\t\t\t\t\t\tthis.oms.clearMarkers();\r\n this.markerClusterer.clearMarkers();\r\n\r\n var ignoreBounds = !this.markers.some(\r\n (o) => bounds.contains(o.marker.getPosition()) == false\r\n );\r\n\r\n this.markers.forEach(({ location, marker }) => {\r\n marker.setVisible(false);\r\n\r\n let isInSearch =\r\n (searchValue != \"\" &&\r\n (location.address.toLowerCase().includes(searchValue) ||\r\n location.zip.toLowerCase().includes(searchValue) ||\r\n location.city.toLowerCase().includes(searchValue))) ||\r\n searchValue == \"\";\r\n\r\n let isInPartner =\r\n this.activeTagValues.includes(location.partner) ||\r\n this.activeTagValues.length == 0;\r\n\r\n let isInBounds = ignoreBounds\r\n ? false\r\n : bounds.contains(marker.getPosition());\r\n\r\n if (isInPartner && (isInSearch || isInBounds)) {\r\n marker.setVisible(true);\r\n\t\t\t\t\t\t\t\t\t\tthis.oms.addMarker(marker);\r\n this.markerClusterer.addMarker(marker);\r\n }\r\n });\r\n\r\n this.map.fitBounds(bounds);\r\n\r\n this.listEntries.forEach((listEntry) => {\r\n let partner = +listEntry.dataset.partner;\r\n let data = listEntry.dataset.address;\r\n let id = listEntry.dataset.id;\r\n\r\n listEntry.classList.remove(\"--visible\");\r\n\r\n let isInSearch =\r\n (searchValue != \"\" && data.toLowerCase().includes(searchValue)) ||\r\n searchValue == \"\";\r\n let isInPartner =\r\n this.activeTagValues.includes(partner) ||\r\n this.activeTagValues.length == 0;\r\n\r\n let marker = this.markers.find((o) => o.location.id == id);\r\n let isInBounds = ignoreBounds\r\n ? false\r\n : marker\r\n ? bounds.contains(marker.marker.getPosition())\r\n : false;\r\n\r\n if (isInPartner && (isInSearch || isInBounds)) {\r\n listEntry.classList.add(\"--visible\");\r\n }\r\n });\r\n });\r\n }\r\n\r\n addOrRemoveTagValue(value: number) {\r\n if (this.activeTagValues.includes(value)) {\r\n this.activeTagValues = this.activeTagValues.filter((o) => o != value);\r\n } else {\r\n this.activeTagValues.push(value);\r\n }\r\n }\r\n\r\n private getSearchBounds(searchValue: string) {\r\n const request: google.maps.GeocoderRequest = {\r\n address: this.fixSearchValue(searchValue),\r\n componentRestrictions: {\r\n country: \"CH\",\r\n },\r\n };\r\n return new Promise((resolve) => {\r\n this.geocoder.geocode(request, (results, status) => {\r\n if (status === google.maps.GeocoderStatus.OK) {\r\n const bounds =\r\n results[0].geometry.bounds || results[0].geometry.viewport;\r\n if (bounds) {\r\n resolve(this.addRadiusToBounds(bounds));\r\n } else {\r\n resolve(null);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n //HACK --> geocoder has problem with 3000, 2500, 4000, 6000\r\n private fixSearchValue(searchValue: string) {\r\n switch (searchValue) {\r\n case \"3000\":\r\n return \"Bern\";\r\n case \"2500\":\r\n return \"Biel\";\r\n case \"4000\":\r\n return \"Basel\";\r\n case \"6000\":\r\n return \"Luzern\";\r\n default:\r\n return searchValue;\r\n }\r\n }\r\n\r\n private addRadiusToBounds(bounds: google.maps.LatLngBounds, radius = 10) {\r\n const ne = google.maps.geometry.spherical.computeOffset(\r\n bounds.getNorthEast(),\r\n radius * 1000,\r\n 45\r\n );\r\n const sw = google.maps.geometry.spherical.computeOffset(\r\n bounds.getSouthWest(),\r\n radius * 1000,\r\n 225\r\n );\r\n return new google.maps.LatLngBounds(sw, ne);\r\n }\r\n\r\n private loadMap(mapElement: HTMLElement) {\r\n const mapStylesAll = [\r\n {\r\n featureType: \"administrative\",\r\n elementType: \"labels.text.fill\",\r\n stylers: [\r\n {\r\n color: \"#181818\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"administrative.country\",\r\n elementType: \"geometry.fill\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"landscape\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n color: \"#f7f7f7\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"poi\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"road\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n saturation: -100,\r\n },\r\n {\r\n lightness: 45,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"road.highway\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n visibility: \"simplified\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"road.arterial\",\r\n elementType: \"labels.icon\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"transit\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"water\",\r\n elementType: \"all\",\r\n stylers: [\r\n {\r\n color: \"#004b97\",\r\n },\r\n {\r\n visibility: \"on\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"water\",\r\n elementType: \"geometry.fill\",\r\n stylers: [\r\n {\r\n gamma: 1,\r\n },\r\n {\r\n visibility: \"on\",\r\n },\r\n {\r\n color: \"#004b97\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"water\",\r\n elementType: \"geometry.stroke\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n {\r\n featureType: \"water\",\r\n elementType: \"labels.text\",\r\n stylers: [\r\n {\r\n visibility: \"off\",\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n var mapStyle = new google.maps.StyledMapType(mapStylesAll, {\r\n name: \"Karte\",\r\n });\r\n\r\n this.map = new google.maps.Map(mapElement, {\r\n zoom: 8,\r\n center: this.switzerland,\r\n mapTypeControlOptions: {\r\n mapTypeIds: [\"map_style\", google.maps.MapTypeId.HYBRID],\r\n },\r\n });\r\n\r\n this.map.mapTypes.set(\"map_style\", mapStyle);\r\n this.map.setMapTypeId(\"map_style\");\r\n\r\n this.locations.forEach((location) => {\r\n const marker = new google.maps.Marker({\r\n position: {\r\n lat: Number(location.latitude),\r\n lng: Number(location.longitude),\r\n },\r\n map: this.map,\r\n icon: this.markerUrl,\r\n });\r\n this.markers.push({ marker, location });\r\n var contentString =\r\n '
' +\r\n '' +\r\n '' +\r\n location.name +\r\n \"\" +\r\n '' +\r\n location.address +\r\n \"\" +\r\n '' +\r\n location.zip +\r\n \" \" +\r\n location.city +\r\n \"\" +\r\n \"
\" +\r\n '' +\r\n location.telephone +\r\n \"\" +\r\n '' +\r\n location.email +\r\n \"\" +\r\n \"
\" +\r\n '' +\r\n this.buyNowString +\r\n \"\";\r\n const infoWindow = new google.maps.InfoWindow({\r\n content: contentString,\r\n });\r\n\r\n marker.addListener(\"click\", () => {\r\n if (this.infoWindow != null) {\r\n this.infoWindow.close();\r\n\r\n if (this.infoWindow == infoWindow) {\r\n this.infoWindow = null;\r\n return;\r\n }\r\n }\r\n\r\n this.infoWindow = infoWindow;\r\n\r\n infoWindow.open({\r\n anchor: marker,\r\n map: this.map,\r\n });\r\n });\r\n });\r\n this.oms = new OverlappingMarkerSpiderfier(this.map, {\r\n markersWontMove: true,\r\n markersWontHide: true,\r\n basicFormatEvents: true,\r\n circleFootSeparation: 50,\r\n });\r\n\t\t\t\tthis.markers.forEach(({ location, marker }) => {\r\n\t\t\t\t\tthis.oms.addMarker(marker);\r\n\t\t\t});\r\n this.markerClusterer = new MarkerClusterer({\r\n map: this.map,\r\n markers: this.markers.map((o) => o.marker),\r\n renderer: {\r\n render({ count, position }, stats) {\r\n // change color if this cluster has more markers than the mean cluster\r\n const color = \"#0000ff\";\r\n // create svg url with fill color\r\n const svg = window.btoa(`\r\n\t\t \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t `);\r\n // create marker using svg icon\r\n return new google.maps.Marker({\r\n position,\r\n icon: {\r\n url: `data:image/svg+xml;base64,${svg}`,\r\n scaledSize: new google.maps.Size(45, 45),\r\n },\r\n label: {\r\n text: String(count),\r\n color: \"rgba(255,255,255,0.9)\",\r\n fontSize: \"12px\",\r\n },\r\n title: `Cluster of ${count} markers`,\r\n // adjust zIndex to be above other markers\r\n zIndex: Number(google.maps.Marker.MAX_ZINDEX) + count,\r\n });\r\n },\r\n },\r\n });\r\n }\r\n}\r\n","export * from './search';\r\nexport * from './search-toggler';\r\n","import { Component } from \"@opten/compiler/metadata/component\";\r\nimport { OnInit } from \"@opten/compiler/metadata/lifecycle\";\r\n\r\n@Component({ className: 'js-search-autocomplete' })\r\nexport class SearchAutocompleteComponent implements OnInit {\r\n\tprivate searchField: HTMLInputElement;\r\n\tprivate searchSectionField: HTMLInputElement;\r\n\tprivate searchForm: HTMLFormElement;\r\n\r\n\r\n\tprivate autocompleteList: HTMLElement;\r\n\tprivate currentFocus = -1;\r\n\tprivate autocompleteListItems: Element[] = [];\r\n\tprivate autocompleteSections: Element[] = [];\r\n\r\n\r\n\tconstructor(private element: HTMLElement) { }\r\n\tonInit(): void {\r\n\t\tthis.searchField = this.element.getElementsByClassName('js-search-autocomplete-field')[0] as HTMLInputElement;\r\n\t\tthis.searchForm = this.element.getElementsByClassName('js-search-autocomplete-form')[0] as HTMLFormElement;\r\n\t\tthis.autocompleteList = this.element.getElementsByClassName('js-search-autocomplete-list')[0] as HTMLElement;\r\n\t\tconst autocompleteSections = this.element.getElementsByClassName('js-search-autocomplete-sections');\r\n\t\tconst searchSectionFields = this.element.getElementsByClassName('js-search-autocomplete-section-field');\r\n\r\n\t\tif (autocompleteSections && autocompleteSections.length > 0 && searchSectionFields && searchSectionFields.length > 0) {\r\n\t\t\tthis.autocompleteSections = Array.from(autocompleteSections[0].getElementsByClassName('js-search-autocomplete-section'));\r\n\t\t\tthis.searchSectionField = searchSectionFields[0] as HTMLInputElement;\r\n\r\n\t\t\tif (this.autocompleteSections && this.autocompleteSections.length > 0) {\r\n\t\t\t\tthis.autocompleteSections.forEach(item => item.addEventListener('click', () => this.handleAutocompleteSectionClicked(item as HTMLElement)));\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this.searchField) {\r\n\t\t\tthis.searchField.addEventListener('input', (e) => this._handleSearchFieldInput(e));\r\n\t\t\tthis.searchField.addEventListener('keydown', (e) => this.handleSearchFieldKeyDown(e));\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _handleSearchFieldInput(e: Event) {\r\n\t\tthis.cleanAutocompleteList();\r\n\t\tlet value = this.searchField.value;\r\n\t\tif (value && value.length > 0) {\r\n\t\t\tfetch('/umbraco/surface/searchsurface/AutocompleteSearchTerm', {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\r\n\t\t\t\t\t// todo: set language from chooser in the future\r\n\t\t\t\t\t'accept-language': 'de-CH',\r\n\t\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\t'X-Requested-With': 'XMLHttpRequest' // otherwise accept-language is ignored\r\n\t\t\t\t},\r\n\t\t\t\tbody: \"term=\" + value\r\n\t\t\t})\r\n\t\t\t\t.then(response => {\r\n\t\t\t\t\tconst contentType = response.headers.get('content-type');\r\n\t\t\t\t\tif (contentType && contentType.includes('text/html')) {\r\n\t\t\t\t\t\treturn response.text();\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.then(data => {\r\n\t\t\t\t\tthis.cleanAutocompleteList();\r\n\t\t\t\t\tif (data != null && data.length > 0) {\r\n\t\t\t\t\t\tthis.autocompleteList.innerHTML = data;\r\n\r\n\t\t\t\t\t\tthis.autocompleteListItems = Array.from(this.autocompleteList.getElementsByClassName('js-search-autocomplete-list-item'));\r\n\t\t\t\t\t\tif (this.autocompleteListItems && this.autocompleteListItems.length > 0) {\r\n\t\t\t\t\t\t\tthis.autocompleteListItems.forEach(item => item.addEventListener('click', () => this.handleAutocompleteListItemClicked(item as HTMLElement)));\r\n\t\t\t\t\t\t\tthis.addClass(this.autocompleteList, 'is-visible');\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}\r\n\t}\r\n\r\n\tprivate handleSearchFieldKeyDown(e: KeyboardEvent) {\r\n\t\tif (this.autocompleteListItems && this.autocompleteListItems.length > 0) {\r\n\t\t\tif (e.keyCode == 40) {\r\n\t\t\t\t/*If the arrow DOWN key is pressed,\r\n\t\t\t\tincrease the currentFocus variable:*/\r\n\t\t\t\tthis.currentFocus++;\r\n\t\t\t\t/*and and make the current item more visible:*/\r\n\t\t\t\tthis.setAutocompleteListElementActive();\r\n\t\t\t} else if (e.keyCode == 38) { //up\r\n\t\t\t\t/*If the arrow UP key is pressed,\r\n\t\t\t\tdecrease the currentFocus variable:*/\r\n\t\t\t\tthis.currentFocus--;\r\n\t\t\t\t/*and and make the current item more visible:*/\r\n\t\t\t\tthis.setAutocompleteListElementActive();\r\n\t\t\t} else if (e.keyCode == 13) {\r\n\t\t\t\t/*If the ENTER key is pressed, prevent the form from being submitted,*/\r\n\t\t\t\tif (this.currentFocus > -1) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t/*and simulate a click on the \"active\" item:*/\r\n\t\t\t\t\tthis.autocompleteListItems[this.currentFocus].dispatchEvent(new Event('click'));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n \r\n\tprivate setAutocompleteListElementActive() {\r\n\t\tthis.autocompleteListItems.forEach(o => this.removeClass(o, 'is-active'));\r\n\t\tthis.addClass(this.autocompleteListItems[this.currentFocus], 'is-active');\r\n\t}\r\n\r\n\tprivate handleAutocompleteListItemClicked(item: HTMLElement) {\r\n\t\tconst itemInput = item.getElementsByTagName('input')[0] as HTMLInputElement;\r\n\t\tthis.searchField.value = itemInput.value;\r\n\t\tthis.searchForm.submit();\r\n\t}\r\n\r\n\tprivate handleAutocompleteSectionClicked(item: HTMLElement): void {\r\n\t\tconst itemInput = item.getElementsByTagName('input')[0] as HTMLInputElement;\r\n\t\tthis.searchSectionField.value = itemInput.value;\r\n\t\tthis.searchForm.submit();\r\n\t}\r\n\r\n\tprivate cleanAutocompleteList() {\r\n\t\tthis.removeClass(this.autocompleteList, 'is-visible');\r\n\t\tthis.autocompleteList.innerHTML = '';\r\n\t\tthis.currentFocus = -1;\r\n\t\tthis.autocompleteListItems = [];\r\n\t}\r\n\r\n\tprivate addClass(el: Element, cls: string) {\r\n\t\tif (el) {\r\n\t\t\tel.classList.add(cls);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate removeClass(el: Element, cls: string) {\r\n\t\tif (el) {\r\n\t\t\tel.classList.remove(cls);\r\n\t\t}\r\n\t}\r\n}\r\n","import { NavbarMegaDropdown } from './../navbar/navbar-mega-dropdown';\r\nimport { Component } from '@opten/compiler/metadata/component';\r\nimport { ComponentRef, ComponentRefs } from '@opten/compiler/metadata/di';\r\nimport { OnInit } from '@opten/compiler/metadata/lifecycle';\r\nimport { Navbar } from '../navbar';\r\nimport { Search } from './search';\r\n\r\n@Component({ className: 'js-search-toggler' })\r\nexport class SearchToggler implements OnInit {\r\n @ComponentRef(Navbar) _navbar: Navbar;\r\n @ComponentRefs(NavbarMegaDropdown) _dropdowns: Array;\r\n @ComponentRef(Search) _search: Search;\r\n\r\n constructor(private element: HTMLElement) { }\r\n\r\n onInit() {\r\n this.element.addEventListener('click', event => {\r\n event.preventDefault();\r\n\r\n this._search.toggle();\r\n\r\n // close the navbar so we don't have to handle the backdrop\r\n // by re-adding it if the navbar is open...\r\n if (this._navbar) {\r\n this._navbar.close();\r\n }\r\n\r\n if (this._dropdowns && this._dropdowns.length) {\r\n this._dropdowns.forEach(dropdown => dropdown.hide());\r\n }\r\n });\r\n }\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { OnInit } from '@opten/compiler/metadata/lifecycle';\r\nimport { hasClass } from '@opten/dom/has-class';\r\nimport { showMegaDropdown, hideMegaDropdown } from '../mega-dropdown';\r\nimport { lockScrollbar, unlockScrollbar } from '../../utilities/scroll-helper';\r\n\r\nconst transitionDuration = 700;\r\n\r\n@Component({ className: 'js-search' })\r\nexport class Search implements OnInit {\r\n get _isOpen(): boolean {\r\n return this.element.classList.contains('--show');\r\n }\r\n\r\n private _backdropElement: HTMLElement;\r\n private _header: HTMLElement;\r\n\r\n constructor(private element: HTMLElement) {}\r\n\r\n onInit() {\r\n // todo: own backdrop or resuse navbar?\r\n this._backdropElement = document.getElementsByClassName(\r\n 'js-search-backdrop'\r\n )[0] as HTMLElement;\r\n\r\n this._header = document.getElementsByClassName('js-header')[0] as HTMLElement;\r\n this.updateSearchTop();\r\n\r\n // todo: only add it when open clicked?\r\n // but how do we remove it, when we close it in the header?\r\n this._backdropElement.addEventListener('click', () => this.close());\r\n window.addEventListener('resize', ()=> this.updateSearchTop());\r\n }\r\n\r\n public toggle() {\r\n this._isOpen ? this.close() : this.open();\r\n }\r\n\r\n public updateSearchTop() {\r\n if (this._header) {\r\n this.element.style.top = `${Math.round(\r\n this._header.getBoundingClientRect().height\r\n )}px`;\r\n }\r\n }\r\n\r\n public open() {\r\n if (this._isOpen) {\r\n return;\r\n }\r\n\r\n // mostly for iOS devices\r\n lockScrollbar(() => {\r\n // show and then focus search\r\n showMegaDropdown(this.element, this._backdropElement, () =>\r\n this.element.getElementsByTagName('input')[0].focus()\r\n );\r\n });\r\n }\r\n\r\n public close() {\r\n if (!this._isOpen) {\r\n return;\r\n }\r\n\r\n // mostly for iOS devices\r\n unlockScrollbar();\r\n\r\n hideMegaDropdown(this.element, this._backdropElement);\r\n }\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\n@Component({ className: 'js-selftest-valued-pointbased' })\r\nexport default class SelftestValuedPointbased {\r\n private form;\r\n private questionGroups;\r\n private nextButtons;\r\n private backButtons;\r\n private resultButton;\r\n private currentActiveSlide; \r\n\r\n constructor(private element: HTMLElement) {\r\n this.form = element.querySelector(\"js-selftest-valued-question-form\");\r\n this.questionGroups = element.querySelectorAll(\".js-test-valued-pointbased-questiongroup\");\r\n this.nextButtons = element.querySelectorAll(\".js-selftest-valued-next\");\r\n this.backButtons = element.querySelectorAll(\".js-selftest-valued-back\");\r\n this.resultButton = element.querySelector(\".js-selftest-valued-result\");\r\n\r\n let activeGroupeId = parseInt(element.getAttribute('data-active-groupid') || '0', 10);\r\n\r\n this.questionGroups.forEach(slide => {\r\n addClass(slide, 'hide');\r\n this.setActiveSlide(slide, activeGroupeId);\r\n });\r\n \r\n this.nextButtons.forEach(button =>\r\n button.addEventListener('click', () => {\r\n activeGroupeId += 1;\r\n element.setAttribute('data-active-groupid', activeGroupeId.toString());\r\n this.setActiveSlide(null, activeGroupeId);\r\n })\r\n );\r\n\r\n this.backButtons.forEach(button =>\r\n button.addEventListener('click', () => {\r\n\r\n activeGroupeId -= 1;\r\n element.setAttribute('data-active-groupid', activeGroupeId.toString());\r\n this.setActiveSlide(null, activeGroupeId);\r\n })\r\n );\r\n }\r\n\r\n private setActiveSlide(newSlide: any = null, activeGroupeId: number) {\r\n if (this.currentActiveSlide) {\r\n removeClass(this.currentActiveSlide, 'show');\r\n addClass(this.currentActiveSlide, 'hide');\r\n }\r\n\r\n this.questionGroups.forEach(slide => {\r\n if (slide.getAttribute('data-group-id') === activeGroupeId.toString()) {\r\n removeClass(slide, 'hide');\r\n addClass(slide, 'show');\r\n this.currentActiveSlide = slide; \r\n }\r\n });\r\n }\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport Slider from '@opten/slider';\r\nimport SliderDotsResponsiveBehavior from '@opten/slider/dots-responsive-behavior';\r\nimport SliderArrowsResponsiveBehavior from '@opten/slider/arrows-responsive-behavior';\r\nimport {SliderCollapseBehavior} from '@opten/slider/collapse-slider-behavior';\r\n\r\n\r\n@Component({ className: 'js-slider', observe: true })\r\nexport default class SliderComponent {\r\n\tprivate slider: Slider;\r\n\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tconst behaviors = [new SliderDotsResponsiveBehavior(),new SliderArrowsResponsiveBehavior(), new SliderCollapseBehavior()];\r\n\r\n\t\tthis.slider = new Slider(element, {}, behaviors);\r\n\t}\r\n\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport Slider from '@opten/slider';\r\nimport SliderAsNavForBehavior from '@opten/slider/as-nav-for-behavior';\r\nimport getParentWithClass from '@opten/dom/get-parent-with-class';\r\n\r\n\r\n@Component({ className: 'js-text-image__slider' })\r\nexport default class TextImageSliderComponent {\r\n\tprivate slider: Slider;\r\n\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tconst behaviors = [new SliderAsNavForBehavior(getParentWithClass(element, 'js-text-image__slider__wrapper'))];\r\n\r\n\t\tthis.slider = new Slider(element, {}, behaviors);\r\n\t}\r\n\r\n}\r\n","// global cookie cache\r\nconst cookies = {};\r\n\r\nexport function getCookie(key: string) {\r\n if (cookies[key]) {\r\n return cookies[key];\r\n }\r\n\r\n const all = document.cookie.split('; ');\r\n\r\n for (let i = all.length - 1; i >= 0; i--) {\r\n const cookie = all[i].split('=');\r\n cookies[cookie[0]] = cookie[1];\r\n }\r\n\r\n return cookies[key];\r\n}\r\n\r\nexport function setCookie(\r\n key: string,\r\n value: string,\r\n date: Date,\r\n secure: boolean = true,\r\n path: string = '/',\r\n domain?: string\r\n) {\r\n const cookie = [\r\n `${key}${value ? `=${value}` : '='}`,\r\n `expires=${date.toUTCString()}`,\r\n `path=${path}`\r\n ];\r\n\r\n if (domain) {\r\n cookie.push(`domain=${domain}`);\r\n }\r\n\r\n if (secure) {\r\n cookie.push(`secure`);\r\n }\r\n\r\n delete cookies[key];\r\n document.cookie = cookie.join(';');\r\n}\r\n\r\nexport function deleteCookie(key: string, path: string = '/') {\r\n if (getCookie(key)) {\r\n delete cookies[key];\r\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=${path};`;\r\n }\r\n}\r\n","export const MOBILE_WIDTH = 1024;\r\nexport const PAD_WIDTH = 1200;\r\n\r\n// todo: something like Angular? Breakpoint detection?\r\nexport function isMobile() {\r\n return window.innerWidth < MOBILE_WIDTH;\r\n}\r\n\r\n// todo: something like Angular? Breakpoint detection?\r\nexport function isPad() {\r\n return window.innerWidth < PAD_WIDTH;\r\n}\r\n","import getWindowScrollTop from '@opten/dom/get-window-scroll-top';\r\nimport parseCssUnit from '@opten/number/parse-css-unit';\r\n\r\nimport getCss from '@opten/dom/get-css';\r\nimport { isPad } from './detection';\r\n\r\n// todo: @opten/typings?\r\n\r\nexport function lockScrollbar(\r\n callback: () => void,\r\n bodyElement: HTMLElement = document.body\r\n) {\r\n if (!isPad()) {\r\n callback();\r\n return;\r\n }\r\n\r\n // preserve the current scrolling because `--navbar--expanded`\r\n // fixes the body, so iOS doesn't scroll in the background!\r\n const scroll = getWindowScrollTop();\r\n\r\n if (scroll >= 0) {\r\n requestAnimationFrame(() => {\r\n bodyElement.style.top = `${clampScroll(scroll)}px`;\r\n\r\n // todo: cache old values?\r\n document.body.style.height = '100%';\r\n document.documentElement.style.height = '100%';\r\n\r\n bodyElement.style.position = 'fixed';\r\n bodyElement.style.width = '100%';\r\n bodyElement.style.height = '100%';\r\n bodyElement.style.overflow = 'hidden';\r\n\r\n // some weird behaviour in iOS if we set the element fixed\r\n // the navbar closes immediately, so we have a timeout...\r\n setTimeout(() => callback(), 150);\r\n });\r\n }\r\n}\r\n\r\nexport function unlockScrollbar(bodyElement: HTMLElement = document.body) {\r\n if (!isPad()) {\r\n return;\r\n }\r\n\r\n // preserve the cached scroll, so we can scroll\r\n // back to this state.\r\n const scroll = clampScroll(parseCssUnit(bodyElement.style.top));\r\n const paddingTop = parseCssUnit(bodyElement.style.paddingTop);\r\n bodyElement.style.top = null;\r\n\r\n // todo: reset old values?\r\n bodyElement.style.position = null;\r\n bodyElement.style.width = null;\r\n bodyElement.style.height = null;\r\n bodyElement.style.overflow = null;\r\n bodyElement.removeAttribute('style');\r\n bodyElement.style.paddingTop = paddingTop + \"px\";\r\n\r\n\r\n if (scroll >= 0) {\r\n scrollTo(0, scroll);\r\n }\r\n}\r\n\r\nexport function getStickyOffset() {\r\n const elements: Array = [];\r\n\r\n // todo: better way?\r\n const header = document.getElementsByClassName(\r\n 'js-header'\r\n )[0] as HTMLElement;\r\n const cookieConsent = document.getElementsByClassName(\r\n 'js-cookie-consent'\r\n )[0] as HTMLElement;\r\n\r\n if (header) {\r\n elements.push(header);\r\n }\r\n if (cookieConsent) {\r\n elements.push(cookieConsent);\r\n }\r\n\r\n return Math.round(\r\n elements\r\n .map(o => o.getBoundingClientRect().height)\r\n .reduce((pv, cv) => pv + cv, 0)\r\n );\r\n}\r\n\r\nfunction clampScroll(scroll: number) {\r\n return scroll === 0 ? scroll : scroll * -1;\r\n}\r\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n",null,"/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface ClusterOptions {\n position?: google.maps.LatLng | google.maps.LatLngLiteral;\n markers?: google.maps.Marker[];\n}\n\nexport class Cluster {\n public marker: google.maps.Marker;\n public readonly markers?: google.maps.Marker[];\n protected _position: google.maps.LatLng;\n\n constructor({ markers, position }: ClusterOptions) {\n this.markers = markers;\n\n if (position) {\n if (position instanceof google.maps.LatLng) {\n this._position = position;\n } else {\n this._position = new google.maps.LatLng(position);\n }\n }\n }\n\n public get bounds(): google.maps.LatLngBounds | undefined {\n if (this.markers.length === 0 && !this._position) {\n return undefined;\n }\n\n return this.markers.reduce((bounds, marker) => {\n return bounds.extend(marker.getPosition());\n }, new google.maps.LatLngBounds(this._position, this._position));\n }\n\n public get position(): google.maps.LatLng {\n return this._position || this.bounds.getCenter();\n }\n\n /**\n * Get the count of **visible** markers.\n */\n public get count(): number {\n return this.markers.filter((m: google.maps.Marker) => m.getVisible())\n .length;\n }\n\n /**\n * Add a marker to the cluster.\n */\n public push(marker: google.maps.Marker): void {\n this.markers.push(marker);\n }\n\n /**\n * Cleanup references and remove marker from map.\n */\n public delete(): void {\n if (this.marker) {\n this.marker.setMap(null);\n delete this.marker;\n }\n this.markers.length = 0;\n }\n}\n","/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const filterMarkersToPaddedViewport = (\n map: google.maps.Map,\n mapCanvasProjection: google.maps.MapCanvasProjection,\n markers: google.maps.Marker[],\n viewportPadding: number\n): google.maps.Marker[] => {\n const extendedMapBounds = extendBoundsToPaddedViewport(\n map.getBounds(),\n mapCanvasProjection,\n viewportPadding\n );\n return markers.filter((marker) =>\n extendedMapBounds.contains(marker.getPosition())\n );\n};\n\n/**\n * Extends a bounds by a number of pixels in each direction.\n */\nexport const extendBoundsToPaddedViewport = (\n bounds: google.maps.LatLngBounds,\n projection: google.maps.MapCanvasProjection,\n pixels: number\n): google.maps.LatLngBounds => {\n const { northEast, southWest } = latLngBoundsToPixelBounds(\n bounds,\n projection\n );\n const extendedPixelBounds = extendPixelBounds(\n { northEast, southWest },\n pixels\n );\n return pixelBoundsToLatLngBounds(extendedPixelBounds, projection);\n};\n\n/**\n * @hidden\n */\nexport const distanceBetweenPoints = (\n p1: google.maps.LatLngLiteral,\n p2: google.maps.LatLngLiteral\n): number => {\n const R = 6371; // Radius of the Earth in km\n const dLat = ((p2.lat - p1.lat) * Math.PI) / 180;\n const dLon = ((p2.lng - p1.lng) * Math.PI) / 180;\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos((p1.lat * Math.PI) / 180) *\n Math.cos((p2.lat * Math.PI) / 180) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2);\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n return R * c;\n};\n\ntype PixelBounds = {\n northEast: google.maps.Point;\n southWest: google.maps.Point;\n};\n\n/**\n * @hidden\n */\nconst latLngBoundsToPixelBounds = (\n bounds: google.maps.LatLngBounds,\n projection: google.maps.MapCanvasProjection\n): PixelBounds => {\n return {\n northEast: projection.fromLatLngToDivPixel(bounds.getNorthEast()),\n southWest: projection.fromLatLngToDivPixel(bounds.getSouthWest()),\n };\n};\n\n/**\n * @hidden\n */\nexport const extendPixelBounds = (\n { northEast, southWest }: PixelBounds,\n pixels: number\n): PixelBounds => {\n northEast.x += pixels;\n northEast.y -= pixels;\n\n southWest.x -= pixels;\n southWest.y += pixels;\n\n return { northEast, southWest };\n};\n\n/**\n * @hidden\n */\nexport const pixelBoundsToLatLngBounds = (\n { northEast, southWest }: PixelBounds,\n projection: google.maps.MapCanvasProjection\n): google.maps.LatLngBounds => {\n const bounds = new google.maps.LatLngBounds();\n bounds.extend(projection.fromDivPixelToLatLng(northEast));\n bounds.extend(projection.fromDivPixelToLatLng(southWest));\n return bounds;\n};\n","/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Cluster } from \"../cluster\";\nimport { filterMarkersToPaddedViewport } from \"./utils\";\n\nexport interface AlgorithmInput {\n /**\n * The map containing the markers and clusters.\n */\n map: google.maps.Map;\n /**\n * An array of markers to be clustered.\n *\n * There are some specific edge cases to be aware of including the following:\n * * Markers that are not visible.\n */\n markers: google.maps.Marker[];\n /**\n * The `mapCanvasProjection` enables easy conversion from lat/lng to pixel.\n *\n * @see [MapCanvasProjection](https://developers.google.com/maps/documentation/javascript/reference/overlay-view#MapCanvasProjection)\n */\n mapCanvasProjection: google.maps.MapCanvasProjection;\n}\n\nexport interface AlgorithmOutput {\n /**\n * The clusters returned based upon the {@link AlgorithmInput}.\n */\n clusters: Cluster[];\n /**\n * A boolean flag indicating that the clusters have not changed.\n */\n changed?: boolean;\n}\n\nexport interface Algorithm {\n /**\n * Calculates an array of {@link Cluster}.\n */\n calculate: ({ markers, map }: AlgorithmInput) => AlgorithmOutput;\n}\n\nexport interface AlgorithmOptions {\n maxZoom?: number;\n}\n/**\n * @hidden\n */\nexport abstract class AbstractAlgorithm implements Algorithm {\n protected maxZoom: number;\n\n constructor({ maxZoom = 16 }: AlgorithmOptions) {\n this.maxZoom = maxZoom;\n }\n /**\n * Helper function to bypass clustering based upon some map state such as\n * zoom, number of markers, etc.\n *\n * ```typescript\n * cluster({markers, map}: AlgorithmInput): Cluster[] {\n * if (shouldBypassClustering(map)) {\n * return this.noop({markers, map})\n * }\n * }\n * ```\n */\n protected noop({ markers }: AlgorithmInput): Cluster[] {\n return noop(markers);\n }\n /**\n * Calculates an array of {@link Cluster}. Calculate is separate from\n * {@link cluster} as it does preprocessing on the markers such as filtering\n * based upon the viewport as in {@link AbstractViewportAlgorithm}. Caching\n * and other optimizations can also be done here.\n */\n public abstract calculate({ markers, map }: AlgorithmInput): AlgorithmOutput;\n\n /**\n * Clusters the markers and called from {@link calculate}.\n */\n protected abstract cluster({ markers, map }: AlgorithmInput): Cluster[];\n}\n\n/**\n * @hidden\n */\nexport interface ViewportAlgorithmOptions extends AlgorithmOptions {\n /**\n * The number of pixels to extend beyond the viewport bounds when filtering\n * markers prior to clustering.\n */\n viewportPadding?: number;\n}\n\n/**\n * Abstract viewport algorithm proves a class to filter markers by a padded\n * viewport. This is a common optimization.\n *\n * @hidden\n */\nexport abstract class AbstractViewportAlgorithm extends AbstractAlgorithm {\n protected viewportPadding = 60;\n\n constructor({ viewportPadding = 60, ...options }: ViewportAlgorithmOptions) {\n super(options);\n this.viewportPadding = viewportPadding;\n }\n public calculate({\n markers,\n map,\n mapCanvasProjection,\n }: AlgorithmInput): AlgorithmOutput {\n if (map.getZoom() >= this.maxZoom) {\n return {\n clusters: this.noop({\n markers,\n map,\n mapCanvasProjection,\n }),\n changed: false,\n };\n }\n\n return {\n clusters: this.cluster({\n markers: filterMarkersToPaddedViewport(\n map,\n mapCanvasProjection,\n markers,\n this.viewportPadding\n ),\n map,\n mapCanvasProjection,\n }),\n };\n }\n protected abstract cluster({ markers, map }: AlgorithmInput): Cluster[];\n}\n\n/**\n * @hidden\n */\nexport const noop = (markers: google.maps.Marker[]): Cluster[] => {\n const clusters = markers.map(\n (marker) =>\n new Cluster({\n position: marker.getPosition(),\n markers: [marker],\n })\n );\n return clusters;\n};\n","/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n AbstractViewportAlgorithm,\n AlgorithmInput,\n AlgorithmOutput,\n ViewportAlgorithmOptions,\n} from \"./core\";\nimport {\n distanceBetweenPoints,\n extendBoundsToPaddedViewport,\n filterMarkersToPaddedViewport,\n} from \"./utils\";\n\nimport { Cluster } from \"../cluster\";\nimport equal from \"fast-deep-equal\";\n\nexport interface GridOptions extends ViewportAlgorithmOptions {\n gridSize?: number;\n /**\n * Max distance between cluster center and point in meters.\n * @default 10000\n */\n maxDistance?: number;\n}\n\n/**\n * The default Grid algorithm historically used in Google Maps marker\n * clustering.\n *\n * The Grid algorithm does not implement caching and markers may flash as the\n * viewport changes. Instead use {@link SuperClusterAlgorithm}.\n */\nexport class GridAlgorithm extends AbstractViewportAlgorithm {\n protected gridSize: number;\n protected maxDistance: number;\n protected clusters: Cluster[] = [];\n protected state: { zoom: number };\n\n constructor({ maxDistance = 40000, gridSize = 40, ...options }: GridOptions) {\n super(options);\n\n this.maxDistance = maxDistance;\n this.gridSize = gridSize;\n this.state = { zoom: null };\n }\n\n public calculate({\n markers,\n map,\n mapCanvasProjection,\n }: AlgorithmInput): AlgorithmOutput {\n const state = { zoom: map.getZoom() };\n let changed = false;\n if (this.state.zoom > this.maxZoom && state.zoom > this.maxZoom) {\n // still beyond maxZoom, no change\n } else {\n changed = !equal(this.state, state);\n }\n this.state = state;\n if (map.getZoom() >= this.maxZoom) {\n return {\n clusters: this.noop({\n markers,\n map,\n mapCanvasProjection,\n }),\n changed: changed,\n };\n }\n\n return {\n clusters: this.cluster({\n markers: filterMarkersToPaddedViewport(\n map,\n mapCanvasProjection,\n markers,\n this.viewportPadding\n ),\n map,\n mapCanvasProjection,\n }),\n };\n }\n\n protected cluster({\n markers,\n map,\n mapCanvasProjection,\n }: AlgorithmInput): Cluster[] {\n this.clusters = [];\n markers.forEach((marker) => {\n this.addToClosestCluster(marker, map, mapCanvasProjection);\n });\n\n return this.clusters;\n }\n\n protected addToClosestCluster(\n marker: google.maps.Marker,\n map: google.maps.Map,\n projection: google.maps.MapCanvasProjection\n ): void {\n let maxDistance = this.maxDistance; // Some large number\n let cluster: Cluster = null;\n\n for (let i = 0; i < this.clusters.length; i++) {\n const candidate = this.clusters[i];\n const distance = distanceBetweenPoints(\n candidate.bounds.getCenter().toJSON(),\n marker.getPosition().toJSON()\n );\n\n if (distance < maxDistance) {\n maxDistance = distance;\n cluster = candidate;\n }\n }\n\n if (\n cluster &&\n extendBoundsToPaddedViewport(\n cluster.bounds,\n projection,\n this.gridSize\n ).contains(marker.getPosition())\n ) {\n cluster.push(marker);\n } else {\n const cluster = new Cluster({ markers: [marker] });\n this.clusters.push(cluster);\n }\n }\n}\n","/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n AbstractAlgorithm,\n AlgorithmInput,\n AlgorithmOptions,\n AlgorithmOutput,\n} from \"./core\";\n\nimport { Cluster } from \"../cluster\";\n\n/**\n * Noop algorithm does not generate any clusters or filter markers by the an extended viewport.\n */\nexport class NoopAlgorithm extends AbstractAlgorithm {\n constructor({ ...options }: AlgorithmOptions) {\n super(options);\n }\n public calculate({\n markers,\n map,\n mapCanvasProjection,\n }: AlgorithmInput): AlgorithmOutput {\n return {\n clusters: this.cluster({ markers, map, mapCanvasProjection }),\n changed: false,\n };\n }\n\n protected cluster(input: AlgorithmInput): Cluster[] {\n return this.noop(input);\n }\n}\n","/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbstractAlgorithm, AlgorithmInput, AlgorithmOutput } from \"./core\";\nimport SuperCluster, { ClusterFeature } from \"supercluster\";\n\nimport { Cluster } from \"../cluster\";\nimport equal from \"fast-deep-equal\";\n\nexport type SuperClusterOptions = SuperCluster.Options<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { [name: string]: any },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { [name: string]: any }\n>;\n\n/**\n * A very fast JavaScript algorithm for geospatial point clustering using KD trees.\n *\n * @see https://www.npmjs.com/package/supercluster for more information on options.\n */\nexport class SuperClusterAlgorithm extends AbstractAlgorithm {\n protected superCluster: SuperCluster;\n protected markers: google.maps.Marker[];\n protected clusters: Cluster[];\n protected state: { zoom: number };\n\n constructor({ maxZoom, radius = 60, ...options }: SuperClusterOptions) {\n super({ maxZoom });\n\n this.superCluster = new SuperCluster({\n maxZoom: this.maxZoom,\n radius,\n ...options,\n });\n\n this.state = { zoom: null };\n }\n public calculate(input: AlgorithmInput): AlgorithmOutput {\n let changed = false;\n\n if (!equal(input.markers, this.markers)) {\n changed = true;\n // TODO use proxy to avoid copy?\n this.markers = [...input.markers];\n\n const points = this.markers.map((marker) => {\n return {\n type: \"Feature\" as const,\n geometry: {\n type: \"Point\" as const,\n coordinates: [\n marker.getPosition().lng(),\n marker.getPosition().lat(),\n ],\n },\n properties: { marker },\n };\n });\n\n this.superCluster.load(points);\n }\n\n const state = { zoom: input.map.getZoom() };\n\n if (!changed) {\n if (this.state.zoom > this.maxZoom && state.zoom > this.maxZoom) {\n // still beyond maxZoom, no change\n } else {\n changed = changed || !equal(this.state, state);\n }\n }\n\n this.state = state;\n\n if (changed) {\n this.clusters = this.cluster(input);\n }\n\n return { clusters: this.clusters, changed };\n }\n\n public cluster({ map }: AlgorithmInput): Cluster[] {\n return this.superCluster\n .getClusters([-180, -90, 180, 90], Math.round(map.getZoom()))\n .map(this.transformCluster.bind(this));\n }\n\n protected transformCluster({\n geometry: {\n coordinates: [lng, lat],\n },\n properties,\n }: ClusterFeature<{ marker: google.maps.Marker }>): Cluster {\n if (properties.cluster) {\n return new Cluster({\n markers: this.superCluster\n .getLeaves(properties.cluster_id, Infinity)\n .map((leaf) => leaf.properties.marker),\n position: new google.maps.LatLng({ lat, lng }),\n });\n } else {\n const marker = properties.marker;\n\n return new Cluster({\n markers: [marker],\n position: marker.getPosition(),\n });\n }\n }\n}\n","/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Cluster } from \"./cluster\";\n\n/**\n * Provides statistics on all clusters in the current render cycle for use in {@link Renderer.render}.\n */\nexport class ClusterStats {\n public readonly markers: { sum: number };\n public readonly clusters: {\n count: number;\n markers: {\n mean: number;\n sum: number;\n min: number;\n max: number;\n };\n };\n\n constructor(markers: google.maps.Marker[], clusters: Cluster[]) {\n this.markers = { sum: markers.length };\n\n const clusterMarkerCounts = clusters.map((a) => a.count);\n const clusterMarkerSum = clusterMarkerCounts.reduce((a, b) => a + b, 0);\n\n this.clusters = {\n count: clusters.length,\n markers: {\n mean: clusterMarkerSum / clusters.length,\n sum: clusterMarkerSum,\n min: Math.min(...clusterMarkerCounts),\n max: Math.max(...clusterMarkerCounts),\n },\n };\n }\n}\n\nexport interface Renderer {\n /**\n * Turn a {@link Cluster} into a `google.maps.Marker`.\n *\n * Below is a simple example to create a marker with the number of markers in the cluster as a label.\n *\n * ```typescript\n * return new google.maps.Marker({\n * position,\n * label: String(markers.length),\n * });\n * ```\n */\n render(cluster: Cluster, stats: ClusterStats): google.maps.Marker;\n}\n\nexport class DefaultRenderer implements Renderer {\n /**\n * The default render function for the library used by {@link MarkerClusterer}.\n *\n * Currently set to use the following:\n *\n * ```typescript\n * // change color if this cluster has more markers than the mean cluster\n * const color =\n * count > Math.max(10, stats.clusters.markers.mean)\n * ? \"#ff0000\"\n * : \"#0000ff\";\n *\n * // create svg url with fill color\n * const svg = window.btoa(`\n * \n * \n * \n * \n * \n * `);\n *\n * // create marker using svg icon\n * return new google.maps.Marker({\n * position,\n * icon: {\n * url: `data:image/svg+xml;base64,${svg}`,\n * scaledSize: new google.maps.Size(45, 45),\n * },\n * label: {\n * text: String(count),\n * color: \"rgba(255,255,255,0.9)\",\n * fontSize: \"12px\",\n * },\n * // adjust zIndex to be above other markers\n * zIndex: 1000 + count,\n * });\n * ```\n */\n public render(\n { count, position }: Cluster,\n stats: ClusterStats\n ): google.maps.Marker {\n // change color if this cluster has more markers than the mean cluster\n const color =\n count > Math.max(10, stats.clusters.markers.mean) ? \"#ff0000\" : \"#0000ff\";\n\n // create svg url with fill color\n const svg = window.btoa(`\n \n \n \n \n `);\n\n // create marker using svg icon\n return new google.maps.Marker({\n position,\n icon: {\n url: `data:image/svg+xml;base64,${svg}`,\n scaledSize: new google.maps.Size(45, 45),\n },\n label: {\n text: String(count),\n color: \"rgba(255,255,255,0.9)\",\n fontSize: \"12px\",\n },\n title: `Cluster of ${count} markers`,\n // adjust zIndex to be above other markers\n zIndex: Number(google.maps.Marker.MAX_ZINDEX) + count,\n });\n }\n}\n","/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Algorithm, SuperClusterAlgorithm } from \"./algorithms\";\nimport { ClusterStats, DefaultRenderer, Renderer } from \"./renderer\";\n\nimport { Cluster } from \"./cluster\";\nimport { OverlayViewSafe } from \"./overlay-view-safe\";\n\nexport type onClusterClickHandler = (\n event: google.maps.MapMouseEvent,\n cluster: Cluster,\n map: google.maps.Map\n) => void;\nexport interface MarkerClustererOptions {\n markers?: google.maps.Marker[];\n /**\n * An algorithm to cluster markers. Default is {@link SuperClusterAlgorithm}. Must\n * provide a `calculate` method accepting {@link AlgorithmInput} and returning\n * an array of {@link Cluster}.\n */\n algorithm?: Algorithm;\n map?: google.maps.Map | null;\n /**\n * An object that converts a {@link Cluster} into a `google.maps.Marker`.\n * Default is {@link DefaultRenderer}.\n */\n renderer?: Renderer;\n onClusterClick?: onClusterClickHandler;\n}\n\nexport enum MarkerClustererEvents {\n CLUSTERING_BEGIN = \"clusteringbegin\",\n CLUSTERING_END = \"clusteringend\",\n CLUSTER_CLICK = \"click\",\n}\n\nexport const defaultOnClusterClickHandler: onClusterClickHandler = (\n _: google.maps.MapMouseEvent,\n cluster: Cluster,\n map: google.maps.Map\n): void => {\n map.fitBounds(cluster.bounds);\n};\n/**\n * MarkerClusterer creates and manages per-zoom-level clusters for large amounts\n * of markers. See {@link MarkerClustererOptions} for more details.\n *\n */\nexport class MarkerClusterer extends OverlayViewSafe {\n /** @see {@link MarkerClustererOptions.onClusterClick} */\n public onClusterClick: onClusterClickHandler;\n /** @see {@link MarkerClustererOptions.algorithm} */\n protected algorithm: Algorithm;\n protected clusters: Cluster[];\n protected markers: google.maps.Marker[];\n /** @see {@link MarkerClustererOptions.renderer} */\n protected renderer: Renderer;\n /** @see {@link MarkerClustererOptions.map} */\n protected map: google.maps.Map | null;\n /** @see {@link MarkerClustererOptions.maxZoom} */\n protected idleListener: google.maps.MapsEventListener;\n\n constructor({\n map,\n markers = [],\n algorithm = new SuperClusterAlgorithm({}),\n renderer = new DefaultRenderer(),\n onClusterClick = defaultOnClusterClickHandler,\n }: MarkerClustererOptions) {\n super();\n this.markers = [...markers];\n this.clusters = [];\n\n this.algorithm = algorithm;\n this.renderer = renderer;\n\n this.onClusterClick = onClusterClick;\n\n if (map) {\n this.setMap(map);\n }\n }\n\n public addMarker(marker: google.maps.Marker, noDraw?: boolean): void {\n if (this.markers.includes(marker)) {\n return;\n }\n\n this.markers.push(marker);\n if (!noDraw) {\n this.render();\n }\n }\n\n public addMarkers(markers: google.maps.Marker[], noDraw?: boolean): void {\n markers.forEach((marker) => {\n this.addMarker(marker, true);\n });\n\n if (!noDraw) {\n this.render();\n }\n }\n\n public removeMarker(marker: google.maps.Marker, noDraw?: boolean): boolean {\n const index = this.markers.indexOf(marker);\n\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false;\n }\n\n marker.setMap(null);\n this.markers.splice(index, 1); // Remove the marker from the list of managed markers\n\n if (!noDraw) {\n this.render();\n }\n\n return true;\n }\n\n public removeMarkers(\n markers: google.maps.Marker[],\n noDraw?: boolean\n ): boolean {\n let removed = false;\n\n markers.forEach((marker) => {\n removed = this.removeMarker(marker, true) || removed;\n });\n\n if (removed && !noDraw) {\n this.render();\n }\n\n return removed;\n }\n\n public clearMarkers(noDraw?: boolean): void {\n this.markers.length = 0;\n\n if (!noDraw) {\n this.render();\n }\n }\n\n /**\n * Recalculates and draws all the marker clusters.\n */\n public render(): void {\n const map = this.getMap();\n if (map instanceof google.maps.Map && this.getProjection()) {\n google.maps.event.trigger(\n this,\n MarkerClustererEvents.CLUSTERING_BEGIN,\n this\n );\n const { clusters, changed } = this.algorithm.calculate({\n markers: this.markers,\n map,\n mapCanvasProjection: this.getProjection(),\n });\n\n // allow algorithms to return flag on whether the clusters/markers have changed\n if (changed || changed == undefined) {\n // reset visibility of markers and clusters\n this.reset();\n\n // store new clusters\n this.clusters = clusters;\n\n this.renderClusters();\n }\n google.maps.event.trigger(\n this,\n MarkerClustererEvents.CLUSTERING_END,\n this\n );\n }\n }\n\n public onAdd(): void {\n this.idleListener = this.getMap().addListener(\n \"idle\",\n this.render.bind(this)\n );\n this.render();\n }\n\n public onRemove(): void {\n google.maps.event.removeListener(this.idleListener);\n this.reset();\n }\n\n protected reset(): void {\n this.markers.forEach((marker) => marker.setMap(null));\n this.clusters.forEach((cluster) => cluster.delete());\n this.clusters = [];\n }\n\n protected renderClusters(): void {\n // generate stats to pass to renderers\n const stats = new ClusterStats(this.markers, this.clusters);\n const map = this.getMap() as google.maps.Map;\n\n this.clusters.forEach((cluster) => {\n if (cluster.markers.length === 1) {\n cluster.marker = cluster.markers[0];\n } else {\n cluster.marker = this.renderer.render(cluster, stats);\n\n if (this.onClusterClick) {\n cluster.marker.addListener(\n \"click\",\n /* istanbul ignore next */\n (event: google.maps.MapMouseEvent) => {\n google.maps.event.trigger(\n this,\n MarkerClustererEvents.CLUSTER_CLICK,\n cluster\n );\n this.onClusterClick(event, cluster, map);\n }\n );\n }\n }\n\n cluster.marker.setMap(map);\n });\n }\n}\n","/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface OverlayViewSafe extends google.maps.OverlayView {}\n\n/**\n * Extends an object's prototype by another's.\n *\n * @param type1 The Type to be extended.\n * @param type2 The Type to extend with.\n * @ignore\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extend(type1: any, type2: any): void {\n /* istanbul ignore next */\n // eslint-disable-next-line prefer-const\n for (let property in type2.prototype) {\n type1.prototype[property] = type2.prototype[property];\n }\n}\n\n/**\n * @ignore\n */\nexport class OverlayViewSafe {\n constructor() {\n // MarkerClusterer implements google.maps.OverlayView interface. We use the\n // extend function to extend MarkerClusterer with google.maps.OverlayView\n // because it might not always be available when the code is defined so we\n // look for it at the last possible moment. If it doesn't exist now then\n // there is no point going ahead :)\n extend(OverlayViewSafe, google.maps.OverlayView);\n }\n}\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction easeInOutQuad(timeElapsed, start, distance, duration) {\r\n timeElapsed /= duration / 2;\r\n if (timeElapsed < 1) {\r\n return distance / 2 * timeElapsed * timeElapsed + start;\r\n }\r\n timeElapsed--;\r\n return -distance / 2 * (timeElapsed * (timeElapsed - 2) - 1) + start;\r\n}\r\nexports.default = easeInOutQuad;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction linearTween(timeElapsed, start, distance, duration) {\r\n return distance * timeElapsed / duration + start;\r\n}\r\nexports.default = linearTween;\r\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar add_class_1 = require(\"@opten/dom/add-class\");\r\nvar remove_class_1 = require(\"@opten/dom/remove-class\");\r\nvar BreadcrumbOptions = /** @class */ (function () {\r\n function BreadcrumbOptions() {\r\n }\r\n return BreadcrumbOptions;\r\n}());\r\nexports.BreadcrumbOptions = BreadcrumbOptions;\r\nvar Breadcrumb = /** @class */ (function () {\r\n function Breadcrumb(element, options) {\r\n this.element = element;\r\n this.options = {\r\n expandClassName: 'js-breadcrumb-expand',\r\n itemClassName: 'js-breadcrumb-item',\r\n initializedClassName: '--initialized',\r\n scrollToLabel: false,\r\n breakpoints: {\r\n maxWidth: undefined\r\n }\r\n };\r\n // todo: config? or data-expanded=\"true|false\"\r\n this.expanded = true;\r\n this.options = __assign({}, this.options, options);\r\n this.listElement = this.element.firstElementChild;\r\n this._init();\r\n }\r\n Breadcrumb.prototype._init = function () {\r\n var _this = this;\r\n this.itemElements = Array.from(this.element.getElementsByClassName(this.options.itemClassName));\r\n if (this.itemElements && this.itemElements.length) {\r\n var togglers = Array.from(document.getElementsByClassName(this.options.expandClassName));\r\n togglers.forEach(function (button) {\r\n return button.addEventListener('click', function (event) {\r\n return _this._handleClick(event, button);\r\n });\r\n });\r\n // todo: better way?\r\n // slice(1) to exlude expander\r\n if (this.options.scrollToLabel) {\r\n this.itemElements.slice(1).forEach(function (item, index) {\r\n //TODO: js-breadcrumb-label?\r\n var link = item.getElementsByTagName('a')[0];\r\n if (link) {\r\n link.addEventListener('click', function (event) {\r\n // only prevent default if we have a menu\r\n // otherwise normal links doesn' work anymore\r\n if (link.href.indexOf('#menu-breadcrumb') !== -1) {\r\n event.preventDefault();\r\n _this._setFocus(index);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n // close the breadcrumb if we hit the breakpoint\r\n if (this.expanded &&\r\n this.options.breakpoints.maxWidth &&\r\n window.innerWidth < this.options.breakpoints.maxWidth &&\r\n this.itemElements.length > 2) {\r\n this.expanded = false;\r\n togglers.forEach(function (toggler) { return _this._toggle(toggler); });\r\n }\r\n }\r\n if (this.options.initializedClassName) {\r\n add_class_1.default(this.element, this.options.initializedClassName);\r\n }\r\n };\r\n /**\r\n * Sets focus on the HTML element for the label and scrolls it into the view if\r\n * scrolling is enabled.\r\n */\r\n Breadcrumb.prototype._setFocus = function (index) {\r\n this._scrollToLabel(index);\r\n if (this.itemElements && this.itemElements.length) {\r\n this.itemElements[index].focus();\r\n }\r\n };\r\n /**\r\n * Moves the list such that the desired label (marked by index) is moved into view.\r\n */\r\n Breadcrumb.prototype._scrollToLabel = function (index) {\r\n var selected = this.itemElements ? this.itemElements[index + 1] : null;\r\n if (!selected) {\r\n return;\r\n }\r\n this._updateScrollPosition(selected.offsetLeft);\r\n };\r\n /** Performs transformation on the list that will cause the list to scroll. */\r\n Breadcrumb.prototype._updateScrollPosition = function (scrollDistance) {\r\n this.listElement.scrollLeft = scrollDistance + 20;\r\n };\r\n Breadcrumb.prototype._handleClick = function (event, button) {\r\n event.preventDefault();\r\n this.expanded = !this.expanded;\r\n this._toggle(button);\r\n // scroll to last one...\r\n this._scrollToLabel(this.itemElements.length - 1);\r\n };\r\n Breadcrumb.prototype._toggle = function (button) {\r\n var _this = this;\r\n if (this.expanded) {\r\n add_class_1.default(button.parentElement, '--hidden');\r\n this._updateAria(button.parentElement, false);\r\n // slice(1) to exlude expander and last item\r\n this.itemElements.slice(1).forEach(function (item) {\r\n remove_class_1.default(item, '--hidden');\r\n _this._updateAria(item, true);\r\n });\r\n }\r\n else {\r\n remove_class_1.default(button.parentElement, '--hidden');\r\n this._updateAria(button.parentElement, true);\r\n // slice(1, end) to exlude expander and last item\r\n // because last item is always expanded...\r\n var end = this.itemElements.length - 1;\r\n this.itemElements.slice(1, end).forEach(function (item) {\r\n add_class_1.default(item, '--hidden');\r\n _this._updateAria(item, false);\r\n });\r\n }\r\n };\r\n Breadcrumb.prototype._updateAria = function (item, expanded) {\r\n item.setAttribute('aria-expanded', expanded.toString());\r\n };\r\n return Breadcrumb;\r\n}());\r\nexports.Breadcrumb = Breadcrumb;\r\nfunction breadcrumb(element, options) {\r\n return new Breadcrumb(element, options);\r\n}\r\nexports.default = breadcrumb;\r\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nvar __values = (this && this.__values) || function (o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar add_class_1 = require(\"@opten/dom/add-class\");\r\nvar has_class_1 = require(\"@opten/dom/has-class\");\r\nvar remove_class_1 = require(\"@opten/dom/remove-class\");\r\nvar get_selector_element_from_element_1 = require(\"@opten/dom/get-selector-element-from-element\");\r\nvar add_transition_end_listener_1 = require(\"@opten/transition/add-transition-end-listener\");\r\nvar event_namespace_factory_1 = require(\"@opten/events/event-namespace-factory\");\r\nvar stringCollapse = 'Collapse';\r\nvar Collapse = /** @class */ (function () {\r\n function Collapse(element, options) {\r\n var _this = this;\r\n this.element = element;\r\n this.options = {\r\n activeClass: 'is--active',\r\n animateProp: 'height',\r\n collapsingClass: 'collapse--collapsing',\r\n componentClass: 'collapse',\r\n showClass: 'collapse--show',\r\n showClassDesktop: 'collapse--md-show',\r\n desktopWidth: 1024,\r\n transitionDuration: 600,\r\n isHideable: true,\r\n closeSiblings: true,\r\n useShowClassDesktop: false,\r\n dataParentSelector: 'data-parent',\r\n dataTargetSelector: 'data-target',\r\n dataToggleSelector: 'data-toggle',\r\n hrefSelector: 'href'\r\n };\r\n this.isTransitioning = false; // when true it will prevent click handlers\r\n // event names\r\n this.eventNamespaceFn = event_namespace_factory_1.default('opten.collapse');\r\n this.handleClick = function (event) {\r\n // preventDefault only for elements (which change the URL) not inside the collapsible element\r\n var trigger = event && event.currentTarget;\r\n if (trigger && trigger.tagName === 'A') {\r\n event.preventDefault();\r\n }\r\n var target = get_selector_element_from_element_1.default(trigger, _this.options.dataTargetSelector);\r\n var data = target[stringCollapse];\r\n if (!data) {\r\n data = trigger[stringCollapse];\r\n }\r\n if (target) {\r\n Collapse.getInstance(target, data.options).toggle();\r\n }\r\n };\r\n this.options = __assign({}, this.options, options);\r\n if (!this.options.parentElement) {\r\n this.options.parentElement = get_selector_element_from_element_1.default(element, this.options.dataParentSelector, false);\r\n }\r\n this.init();\r\n }\r\n Object.defineProperty(Collapse.prototype, \"toggles\", {\r\n // TODO: Uggly naming\r\n get: function () {\r\n return this.triggers;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Collapse.prototype.isOpen = function () {\r\n if (this.options.useShowClassDesktop &&\r\n window.outerWidth >= this.options.desktopWidth &&\r\n has_class_1.default(this.element, this.options.showClassDesktop)) {\r\n add_class_1.default(this.element, this.options.showClass);\r\n }\r\n remove_class_1.default(this.element, this.options.showClassDesktop);\r\n return has_class_1.default(this.element, this.options.showClass);\r\n };\r\n Collapse.prototype.toggle = function () {\r\n if (this.isOpen()) {\r\n if (this.options.isHideable) {\r\n this.hide();\r\n }\r\n }\r\n else {\r\n this.show();\r\n }\r\n };\r\n Collapse.prototype.show = function () {\r\n var _this = this;\r\n if (this.isTransitioning || this.isOpen()) {\r\n return;\r\n }\r\n if (this.options.closeSiblings && this.parent) {\r\n var selector = \"[\" + this.options.dataParentSelector + \"=\\\"#\" + this.parent.id + \"\\\"]\";\r\n var actives = Array.from(this.parent.querySelectorAll(selector + \".\" + this.options.showClass + \", \" + selector + \".\" + this.options.collapsingClass)).filter(function (active) { return active !== _this.target; });\r\n if (actives && actives.length) {\r\n var anyTransitioning = actives.filter(function (active) {\r\n var collapseInstance = active[stringCollapse];\r\n return collapseInstance && collapseInstance.isTransitioning;\r\n });\r\n if (anyTransitioning.length) {\r\n return;\r\n }\r\n actives.forEach(function (active) {\r\n return Collapse.getInstance(active).hide();\r\n });\r\n }\r\n }\r\n this._handleShow(this.element, this.triggers);\r\n };\r\n Collapse.prototype.hide = function () {\r\n if (this.isTransitioning || !this.isOpen()) {\r\n return;\r\n }\r\n this._handleClose(this.element, this.triggers);\r\n };\r\n Collapse.prototype.destroy = function () {\r\n var element = this.element;\r\n if (element[stringCollapse]) {\r\n element[stringCollapse] = null;\r\n remove_class_1.default(element, this.options.componentClass);\r\n remove_class_1.default(element, this.options.collapsingClass);\r\n remove_class_1.default(element, this.options.showClass);\r\n if (this.options.animateProp) {\r\n element.style[this.options.animateProp] = null;\r\n }\r\n }\r\n };\r\n Collapse.prototype.init = function () {\r\n var _this = this;\r\n var e_1, _a;\r\n // todo: only initalize once, like bootstrap does it?\r\n this.triggers = Array.from(document.querySelectorAll(\"[\" + this.options.hrefSelector + \"=\\\"#\" + this.element.id + \"\\\"], [\" + this.options.dataTargetSelector + \"=\\\"#\" + this.element.id + \"\\\"]\"));\r\n // todo: why do we need that?\r\n var toggles = Array.from(document.querySelectorAll(\"[\" + this.options.dataToggleSelector + \"=\\\"collapse\\\"]\"));\r\n try {\r\n for (var toggles_1 = __values(toggles), toggles_1_1 = toggles_1.next(); !toggles_1_1.done; toggles_1_1 = toggles_1.next()) {\r\n var toggle = toggles_1_1.value;\r\n var target = get_selector_element_from_element_1.default(toggle, this.options.dataTargetSelector);\r\n if (target !== null && target === this.element) {\r\n this.target = target;\r\n this.triggers.push(toggle);\r\n }\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (toggles_1_1 && !toggles_1_1.done && (_a = toggles_1.return)) _a.call(toggles_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n this.parent = this.options.parentElement;\r\n // init\r\n if (!(stringCollapse in this.element)) {\r\n // prevent adding event handlers twice\r\n this.triggers.forEach(function (trigger) {\r\n return trigger.addEventListener('click', _this.handleClick, false);\r\n });\r\n }\r\n if (this.parent) {\r\n Array.from(this.parent.querySelectorAll(\"[\" + this.options.dataToggleSelector + \"=\\\"collapse\\\"][\" + this.options.dataParentSelector + \"=\\\"#\" + this.parent.id + \"\\\"]\")).forEach(function (element) {\r\n _this._addAriaAndCollapsedClass(get_selector_element_from_element_1.default(element, _this.options.dataTargetSelector), [element]);\r\n });\r\n }\r\n else {\r\n this._addAriaAndCollapsedClass(this.element, this.triggers);\r\n }\r\n add_class_1.default(this.element, this.options.componentClass);\r\n this.element[stringCollapse] = this;\r\n };\r\n Collapse.prototype._handleShow = function (collapseElement, triggers) {\r\n var _this = this;\r\n this.eventNamespaceFn(collapseElement, 'show');\r\n remove_class_1.default(collapseElement, this.options.componentClass);\r\n add_class_1.default(collapseElement, this.options.collapsingClass);\r\n if (this.options.animateProp) {\r\n collapseElement.style[this.options.animateProp] =\r\n collapseElement.scrollHeight + 'px';\r\n }\r\n if (triggers && triggers.length) {\r\n triggers.forEach(function (trigger) {\r\n add_class_1.default(trigger, _this.options.activeClass);\r\n trigger.setAttribute('aria-expanded', 'true');\r\n });\r\n }\r\n this.isTransitioning = true;\r\n add_transition_end_listener_1.default(collapseElement, function () {\r\n remove_class_1.default(collapseElement, _this.options.collapsingClass);\r\n add_class_1.default(collapseElement, _this.options.componentClass);\r\n add_class_1.default(collapseElement, _this.options.showClass);\r\n _this.isTransitioning = false;\r\n if (_this.options.animateProp) {\r\n collapseElement.style[_this.options.animateProp] = null;\r\n }\r\n _this.eventNamespaceFn(collapseElement, 'shown');\r\n }, this.options.transitionDuration);\r\n };\r\n Collapse.prototype._handleClose = function (collapseElement, triggers) {\r\n var _this = this;\r\n this.eventNamespaceFn(collapseElement, 'hide');\r\n if (this.options.animateProp) {\r\n collapseElement.style[this.options.animateProp] =\r\n collapseElement.scrollHeight + 'px';\r\n }\r\n add_class_1.default(collapseElement, this.options.collapsingClass);\r\n remove_class_1.default(collapseElement, this.options.componentClass);\r\n remove_class_1.default(collapseElement, this.options.showClass);\r\n // force reflow to enable transition\r\n collapseElement.offsetWidth; // tslint:disable-line\r\n if (triggers && triggers.length) {\r\n triggers.forEach(function (trigger) {\r\n var target = get_selector_element_from_element_1.default(trigger, _this.options.dataTargetSelector);\r\n if (target !== null) {\r\n if (!has_class_1.default(target, _this.options.showClass)) {\r\n remove_class_1.default(trigger, _this.options.activeClass);\r\n trigger.setAttribute('aria-expanded', 'false');\r\n }\r\n }\r\n });\r\n }\r\n this.isTransitioning = true;\r\n if (this.options.animateProp) {\r\n collapseElement.style[this.options.animateProp] = null;\r\n }\r\n add_transition_end_listener_1.default(collapseElement, function () {\r\n _this.isTransitioning = false;\r\n remove_class_1.default(collapseElement, _this.options.collapsingClass);\r\n add_class_1.default(collapseElement, _this.options.componentClass);\r\n if (_this.options.animateProp) {\r\n collapseElement.style[_this.options.animateProp] = null;\r\n }\r\n _this.eventNamespaceFn(collapseElement, 'hidden');\r\n }, this.options.transitionDuration);\r\n };\r\n Collapse.prototype._addAriaAndCollapsedClass = function (element, triggers) {\r\n var _this = this;\r\n if (element) {\r\n var isOpen_1 = has_class_1.default(element, this.options.showClass);\r\n if (triggers && triggers.length) {\r\n triggers.forEach(function (trigger) {\r\n isOpen_1\r\n ? add_class_1.default(trigger, _this.options.activeClass)\r\n : remove_class_1.default(trigger, _this.options.activeClass);\r\n trigger.setAttribute('aria-expanded', isOpen_1.toString().toLowerCase());\r\n });\r\n }\r\n }\r\n };\r\n Collapse.getInstance = function (element, options, create) {\r\n if (create === void 0) { create = true; }\r\n var data = element[stringCollapse];\r\n if (!data && create) {\r\n data = new Collapse(element, options);\r\n }\r\n return data;\r\n };\r\n return Collapse;\r\n}());\r\nexports.Collapse = Collapse;\r\nfunction collapse(element, options) {\r\n console.error('collapse deprecated: use new Collapse(element, options) instead. (initialized elements can be accessed via Collapse.getInstance()');\r\n var data = element[stringCollapse];\r\n if (!data) {\r\n data = new Collapse(element, options);\r\n }\r\n return data;\r\n}\r\nexports.default = collapse;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction newGuid() {\r\n var s4 = function () {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n };\r\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\r\n}\r\nexports.default = newGuid;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar as_html_element_1 = require(\"@opten/dom/as-html-element\");\r\nvar has_class_1 = require(\"@opten/dom/has-class\");\r\nvar is_html_element_1 = require(\"@opten/dom/is-html-element\");\r\nvar __1 = require(\"../\");\r\nvar reflector_1 = require(\"../reflector\");\r\nvar resolver_1 = require(\"../resolver\");\r\n// todo: cache, static, inject?\r\nvar reflector = new reflector_1.Reflector();\r\nvar resolver = new resolver_1.Resolver(reflector);\r\nvar compiler = new __1.Compiler(resolver);\r\nfunction factory(components) {\r\n return function (rootElement) {\r\n var observables = new Map();\r\n components.forEach(function (componentType) {\r\n // todo: inject resolver, or cache?\r\n // todo: static or something to cache?\r\n var component = resolver.resolve(componentType);\r\n if (component) {\r\n Array.from(document.getElementsByClassName(component.className)).forEach(function (node) {\r\n return compiler.compile(component, node, componentType);\r\n });\r\n if (component.observe) {\r\n observables.set(component, componentType);\r\n }\r\n }\r\n else {\r\n throw new Error(\"No @Component annotation for \" + (componentType ? componentType.name : componentType) + \" found!\");\r\n }\r\n });\r\n if (observables.size) {\r\n new MutationObserver(function (mutations) {\r\n var componentInitializer = new Map();\r\n mutations.forEach(function (mutation) {\r\n observables.forEach(function (value, key) {\r\n return Array.from(mutation.addedNodes)\r\n .filter(function (node) { return is_html_element_1.default(node); })\r\n .map(function (node) { return as_html_element_1.default(node); })\r\n .forEach(function (node) {\r\n var comps = Array.from(node.getElementsByClassName(key.className));\r\n if (has_class_1.default(node, key.className)) {\r\n comps.push(node);\r\n }\r\n comps.forEach(function (component) {\r\n componentInitializer.set(component, function () {\r\n return compiler.compile(key, component, value);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n componentInitializer.forEach(function (c) { return c(); });\r\n }).observe(rootElement, {\r\n childList: true,\r\n subtree: true\r\n });\r\n }\r\n };\r\n}\r\nexports.default = factory;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar type_1 = require(\"./util/type\");\r\n// todo: move whole project to @opten/initializer?\r\nvar Compiler = /** @class */ (function () {\r\n function Compiler(resolver) {\r\n this.resolver = resolver;\r\n this.componentCache = new Map();\r\n }\r\n Compiler.prototype.compile = function (component, node, componentType) {\r\n // todo: cache everything?\r\n var _this = this;\r\n // todo: cache that also?\r\n var constructor = new componentType(node);\r\n if (this.componentCache.has(node)) {\r\n this.componentCache.get(node).push(constructor);\r\n }\r\n else {\r\n this.componentCache.set(node, [constructor]);\r\n }\r\n Object.keys(component.queries).forEach(function (propName) {\r\n var query = component.queries[propName];\r\n // todo: why do we have to inject the resolver?\r\n // can we not get the class name by some other way?\r\n var target = _this.resolver.resolve(query.selector);\r\n if (target) {\r\n var targetNode = query.descendants ? node : document;\r\n var nodes = targetNode.getElementsByClassName(target.className);\r\n var cache = Array.from(nodes)\r\n .filter(function (o) { return (query.filter ? query.filter(o) : true); })\r\n .map(function (e) { return _this.componentCache.get(e); })\r\n .reduce(function (acc, val) { return acc.concat(val); }, [])\r\n .filter(function (f) { return f.constructor === query.selector; });\r\n constructor[propName] = query.first ? cache[0] : cache;\r\n }\r\n });\r\n if (type_1.isType(constructor.onInit)) {\r\n constructor.onInit();\r\n }\r\n };\r\n return Compiler;\r\n}());\r\nexports.Compiler = Compiler;\r\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar decorators_1 = require(\"../util/decorators\");\r\nvar factories_1 = require(\"../util/factories\");\r\n/* tslint:enable:interface-name */\r\nexports.Component = decorators_1.makeDecorator('Component', function (c) {\r\n if (c === void 0) { c = {}; }\r\n return (__assign({}, c));\r\n});\r\nexports.createComponent = factories_1.makeMetadataFactory('Component', function (c) {\r\n if (c === void 0) { c = {}; }\r\n return (__assign({}, c));\r\n});\r\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar decorators_1 = require(\"../util/decorators\");\r\nvar Query = /** @class */ (function () {\r\n function Query() {\r\n }\r\n return Query;\r\n}());\r\nexports.Query = Query;\r\nexports.ComponentRef = decorators_1.makePropDecorator('ComponentRef', function (selector, data) {\r\n if (data === void 0) { data = {}; }\r\n return (__assign({ selector: selector, first: true, descendants: false }, data));\r\n}, Query);\r\nexports.ComponentRefs = decorators_1.makePropDecorator('ComponentRefs', function (selector, data) {\r\n if (data === void 0) { data = {}; }\r\n return (__assign({ selector: selector, first: false, descendants: false }, data));\r\n}, Query);\r\nexports.ChildRef = decorators_1.makePropDecorator('ChildRef', function (selector, data) {\r\n if (data === void 0) { data = {}; }\r\n return (__assign({ selector: selector, first: true, descendants: true }, data));\r\n}, Query);\r\nexports.ChildrenRef = decorators_1.makePropDecorator('ChildrenRef', function (selector, data) {\r\n if (data === void 0) { data = {}; }\r\n return (__assign({ selector: selector, first: false, descendants: true }, data));\r\n}, Query);\r\n","\"use strict\";\r\nvar __read = (this && this.__read) || function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n};\r\nvar __spread = (this && this.__spread) || function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar decorators_1 = require(\"../util/decorators\");\r\nvar type_1 = require(\"../util/type\");\r\n// todo: @opten/reflector? or @opten/initializer/reflector?\r\nvar Reflector = /** @class */ (function () {\r\n function Reflector() {\r\n }\r\n Reflector.prototype.annotations = function (typeOrFunc) {\r\n if (!type_1.isType(typeOrFunc)) {\r\n return [];\r\n }\r\n var parentCtor = getParentCtor(typeOrFunc);\r\n var ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];\r\n var parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];\r\n return parentAnnotations.concat(ownAnnotations);\r\n };\r\n Reflector.prototype.propMetadata = function (typeOrFunc) {\r\n if (!type_1.isType(typeOrFunc)) {\r\n return {};\r\n }\r\n var parentCtor = getParentCtor(typeOrFunc);\r\n var propMetadata = {};\r\n if (parentCtor !== Object) {\r\n var parentPropMetadata_1 = this.propMetadata(parentCtor);\r\n Object.keys(parentPropMetadata_1).forEach(function (propName) {\r\n propMetadata[propName] = parentPropMetadata_1[propName];\r\n });\r\n }\r\n var ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);\r\n if (ownPropMetadata) {\r\n Object.keys(ownPropMetadata).forEach(function (propName) {\r\n var decorators = [];\r\n if (propMetadata.hasOwnProperty(propName)) {\r\n decorators.push.apply(decorators, __spread(propMetadata[propName]));\r\n }\r\n decorators.push.apply(decorators, __spread(ownPropMetadata[propName]));\r\n propMetadata[propName] = decorators;\r\n });\r\n }\r\n return propMetadata;\r\n };\r\n Reflector.prototype._ownAnnotations = function (typeOrFunc, parentCtor) {\r\n // API for metadata created by invoking the decorators.\r\n if (typeOrFunc.hasOwnProperty(decorators_1.ANNOTATIONS)) {\r\n return typeOrFunc[decorators_1.ANNOTATIONS];\r\n }\r\n return null;\r\n };\r\n Reflector.prototype._ownPropMetadata = function (typeOrFunc, parentCtor) {\r\n // API for metadata created by invoking the decorators.\r\n if (typeOrFunc.hasOwnProperty(decorators_1.PROP_METADATA)) {\r\n return typeOrFunc[decorators_1.PROP_METADATA];\r\n }\r\n return null;\r\n };\r\n return Reflector;\r\n}());\r\nexports.Reflector = Reflector;\r\nfunction getParentCtor(ctor) {\r\n var parentProto = Object.getPrototypeOf(ctor.prototype);\r\n var parentCtor = parentProto ? parentProto.constructor : null;\r\n // Note: We always use `Object` as the null value\r\n // to simplify checking later on.\r\n return parentCtor || Object;\r\n}\r\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar component_1 = require(\"../metadata/component\");\r\nvar QUERY_METADATA_IDENTIFIERS = [\r\n 'ComponentRef',\r\n 'ComponentRefs',\r\n 'ChildRef',\r\n 'ChildrenRef'\r\n];\r\n// todo: @opten/resolver? or @opten/initializer/resolver?\r\nvar Resolver = /** @class */ (function () {\r\n function Resolver(reflector) {\r\n this.reflector = reflector;\r\n }\r\n // propertyCache = new Map();\r\n Resolver.prototype.resolve = function (type /*Type*/) {\r\n var typeMetadata = this.reflector.annotations(type);\r\n if (typeMetadata) {\r\n var metadata = findLast(typeMetadata, function (c) { return c && c.metadataName === 'Component'; });\r\n if (metadata) {\r\n var propertyMetadata = this.reflector.propMetadata(type);\r\n return this._mergeWithPropertyMetadata(metadata, propertyMetadata, type);\r\n }\r\n }\r\n return null;\r\n };\r\n Resolver.prototype._mergeWithPropertyMetadata = function (component, propertyMetadata, componentType) {\r\n var queries = {};\r\n Object.keys(propertyMetadata).forEach(function (propName) {\r\n var query = findLast(propertyMetadata[propName], function (a) {\r\n return QUERY_METADATA_IDENTIFIERS.some(function (i) { return i && i === a.metadataName; });\r\n });\r\n if (query) {\r\n queries[propName] = query;\r\n }\r\n });\r\n return this._merge(component, queries, componentType);\r\n };\r\n Resolver.prototype._merge = function (component, queries, componentType) {\r\n var mergedQueries = component.queries\r\n ? __assign({}, component.queries, queries) : queries;\r\n return component_1.createComponent({\r\n className: component.className,\r\n observe: component.observe,\r\n queries: mergedQueries\r\n });\r\n };\r\n Resolver.prototype._getQueriesMetadata = function (queries) {\r\n var _this = this;\r\n var res = [];\r\n Object.keys(queries).forEach(function (propertyName) {\r\n var query = queries[propertyName];\r\n res.push(_this._getQueryMetadata(query, propertyName));\r\n });\r\n return res;\r\n };\r\n Resolver.prototype._getQueryMetadata = function (q, propertyName) {\r\n return {\r\n descendants: q.descendants,\r\n first: q.first,\r\n propertyName: propertyName,\r\n read: false,\r\n selector: q.selector\r\n };\r\n };\r\n return Resolver;\r\n}());\r\nexports.Resolver = Resolver;\r\nfunction findLast(arr, condition) {\r\n for (var i = arr.length - 1; i >= 0; i--) {\r\n if (condition(arr[i])) {\r\n return arr[i];\r\n }\r\n }\r\n return null;\r\n}\r\n","\"use strict\";\r\nvar __read = (this && this.__read) || function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n};\r\nvar __spread = (this && this.__spread) || function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ANNOTATIONS = '__annotations__';\r\nexports.PROP_METADATA = '__prop__metadata__';\r\n/* tslint:enable:interface-name */\r\nfunction makeDecorator(name, props, parentClass, chainFn, typeFn) {\r\n var metaCtor = makeMetadataCtor(props);\r\n function DecoratorFactory() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var _a;\r\n if (this instanceof DecoratorFactory) {\r\n metaCtor.call.apply(metaCtor, __spread([this], args));\r\n return this;\r\n }\r\n var annotationInstance = new ((_a = DecoratorFactory).bind.apply(_a, __spread([void 0], args)))();\r\n var typeDecorator = function (cls) {\r\n if (typeFn) {\r\n typeFn.apply(void 0, __spread([cls], args));\r\n }\r\n // Use of Object.defineProperty is important since it creates non-enumerable property which\r\n // prevents the property is copied during subclassing.\r\n var annotations = cls.hasOwnProperty(exports.ANNOTATIONS)\r\n ? cls[exports.ANNOTATIONS]\r\n : Object.defineProperty(cls, exports.ANNOTATIONS, { value: [] })[exports.ANNOTATIONS];\r\n annotations.push(annotationInstance);\r\n return cls;\r\n };\r\n if (chainFn) {\r\n chainFn(typeDecorator);\r\n }\r\n return typeDecorator;\r\n }\r\n if (parentClass) {\r\n DecoratorFactory.prototype = Object.create(parentClass.prototype);\r\n }\r\n DecoratorFactory.prototype.metadataName = name;\r\n return DecoratorFactory;\r\n}\r\nexports.makeDecorator = makeDecorator;\r\nfunction makeMetadataCtor(props) {\r\n return function ctor() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (props) {\r\n var values = props.apply(void 0, __spread(args));\r\n for (var propName in values) {\r\n if (values.hasOwnProperty(propName)) {\r\n this[propName] = values[propName];\r\n }\r\n }\r\n }\r\n };\r\n}\r\nfunction makePropDecorator(name, props, parentClass) {\r\n var metaCtor = makeMetadataCtor(props);\r\n function PropDecoratorFactory() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var _a;\r\n if (this instanceof PropDecoratorFactory) {\r\n metaCtor.apply(this, args);\r\n return this;\r\n }\r\n var decoratorInstance = new ((_a = PropDecoratorFactory).bind.apply(_a, __spread([void 0], args)))();\r\n return function PropDecorator(target, metaName) {\r\n var constructor = target.constructor;\r\n // Use of Object.defineProperty is important since it creates non-enumerable property which\r\n // prevents the property is copied during subclassing.\r\n var meta = constructor.hasOwnProperty(exports.PROP_METADATA)\r\n ? constructor[exports.PROP_METADATA]\r\n : Object.defineProperty(constructor, exports.PROP_METADATA, {\r\n value: {}\r\n })[exports.PROP_METADATA];\r\n meta[metaName] =\r\n (meta.hasOwnProperty(metaName) && meta[metaName]) || [];\r\n meta[metaName].unshift(decoratorInstance);\r\n };\r\n }\r\n if (parentClass) {\r\n PropDecoratorFactory.prototype = Object.create(parentClass.prototype);\r\n }\r\n PropDecoratorFactory.prototype.metadataName = name;\r\n return PropDecoratorFactory;\r\n}\r\nexports.makePropDecorator = makePropDecorator;\r\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nvar __read = (this && this.__read) || function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n};\r\nvar __spread = (this && this.__spread) || function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/* tslint:enable:interface-name */\r\nfunction makeMetadataFactory(name, props) {\r\n var factory = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var values = props ? props.apply(void 0, __spread(args)) : {};\r\n return __assign({ metadataName: name }, values);\r\n };\r\n factory.isTypeOf = function (obj) { return obj && obj.metadataName === name; };\r\n factory.metadataName = name;\r\n return factory;\r\n}\r\nexports.makeMetadataFactory = makeMetadataFactory;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Type = Function;\r\nfunction isType(v) {\r\n return typeof v === 'function';\r\n}\r\nexports.isType = isType;\r\n/* tslint:enable:interface-name */\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar get_offset_1 = require(\"@opten/dom/get-offset\");\r\nvar parse_css_unit_1 = require(\"@opten/number/parse-css-unit\");\r\nvar get_styles_1 = require(\"@opten/dom/get-styles\");\r\nvar get_css_1 = require(\"@opten/dom/get-css\");\r\nvar CrossSellingBoxData = /** @class */ (function () {\r\n function CrossSellingBoxData() {\r\n }\r\n return CrossSellingBoxData;\r\n}());\r\nexports.CrossSellingBoxData = CrossSellingBoxData;\r\nvar CrossSellingBox = /** @class */ (function () {\r\n function CrossSellingBox(element, selectorBody, selectorToggle, gutterTop, index, before) {\r\n this.element = element;\r\n this.bodyElement = this.element.getElementsByClassName(selectorBody)[0];\r\n this.toggleElement = this.element.getElementsByClassName(selectorToggle)[0];\r\n this._setData(gutterTop, index, before);\r\n }\r\n CrossSellingBox.prototype._setData = function (gutterTop, index, before) {\r\n this.bodyElement.style.height = 'auto';\r\n var styles = get_styles_1.default(this.element); // cache\r\n var stickPosition;\r\n var maxTopMarginMove = 0;\r\n var borderWidth = 0;\r\n if (!before) {\r\n var offset = get_offset_1.default(this.element);\r\n stickPosition = offset.top() - gutterTop;\r\n }\r\n else {\r\n // Firefox fix: border-bottom-width instead of border-width\r\n borderWidth = parse_css_unit_1.default(get_css_1.default(this.element, 'border-bottom-width', styles));\r\n stickPosition =\r\n before.data.stickPosition +\r\n before.data.body.height +\r\n before.data.maxTopMarginMove +\r\n borderWidth;\r\n var marginBottom = parse_css_unit_1.default(get_css_1.default(this.element, 'margin-bottom', styles));\r\n maxTopMarginMove = Math.round(marginBottom + borderWidth);\r\n }\r\n this.data = {\r\n index: index,\r\n height: this.element.offsetHeight,\r\n currentHeight: this.element.offsetHeight,\r\n maxTopMarginMove: maxTopMarginMove,\r\n stickPosition: stickPosition,\r\n state: {\r\n isFixed: false,\r\n isExpanded: false\r\n },\r\n body: {\r\n height: this.bodyElement.offsetHeight,\r\n currentHeight: this.bodyElement.offsetHeight\r\n }\r\n };\r\n };\r\n return CrossSellingBox;\r\n}());\r\nexports.CrossSellingBox = CrossSellingBox;\r\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar add_class_1 = require(\"@opten/dom/add-class\");\r\nvar remove_class_1 = require(\"@opten/dom/remove-class\");\r\nvar has_class_1 = require(\"@opten/dom/has-class\");\r\nvar get_offset_1 = require(\"@opten/dom/get-offset\");\r\nvar get_window_scroll_top_1 = require(\"@opten/dom/get-window-scroll-top\");\r\nvar parse_css_unit_1 = require(\"@opten/number/parse-css-unit\");\r\nvar get_css_1 = require(\"@opten/dom/get-css\");\r\nvar helpers_1 = require(\"../helpers\");\r\nvar box_1 = require(\"../box\");\r\nvar CrossSellingOptions = /** @class */ (function () {\r\n function CrossSellingOptions() {\r\n }\r\n return CrossSellingOptions;\r\n}());\r\nexports.CrossSellingOptions = CrossSellingOptions;\r\nvar CrossSellingData = /** @class */ (function () {\r\n function CrossSellingData() {\r\n }\r\n return CrossSellingData;\r\n}());\r\nexports.CrossSellingData = CrossSellingData;\r\nvar CrossSelling = /** @class */ (function () {\r\n function CrossSelling(_element, options) {\r\n var _this = this;\r\n this._element = _element;\r\n this._options = {\r\n offsetTop: 0,\r\n gutterTop: 0,\r\n gutterBottom: 0,\r\n selectors: {\r\n box: 'js-cross-selling-box',\r\n body: 'js-cross-selling-box-body',\r\n toggle: 'js-cross-selling-toggle'\r\n },\r\n classes: {\r\n fixed: '--fixed',\r\n computed: '--absolute',\r\n scrolled: '--scrolled',\r\n expanded: '--expanded'\r\n },\r\n breakpoints: {\r\n maxWidth: undefined\r\n }\r\n };\r\n this._handleDesktopScroll = function () {\r\n _this._data.scrollTop = get_window_scroll_top_1.default();\r\n _this._update();\r\n };\r\n this._handleResizeChange = function () {\r\n var cloneElement = _this._cloneElement;\r\n var paddingLeft = parse_css_unit_1.default(get_css_1.default(_this._parentElement, 'padding-left'));\r\n var paddingRight = parse_css_unit_1.default(get_css_1.default(_this._parentElement, 'padding-right'));\r\n var paddingFull = paddingLeft + paddingRight;\r\n cloneElement.style.position = 'absolute';\r\n cloneElement.style.top = '0px';\r\n cloneElement.style.left = paddingLeft + \"px\";\r\n cloneElement.style.visibility = 'hidden';\r\n cloneElement.style.width = \"calc(100% - \" + paddingFull + \"px)\";\r\n _this._parentElement.appendChild(cloneElement);\r\n _this._parentElement.style.minHeight = null;\r\n _this._parentElement.style.position = 'relative';\r\n _this._setData(cloneElement);\r\n // update data\r\n _this._getBoxes(cloneElement).forEach(function (box, index) {\r\n _this._boxes[index].data = box.data;\r\n });\r\n _this._parentElement.removeChild(cloneElement);\r\n _this._parentElement.style.position = null;\r\n // We call this function instead of just this._update();\r\n // because the scrollTop might changed due to resizing ;-)\r\n _this._handleDesktopScroll();\r\n };\r\n this._options = __assign({}, this._options, options);\r\n this._parentElement = this._element.parentElement;\r\n this._scrapElement = this._element.parentElement;\r\n this._cloneElement = this._element.cloneNode(true);\r\n this._init();\r\n }\r\n CrossSelling.prototype._init = function () {\r\n var _this = this;\r\n this._setData();\r\n this._boxes = this._getBoxes();\r\n this._handleBreakpointChange();\r\n window.addEventListener('resize', function () { return _this._handleBreakpointChange(); });\r\n };\r\n CrossSelling.prototype._handleBreakpointChange = function () {\r\n // todo: something like isMediaBreakpointDown()?\r\n if (this._options.breakpoints.maxWidth &&\r\n window.innerWidth < this._options.breakpoints.maxWidth) {\r\n this._disableListeners();\r\n this._destroy();\r\n }\r\n else {\r\n this._setDesktopListeners();\r\n this._handleDesktopScroll();\r\n }\r\n };\r\n CrossSelling.prototype._getBoxes = function (element) {\r\n var _this = this;\r\n if (element === void 0) { element = this._element; }\r\n var boxes = [];\r\n // We cannot use map because we have to access the one before\r\n // to calculate some stuff...\r\n Array.from(element.getElementsByClassName(this._options.selectors.box)).forEach(function (boxElement, index) {\r\n var box = new box_1.CrossSellingBox(boxElement, _this._options.selectors.body, _this._options.selectors.toggle, _this._options.gutterTop, index, index === 0 ? undefined : boxes[index - 1]);\r\n boxes.push(box);\r\n });\r\n return boxes;\r\n };\r\n CrossSelling.prototype._setData = function (element) {\r\n if (element === void 0) { element = this._element; }\r\n // todo: Somehow weird? When the user resizes (bigger) then the left is slow\r\n // but if the change the offset.top() to e.g. lement.getBoundingClientRect().top\r\n // it's working, but this makes no sense????\r\n var offset = get_offset_1.default(element);\r\n this._data = {\r\n container: {\r\n top: offset.top() - this._options.gutterTop,\r\n left: Math.round(offset.left()),\r\n width: Math.round(element.offsetWidth),\r\n parentHeight: Math.round(this._parentElement.offsetHeight - this._options.gutterTop),\r\n isFixed: false\r\n },\r\n scrollTop: 0,\r\n scrapValue: 0\r\n };\r\n };\r\n CrossSelling.prototype._setDesktopListeners = function () {\r\n var _this = this;\r\n this._handleResizeChange();\r\n window.addEventListener('scroll', this._handleDesktopScroll);\r\n window.addEventListener('resize', this._handleResizeChange);\r\n this._boxes.forEach(function (box) {\r\n box.toggleElement.addEventListener('click', function (event) {\r\n return _this._handleCollapsibleLink(event, box.data.index);\r\n });\r\n });\r\n };\r\n CrossSelling.prototype._disableListeners = function () {\r\n window.removeEventListener('scroll', this._handleDesktopScroll);\r\n window.removeEventListener('resize', this._handleResizeChange);\r\n // todo: Remove click events?\r\n };\r\n CrossSelling.prototype._update = function () {\r\n var _this = this;\r\n this._boxes.forEach(function (box) { return _this._updateBox(box); });\r\n this._checkScrapValue();\r\n this._updateContainerState();\r\n };\r\n CrossSelling.prototype._updateBox = function (box) {\r\n this._updateBoxHeight(box);\r\n this._updateBoxTop(box);\r\n };\r\n CrossSelling.prototype._updateBoxHeight = function (box) {\r\n var _this = this;\r\n if (this._data.scrollTop >\r\n box.data.stickPosition + box.data.maxTopMarginMove) {\r\n box.data.body.currentHeight = Math.max(0, Math.round(box.data.body.height +\r\n box.data.stickPosition +\r\n box.data.maxTopMarginMove -\r\n this._data.scrollTop));\r\n box.data.currentHeight = Math.round(box.data.height -\r\n box.data.body.height +\r\n box.data.body.currentHeight);\r\n requestAnimationFrame(function () {\r\n return add_class_1.default(box.element, _this._options.classes.scrolled);\r\n });\r\n if (!box.data.state.isExpanded) {\r\n this._updateAria(box, false);\r\n }\r\n box.data.state.isFixed = false;\r\n }\r\n else {\r\n box.data.body.currentHeight = Math.round(box.data.body.height);\r\n box.data.currentHeight = Math.round(box.data.height -\r\n box.data.body.height +\r\n box.data.body.currentHeight);\r\n requestAnimationFrame(function () {\r\n remove_class_1.default(box.element, _this._options.classes.scrolled);\r\n remove_class_1.default(box.element, _this._options.classes.expanded);\r\n });\r\n box.data.state.isExpanded = false;\r\n box.data.state.isFixed = true;\r\n this._updateAria(box, true);\r\n }\r\n if (!box.data.state.isExpanded) {\r\n requestAnimationFrame(function () {\r\n return box.bodyElement.setAttribute('style', \"height: \" + box.data.body.currentHeight + \"px\");\r\n });\r\n if (!has_class_1.default(box.element, this._options.classes.computed)) {\r\n requestAnimationFrame(function () {\r\n return add_class_1.default(box.element, _this._options.classes.computed);\r\n });\r\n }\r\n }\r\n };\r\n CrossSelling.prototype._updateBoxTop = function (box) {\r\n var top = 0;\r\n if (this._data.scrollTop > box.data.stickPosition &&\r\n box.data.index > 0) {\r\n top = Math.min(Math.round(this._data.scrollTop - box.data.stickPosition), box.data.maxTopMarginMove);\r\n }\r\n requestAnimationFrame(function () { return (box.element.style.marginTop = \"-\" + top + \"px\"); });\r\n };\r\n CrossSelling.prototype._handleCollapsibleLink = function (event, index) {\r\n event.preventDefault();\r\n if (this._boxes[index].data.state.isFixed) {\r\n return;\r\n }\r\n this._toggleBox(this._boxes[index]);\r\n };\r\n CrossSelling.prototype._toggleBox = function (box) {\r\n if (box.data.state.isExpanded) {\r\n this._collapseBox(box);\r\n }\r\n else {\r\n this._expandBox(box);\r\n }\r\n };\r\n CrossSelling.prototype._collapseBox = function (box) {\r\n var _this = this;\r\n if (box.data.state.isExpanded) {\r\n this._updateScrap(box, false);\r\n }\r\n helpers_1.animateCss(box.bodyElement, 'height', box.bodyElement.offsetHeight, -box.bodyElement.offsetHeight, 300, function () {\r\n remove_class_1.default(box.element, _this._options.classes.expanded);\r\n _this._updateAria(box, false);\r\n });\r\n box.data.state.isExpanded = false;\r\n };\r\n CrossSelling.prototype._expandBox = function (box) {\r\n var _this = this;\r\n this._collapseAllOpenedBoxes();\r\n this._updateScrap(box, true);\r\n setTimeout(function () {\r\n helpers_1.animateCss(box.bodyElement, 'height', box.bodyElement.offsetHeight, box.data.body.height - box.bodyElement.offsetHeight, 300, function () {\r\n add_class_1.default(box.element, _this._options.classes.expanded);\r\n _this._updateAria(box, true);\r\n });\r\n }, 100);\r\n box.data.state.isExpanded = true;\r\n };\r\n CrossSelling.prototype._collapseAllOpenedBoxes = function () {\r\n var _this = this;\r\n this._boxes.forEach(function (box) {\r\n if (box.data.state.isExpanded) {\r\n _this._collapseBox(box);\r\n }\r\n });\r\n };\r\n CrossSelling.prototype._updateAria = function (box, expanded) {\r\n if (!expanded) {\r\n box.bodyElement.setAttribute('aria-hidden', 'true');\r\n }\r\n else {\r\n box.bodyElement.setAttribute('aria-hidden', 'false');\r\n }\r\n };\r\n CrossSelling.prototype._getAllBoxesHeight = function () {\r\n var height = 0;\r\n this._boxes.forEach(function (box) {\r\n box.data.state.isExpanded\r\n ? (height += box.data.height)\r\n : (height += box.data.currentHeight);\r\n });\r\n return height;\r\n };\r\n CrossSelling.prototype._updateContainerState = function () {\r\n var _this = this;\r\n if (!this._data.container.isFixed) {\r\n this._parentElement.style.minHeight = this._data.container\r\n .parentHeight + this._options.gutterTop + \"px\";\r\n }\r\n if (this._data.scrollTop > this._data.container.top - this._options.gutterTop - this._options.offsetTop) {\r\n if (!this._data.container.isFixed) {\r\n this._data.container.isFixed = true;\r\n requestAnimationFrame(function () {\r\n add_class_1.default(_this._element, _this._options.classes.fixed);\r\n _this._element.setAttribute('style', \"top: \" + _this._options.gutterTop + \"px;\\n left: \" + _this._data.container.left + \"px;\\n width: \" + _this._data.container.width + \"px;\\n \");\r\n });\r\n }\r\n if (this._data.scrapValue < 0) {\r\n requestAnimationFrame(function () {\r\n return (_this._element.style.top = _this._data.scrapValue +\r\n _this._options.gutterTop + \"px\");\r\n });\r\n }\r\n else {\r\n requestAnimationFrame(function () {\r\n return (_this._element.style.top = _this._options.gutterTop + \"px\");\r\n });\r\n }\r\n }\r\n else {\r\n if (this._data.container.isFixed) {\r\n this._data.container.isFixed = false;\r\n requestAnimationFrame(function () {\r\n remove_class_1.default(_this._element, _this._options.classes.fixed);\r\n _this._element.removeAttribute('style');\r\n });\r\n }\r\n }\r\n };\r\n CrossSelling.prototype._checkScrapValue = function () {\r\n var offset = get_offset_1.default(this._scrapElement);\r\n var scrapValue = offset.top() +\r\n this._scrapElement.offsetHeight -\r\n this._options.gutterTop -\r\n this._options.gutterBottom -\r\n this._getAllBoxesHeight();\r\n this._data.scrapValue = Math.round(scrapValue - this._data.scrollTop);\r\n };\r\n CrossSelling.prototype._updateScrap = function (box, expanded) {\r\n var _this = this;\r\n var targetHeight = 0;\r\n var difference = box.data.body.height - box.data.body.currentHeight;\r\n if (this._data.scrapValue <= difference) {\r\n if (expanded) {\r\n targetHeight =\r\n this._data.container.parentHeight +\r\n this._options.gutterTop +\r\n difference -\r\n this._data.scrapValue;\r\n if (this._data.scrapValue < 0) {\r\n targetHeight += this._data.scrapValue;\r\n }\r\n }\r\n else {\r\n targetHeight =\r\n this._data.container.parentHeight + this._options.gutterTop;\r\n }\r\n // todo: buggy, if we are at the bottom there's somehow a space (open one and then open the one above)?!\r\n // todo: buggy, if we have one open and scroll top, the min-height is still the same\r\n helpers_1.animateCss(this._scrapElement, 'min-height', this._scrapElement.offsetHeight, targetHeight > this._scrapElement.offsetHeight\r\n ? targetHeight - this._scrapElement.offsetHeight\r\n : -(this._scrapElement.offsetHeight - targetHeight), 300, function () { return _this._update(); });\r\n }\r\n };\r\n CrossSelling.prototype._destroy = function () {\r\n var _this = this;\r\n requestAnimationFrame(function () {\r\n remove_class_1.default(_this._element, _this._options.classes.fixed);\r\n _this._element.removeAttribute('style');\r\n _this._parentElement.style.minHeight = null;\r\n _this._boxes.forEach(function (box) {\r\n remove_class_1.default(box.element, _this._options.classes.computed);\r\n remove_class_1.default(box.element, _this._options.classes.scrolled);\r\n remove_class_1.default(box.element, _this._options.classes.expanded);\r\n box.element.style.marginTop = null;\r\n box.bodyElement.style.height = null;\r\n box.data.state.isExpanded = false;\r\n box.data.state.isFixed = false;\r\n });\r\n });\r\n };\r\n return CrossSelling;\r\n}());\r\nexports.CrossSelling = CrossSelling;\r\nfunction crossSelling(element, options) {\r\n return new CrossSelling(element, options);\r\n}\r\nexports.default = crossSelling;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ease_in_out_quad_1 = require(\"@opten/animation/ease-in-out-quad\");\r\nfunction animateCss(element, style, start, distance, duration, complete) {\r\n // todo: function in @opten/events?\r\n var timeStart;\r\n var timeElapsed;\r\n var loop = function (time) {\r\n timeElapsed = time - timeStart;\r\n element.style[style] = ease_in_out_quad_1.default(timeElapsed, start, distance, duration) + \"px\";\r\n if (timeElapsed < duration) {\r\n requestAnimationFrame.call(window, loop);\r\n }\r\n else {\r\n element.style[style] = start + distance + \"px\";\r\n complete();\r\n }\r\n };\r\n requestAnimationFrame.call(window, function (time) {\r\n timeStart = time;\r\n loop(time);\r\n });\r\n}\r\nexports.animateCss = animateCss;\r\n","\"use strict\";\r\nfunction __export(m) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar component_1 = require(\"./component\");\r\n__export(require(\"./box\"));\r\n__export(require(\"./component\"));\r\nexports.default = component_1.default;\r\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar overlay_1 = require(\"../overlay\");\r\nvar create_node_1 = require(\"../dom/create-node\");\r\nvar event_namespace_factory_1 = require(\"../events/event-namespace-factory\");\r\nvar keycodes_1 = require(\"../keycodes\");\r\nvar overlay_position_builder_1 = require(\"../overlay/position/overlay-position-builder\");\r\n// todo: use position strategy from angular material\r\n// todo: create DialogRef\r\nvar Dialog = /** @class */ (function () {\r\n function Dialog(element, options) {\r\n if (options === void 0) { options = {}; }\r\n this.element = element;\r\n this.dialogOpen = false;\r\n this.options = {\r\n hasBackdrop: true,\r\n disableClose: false,\r\n width: '',\r\n height: '',\r\n maxWidth: '80vw',\r\n };\r\n this.eventNamespaceFn = event_namespace_factory_1.default('opten.dialog');\r\n // todo: way to have data?\r\n this.options = __assign({}, this.options, options);\r\n this.init();\r\n }\r\n Dialog.prototype.init = function () {\r\n var _this = this;\r\n Array.from(document.querySelectorAll(\"[href=\\\"#\" + this.element.id + \"\\\"], [data-target=\\\"#\" + this.element.id + \"\\\"]\")).forEach(function (trigger) {\r\n return trigger.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n _this.toggle();\r\n });\r\n });\r\n };\r\n Dialog.prototype.open = function () {\r\n if (this.dialogOpen) {\r\n return;\r\n }\r\n this.dialogOpen = true;\r\n this.createOverlay().open();\r\n this.eventNamespaceFn(this.element, 'open');\r\n this.addListeners();\r\n };\r\n Dialog.prototype.close = function () {\r\n if (this.dialogOpen) {\r\n this.dialogOpen = false;\r\n this.overlayRef.close();\r\n this.eventNamespaceFn(this.element, 'close');\r\n }\r\n };\r\n Dialog.prototype.toggle = function () {\r\n this.dialogOpen ? this.close() : this.open();\r\n };\r\n /**\r\n * This method creates the overlay from the provided dialog's template and saves its\r\n * OverlayRef so that it can be attached to the DOM when open is called.\r\n */\r\n Dialog.prototype.createOverlay = function () {\r\n var _this = this;\r\n if (!this.overlayRef) {\r\n var portalElement = create_node_1.default(\"
\" + this.element.innerHTML + \"
\");\r\n this.overlayRef = overlay_1.overlay(portalElement, this.getOverlayOptions(this.options));\r\n this.overlayRef.afterOpened = function () {\r\n return _this.eventNamespaceFn(_this.element, 'opened');\r\n };\r\n this.overlayRef.beforeClose = function () {\r\n return _this.overlayRef.detachBackdrop();\r\n };\r\n this.overlayRef.afterClosed = function () {\r\n _this.eventNamespaceFn(_this.element, 'closed');\r\n _this.overlayRef.dispose();\r\n _this.overlayRef = null;\r\n };\r\n if (!this.options.disableClose) {\r\n this.overlayRef.backdropClick = function () { return _this.close(); };\r\n this.overlayRef.onKeyboardEvent = function (event) {\r\n if (event.keyCode === keycodes_1.KEYCODES.ESCAPE) {\r\n _this.close();\r\n }\r\n };\r\n }\r\n }\r\n return this.overlayRef;\r\n };\r\n Dialog.prototype.getOverlayOptions = function (dialogSettings) {\r\n var state = new overlay_1.OverlayOptions({\r\n // todo: like angular material this._overlayRef.position()?;\r\n positionStrategy: new overlay_position_builder_1.OverlayPositionBuilder().global(),\r\n hasBackdrop: dialogSettings.hasBackdrop,\r\n minWidth: dialogSettings.minWidth,\r\n minHeight: dialogSettings.minHeight,\r\n maxWidth: dialogSettings.maxWidth,\r\n maxHeight: dialogSettings.maxHeight\r\n });\r\n if (dialogSettings.backdropClassName) {\r\n state.backdropClassName = dialogSettings.backdropClassName;\r\n }\r\n return state;\r\n };\r\n Dialog.prototype.addListeners = function () {\r\n var _this = this;\r\n if (this.overlayRef && this.overlayRef.portalElement) {\r\n // todo: we don't have to kill the events, right? because the html gets removed anyway?\r\n Array.from(this.overlayRef.portalElement.querySelectorAll('[data-dismiss=\"dialog\"]')).forEach(function (button) {\r\n return button.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n _this.close();\r\n });\r\n });\r\n }\r\n };\r\n return Dialog;\r\n}());\r\nexports.Dialog = Dialog;\r\n// TODO: Should we deprecate this?\r\nfunction dialog(element, options) {\r\n return new Dialog(element, options);\r\n}\r\nexports.dialog = dialog;\r\n","\"use strict\";\r\nfunction __export(m) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__export(require(\"./dialog\"));\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar get_class_1 = require(\"../get-class\");\r\nvar has_class_1 = require(\"../has-class\");\r\nfunction addClass(element, className) {\r\n if (element && !has_class_1.default(element, className)) {\r\n element.setAttribute('class', get_class_1.default(element).trim() + ' ' + className);\r\n }\r\n}\r\nexports.default = addClass;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar is_html_element_1 = require(\"../is-html-element\");\r\nfunction asHTMLElement(o) {\r\n if (is_html_element_1.default(o)) {\r\n return o;\r\n }\r\n return null;\r\n}\r\nexports.default = asHTMLElement;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar add_class_1 = require(\"../add-class\");\r\nvar remove_class_1 = require(\"../remove-class\");\r\nfunction changeClass(element, className, add) {\r\n if (add === void 0) { add = true; }\r\n if (add) {\r\n add_class_1.default(element, className);\r\n }\r\n else {\r\n remove_class_1.default(element, className);\r\n }\r\n}\r\nexports.default = changeClass;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar classRegexCache = {};\r\nfunction classRegex(className) {\r\n if (!classRegexCache[className]) {\r\n classRegexCache[className] = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\r\n }\r\n return classRegexCache[className];\r\n}\r\nexports.default = classRegex;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction createNode(html) {\r\n var element = document.createElement('div');\r\n element.innerHTML = html;\r\n element = element.firstElementChild;\r\n return element;\r\n}\r\nexports.default = createNode;\r\n","\"use strict\";\r\nvar __values = (this && this.__values) || function (o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar has_class_1 = require(\"../has-class\");\r\nfunction firstByClass(elements, className) {\r\n var e_1, _a;\r\n try {\r\n for (var _b = __values(elements), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var parent_1 = _c.value;\r\n if (has_class_1.default(parent_1, className)) {\r\n return parent_1;\r\n }\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n return null;\r\n}\r\nexports.default = firstByClass;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction getClass(element) {\r\n return element.getAttribute('class') || '';\r\n}\r\nexports.default = getClass;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar get_styles_1 = require(\"../get-styles\");\r\nfunction getCss(element, name, computed) {\r\n computed = computed || get_styles_1.default(element);\r\n if (computed) {\r\n return computed.getPropertyValue(name) || computed[name];\r\n }\r\n return undefined;\r\n}\r\nexports.default = getCss;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction getOffset(element) {\r\n var clientRect = element.getBoundingClientRect();\r\n return {\r\n top: function () {\r\n var ownerDocument = element.ownerDocument;\r\n var documentTop = window.pageYOffset || ownerDocument.body.scrollTop;\r\n return (clientRect.top +\r\n documentTop -\r\n ownerDocument.documentElement.clientTop);\r\n },\r\n left: function () {\r\n var ownerDocument = element.ownerDocument;\r\n var documentLeft = window.pageXOffset || ownerDocument.body.scrollLeft;\r\n return (clientRect.left +\r\n documentLeft -\r\n ownerDocument.documentElement.clientLeft);\r\n }\r\n };\r\n}\r\nexports.default = getOffset;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar first_by_class_1 = require(\"../first-by-class\");\r\nvar get_parents_1 = require(\"../get-parents\");\r\nfunction getParentWithClass(element, className) {\r\n return first_by_class_1.default(get_parents_1.default(element), className);\r\n}\r\nexports.default = getParentWithClass;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar is_html_element_1 = require(\"../is-html-element\");\r\nfunction getParentsOrSelf(element) {\r\n var parents = [];\r\n if (element && is_html_element_1.default(element)) {\r\n parents.push(element);\r\n if (element.parentElement) {\r\n parents.push.apply(parents, getParentsOrSelf(element.parentElement));\r\n }\r\n }\r\n return parents;\r\n}\r\nexports.default = getParentsOrSelf;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar get_parents_or_self_1 = require(\"../get-parents-or-self\");\r\nfunction getParents(element) {\r\n return get_parents_or_self_1.default(element.parentElement);\r\n}\r\nexports.default = getParents;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar get_selector_from_element_1 = require(\"../get-selector-from-element\");\r\nfunction getSelectorElementFromElement(element, attribute, fallbackHref) {\r\n if (attribute === void 0) { attribute = 'data-target'; }\r\n if (fallbackHref === void 0) { fallbackHref = true; }\r\n var selector = get_selector_from_element_1.default(element, attribute, fallbackHref);\r\n if (selector && selector.indexOf('#') === 0) {\r\n return document.getElementById(selector.substr(1, selector.length - 1));\r\n }\r\n return null;\r\n}\r\nexports.default = getSelectorElementFromElement;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction getSelectorFromElement(element, attribute, fallbackHref) {\r\n if (attribute === void 0) { attribute = 'data-target'; }\r\n if (fallbackHref === void 0) { fallbackHref = true; }\r\n var selector = element.getAttribute(attribute);\r\n if (!selector && fallbackHref) {\r\n selector = element.getAttribute('href') || '';\r\n selector = /^#.*/i.test(selector) ? selector : null;\r\n }\r\n return selector;\r\n}\r\nexports.default = getSelectorFromElement;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction getSiblings(element) {\r\n return Array.prototype.filter.call(element.parentElement.children, function (child) {\r\n return child !== element;\r\n });\r\n}\r\nexports.default = getSiblings;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction getStyles(element) {\r\n var view = element.ownerDocument.defaultView;\r\n if (!view || !view.opener) {\r\n view = window;\r\n }\r\n return view.getComputedStyle(element);\r\n}\r\nexports.default = getStyles;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction getWindowScrollTop() {\r\n return window.pageYOffset !== undefined\r\n ? window.pageYOffset\r\n : (document.documentElement ||\r\n document.body.parentNode ||\r\n document.body).scrollTop;\r\n}\r\nexports.default = getWindowScrollTop;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar class_regex_1 = require(\"../class-regex\");\r\nvar get_class_1 = require(\"../get-class\");\r\nfunction hasClass(element, className) {\r\n return element && class_regex_1.default(className).test(get_class_1.default(element));\r\n}\r\nexports.default = hasClass;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar has_class_1 = require(\"../has-class\");\r\nfunction isAncestorOfClass(element, className, includeSelf) {\r\n var parent = element.parentElement;\r\n if (includeSelf && has_class_1.default(element, className)) {\r\n return true;\r\n }\r\n while (parent && parent.nodeType && parent.nodeType === 1) {\r\n if (has_class_1.default(parent, className)) {\r\n return true;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n return false;\r\n}\r\nexports.default = isAncestorOfClass;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction isHTMLElement(o) {\r\n return (typeof HTMLElement === 'object' ? o instanceof HTMLElement :\r\n o && typeof o === 'object' && o !== null && o.nodeType === 1 && typeof o.nodeName === 'string');\r\n}\r\nexports.default = isHTMLElement;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar class_regex_1 = require(\"../class-regex\");\r\nvar get_class_1 = require(\"../get-class\");\r\nvar has_class_1 = require(\"../has-class\");\r\nfunction removeClass(element, className) {\r\n if (element && has_class_1.default(element, className)) {\r\n var regex = class_regex_1.default(className);\r\n element.setAttribute('class', get_class_1.default(element)\r\n .replace(regex, ' ')\r\n .trim());\r\n }\r\n}\r\nexports.default = removeClass;\r\nfunction removeClassFactory(className) {\r\n return function (element) {\r\n removeClass(element, className);\r\n };\r\n}\r\nexports.removeClassFactory = removeClassFactory;\r\nfunction removeClassOnCollection(elements, className) {\r\n elements.forEach(removeClassFactory(className));\r\n}\r\nexports.removeClassOnCollection = removeClassOnCollection;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar change_class_1 = require(\"../change-class\");\r\nvar has_class_1 = require(\"../has-class\");\r\nfunction toggleClass(element, className, state) {\r\n change_class_1.default(element, className, state === undefined ? !has_class_1.default(element, className) : state);\r\n}\r\nexports.default = toggleClass;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction dispatchCustomEvent(element, eventName) {\r\n var event = new CustomEvent(eventName);\r\n element.dispatchEvent(event);\r\n}\r\nexports.default = dispatchCustomEvent;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar dispatch_custom_event_1 = require(\"../dispatch-custom-event\");\r\nfunction eventNamespaceFactory(namespace) {\r\n return function (element, eventName) {\r\n return dispatch_custom_event_1.default(element, eventName + '.' + namespace);\r\n };\r\n}\r\nexports.default = eventNamespaceFactory;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.KEYCODES = {\r\n DOWN: 40,\r\n ENTER: 13,\r\n ESCAPE: 27,\r\n SPACE: 32,\r\n UP: 38,\r\n};\r\n","\"use strict\";\r\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar component_1 = require(\"@opten/compiler/metadata/component\");\r\nvar _1 = require(\".\");\r\nvar MenuTriggerComponent = /** @class */ (function () {\r\n function MenuTriggerComponent(element) {\r\n this.element = element;\r\n }\r\n MenuTriggerComponent.prototype.onInit = function () {\r\n this.menuTrigger = new _1.MenuTrigger(this.element);\r\n };\r\n MenuTriggerComponent = __decorate([\r\n component_1.Component({ className: 'js-menu-trigger', observe: true }),\r\n __metadata(\"design:paramtypes\", [HTMLElement])\r\n ], MenuTriggerComponent);\r\n return MenuTriggerComponent;\r\n}());\r\nexports.MenuTriggerComponent = MenuTriggerComponent;\r\n","\"use strict\";\r\nfunction __export(m) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__export(require(\"./menu-trigger\"));\r\n__export(require(\"./menu\"));\r\n__export(require(\"./component\"));\r\n","\"use strict\";\r\nvar __read = (this && this.__read) || function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar overlay_1 = require(\"../overlay\");\r\nvar keycodes_1 = require(\"../keycodes\");\r\nvar get_selector_element_from_element_1 = require(\"../dom/get-selector-element-from-element\");\r\nvar event_namespace_factory_1 = require(\"../events/event-namespace-factory\");\r\nvar menu_1 = require(\"./menu\");\r\nvar reposition_scroll_strategy_1 = require(\"../overlay/scroll/reposition-scroll-strategy\");\r\nvar MenuTrigger = /** @class */ (function () {\r\n function MenuTrigger(element) {\r\n this.element = element;\r\n this.menuOpen = false;\r\n this.eventNamespaceFn = event_namespace_factory_1.default('opten.menu');\r\n this._init();\r\n }\r\n MenuTrigger.prototype._init = function () {\r\n var _this = this;\r\n // todo: data-menu, data-menu-trigger-for or something?\r\n var menuElement = get_selector_element_from_element_1.default(this.element, 'data-target', true);\r\n if (menuElement) {\r\n this.menu = new menu_1.Menu(menuElement);\r\n this.element.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n _this._toggle();\r\n });\r\n }\r\n };\r\n MenuTrigger.prototype._open = function () {\r\n if (this.menuOpen) {\r\n return;\r\n }\r\n this.menuOpen = true;\r\n if (this.menu.lazyContent) {\r\n this.menu.updatePortal();\r\n }\r\n this._createOverlay().open();\r\n this.eventNamespaceFn(this.element, 'open');\r\n };\r\n MenuTrigger.prototype._close = function () {\r\n if (this.menuOpen) {\r\n this.overlayRef.close();\r\n }\r\n };\r\n MenuTrigger.prototype._toggle = function () {\r\n this.menuOpen ? this._close() : this._open();\r\n };\r\n /**\r\n * This method creates the overlay from the provided menu's template and saves its\r\n * OverlayRef so that it can be attached to the DOM when open is called.\r\n */\r\n MenuTrigger.prototype._createOverlay = function () {\r\n var _this = this;\r\n if (!this.overlayRef) {\r\n var options = {\r\n scrollStrategy: new reposition_scroll_strategy_1.RepositionScrollStrategy(),\r\n positionStrategy: this._getPosition(),\r\n hasBackdrop: this.menu.hasBackdrop || true,\r\n backdropClassName: this.menu.backdropClassName ||\r\n 'c-overlay-transparent-backdrop'\r\n };\r\n this._subscribeToPositions(options.positionStrategy);\r\n this.overlayRef = overlay_1.overlay(this.menu.portalElement, options);\r\n this.overlayRef.backdropClick = function () { return _this._close(); };\r\n this.overlayRef.afterOpened = function () {\r\n return _this.eventNamespaceFn(_this.element, 'opened');\r\n };\r\n this.overlayRef.afterClosed = function () {\r\n _this.eventNamespaceFn(_this.element, 'closed');\r\n _this.overlayRef.dispose();\r\n };\r\n // todo: better way? we need that here because of the RepositionScrollStrategy\r\n this.overlayRef.onDetached = function () {\r\n _this.menuOpen = false;\r\n _this.eventNamespaceFn(_this.element, 'close');\r\n };\r\n // close the menu, doesn't matter what's clicked!\r\n if (this.overlayRef.portalElement) {\r\n this.overlayRef.portalElement.addEventListener('click', function () {\r\n return _this._close();\r\n });\r\n }\r\n this.overlayRef.onKeyboardEvent = function (event) {\r\n if (event.keyCode === keycodes_1.KEYCODES.ESCAPE) {\r\n _this._close();\r\n }\r\n };\r\n }\r\n return this.overlayRef;\r\n };\r\n MenuTrigger.prototype._getPosition = function () {\r\n var _a = __read(this.menu.xPosition === 'before'\r\n ? ['end', 'start']\r\n : ['start', 'end'], 2), originX = _a[0], originFallbackX = _a[1];\r\n var _b = __read(this.menu.yPosition === 'above'\r\n ? ['bottom', 'top']\r\n : ['top', 'bottom'], 2), overlayY = _b[0], overlayFallbackY = _b[1];\r\n var _c = __read([overlayY, overlayFallbackY], 2), originY = _c[0], originFallbackY = _c[1];\r\n var _d = __read([originX, originFallbackX], 2), overlayX = _d[0], overlayFallbackX = _d[1];\r\n var offsetY = 0;\r\n if (!this.menu.overlapTrigger) {\r\n originY = overlayY === 'top' ? 'bottom' : 'top';\r\n originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';\r\n }\r\n // todo: like angular material this.overlayRef.position()?\r\n return new overlay_1.OverlayPositionBuilder()\r\n .connectedTo(this.menu.connectTo ? this.menu.connectTo : this.element, { originX: originX, originY: originY }, { overlayX: overlayX, overlayY: overlayY })\r\n .withOffsetY(offsetY)\r\n .withFallbackPosition({ originX: originFallbackX, originY: originY }, { overlayX: overlayFallbackX, overlayY: overlayY })\r\n .withFallbackPosition({ originX: originX, originY: originFallbackY }, { overlayX: overlayX, overlayY: overlayFallbackY }, undefined, -offsetY)\r\n .withFallbackPosition({ originX: originFallbackX, originY: originFallbackY }, { overlayX: overlayFallbackX, overlayY: overlayFallbackY }, undefined, -offsetY);\r\n };\r\n MenuTrigger.prototype._subscribeToPositions = function (position) {\r\n var _this = this;\r\n position.onPositionChange = function (change) {\r\n var posX = change.connectionPair.overlayX === 'start' ? 'after' : 'before';\r\n var posY = change.connectionPair.overlayY === 'top' ? 'below' : 'above';\r\n _this.overlayRef.portalElement.style.transformOrigin = (posX === 'before' ? 'right' : 'left') + \" \" + (posY === 'below' ? 'top' : 'bottom');\r\n };\r\n };\r\n return MenuTrigger;\r\n}());\r\nexports.MenuTrigger = MenuTrigger;\r\nfunction menuTrigger(element) {\r\n return new MenuTrigger(element);\r\n}\r\nexports.menuTrigger = menuTrigger;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar create_node_1 = require(\"../dom/create-node\");\r\nvar get_selector_element_from_element_1 = require(\"../dom/get-selector-element-from-element\");\r\nvar Menu = /** @class */ (function () {\r\n function Menu(element) {\r\n this.element = element;\r\n this.xPosition = element.hasAttribute('data-x-position')\r\n ? element.getAttribute('data-x-position')\r\n : 'after';\r\n this.yPosition = element.hasAttribute('data-y-position')\r\n ? element.getAttribute('data-y-position')\r\n : 'below';\r\n this.overlapTrigger = element.hasAttribute('data-overlap-trigger')\r\n ? element.getAttribute('data-overlap-trigger') === 'true'\r\n : false;\r\n this.connectTo = element.hasAttribute('data-connect-to')\r\n ? get_selector_element_from_element_1.default(element, 'data-connect-to', false)\r\n : null;\r\n this.lazyContent = element.hasAttribute('data-lazy-content')\r\n ? element.getAttribute('data-lazy-content') === 'true'\r\n : false;\r\n this.backdropClassName = element.hasAttribute('data-backdrop-class')\r\n ? element.getAttribute('data-backdrop-class')\r\n : null;\r\n this.hasBackdrop = element.hasAttribute('data-has-backdrop')\r\n ? element.getAttribute('data-has-backdrop') === 'true'\r\n : true;\r\n this.portalElement = create_node_1.default(\"
\\n
\\n \" + this.element.innerHTML + \"\\n
\\n
\");\r\n }\r\n Menu.prototype.updatePortal = function () {\r\n this.portalElement.innerHTML = \"\\n
\\n \" + this.element.innerHTML + \"\\n
\\n \";\r\n };\r\n return Menu;\r\n}());\r\nexports.Menu = Menu;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction parseCssUnit(unit) {\r\n var units = ['px', 'rem', 'em'];\r\n if (!unit || !units.filter(function (u) { return unit.indexOf(u) !== -1; }).length) {\r\n return 0;\r\n }\r\n var parsed = unit.replace(',', '.');\r\n units.forEach(function (u) { return (parsed = parsed.replace(u, '')); });\r\n return Number(parsed);\r\n}\r\nexports.default = parseCssUnit;\r\n","\"use strict\";\r\nfunction __export(m) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__export(require(\"./position/connected-position-strategy\"));\r\n__export(require(\"./position/connected-position\"));\r\n__export(require(\"./position/global-position-strategy\"));\r\n__export(require(\"./position/overlay-position-builder\"));\r\n__export(require(\"./overlay-options\"));\r\n__export(require(\"./overlay\"));\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar OverlayKeyboardDispatcher = /** @class */ (function () {\r\n function OverlayKeyboardDispatcher(document) {\r\n var _this = this;\r\n /** Currently attached overlays in the order they were attached. */\r\n this.attachedOverlays = [];\r\n /** Keyboard event listener that will be attached to the body. */\r\n this.keydownListener = function (event) {\r\n if (_this.attachedOverlays.length) {\r\n // Dispatch keydown event to the correct overlay.\r\n var overlay = _this._selectOverlayFromEvent(event);\r\n if (overlay.onKeyboardEvent) {\r\n overlay.onKeyboardEvent(event);\r\n }\r\n }\r\n };\r\n this.document = document;\r\n }\r\n /** Add a new overlay to the list of attached overlay refs. */\r\n OverlayKeyboardDispatcher.prototype.add = function (overlayRef) {\r\n // Lazily start dispatcher once first overlay is added\r\n if (!this.isAttached) {\r\n this.document.body.addEventListener('keydown', this.keydownListener, true);\r\n this.isAttached = true;\r\n }\r\n this.attachedOverlays.push(overlayRef);\r\n };\r\n /** Remove an overlay from the list of attached overlay refs. */\r\n OverlayKeyboardDispatcher.prototype.remove = function (overlayRef) {\r\n var index = this.attachedOverlays.indexOf(overlayRef);\r\n if (index > -1) {\r\n this.attachedOverlays.splice(index, 1);\r\n }\r\n // Remove the global listener once there are no more overlays.\r\n if (this.attachedOverlays.length === 0) {\r\n this._detach();\r\n }\r\n };\r\n /** Select the appropriate overlay from a keydown event. */\r\n OverlayKeyboardDispatcher.prototype._selectOverlayFromEvent = function (event) {\r\n // Check if any overlays contain the event\r\n var targetedOverlay = this.attachedOverlays.find(function (overlay) {\r\n return (overlay.overlayElement === event.target ||\r\n overlay.overlayElement.contains(event.target));\r\n });\r\n // Use the overlay if it exists, otherwise choose the most recently attached one\r\n return (targetedOverlay ||\r\n this.attachedOverlays[this.attachedOverlays.length - 1]);\r\n };\r\n /** Detaches the global keyboard event listener. */\r\n OverlayKeyboardDispatcher.prototype._detach = function () {\r\n if (this.isAttached) {\r\n this.document.body.removeEventListener('keydown', this.keydownListener, true);\r\n this.isAttached = false;\r\n }\r\n };\r\n return OverlayKeyboardDispatcher;\r\n}());\r\nexports.OverlayKeyboardDispatcher = OverlayKeyboardDispatcher;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar OverlayOptions = /** @class */ (function () {\r\n function OverlayOptions(options) {\r\n var _this = this;\r\n this.className = 'c-overlay';\r\n this.backdropClassName = 'c-overlay-dark-backdrop';\r\n this.hasBackdrop = true;\r\n this.transitionDuration = 300;\r\n if (options) {\r\n Object.keys(options)\r\n .filter(function (key) { return typeof options[key] !== 'undefined'; })\r\n .forEach(function (key) { return (_this[key] = options[key]); });\r\n }\r\n }\r\n return OverlayOptions;\r\n}());\r\nexports.OverlayOptions = OverlayOptions;\r\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar add_class_1 = require(\"../dom/add-class\");\r\nvar new_guid_1 = require(\"../common/new-guid\");\r\nvar create_node_1 = require(\"../dom/create-node\");\r\nvar is_ancestor_of_class_1 = require(\"../dom/is-ancestor-of-class\");\r\nvar remove_class_1 = require(\"../dom/remove-class\");\r\nvar add_transition_end_listener_1 = require(\"../transition/add-transition-end-listener\");\r\nvar overlay_options_1 = require(\"./overlay-options\");\r\nvar overlay_keyboard_dispatcher_1 = require(\"./keyboard/overlay-keyboard-dispatcher\");\r\n// todo: do it more like angular with backdrop configuration etc...\r\nvar Overlay = /** @class */ (function () {\r\n function Overlay(portalElement, options) {\r\n this.portalElement = portalElement;\r\n this.attached = false;\r\n this.keyboardDispatcher = new overlay_keyboard_dispatcher_1.OverlayKeyboardDispatcher(document);\r\n this.options = new overlay_options_1.OverlayOptions(options);\r\n this.uuid = new_guid_1.default();\r\n if (options.scrollStrategy) {\r\n options.scrollStrategy.attach(this);\r\n }\r\n }\r\n Overlay.prototype.create = function () {\r\n // we want to re-use existing containers\r\n // so search it in the dom before we create it again!\r\n var overlayContainerElement = document.getElementsByClassName(this.options.className + \"__container\")[0];\r\n if (overlayContainerElement) {\r\n this.overlayContainerElement = overlayContainerElement;\r\n }\r\n else {\r\n this.overlayContainerElement = create_node_1.default(\"
\");\r\n document.body.insertBefore(this.overlayContainerElement, document.body.lastElementChild);\r\n }\r\n this.overlayElement = create_node_1.default(\"
\");\r\n if (this.options.overlayClassName) {\r\n add_class_1.default(this.overlayElement, this.options.overlayClassName);\r\n }\r\n this.overlayContainerElement.appendChild(this.overlayElement);\r\n };\r\n Overlay.prototype.hasAttached = function () {\r\n return this.attached;\r\n };\r\n Overlay.prototype.detachBackdrop = function () {\r\n var _this = this;\r\n var backdropToDetach = this.backdropElement;\r\n if (backdropToDetach) {\r\n var finishDetach = function () {\r\n // It may not be attached to anything in certain cases (e.g. unit tests).\r\n if (backdropToDetach && backdropToDetach.parentNode) {\r\n backdropToDetach.parentNode.removeChild(backdropToDetach);\r\n }\r\n // It is possible that a new portal has been attached to this overlay since we started\r\n // removing the backdrop. If that is the case, only clear the backdrop reference if it\r\n // is still the same instance that we started to remove.\r\n if (_this.backdropElement === backdropToDetach) {\r\n _this.backdropElement = null;\r\n }\r\n };\r\n remove_class_1.default(backdropToDetach, '--showing');\r\n if (this.options.backdropClassName) {\r\n remove_class_1.default(backdropToDetach, this.options.backdropClassName);\r\n }\r\n add_transition_end_listener_1.default(backdropToDetach, finishDetach, 500);\r\n // If the backdrop doesn't have a transition, the `transitionend` event won't fire.\r\n // In this case we make it unclickable and we try to remove it after a delay.\r\n backdropToDetach.style.pointerEvents = 'none';\r\n }\r\n };\r\n /** Updates the position of the overlay based on the position strategy. */\r\n Overlay.prototype.updatePosition = function () {\r\n if (this.options.positionStrategy) {\r\n this.options.positionStrategy.apply();\r\n }\r\n };\r\n Overlay.prototype.getOptions = function () {\r\n return this.options;\r\n };\r\n /** Update the size properties of the overlay. */\r\n Overlay.prototype.updateSize = function (sizeConfig) {\r\n this.options = __assign({}, this.options, sizeConfig);\r\n this._updateElementSize();\r\n };\r\n Overlay.prototype.open = function () {\r\n var _this = this;\r\n this._attach();\r\n // Update the position once, so that the overlay will be fully rendered\r\n // before attempting to position it, as the position may depend on the size of the rendered\r\n // content.\r\n this.updatePosition();\r\n // animate\r\n add_class_1.default(this.portalElement, '--showing');\r\n if (this.beforeOpen) {\r\n this.beforeOpen();\r\n }\r\n // todo: Aniamte like Angular Material?\r\n add_transition_end_listener_1.default(this.portalElement, function () {\r\n remove_class_1.default(_this.portalElement, '--showing');\r\n add_class_1.default(_this.portalElement, '--show');\r\n if (_this.afterOpened) {\r\n _this.afterOpened();\r\n }\r\n }, this.options.transitionDuration);\r\n };\r\n Overlay.prototype.close = function () {\r\n var _this = this;\r\n this._detach();\r\n // animate\r\n add_class_1.default(this.portalElement, '--fade-out');\r\n if (this.beforeClose) {\r\n this.beforeClose();\r\n }\r\n add_transition_end_listener_1.default(this.portalElement, function () {\r\n remove_class_1.default(_this.portalElement, '--fade-out');\r\n // todo: why?! otherwise animation only works once...\r\n remove_class_1.default(_this.portalElement, '--showing');\r\n remove_class_1.default(_this.portalElement, '--show');\r\n // should be called by caller\r\n // this._dispose();\r\n if (_this.afterClosed) {\r\n _this.afterClosed();\r\n }\r\n }, this.options.transitionDuration);\r\n };\r\n /** Cleans up the overlay from the DOM. */\r\n Overlay.prototype.dispose = function () {\r\n if (this.portalElement && this.portalElement.parentElement) {\r\n this.portalElement.parentElement.removeChild(this.portalElement);\r\n }\r\n if (this.options.positionStrategy &&\r\n this.options.positionStrategy.dispose) {\r\n this.options.positionStrategy.dispose();\r\n }\r\n if (this.options.scrollStrategy) {\r\n this.options.scrollStrategy.disable();\r\n }\r\n this.detachBackdrop();\r\n // Remove this overlay from keyboard dispatcher tracking\r\n this.keyboardDispatcher.remove(this);\r\n };\r\n Overlay.prototype._attach = function () {\r\n // todo: do it like angular so we have this method public\r\n // and we transfer the portalElement over here?\r\n // it should work with referencing the portalElement in e.g. select.ts\r\n // to calculate stuff. Because it works in menu.ts too (this.menu.portalElement.parentElement is c-overlay)!\r\n // Maybe then we can use ._overlayRef.position()... instead of OverlayPositionBuilder\r\n if (this.options.positionStrategy) {\r\n this.options.positionStrategy.attach(this);\r\n }\r\n if (this.options.scrollStrategy) {\r\n this.options.scrollStrategy.enable();\r\n }\r\n this.overlayElement.appendChild(this.portalElement);\r\n this._updateElementSize();\r\n this.overlayElement.style.pointerEvents = 'auto';\r\n if (this.options.hasBackdrop) {\r\n this._attachBackdrop();\r\n }\r\n this.attached = true;\r\n // Track this overlay by the keyboard dispatcher\r\n this.keyboardDispatcher.add(this);\r\n if (this.onAttached) {\r\n this.onAttached();\r\n }\r\n };\r\n Overlay.prototype._detach = function () {\r\n if (!this.hasAttached()) {\r\n return;\r\n }\r\n this.detachBackdrop();\r\n // When the overlay is detached, the element should disable pointer events.\r\n // This is necessary because otherwise the element will cover the page and disable\r\n // pointer events therefore. Depends on the position strategy and the applied boundaries.\r\n this.overlayElement.style.pointerEvents = 'none';\r\n if (this.options.positionStrategy &&\r\n this.options.positionStrategy.detach) {\r\n this.options.positionStrategy.detach();\r\n }\r\n if (this.options.scrollStrategy) {\r\n this.options.scrollStrategy.disable();\r\n }\r\n // Remove this overlay from keyboard dispatcher tracking\r\n this.keyboardDispatcher.remove(this);\r\n if (this.onDetached) {\r\n this.onDetached();\r\n }\r\n };\r\n /** Attaches a backdrop for this overlay. */\r\n Overlay.prototype._attachBackdrop = function () {\r\n var _this = this;\r\n this.backdropElement = create_node_1.default(\"
\");\r\n if (this.options.backdropClassName) {\r\n add_class_1.default(this.backdropElement, this.options.backdropClassName);\r\n }\r\n // Insert the backdrop before the overlay in the DOM order,\r\n // in order to handle stacked overlays properly.\r\n this.overlayElement.parentElement.insertBefore(this.backdropElement, this.overlayElement);\r\n // Forward backdrop clicks such that the consumer of the overlay can perform whatever\r\n // action desired when such a click occurs (usually closing the overlay).\r\n this.backdropElement.addEventListener('click', function (event) {\r\n return _this._handleBackdropClick(event);\r\n });\r\n // Add class to fade-in the backdrop after one frame.\r\n requestAnimationFrame(function () {\r\n if (_this.backdropElement) {\r\n add_class_1.default(_this.backdropElement, '--showing');\r\n }\r\n });\r\n };\r\n /** Updates the size of the overlay element based on the overlay config. */\r\n Overlay.prototype._updateElementSize = function () {\r\n if (this.options.width || this.options.width === 0) {\r\n this.overlayElement.style.width = formatCssUnit(this.options.width);\r\n }\r\n if (this.options.height || this.options.height === 0) {\r\n this.overlayElement.style.height = formatCssUnit(this.options.height);\r\n }\r\n if (this.options.minWidth || this.options.minWidth === 0) {\r\n this.overlayElement.style.minWidth = formatCssUnit(this.options.minWidth);\r\n }\r\n if (this.options.minHeight || this.options.minHeight === 0) {\r\n this.overlayElement.style.minHeight = formatCssUnit(this.options.minHeight);\r\n }\r\n if (this.options.maxWidth || this.options.maxWidth === 0) {\r\n this.overlayElement.style.maxWidth = formatCssUnit(this.options.maxWidth);\r\n }\r\n if (this.options.maxHeight || this.options.maxHeight === 0) {\r\n this.overlayElement.style.maxHeight = formatCssUnit(this.options.maxHeight);\r\n }\r\n };\r\n Overlay.prototype._handleBackdropClick = function (event) {\r\n if (!is_ancestor_of_class_1.default(event.target, this.options.className, true)) {\r\n if (this.backdropClick) {\r\n this.backdropClick(event);\r\n }\r\n }\r\n };\r\n return Overlay;\r\n}());\r\nexports.Overlay = Overlay;\r\nfunction overlay(element, options) {\r\n var overlayRef = new Overlay(element, options);\r\n overlayRef.create();\r\n return overlayRef;\r\n}\r\nexports.overlay = overlay;\r\nfunction formatCssUnit(value) {\r\n // todo: @opten/typescript?\r\n return typeof value === 'string' ? value : value + \"px\";\r\n}\r\n","\"use strict\";\r\nvar __values = (this && this.__values) || function (o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar is_element_clipped_by_scrolling_1 = require(\"@opten/viewport/is-element-clipped-by-scrolling\");\r\nvar is_element_scrolled_outside_view_1 = require(\"@opten/viewport/is-element-scrolled-outside-view\");\r\nvar connected_position_1 = require(\"./connected-position\");\r\nvar ConnectedPositionStrategy = /** @class */ (function () {\r\n function ConnectedPositionStrategy(originPos, overlayPos, connectedTo, document) {\r\n this.connectedTo = connectedTo;\r\n this.document = document;\r\n /** The offset in pixels for the overlay connection point on the x-axis */\r\n this.offsetX = 0;\r\n /** The offset in pixels for the overlay connection point on the y-axis */\r\n this.offsetY = 0;\r\n /** The Scrollable containers used to check scrollable view properties on position change. */\r\n this.scrollables = [];\r\n /** Ordered list of preferred positions, from most to least desirable. */\r\n this.preferredPositions = [];\r\n /** Whether the position strategy is applied currently. */\r\n this.applied = false;\r\n /** Whether the overlay position is locked. */\r\n this.positionLocked = false;\r\n this.boundResizeChange = this._handleResizeChange.bind(this);\r\n this.origin = this.connectedTo;\r\n this.withFallbackPosition(originPos, overlayPos);\r\n }\r\n Object.defineProperty(ConnectedPositionStrategy.prototype, \"positions\", {\r\n /** Ordered list of preferred positions, from most to least desirable. */\r\n get: function () {\r\n return this.preferredPositions;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /** Attach this position strategy to an overlay. */\r\n ConnectedPositionStrategy.prototype.attach = function (overlayRef) {\r\n this.pane = overlayRef.overlayElement;\r\n window.addEventListener('resize', this.boundResizeChange);\r\n };\r\n /** @docs-private */\r\n ConnectedPositionStrategy.prototype.detach = function () {\r\n this.applied = false;\r\n window.removeEventListener('resize', this.boundResizeChange);\r\n };\r\n /** Disposes all resources used by the position strategy. */\r\n ConnectedPositionStrategy.prototype.dispose = function () {\r\n this.detach();\r\n };\r\n /**\r\n * Updates the position of the overlay element, using whichever preferred position relative\r\n * to the origin fits on-screen.\r\n * @docs-private\r\n */\r\n ConnectedPositionStrategy.prototype.apply = function () {\r\n var e_1, _a;\r\n // If the position has been applied already (e.g. when the overlay was opened) and the\r\n // consumer opted into locking in the position, re-use the old position, in order to\r\n // prevent the overlay from jumping around.\r\n if (this.applied &&\r\n this.positionLocked &&\r\n this.lastConnectedPosition) {\r\n this.recalculateLastPosition();\r\n return;\r\n }\r\n this._validatePositions();\r\n this.applied = true;\r\n // We need the bounding rects for the origin and the overlay to determine how to position\r\n // the overlay relative to the origin.\r\n var element = this.pane;\r\n var originRect = this.origin.getBoundingClientRect();\r\n var overlayRect = element.getBoundingClientRect();\r\n // We use the viewport size to determine whether a position would go off-screen.\r\n var viewportSize = {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n };\r\n // Fallback point if none of the fallbacks fit into the viewport.\r\n var fallbackPoint;\r\n var fallbackPosition;\r\n try {\r\n // We want to place the overlay in the first of the preferred positions such that the\r\n // overlay fits on-screen.\r\n for (var _b = __values(this.preferredPositions), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var pos = _c.value;\r\n // Get the (x, y) point of connection on the origin, and then use that to get the\r\n // (top, left) coordinate for the overlay at `pos`.\r\n var originPoint = this._getOriginConnectionPoint(originRect, pos);\r\n var overlayPoint = this._getOverlayPoint(originPoint, overlayRect, viewportSize, pos);\r\n // If the overlay in the calculated position fits on-screen, put it there and we're done.\r\n if (overlayPoint.fitsInViewport) {\r\n this._setElementPosition(element, overlayRect, overlayPoint, pos);\r\n // Save the last connected position in case the position needs to be re-calculated.\r\n this.lastConnectedPosition = pos;\r\n return;\r\n }\r\n else if (!fallbackPoint ||\r\n fallbackPoint.visibleArea < overlayPoint.visibleArea) {\r\n fallbackPoint = overlayPoint;\r\n fallbackPosition = pos;\r\n }\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n // If none of the preferred positions were in the viewport, take the one\r\n // with the largest visible area.\r\n this._setElementPosition(element, overlayRect, fallbackPoint, fallbackPosition);\r\n };\r\n /**\r\n * Re-positions the overlay element with the trigger in its last calculated position,\r\n * even if a position higher in the \"preferred positions\" list would now fit. This\r\n * allows one to re-align the panel without changing the orientation of the panel.\r\n */\r\n ConnectedPositionStrategy.prototype.recalculateLastPosition = function () {\r\n // If the overlay has never been positioned before, do nothing.\r\n if (!this.lastConnectedPosition) {\r\n return;\r\n }\r\n this._validatePositions();\r\n var originRect = this.origin.getBoundingClientRect();\r\n var overlayRect = this.pane.getBoundingClientRect();\r\n var viewportSize = {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n };\r\n var lastPosition = this.lastConnectedPosition || this.preferredPositions[0];\r\n var originPoint = this._getOriginConnectionPoint(originRect, lastPosition);\r\n var overlayPoint = this._getOverlayPoint(originPoint, overlayRect, viewportSize, lastPosition);\r\n this._setElementPosition(this.pane, overlayRect, overlayPoint, lastPosition);\r\n };\r\n /**\r\n * Sets the list of Scrollable containers that host the origin element so that\r\n * on reposition we can evaluate if it or the overlay has been clipped or outside view. Every\r\n * Scrollable must be an ancestor element of the strategy's origin element.\r\n */\r\n ConnectedPositionStrategy.prototype.withScrollableContainers = function (scrollables) {\r\n this.scrollables = scrollables;\r\n return this;\r\n };\r\n /**\r\n * Adds a new preferred fallback position.\r\n * @param originPos\r\n * @param overlayPos\r\n */\r\n ConnectedPositionStrategy.prototype.withFallbackPosition = function (originPos, overlayPos, offsetX, offsetY) {\r\n var position = new connected_position_1.ConnectionPositionPair(originPos, overlayPos, offsetX, offsetY);\r\n this.preferredPositions.push(position);\r\n return this;\r\n };\r\n /**\r\n * Sets an offset for the overlay's connection point on the x-axis\r\n * @param offset New offset in the X axis.\r\n */\r\n ConnectedPositionStrategy.prototype.withOffsetX = function (offset) {\r\n this.offsetX = offset;\r\n return this;\r\n };\r\n /**\r\n * Sets an offset for the overlay's connection point on the y-axis\r\n * @param offset New offset in the Y axis.\r\n */\r\n ConnectedPositionStrategy.prototype.withOffsetY = function (offset) {\r\n this.offsetY = offset;\r\n return this;\r\n };\r\n /**\r\n * Sets whether the overlay's position should be locked in after it is positioned\r\n * initially. When an overlay is locked in, it won't attempt to reposition itself\r\n * when the position is re-applied (e.g. when the user scrolls away).\r\n * @param isLocked Whether the overlay should locked in.\r\n */\r\n ConnectedPositionStrategy.prototype.withLockedPosition = function (isLocked) {\r\n this.positionLocked = isLocked;\r\n return this;\r\n };\r\n /**\r\n * Overwrites the current set of positions with an array of new ones.\r\n * @param positions Position pairs to be set on the strategy.\r\n */\r\n ConnectedPositionStrategy.prototype.withPositions = function (positions) {\r\n this.preferredPositions = positions.slice();\r\n return this;\r\n };\r\n /**\r\n * Sets the origin element, relative to which to position the overlay.\r\n * @param origin Reference to the new origin element.\r\n */\r\n ConnectedPositionStrategy.prototype.setOrigin = function (origin) {\r\n this.origin = origin;\r\n return this;\r\n };\r\n /**\r\n * Gets the horizontal (x) \"start\" dimension\r\n * @param rect\r\n */\r\n ConnectedPositionStrategy.prototype._getStartX = function (rect) {\r\n return rect.left;\r\n };\r\n /**\r\n * Gets the horizontal (x) \"end\" dimension\r\n * @param rect\r\n */\r\n ConnectedPositionStrategy.prototype._getEndX = function (rect) {\r\n return rect.right;\r\n };\r\n /**\r\n * Gets the (x, y) coordinate of a connection point on the origin based on a relative position.\r\n * @param originRect\r\n * @param pos\r\n */\r\n ConnectedPositionStrategy.prototype._getOriginConnectionPoint = function (originRect, pos) {\r\n var originStartX = this._getStartX(originRect);\r\n var originEndX = this._getEndX(originRect);\r\n var x;\r\n if (pos.originX === 'center') {\r\n x = originStartX + originRect.width / 2;\r\n }\r\n else {\r\n x = pos.originX === 'start' ? originStartX : originEndX;\r\n }\r\n var y;\r\n if (pos.originY === 'center') {\r\n y = originRect.top + originRect.height / 2;\r\n }\r\n else {\r\n y = pos.originY === 'top' ? originRect.top : originRect.bottom;\r\n }\r\n return { x: x, y: y };\r\n };\r\n /**\r\n * Gets the (x, y) coordinate of the top-left corner of the overlay given a given position and\r\n * origin point to which the overlay should be connected, as well as how much of the element\r\n * would be inside the viewport at that position.\r\n */\r\n ConnectedPositionStrategy.prototype._getOverlayPoint = function (originPoint, overlayRect, viewportSize, pos) {\r\n // Calculate the (overlayStartX, overlayStartY), the start of the potential overlay position\r\n // relative to the origin point.\r\n var overlayStartX;\r\n if (pos.overlayX === 'center') {\r\n overlayStartX = -overlayRect.width / 2;\r\n }\r\n else if (pos.overlayX === 'start') {\r\n overlayStartX = 0;\r\n }\r\n else {\r\n overlayStartX = -overlayRect.width;\r\n }\r\n var overlayStartY;\r\n if (pos.overlayY === 'center') {\r\n overlayStartY = -overlayRect.height / 2;\r\n }\r\n else {\r\n overlayStartY = pos.overlayY === 'top' ? 0 : -overlayRect.height;\r\n }\r\n // The (x, y) offsets of the overlay based on the current position.\r\n var offsetX = typeof pos.offsetX === 'undefined' ? this.offsetX : pos.offsetX;\r\n var offsetY = typeof pos.offsetY === 'undefined' ? this.offsetY : pos.offsetY;\r\n // The (x, y) coordinates of the overlay.\r\n var x = originPoint.x + overlayStartX + offsetX;\r\n var y = originPoint.y + overlayStartY + offsetY;\r\n // How much the overlay would overflow at this position, on each side.\r\n var leftOverflow = 0 - x;\r\n var rightOverflow = x + overlayRect.width - viewportSize.width;\r\n var topOverflow = 0 - y;\r\n var bottomOverflow = y + overlayRect.height - viewportSize.height;\r\n // Visible parts of the element on each axis.\r\n var visibleWidth = this._subtractOverflows(overlayRect.width, leftOverflow, rightOverflow);\r\n var visibleHeight = this._subtractOverflows(overlayRect.height, topOverflow, bottomOverflow);\r\n // The area of the element that's within the viewport.\r\n var visibleArea = visibleWidth * visibleHeight;\r\n var fitsInViewport = overlayRect.width * overlayRect.height === visibleArea;\r\n return { x: x, y: y, fitsInViewport: fitsInViewport, visibleArea: visibleArea };\r\n };\r\n /**\r\n * Gets the view properties of the trigger and overlay, including whether they are clipped\r\n * or completely outside the view of any of the strategy's scrollables.\r\n */\r\n ConnectedPositionStrategy.prototype._getScrollVisibility = function (overlay) {\r\n var originBounds = this.origin.getBoundingClientRect();\r\n var overlayBounds = overlay.getBoundingClientRect();\r\n var scrollContainerBounds = this.scrollables.map(function (s) {\r\n return s.getBoundingClientRect();\r\n });\r\n return {\r\n isOriginClipped: is_element_clipped_by_scrolling_1.default(originBounds, scrollContainerBounds),\r\n isOriginOutsideView: is_element_scrolled_outside_view_1.default(originBounds, scrollContainerBounds),\r\n isOverlayClipped: is_element_clipped_by_scrolling_1.default(overlayBounds, scrollContainerBounds),\r\n isOverlayOutsideView: is_element_scrolled_outside_view_1.default(overlayBounds, scrollContainerBounds),\r\n };\r\n };\r\n /** Physically positions the overlay element to the given coordinate. */\r\n ConnectedPositionStrategy.prototype._setElementPosition = function (element, overlayRect, overlayPoint, pos) {\r\n // We want to set either `top` or `bottom` based on whether the overlay wants to appear above\r\n // or below the origin and the direction in which the element will expand.\r\n var verticalStyleProperty = pos.overlayY === 'bottom' ? 'bottom' : 'top';\r\n // When using `bottom`, we adjust the y position such that it is the distance\r\n // from the bottom of the viewport rather than the top.\r\n var y = verticalStyleProperty === 'top'\r\n ? overlayPoint.y\r\n : this.document.documentElement.clientHeight -\r\n (overlayPoint.y + overlayRect.height);\r\n var horizontalStyleProperty = pos.overlayX === 'end' ? 'right' : 'left';\r\n // When we're setting `right`, we adjust the x position such that it is the distance\r\n // from the right edge of the viewport rather than the left edge.\r\n var x = horizontalStyleProperty === 'left'\r\n ? overlayPoint.x\r\n : this.document.documentElement.clientWidth -\r\n (overlayPoint.x + overlayRect.width);\r\n // Reset any existing styles. This is necessary in case the preferred position has\r\n // changed since the last `apply`.\r\n ['top', 'bottom', 'left', 'right'].forEach(function (p) { return (element.style[p] = null); });\r\n element.style[verticalStyleProperty] = y + \"px\";\r\n element.style[horizontalStyleProperty] = x + \"px\";\r\n // Notify that the position has been changed along with its change properties.\r\n var scrollableViewProperties = this._getScrollVisibility(element);\r\n var positionChange = new connected_position_1.ConnectedOverlayPositionChange(pos, scrollableViewProperties);\r\n if (this.onPositionChange) {\r\n this.onPositionChange(positionChange);\r\n }\r\n };\r\n /** Subtracts the amount that an element is overflowing on an axis from it's length. */\r\n ConnectedPositionStrategy.prototype._subtractOverflows = function (length) {\r\n var overflows = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n overflows[_i - 1] = arguments[_i];\r\n }\r\n return overflows.reduce(function (currentValue, currentOverflow) {\r\n return currentValue - Math.max(currentOverflow, 0);\r\n }, length);\r\n };\r\n /** Validates that the current position match the expected values. */\r\n ConnectedPositionStrategy.prototype._validatePositions = function () {\r\n if (!this.preferredPositions.length) {\r\n throw Error('ConnectedPositionStrategy: At least one position is required.');\r\n }\r\n // TODO(crisbeto): remove these once Angular's template type\r\n // checking is advanced enough to catch these cases.\r\n this.preferredPositions.forEach(function (pair) {\r\n connected_position_1.validateHorizontalPosition('originX', pair.originX);\r\n connected_position_1.validateVerticalPosition('originY', pair.originY);\r\n connected_position_1.validateHorizontalPosition('overlayX', pair.overlayX);\r\n connected_position_1.validateVerticalPosition('overlayY', pair.overlayY);\r\n });\r\n };\r\n ConnectedPositionStrategy.prototype._handleResizeChange = function () {\r\n this.apply();\r\n };\r\n return ConnectedPositionStrategy;\r\n}());\r\nexports.ConnectedPositionStrategy = ConnectedPositionStrategy;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/** The points of the origin element and the overlay element to connect. */\r\nvar ConnectionPositionPair = /** @class */ (function () {\r\n function ConnectionPositionPair(origin, overlay, offsetX, offsetY) {\r\n this.offsetX = offsetX;\r\n this.offsetY = offsetY;\r\n this.originX = origin.originX;\r\n this.originY = origin.originY;\r\n this.overlayX = overlay.overlayX;\r\n this.overlayY = overlay.overlayY;\r\n }\r\n return ConnectionPositionPair;\r\n}());\r\nexports.ConnectionPositionPair = ConnectionPositionPair;\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\nvar ScrollingVisibility = /** @class */ (function () {\r\n function ScrollingVisibility() {\r\n }\r\n return ScrollingVisibility;\r\n}());\r\nexports.ScrollingVisibility = ScrollingVisibility;\r\n/** The change event emitted by the strategy when a fallback position is used. */\r\nvar ConnectedOverlayPositionChange = /** @class */ (function () {\r\n function ConnectedOverlayPositionChange(\r\n /** The position used as a result of this change. */\r\n connectionPair, scrollableViewProperties) {\r\n this.connectionPair = connectionPair;\r\n this.scrollableViewProperties = scrollableViewProperties;\r\n }\r\n return ConnectedOverlayPositionChange;\r\n}());\r\nexports.ConnectedOverlayPositionChange = ConnectedOverlayPositionChange;\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\nfunction validateVerticalPosition(property, value) {\r\n if (value !== 'top' && value !== 'bottom' && value !== 'center') {\r\n throw Error(\"ConnectedPosition: Invalid \" + property + \" '\" + value + \"'. \" +\r\n \"Expected 'top', 'bottom' or 'center'.\");\r\n }\r\n}\r\nexports.validateVerticalPosition = validateVerticalPosition;\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\nfunction validateHorizontalPosition(property, value) {\r\n if (value !== 'start' && value !== 'end' && value !== 'center') {\r\n throw Error(\"ConnectedPosition: Invalid \" + property + \" '\" + value + \"'. \" +\r\n \"Expected 'start', 'end' or 'center'.\");\r\n }\r\n}\r\nexports.validateHorizontalPosition = validateHorizontalPosition;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar add_class_1 = require(\"@opten/dom/add-class\");\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\nvar GlobalPositionStrategy = /** @class */ (function () {\r\n function GlobalPositionStrategy(document) {\r\n this.document = document;\r\n this.cssPosition = 'static';\r\n this.topOffset = '';\r\n this.bottomOffset = '';\r\n this.leftOffset = '';\r\n this.rightOffset = '';\r\n this.alignItems = '';\r\n this.justifyContent = '';\r\n this.width = '';\r\n this.height = '';\r\n /** A lazily-created wrapper for the overlay element that is used as a flex container. */\r\n this.wrapper = null;\r\n }\r\n GlobalPositionStrategy.prototype.attach = function (overlayRef) {\r\n var options = overlayRef.getOptions();\r\n this.overlayRef = overlayRef;\r\n if (this.width && !options.width) {\r\n overlayRef.updateSize({ width: this.width });\r\n }\r\n if (this.height && !options.height) {\r\n overlayRef.updateSize({ height: this.height });\r\n }\r\n };\r\n /**\r\n * Sets the top position of the overlay. Clears any previously set vertical position.\r\n * @param value New top offset.\r\n */\r\n GlobalPositionStrategy.prototype.top = function (value) {\r\n if (value === void 0) { value = ''; }\r\n this.bottomOffset = '';\r\n this.topOffset = value;\r\n this.alignItems = 'flex-start';\r\n return this;\r\n };\r\n /**\r\n * Sets the left position of the overlay. Clears any previously set horizontal position.\r\n * @param value New left offset.\r\n */\r\n GlobalPositionStrategy.prototype.left = function (value) {\r\n if (value === void 0) { value = ''; }\r\n this.rightOffset = '';\r\n this.leftOffset = value;\r\n this.justifyContent = 'flex-start';\r\n return this;\r\n };\r\n /**\r\n * Sets the bottom position of the overlay. Clears any previously set vertical position.\r\n * @param value New bottom offset.\r\n */\r\n GlobalPositionStrategy.prototype.bottom = function (value) {\r\n if (value === void 0) { value = ''; }\r\n this.topOffset = '';\r\n this.bottomOffset = value;\r\n this.alignItems = 'flex-end';\r\n return this;\r\n };\r\n /**\r\n * Sets the right position of the overlay. Clears any previously set horizontal position.\r\n * @param value New right offset.\r\n */\r\n GlobalPositionStrategy.prototype.right = function (value) {\r\n if (value === void 0) { value = ''; }\r\n this.leftOffset = '';\r\n this.rightOffset = value;\r\n this.justifyContent = 'flex-end';\r\n return this;\r\n };\r\n /**\r\n * Centers the overlay horizontally with an optional offset.\r\n * Clears any previously set horizontal position.\r\n *\r\n * @param offset Overlay offset from the horizontal center.\r\n */\r\n GlobalPositionStrategy.prototype.centerHorizontally = function (offset) {\r\n if (offset === void 0) { offset = ''; }\r\n this.left(offset);\r\n this.justifyContent = 'center';\r\n return this;\r\n };\r\n /**\r\n * Centers the overlay vertically with an optional offset.\r\n * Clears any previously set vertical position.\r\n *\r\n * @param offset Overlay offset from the vertical center.\r\n */\r\n GlobalPositionStrategy.prototype.centerVertically = function (offset) {\r\n if (offset === void 0) { offset = ''; }\r\n this.top(offset);\r\n this.alignItems = 'center';\r\n return this;\r\n };\r\n /**\r\n * Apply the position to the element.\r\n * @docs-private\r\n *\r\n * @returns Resolved when the styles have been applied.\r\n */\r\n GlobalPositionStrategy.prototype.apply = function () {\r\n // Since the overlay ref applies the strategy asynchronously, it could\r\n // have been disposed before it ends up being applied. If that is the\r\n // case, we shouldn't do anything.\r\n if (!this.overlayRef.hasAttached()) {\r\n return;\r\n }\r\n var element = this.overlayRef.overlayElement;\r\n if (!this.wrapper && element.parentNode) {\r\n this.wrapper = this.document.createElement('div');\r\n add_class_1.default(this.wrapper, 'c-overlay__global'); // todo: settings?\r\n element.parentNode.insertBefore(this.wrapper, element);\r\n this.wrapper.appendChild(element);\r\n }\r\n var parentStyles = element.parentNode.style;\r\n var options = this.overlayRef.getOptions();\r\n element.style.position = this.cssPosition;\r\n element.style.marginLeft =\r\n options.width === '100%' ? '0' : this.leftOffset;\r\n element.style.marginTop =\r\n options.height === '100%' ? '0' : this.topOffset;\r\n element.style.marginBottom = this.bottomOffset;\r\n element.style.marginRight = this.rightOffset;\r\n parentStyles.justifyContent =\r\n options.width === '100%' ? 'flex-start' : this.justifyContent;\r\n parentStyles.alignItems =\r\n options.height === '100%' ? 'flex-start' : this.alignItems;\r\n };\r\n /** Removes the wrapper element from the DOM. */\r\n GlobalPositionStrategy.prototype.dispose = function () {\r\n if (this.wrapper && this.wrapper.parentNode) {\r\n this.wrapper.parentNode.removeChild(this.wrapper);\r\n this.wrapper = null;\r\n }\r\n };\r\n return GlobalPositionStrategy;\r\n}());\r\nexports.GlobalPositionStrategy = GlobalPositionStrategy;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar connected_position_strategy_1 = require(\"./connected-position-strategy\");\r\nvar global_position_strategy_1 = require(\"./global-position-strategy\");\r\nvar OverlayPositionBuilder = /** @class */ (function () {\r\n function OverlayPositionBuilder() {\r\n }\r\n /**\r\n * Creates a global position strategy.\r\n */\r\n OverlayPositionBuilder.prototype.global = function () {\r\n return new global_position_strategy_1.GlobalPositionStrategy(document);\r\n };\r\n /**\r\n * Creates a relative position strategy.\r\n * @param elementRef\r\n * @param originPos\r\n * @param overlayPos\r\n */\r\n OverlayPositionBuilder.prototype.connectedTo = function (elementRef, originPos, overlayPos) {\r\n return new connected_position_strategy_1.ConnectedPositionStrategy(originPos, overlayPos, elementRef, document);\r\n };\r\n return OverlayPositionBuilder;\r\n}());\r\nexports.OverlayPositionBuilder = OverlayPositionBuilder;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar is_element_scrolled_outside_view_1 = require(\"@opten/viewport/is-element-scrolled-outside-view\");\r\n/**\r\n * Strategy that will update the element position as the user is scrolling.\r\n */\r\nvar RepositionScrollStrategy = /** @class */ (function () {\r\n function RepositionScrollStrategy(config) {\r\n var _this = this;\r\n this.config = config;\r\n this.applied = false;\r\n this.handleScroll = function () {\r\n var throttle = _this.config ? _this.config.scrollThrottle : 0;\r\n var autoClose = _this.config ? _this.config.autoClose : true;\r\n var update = function () {\r\n _this.overlayRef.updatePosition();\r\n if (autoClose) {\r\n var overlayRect = _this.overlayRef.overlayElement.getBoundingClientRect();\r\n var _a = {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n }, width = _a.width, height = _a.height;\r\n // todo: include all ancestor scroll containers here once\r\n // we have a way of exposing the trigger element to the scroll strategy.\r\n var parentRects = [\r\n {\r\n width: width,\r\n height: height,\r\n bottom: height,\r\n right: width,\r\n top: 0,\r\n left: 0,\r\n },\r\n ];\r\n if (is_element_scrolled_outside_view_1.default(overlayRect, parentRects)) {\r\n _this.disable();\r\n _this.overlayRef.close();\r\n }\r\n }\r\n };\r\n if (throttle > 0) {\r\n setTimeout(function () { return update(); }, throttle);\r\n }\r\n else {\r\n update();\r\n }\r\n };\r\n }\r\n /** Attaches this scroll strategy to an overlay. */\r\n RepositionScrollStrategy.prototype.attach = function (overlayRef) {\r\n this.overlayRef = overlayRef;\r\n };\r\n /** Enables repositioning of the attached overlay on scroll. */\r\n RepositionScrollStrategy.prototype.enable = function () {\r\n if (!this.applied) {\r\n window.addEventListener('scroll', this.handleScroll);\r\n this.applied = true;\r\n }\r\n };\r\n /** Disables repositioning of the attached overlay on scroll. */\r\n RepositionScrollStrategy.prototype.disable = function () {\r\n if (this.applied) {\r\n window.removeEventListener('scroll', this.handleScroll);\r\n this.applied = false;\r\n }\r\n };\r\n return RepositionScrollStrategy;\r\n}());\r\nexports.RepositionScrollStrategy = RepositionScrollStrategy;\r\n","import addClass from '@opten/dom/add-class';\n\nconst stringPlayer = 'Player';\n\nexport class IFramePlayerOptions {\n startPlayerClass?: string;\n}\n\nexport class IFramePlayer {\n private _buttonElement: HTMLElement;\n private _iFrameElement: HTMLIFrameElement;\n private _options: IFramePlayerOptions = {\n startPlayerClass: 'js-player-start'\n }\n\n private _boundClick = this._handleClick.bind(this);\n\n constructor(private element: HTMLElement, options?: IFramePlayerOptions) {\n this._options = { ...this._options, ...options };\n\n this._buttonElement = element.getElementsByClassName(\n this._options.startPlayerClass\n )[0] as HTMLElement;\n\n this._iFrameElement = element.getElementsByTagName('iframe')[0];\n\n this._init();\n }\n\n private _init() {\n // init\n if (!(stringPlayer in this.element)) {\n // prevent adding event handlers twice\n if (this._buttonElement && this._iFrameElement) {\n this._buttonElement.addEventListener('click', this._boundClick);\n }\n }\n\n this.element[stringPlayer] = this;\n }\n\n private _handleClick() {\n this.play();\n this._buttonElement.removeEventListener('click', this._boundClick);\n }\n\n play() {\n if (this._iFrameElement.src.indexOf('autoplay') === -1) {\n this._iFrameElement.src +=\n this._iFrameElement.src.indexOf('?') === -1\n ? '?autoplay=1'\n : '&autoplay=1';\n addClass(this.element, '--playing');\n }\n }\n}\n\nexport default function iframePlayer(element: HTMLElement, options?: IFramePlayerOptions) {\n let data = element[stringPlayer] as IFramePlayer;\n\n if (!data) {\n data = new IFramePlayer(element, options);\n }\n return data;\n}","export interface IRowElementEqualHeightOptions {\n\telementSelector?: string;\n\tbreakpoints?: IRowElementEqualHeightWidth;\n}\n\nexport interface IRowElementEqualHeightWidth {\n\txs?: IRowElementEqualHeightBreakpoints;\n\tsm?: IRowElementEqualHeightBreakpoints;\n\tmd?: IRowElementEqualHeightBreakpoints;\n\tlg?: IRowElementEqualHeightBreakpoints;\n}\n\nexport interface IRowElementEqualHeightBreakpoints {\n\tminWidth?: number;\n\tcountElements?: number;\n}\n\nexport class RowElementEqualHeight {\n\tprivate _wrapperElement: HTMLElement;\n\tprivate _elements: HTMLElement[];\n\tprivate _options: IRowElementEqualHeightOptions = {\n\t\telementSelector: '.js-row-element-maxheight',\n\t\tbreakpoints: {\n\t\t\txs: {\n\t\t\t\tminWidth: 0,\n\t\t\t\tcountElements: 1\n\t\t\t},\n\t\t\tsm: {\n\t\t\t\tminWidth: 768,\n\t\t\t\tcountElements: 2\n\t\t\t},\n\t\t\tmd: {\n\t\t\t\tminWidth: 1024,\n\t\t\t\tcountElements: 3\n\t\t\t},\n\t\t\tlg: {\n\t\t\t\tminWidth: 1200,\n\t\t\t\tcountElements: 3\n\t\t\t}\n\t\t}\n\t};\n\tprivate _countElements: number;\n\n\tconstructor(element: HTMLElement, options?: IRowElementEqualHeightOptions) {\n\t\tthis._wrapperElement = element;\n\t\tthis._options = {\n\t\t\t...this._options,\n\t\t\t...options,\n\t\t};\n\t\tthis.init();\n\t\twindow.addEventListener('resize', () => this.init());\n\t}\n\n\tpublic init() {\n\t\tthis._elements = Array.from(this._wrapperElement.querySelectorAll(this._options.elementSelector)) as HTMLElement[];\n\n\t\tthis.RebuildHeight();\n\t}\n\n\tprivate RebuildHeight(): void {\n\n\t\tif (this._elements && this._elements.length > 0) {\n\t\t\tthis.SetCountElements();\n\t\t\tvar groups = this.GetGroupsOf();\n\t\t\tthis.SetHeight(groups);\n\t\t}\n\t}\n\n\tprivate SetCountElements(): void {\n\n\t\tvar width = window.outerWidth;\n\t\tthis._countElements = 1;\n\n\t\tif (width >= this._options.breakpoints.lg.minWidth) {\n\t\t\tthis._countElements = this._options.breakpoints.lg.countElements;\n\t\t} else if (width >= this._options.breakpoints.md.minWidth) {\n\t\t\tthis._countElements = this._options.breakpoints.md.countElements;\n\t\t} else if (width >= this._options.breakpoints.sm.minWidth) {\n\t\t\tthis._countElements = this._options.breakpoints.sm.countElements;\n\t\t} else {\n\t\t\tthis._countElements = this._options.breakpoints.xs.countElements;\n\t\t}\n\t}\n\n\tprivate GetGroupsOf(): Array {\n\t\tvar groups = new Array();\n\t\tvar offset = 0, group;\n\t\tif (this._countElements > 1) {\n\t\t\twhile ((group = this._elements.slice(offset, (this._countElements + offset))).length) {\n\t\t\t\tgroups.push(group);\n\t\t\t\toffset += this._countElements;\n\t\t\t}\n\t\t} else {\n\t\t\tgroups.push(this._elements);\n\t\t}\n\n\t\treturn groups;\n\t}\n\n\tprivate SetHeight(groups: Array) {\n\n\t\tfor (let groupElements of groups) {\n\t\t\tgroupElements.forEach(groupElement => groupElement.style.height = '');\n\n\n\t\t\tif (this._countElements > 1) {\n\t\t\t\tvar maxHeight = Math.max.apply(null, groupElements.map((i, e) => {\n\t\t\t\t\treturn this.GetHeight(i);\n\t\t\t\t}));\n\t\t\t\tgroupElements.forEach((groupElement,i) => groupElement.style.height = maxHeight + \"px\");\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate GetHeight(element: HTMLElement): number {\n\t\tvar displayCss = element.style.display;\n\t\tvar visibilityCss = element.style.visibility;\n\t\telement.style.display = 'block';\n\t\telement.style.visibility = 'hidden';\n\n\t\tvar height = element.offsetHeight;\n\t\telement.style.display = displayCss;\n\t\telement.style.visibility = visibilityCss;\n\n\t\treturn height;\n\t}\n}\n\nexport default function rowElementEqualHeight(\n\telement: HTMLElement, options?: IRowElementEqualHeightOptions\n): RowElementEqualHeight {\n\treturn new RowElementEqualHeight(element, options);\n}","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar linear_tween_1 = require(\"@opten/animation/linear-tween\");\r\nvar scroll_to_1 = require(\"../scroll-to\");\r\nfunction scrollToOffset(distance, animationFunction, duration, offset, wrapper) {\r\n if (animationFunction === void 0) { animationFunction = linear_tween_1.default; }\r\n if (duration === void 0) { duration = 300; }\r\n if (offset === void 0) { offset = 0; }\r\n if (wrapper === void 0) { wrapper = window; }\r\n scroll_to_1.default(distance + offset, animationFunction, duration, wrapper);\r\n}\r\nexports.default = scrollToOffset;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar get_window_scroll_top_1 = require(\"@opten/dom/get-window-scroll-top\");\r\nfunction scrollTo(distance, animationFunction, duration, wrapper) {\r\n if (animationFunction === void 0) { animationFunction = function (t, b, c, d) {\r\n return c * t / d + b;\r\n }; }\r\n if (duration === void 0) { duration = 300; }\r\n if (wrapper === void 0) { wrapper = window; }\r\n var start = get_window_scroll_top_1.default();\r\n var timeStart;\r\n var timeElapsed;\r\n if (wrapper instanceof HTMLElement) {\r\n start = wrapper.scrollTop;\r\n }\r\n requestAnimationFrame.call(window, function (time) {\r\n timeStart = time;\r\n loop(time);\r\n });\r\n function loop(time) {\r\n timeElapsed = time - timeStart;\r\n if (wrapper instanceof Window) {\r\n wrapper.scrollTo(0, animationFunction(timeElapsed, start, distance, duration));\r\n if (timeElapsed < duration) {\r\n requestAnimationFrame.call(window, loop);\r\n }\r\n else {\r\n wrapper.scrollTo(0, start + distance);\r\n }\r\n }\r\n else {\r\n wrapper.scrollTop = animationFunction(timeElapsed, start, distance, duration);\r\n if (timeElapsed < duration) {\r\n requestAnimationFrame.call(window, loop);\r\n }\r\n else {\r\n wrapper.scrollTop = start + distance;\r\n }\r\n }\r\n }\r\n}\r\nexports.default = scrollTo;\r\n","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar new_guid_1 = require(\"../common/new-guid\");\r\nvar add_class_1 = require(\"../dom/add-class\");\r\nvar remove_class_1 = require(\"../dom/remove-class\");\r\nvar create_node_1 = require(\"../dom/create-node\");\r\nvar keycodes_1 = require(\"../keycodes\");\r\nvar overlay_1 = require(\"../overlay\");\r\nvar parse_css_unit_1 = require(\"../number/parse-css-unit\");\r\nvar get_css_1 = require(\"../dom/get-css\");\r\nvar reposition_scroll_strategy_1 = require(\"../overlay/scroll/reposition-scroll-strategy\");\r\n/**\r\n * The following style constants are necessary to save here in order\r\n * to properly calculate the alignment of the selected option over\r\n * the trigger element.\r\n */\r\nvar SelectOptions = /** @class */ (function () {\r\n function SelectOptions() {\r\n }\r\n return SelectOptions;\r\n}());\r\nexports.SelectOptions = SelectOptions;\r\nvar Option = /** @class */ (function () {\r\n function Option(element) {\r\n this.element = element;\r\n // this properties are cached\r\n this.text = (this.element.textContent || '').trim();\r\n this.disabled = this.element.disabled;\r\n }\r\n Object.defineProperty(Option.prototype, \"disabled\", {\r\n get: function () {\r\n return this._disabled;\r\n },\r\n set: function (value) {\r\n this._disabled = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Option.prototype, \"text\", {\r\n get: function () {\r\n return this._text;\r\n },\r\n set: function (value) {\r\n this._text = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Option.prototype, \"value\", {\r\n get: function () {\r\n // don't cache value, might change!\r\n return (this.element.value || '').trim();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Option;\r\n}());\r\nexports.Option = Option;\r\nvar Select = /** @class */ (function () {\r\n function Select(selectElement, options) {\r\n this.selectElement = selectElement;\r\n this.config = {\r\n classes: {\r\n component: 'c-select',\r\n active: '--active',\r\n highlighted: '--highlighted',\r\n disabled: '--disabled'\r\n }\r\n };\r\n /** The scroll position of the overlay panel, calculated to center the selected option. */\r\n this.scrollTop = 0;\r\n /**\r\n * The y-offset of the overlay panel in relation to the trigger's top start corner.\r\n * This must be adjusted to align the selected option text over the trigger text.\r\n * when the panel opens. Will change based on the y-position of the selected option.\r\n */\r\n this.offsetY = 0;\r\n /**\r\n * This position config ensures that the top \"start\" corner of the overlay\r\n * is aligned with with the top \"start\" of the origin by default (overlapping\r\n * the trigger completely). If the panel cannot fit below the trigger, it\r\n * will fall back to a position above the trigger.\r\n */\r\n this.positions = [\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'top'\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'bottom'\r\n }\r\n ];\r\n /** Whether or not the overlay panel is open. */\r\n this.panelOpen = false;\r\n this.config = __assign({}, this.config, options);\r\n this.selectedIndex = this._getSelectedIndex();\r\n this.activeIndex = !this.selectedIndex ? 0 : this.selectedIndex;\r\n this.uuid = new_guid_1.default();\r\n this._init();\r\n }\r\n Select.prototype.open = function () {\r\n // todo: implement disabled?\r\n if ( /*this.disabled ||*/!this.options || !this.options.length || this.panelOpen) {\r\n return;\r\n }\r\n this.triggerRect = this.triggerElement.getBoundingClientRect();\r\n this.panelOpen = true;\r\n this._createOverlay().open();\r\n this._calculateOverlayPosition();\r\n this._highlightCorrectOption();\r\n this._scrollActiveOptionIntoView();\r\n };\r\n Select.prototype.close = function () {\r\n if (this.panelOpen) {\r\n this.overlayRef.close();\r\n // todo: gets called twice?\r\n // todo: correct? forward events\r\n this._shouldForward('blur');\r\n }\r\n };\r\n Select.prototype.toggle = function () {\r\n this.panelOpen ? this.close() : this.open();\r\n };\r\n Select.prototype._init = function () {\r\n var _this = this;\r\n // todo: set arias like Angular Material\r\n this.options = Array.from(this.selectElement.children).map(function (option) { return new Option(option); });\r\n this.selectElement.tabIndex = -1;\r\n this.selectElement.setAttribute('aria-hidden', 'true');\r\n this.selectElement.setAttribute('data-select', this.uuid);\r\n this.selectElement.insertAdjacentHTML('afterend', this._render());\r\n this.selectElement.addEventListener('focus', function () {\r\n _this.select.focus();\r\n _this.open();\r\n });\r\n this.select = document.getElementById(this.uuid);\r\n this.select.tabIndex = 0;\r\n this.select.className += ' ' + this.selectElement.className;\r\n this.triggerElement = this.select.getElementsByClassName(this.config.classes.component + \"__trigger\")[0];\r\n this.triggerElement.addEventListener('click', function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n _this.toggle();\r\n });\r\n this.select.addEventListener('keydown', function (event) {\r\n return _this._handleKeydown(event);\r\n });\r\n };\r\n Select.prototype._handleKeydown = function (event) {\r\n switch (event.keyCode) {\r\n case keycodes_1.KEYCODES.SPACE:\r\n this.toggle();\r\n break;\r\n case keycodes_1.KEYCODES.DOWN:\r\n case keycodes_1.KEYCODES.UP:\r\n // todo: why?\r\n var maxSelectedIndex = this.options.length - 1;\r\n if (event.keyCode === keycodes_1.KEYCODES.UP) {\r\n if (this.activeIndex !== 0) {\r\n this.activeIndex--;\r\n }\r\n }\r\n else {\r\n if (this.activeIndex < maxSelectedIndex) {\r\n this.activeIndex++;\r\n }\r\n }\r\n // todo: something like subscribe on selectedIndex change\r\n // so we can call this method there\r\n if (this.panelOpen) {\r\n this._highlightCorrectOption();\r\n this._scrollActiveOptionIntoView();\r\n }\r\n else {\r\n this._emit(this.options[this.activeIndex]);\r\n }\r\n break;\r\n case keycodes_1.KEYCODES.ESCAPE:\r\n if (this.panelOpen) {\r\n this.close();\r\n }\r\n break;\r\n case keycodes_1.KEYCODES.ENTER:\r\n if (!this.panelOpen) {\r\n this.toggle();\r\n }\r\n else {\r\n this._emit(this.options[this.activeIndex]);\r\n // todo: something like subscribe on activeIndex change\r\n // so we can call this method there\r\n this._highlightCorrectOption();\r\n this.close();\r\n }\r\n break;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n };\r\n /**\r\n * This method creates the overlay from the provided select's template and saves its\r\n * OverlayRef so that it can be attached to the DOM when open is called.\r\n */\r\n Select.prototype._createOverlay = function () {\r\n var _this = this;\r\n if (!this.overlayRef) {\r\n this.overlayRef = overlay_1.overlay(create_node_1.default(this.panelHTML), this._getOverlayOptions());\r\n this.overlayRef.backdropClick = function () { return _this.close(); };\r\n this.overlayRef.afterOpened = function () { return _this._onPanelDone(); };\r\n this.overlayRef.afterClosed = function () { return _this.overlayRef.dispose(); };\r\n this.overlayRef.onAttached = function () {\r\n _this.overlayRef.portalElement.style.transformOrigin = 'top'; // set initial origin\r\n _this._calculateOverlayOffsetX();\r\n _this.overlayRef.portalElement.scrollTop = _this.scrollTop;\r\n };\r\n // todo: better way? we need that here because of the RepositionScrollStrategy\r\n this.overlayRef.onDetached = function () { return (_this.panelOpen = false); };\r\n this.optionElements = Array.from(this.overlayRef.portalElement.getElementsByClassName(this.config.classes.component + \"__panel__option\"));\r\n this.optionElements.forEach(function (option, index) {\r\n option.addEventListener('click', function () {\r\n _this._emit(_this.options[index]);\r\n // todo: something like subscribe on selectedIndex change\r\n // so we can call this method there\r\n _this._highlightCorrectOption();\r\n _this.close();\r\n });\r\n });\r\n }\r\n return this.overlayRef;\r\n };\r\n Select.prototype._getOverlayOptions = function () {\r\n return new overlay_1.OverlayOptions({\r\n scrollStrategy: new reposition_scroll_strategy_1.RepositionScrollStrategy(),\r\n positionStrategy: (this.position = this._createPositionStrategy()),\r\n backdropClassName: 'c-overlay-transparent-backdrop',\r\n hasBackdrop: true\r\n });\r\n };\r\n Select.prototype._createPositionStrategy = function () {\r\n var primaryPosition = this.positions[0];\r\n var originPoint = {\r\n originX: primaryPosition.originX,\r\n originY: primaryPosition.originY\r\n };\r\n var overlayPoint = {\r\n overlayX: primaryPosition.overlayX,\r\n overlayY: primaryPosition.overlayY\r\n };\r\n // todo: like angular material this.overlayRef.position()?\r\n var strategy = new overlay_1.OverlayPositionBuilder()\r\n .connectedTo(this.triggerElement, originPoint, overlayPoint)\r\n .withOffsetX(0)\r\n .withOffsetY(this.offsetY);\r\n for (var i = 1; i < this.positions.length; i++) {\r\n strategy.withFallbackPosition({\r\n originX: this.positions[i].originX,\r\n originY: this.positions[i].originY\r\n }, {\r\n overlayX: this.positions[i].overlayX,\r\n overlayY: this.positions[i].overlayY\r\n });\r\n }\r\n return strategy;\r\n };\r\n Select.prototype._emit = function (option) {\r\n var newValue = option.value;\r\n var newLabel = option.text;\r\n this.triggerElement.getElementsByClassName(this.config.classes.component + \"__trigger__value-text\")[0].textContent = newLabel;\r\n this.triggerElement.setAttribute('data-value', newValue);\r\n this.selectElement.value = newValue;\r\n this.selectedIndex = this._getOptionIndex(option);\r\n this.activeIndex = this.selectedIndex;\r\n this._shouldForward('change');\r\n };\r\n Select.prototype._render = function () {\r\n var _this = this;\r\n var options = this.options.reduce(function (value, option, index) {\r\n return value + \"
\\n \" + option.text + \"\\n
\";\r\n }, '');\r\n var trigger = this.options\r\n .filter(function (option, index) {\r\n return index === _this.selectedIndex;\r\n })\r\n .reduce(function (value, option) {\r\n return value + \"
\\n \\n \\n \" + option.text + \"\\n \\n \\n \\n \\n
\";\r\n }, '');\r\n this.panelHTML = \"
\" + options + \"
\";\r\n return \"
\" + trigger + \"
\";\r\n };\r\n /** Gets the index of the provided option in the option list. */\r\n Select.prototype._getOptionIndex = function (option) {\r\n return this.options.reduce(function (result, current, index) {\r\n return result === undefined\r\n ? option === current\r\n ? index\r\n : undefined\r\n : result;\r\n }, undefined);\r\n };\r\n /** Scrolls the active option into view. */\r\n Select.prototype._scrollActiveOptionIntoView = function () {\r\n var itemHeight = this._getItemHeight();\r\n var activeOptionIndex = this.activeIndex || 0;\r\n var scrollOffset = activeOptionIndex * itemHeight;\r\n var panelTop = this.overlayRef.portalElement.scrollTop;\r\n var maxHeight = this._getPanelMaxHeight();\r\n if (scrollOffset < panelTop) {\r\n this.overlayRef.portalElement.scrollTop = scrollOffset;\r\n }\r\n else if (scrollOffset + itemHeight > panelTop + maxHeight) {\r\n this.overlayRef.portalElement.scrollTop = Math.max(0, scrollOffset - maxHeight + itemHeight);\r\n }\r\n };\r\n /** Calculates the scroll position and x- and y-offsets of the overlay panel. */\r\n Select.prototype._calculateOverlayPosition = function () {\r\n var itemHeight = this._getItemHeight();\r\n var items = this.options.length;\r\n var panelHeight = Math.min(items * itemHeight, this._getPanelMaxHeight());\r\n var scrollContainerHeight = items * itemHeight;\r\n // The farthest the panel can be scrolled before it hits the bottom\r\n var maxScroll = scrollContainerHeight - panelHeight;\r\n // If no value is selected we open the popup to the first item.\r\n var selectedOptionOffset = this.selectedIndex;\r\n // We must maintain a scroll buffer so the selected option will be scrolled to the\r\n // center of the overlay panel rather than the top.\r\n var scrollBuffer = panelHeight / 2;\r\n this.scrollTop = this._calculateOverlayScroll(selectedOptionOffset, scrollBuffer, maxScroll);\r\n this.offsetY = this._calculateOverlayOffsetY(selectedOptionOffset, scrollBuffer, maxScroll);\r\n this._checkOverlayWithinViewport(maxScroll);\r\n this.position.withOffsetY(this.offsetY);\r\n };\r\n /**\r\n * Checks that the attempted overlay position will fit within the viewport.\r\n * If it will not fit, tries to adjust the scroll position and the associated\r\n * y-offset so the panel can open fully on-screen. If it still won't fit,\r\n * sets the offset back to 0 to allow the fallback position to take over.\r\n */\r\n Select.prototype._checkOverlayWithinViewport = function (maxScroll) {\r\n var itemHeight = this._getItemHeight();\r\n var maxHeight = this._getPanelMaxHeight();\r\n var viewportSize = {\r\n width: window.innerWidth,\r\n height: window.innerHeight\r\n };\r\n var paddingWidth = this._getPanelToViewportPadding();\r\n var topSpaceAvailable = this.triggerRect.top - paddingWidth;\r\n var bottomSpaceAvailable = viewportSize.height - this.triggerRect.bottom - paddingWidth;\r\n var panelHeightTop = Math.abs(this.offsetY);\r\n var totalPanelHeight = Math.min(this.options.length * itemHeight, maxHeight);\r\n var panelHeightBottom = totalPanelHeight - panelHeightTop - this.triggerRect.height;\r\n if (panelHeightBottom > bottomSpaceAvailable) {\r\n this._adjustPanelUp(panelHeightBottom, bottomSpaceAvailable);\r\n }\r\n else if (panelHeightTop > topSpaceAvailable) {\r\n this._adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll);\r\n }\r\n else {\r\n this.overlayRef.portalElement.style.transformOrigin = this._getOriginBasedOnOption();\r\n }\r\n };\r\n /** Adjusts the overlay panel up to fit in the viewport. */\r\n Select.prototype._adjustPanelUp = function (panelHeightBottom, bottomSpaceAvailable) {\r\n // Browsers ignore fractional scroll offsets, so we need to round.\r\n var distanceBelowViewport = Math.round(panelHeightBottom - bottomSpaceAvailable);\r\n // Scrolls the panel up by the distance it was extending past the boundary, then\r\n // adjusts the offset by that amount to move the panel up into the viewport.\r\n this.scrollTop -= distanceBelowViewport;\r\n this.offsetY -= distanceBelowViewport;\r\n this.overlayRef.portalElement.style.transformOrigin = this._getOriginBasedOnOption();\r\n // If the panel is scrolled to the very top, it won't be able to fit the panel\r\n // by scrolling, so set the offset to 0 to allow the fallback position to take\r\n // effect.\r\n if (this.triggerRect.top + this.scrollTop <= 0) {\r\n this.scrollTop = 0;\r\n this.offsetY = 0;\r\n this.overlayRef.portalElement.style.transformOrigin =\r\n '50% bottom 0px';\r\n }\r\n };\r\n /** Adjusts the overlay panel down to fit in the viewport. */\r\n Select.prototype._adjustPanelDown = function (panelHeightTop, topSpaceAvailable, maxScroll) {\r\n // Browsers ignore fractional scroll offsets, so we need to round.\r\n var distanceAboveViewport = Math.round(panelHeightTop - topSpaceAvailable);\r\n // Scrolls the panel down by the distance it was extending past the boundary, then\r\n // adjusts the offset by that amount to move the panel down into the viewport.\r\n this.scrollTop += distanceAboveViewport;\r\n this.offsetY += distanceAboveViewport;\r\n this.overlayRef.portalElement.style.transformOrigin = this._getOriginBasedOnOption();\r\n // If the panel is scrolled to the very bottom, it won't be able to fit the\r\n // panel by scrolling, so set the offset to 0 to allow the fallback position\r\n // to take effect.\r\n if (this.triggerRect.top + this.scrollTop >= maxScroll) {\r\n this.scrollTop = maxScroll;\r\n this.offsetY = 0;\r\n this.overlayRef.portalElement.style.transformOrigin = '50% top 0px';\r\n return;\r\n }\r\n };\r\n /** Sets the transform origin point based on the selected option. */\r\n Select.prototype._getOriginBasedOnOption = function () {\r\n var itemHeight = this._getItemHeight();\r\n var optionHeightAdjustment = (itemHeight - this.triggerRect.height) / 2;\r\n var originY = Math.abs(this.offsetY) - optionHeightAdjustment + itemHeight / 2;\r\n return \"50% \" + originY + \"px 0px\";\r\n };\r\n /**\r\n * Calculates the scroll position of the select's overlay panel.\r\n *\r\n * Attempts to center the selected option in the panel. If the option is\r\n * too high or too low in the panel to be scrolled to the center, it clamps the\r\n * scroll position to the min or max scroll positions respectively.\r\n */\r\n Select.prototype._calculateOverlayScroll = function (selectedIndex, scrollBuffer, maxScroll) {\r\n var itemHeight = this._getItemHeight();\r\n var optionOffsetFromScrollTop = itemHeight * selectedIndex;\r\n var halfOptionHeight = itemHeight / 2;\r\n // Starts at the optionOffsetFromScrollTop, which scrolls the option to the top of the\r\n // scroll container, then subtracts the scroll buffer to scroll the option down to\r\n // the center of the overlay panel. Half the option height must be re-added to the\r\n // scrollTop so the option is centered based on its middle, not its top edge.\r\n var optimalScrollPosition = optionOffsetFromScrollTop - scrollBuffer + halfOptionHeight;\r\n return Math.min(Math.max(0, optimalScrollPosition), maxScroll);\r\n };\r\n /**\r\n * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.\r\n * This must be adjusted to align the selected option text over the trigger text when\r\n * the panel opens. Will change based on LTR or RTL text direction. Note that the offset\r\n * can't be calculated until the panel has been attached, because we need to know the\r\n * content width in order to constrain the panel within the viewport.\r\n */\r\n Select.prototype._calculateOverlayOffsetX = function () {\r\n var overlayRect = this.overlayRef.overlayElement.getBoundingClientRect();\r\n var viewportSize = {\r\n width: window.innerWidth,\r\n height: window.innerHeight\r\n };\r\n var paddingWidth = this._getPanelToViewportPadding();\r\n var offsetX = 0;\r\n // todo: multiple\r\n // Adjust the offset, depending on the option padding.\r\n // offsetX = this.selectedIndex ? padding.panel * 2 : padding.panel;\r\n // Invert the offset in LTR.\r\n offsetX *= -1;\r\n // Determine how much the select overflows on each side.\r\n var leftOverflow = 0 - (overlayRect.left + offsetX);\r\n var rightOverflow = overlayRect.right +\r\n offsetX -\r\n viewportSize.width /* +\r\n padding.panel * 2*/;\r\n // If the element overflows on either side, reduce the offset to allow it to fit.\r\n if (leftOverflow > 0) {\r\n offsetX += leftOverflow + paddingWidth;\r\n }\r\n else if (rightOverflow > 0) {\r\n offsetX -= rightOverflow + paddingWidth;\r\n }\r\n // Set the offset directly\r\n this.position.withOffsetX(offsetX);\r\n this.overlayRef.updatePosition();\r\n };\r\n /**\r\n * Calculates the y-offset of the select's overlay panel in relation to the\r\n * top start corner of the trigger. It has to be adjusted in order for the\r\n * selected option to be aligned over the trigger when the panel opens.\r\n */\r\n Select.prototype._calculateOverlayOffsetY = function (selectedIndex, scrollBuffer, maxScroll) {\r\n var itemHeight = this._getItemHeight();\r\n var optionHeightAdjustment = (itemHeight - this.triggerRect.height) / 2;\r\n var maxHeight = this._getPanelMaxHeight();\r\n var maxOptionsDisplayed = Math.floor(maxHeight / itemHeight);\r\n var items = this.options.length;\r\n var optionOffsetFromPanelTop;\r\n if (this.scrollTop === 0) {\r\n optionOffsetFromPanelTop = selectedIndex * itemHeight;\r\n }\r\n else if (this.scrollTop === maxScroll) {\r\n var firstDisplayedIndex = items - maxOptionsDisplayed;\r\n var selectedDisplayIndex = selectedIndex - firstDisplayedIndex;\r\n // The first item is partially out of the viewport. Therefore we need to calculate what\r\n // portion of it is shown in the viewport and account for it in our offset.\r\n var partialItemHeight = itemHeight - ((items * itemHeight - maxHeight) % itemHeight);\r\n // Because the panel height is longer than the height of the options alone,\r\n // there is always extra padding at the top or bottom of the panel. When\r\n // scrolled to the very bottom, this padding is at the top of the panel and\r\n // must be added to the offset.\r\n optionOffsetFromPanelTop =\r\n selectedDisplayIndex * itemHeight + partialItemHeight;\r\n }\r\n else {\r\n // If the option was scrolled to the middle of the panel using a scroll buffer,\r\n // its offset will be the scroll buffer minus the half height that was added to\r\n // center it.\r\n optionOffsetFromPanelTop = scrollBuffer - itemHeight / 2;\r\n }\r\n // The final offset is the option's offset from the top, adjusted for the height\r\n // difference, multiplied by -1 to ensure that the overlay moves in the correct\r\n // direction up the page.\r\n return optionOffsetFromPanelTop * -1 - optionHeightAdjustment;\r\n };\r\n Select.prototype._highlightCorrectOption = function () {\r\n var _this = this;\r\n this.optionElements.forEach(function (option) {\r\n remove_class_1.default(option, _this.config.classes.active);\r\n remove_class_1.default(option, _this.config.classes.highlighted);\r\n });\r\n add_class_1.default(this.optionElements[this.selectedIndex], this.config.classes.active);\r\n if (this.selectedIndex !== this.activeIndex) {\r\n add_class_1.default(this.optionElements[this.activeIndex], this.config.classes.highlighted);\r\n }\r\n };\r\n Select.prototype._getPanelToViewportPadding = function () {\r\n var option = this.optionElements[0];\r\n // todo: cache?\r\n var padding = parse_css_unit_1.default(get_css_1.default(option, 'padding-left'));\r\n return Math.round(padding / 2);\r\n };\r\n Select.prototype._getPanelMaxHeight = function () {\r\n // todo: cache?\r\n return parse_css_unit_1.default(get_css_1.default(this.overlayRef.portalElement, 'max-height'));\r\n };\r\n Select.prototype._getItemHeight = function () {\r\n return this.optionElements[0].offsetHeight;\r\n };\r\n /**\r\n * When the panel element is finished transforming in (though not fading in), it\r\n * emits an event and focuses an option if the panel is open.\r\n */\r\n Select.prototype._onPanelDone = function () {\r\n if (this.panelOpen) {\r\n this.scrollTop = 0;\r\n }\r\n else {\r\n this.position.withOffsetX(0);\r\n }\r\n };\r\n /**\r\n * Forward events to the