{"version":3,"file":"scripts/main.min.js","mappings":"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","sources":["webpack:///./node_modules/algoliasearch/dist/algoliasearch-lite.umd.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./scripts/shared/shifter.js","webpack:///./scripts/shared/suggestor.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/debounce.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/isEqual.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/noop.js","webpack:///./node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createClickedEvent.js","webpack:///./node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/isModernInsightsClient.js","webpack:///./node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createSearchInsightsApi.js","webpack:///./node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createViewedEvents.js","webpack:///./node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/isAlgoliaInsightsHit.js","webpack:///./node_modules/@algolia/autocomplete-plugin-algolia-insights/dist/esm/createAlgoliaInsightsPlugin.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/safelyRunOnBrowser.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/createRef.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/createStore.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/flatten.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/getAutocompleteSetters.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/getItemsCount.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/generateAutocompleteId.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/getNormalizedSources.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/getDefaultProps.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/reshape.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/mapToAlgoliaResponse.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/resolve.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/createCancelablePromise.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/getActiveItem.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/onInput.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/createConcurrentSafePromise.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/onKeyDown.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/isSamsung.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/getPropGetters.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/isOrContainsNode.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/version.js","webpack:///./node_modules/@algolia/autocomplete-shared/dist/esm/userAgents.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/metadata.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/getCompletion.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/getNextActiveItemId.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/stateReducer.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/createAutocomplete.js","webpack:///./node_modules/@algolia/autocomplete-core/dist/esm/utils/createCancelablePromiseList.js","webpack:///./node_modules/@algolia/autocomplete-preset-algolia/dist/esm/search/fetchAlgoliaResults.js","webpack:///./node_modules/@algolia/autocomplete-preset-algolia/dist/esm/requester/createRequester.js","webpack:///./node_modules/@algolia/autocomplete-preset-algolia/dist/esm/requester/createAlgoliaRequester.js","webpack:///./node_modules/@algolia/autocomplete-preset-algolia/dist/esm/utils/getAppIdAndApiKey.js","webpack:///./node_modules/@algolia/autocomplete-preset-algolia/dist/esm/constants/index.js","webpack:///./node_modules/@algolia/autocomplete-preset-algolia/dist/esm/requester/getAlgoliaResults.js","webpack:///./node_modules/@algolia/autocomplete-js/dist/esm/utils/setProperties.js","webpack:///./angular/components/umbracoForms/umbraco-forms-validation.js","webpack:///./angular/components/umbracoForms/wrapper.js","webpack:///./angular/components/umbracoForms/umbraco-forms.controller.js","webpack:///./angular/components/umbracoForms/util.controller.js","webpack:///./scripts/greensock/utils/VelocityTracker.js","webpack:///./scripts/greensock/InertiaPlugin.js","webpack:///./angular/components/carousel/carousel.component.js","webpack:///./scripts/widgets/products-by-category.js","webpack:///./scripts/shared/revealer.js","webpack:///./scripts/shared/zoomer.js","webpack:///./scripts/widgets/brands.js","webpack:///./scripts/widgets/services.js","webpack:///./scripts/shared/searchclearer.js","webpack:///./scripts/widgets/page-box-links.js","webpack:///./scripts/shared/header.js","webpack:///./scripts/main.js","webpack:///./angular/app.js","webpack:///./app_plugins/VideoEmbedder/js/wrapper.js","webpack:///./angular/components/utility/wrapper.js","webpack:///./angular/components/utility/join.filter.js","webpack:///./angular/components/utility/trust-as-markup.filter.js","webpack:///./angular/components/utility/to-num-array.js","webpack:///./angular/components/utility/helper.factory.js","webpack:///./angular/components/utility/image-source.directive.js","webpack:///./angular/components/utility/query.component.js","webpack:///./angular/components/utility/pagination.component.js","webpack:///./angular/components/utility/lazy-element.component.js","webpack:///./angular/components/utility/compile.component.js","webpack:///./angular/components/utility/get-crop-url.filter.js","webpack:///./angular/components/utility/strip-paragraphs.filter.js","webpack:///./angular/components/utility/fit-text.directive.js","webpack:///./angular/components/utility/attrs.directive.js","webpack:///./angular/components/reviews/reviews.controller.js","webpack:///./angular/components/stars/stars.component.js","webpack:///./app_plugins/LazyModals/data-open.directive.js","webpack:///./app_plugins/LazyModals/modal-loader.directive.js","webpack:///./app_plugins/VideoEmbedder/js/video-enable-js.filter.js","webpack:///./app_plugins/VideoEmbedder/js/video-manager.directive.js","webpack:///./app_plugins/VideoEmbedder/js/video-providers.factory.js","webpack:///./angular/components/sticky/wrapper.js","webpack:///./angular/components/sticky/sticky-manager.directive.js","webpack:///./angular/components/sticky/sticky-container.directive.js","webpack:///./angular/components/sticky/sticky.component.js","webpack:///./angular/components/carousel/wrapper.js","webpack:///./angular/components/carousel/carousel-nav.component.js","webpack:///./angular/components/carousel/carousel-sync.component.js","webpack:///./angular/components/carousel/carousel-resource.factory.js","webpack:///./angular/components/carousel/carousel.controller.js","webpack:///./angular/components/carousel/related-products-carousel.controller.js","webpack:///./angular/components/multiCheckbox/multi-checkbox.component.js","webpack:///./app_plugins/Feed/feedResource.factory.js","webpack:///./app_plugins/Feed/feedGrid.controller.js","webpack:///./app_plugins/Search/searchResource.factory.js","webpack:///./app_plugins/Search/search.controller.js","webpack:///./angular/components/locationSearch/location-search.component.js","webpack:///./angular/components/checkboxDropdown/checkbox-dropdown.component.js","webpack:///./angular/components/googleMap/google-map-component.js","webpack:///./scripts/widgets/dealer-search.controller.js","webpack:///./angular/components/formFields/product-selector.component.js","webpack:///./angular/components/formFields/distributor-selector.component.js","webpack:///./angular/components/countryPicker/country-picker.component.js","webpack:///./app_plugins/Products/productResource.factory.js"],"sourcesContent":["/*! algoliasearch-lite.umd.js | 4.17.0 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=e||self).algoliasearch=t()}(this,(function(){\"use strict\";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||\"[object Arguments]\"===Object.prototype.toString.call(e)))return;var r=[],n=!0,o=!1,a=void 0;try{for(var u,i=e[Symbol.iterator]();!(n=(u=i.next()).done)&&(r.push(u.value),!t||r.length!==t);n=!0);}catch(e){o=!0,a=e}finally{try{n||null==i.return||i.return()}finally{if(o)throw a}}return r}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}()}function a(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){var r=JSON.stringify(e),n=a()[r];return Promise.all([n||t(),void 0!==n])})).then((function(e){var t=o(e,2),n=t[0],a=t[1];return Promise.all([n,a||r.miss(n)])})).then((function(e){return o(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var o=a();return o[JSON.stringify(e)]=t,n().setItem(r,JSON.stringify(o)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=a();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function i(e){var t=a(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},n=t();return n.then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return o(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,o).catch((function(){return i({caches:t}).get(e,n,o)}))},set:function(e,n){return r.set(e,n).catch((function(){return i({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return i({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return i({caches:t}).clear()}))}}}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var u=n(),i=o&&o.miss||function(){return Promise.resolve()};return u.then((function(e){return i(e)})).then((function(){return u}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function c(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function l(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var m={Read:1,Write:2,Any:3},p=1,v=2,y=3;function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function b(e){return\"string\"==typeof e?{protocol:\"https\",url:e,accept:m.Any}:{protocol:e.protocol||\"https\",url:e.url,accept:e.accept||m.Any}}var O=\"GET\",P=\"POST\";function q(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(g(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===y&&Date.now()-e.lastUpdate<=12e4}(e)})),o=[].concat(a(r),a(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:o.length>0?o.map((function(e){return b(e)})):t}}))}function w(e,t,n,o){var u=[],i=function(e,t){if(e.method===O||void 0===e.data&&void 0===t.data)return;var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}(n,o),s=function(e,t){var n=r(r({},e.headers),t.headers),o={};return Object.keys(n).forEach((function(e){var t=n[e];o[e.toLowerCase()]=t})),o}(e,o),c=n.method,l=n.method!==O?{}:r(r({},n.data),o.data),f=r(r(r({\"x-algolia-agent\":e.userAgent.value},e.queryParameters),l),o.queryParameters),h=0,d=function t(r,a){var l=r.pop();if(void 0===l)throw{name:\"RetryError\",message:\"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.\",transporterStackTrace:A(u)};var d={data:i,headers:s,method:c,url:S(l,n.path,f),connectTimeout:a(h,e.timeouts.connect),responseTimeout:a(h,o.timeout)},m=function(e){var t={request:d,response:e,host:l,triesLeft:r.length};return u.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:\"DeserializationError\",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var o=m(n);return n.isTimedOut&&h++,Promise.all([e.logger.info(\"Retryable failure\",x(o)),e.hostsCache.set(l,g(l,n.isTimedOut?y:v))]).then((function(){return t(r,a)}))},onFail:function(e){throw m(e),function(e,t){var r=e.content,n=e.status,o=r;try{o=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:\"ApiError\",message:e,status:t,transporterStackTrace:r}}(o,n,t)}(e,A(u))}};return e.requester.send(d).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return q(e.hostsCache,t).then((function(e){return d(a(e.statelessHosts).reverse(),e.getTimeout)}))}function j(e){var t={value:\"Algolia for JavaScript (\".concat(e,\")\"),add:function(e){var r=\"; \".concat(e.segment).concat(void 0!==e.version?\" (\".concat(e.version,\")\"):\"\");return-1===t.value.indexOf(r)&&(t.value=\"\".concat(t.value).concat(r)),t}};return t}function S(e,t,r){var n=T(r),o=\"\".concat(e.protocol,\"://\").concat(e.url,\"/\").concat(\"/\"===t.charAt(0)?t.substr(1):t);return n.length&&(o+=\"?\".concat(n)),o}function T(e){return Object.keys(e).map((function(t){return f(\"%s=%s\",t,(r=e[t],\"[object Object]\"===Object.prototype.toString.call(r)||\"[object Array]\"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join(\"&\")}function A(e){return e.map((function(e){return x(e)}))}function x(e){var t=e.request.headers[\"x-algolia-api-key\"]?{\"x-algolia-api-key\":\"*****\"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var N=function(e){var t=e.appId,n=function(e,t,r){var n={\"x-algolia-api-key\":r,\"x-algolia-application-id\":t};return{headers:function(){return e===h.WithinHeaders?n:{}},queryParameters:function(){return e===h.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:h.WithinHeaders,t,e.apiKey),a=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,a=e.requestsCache,u=e.responsesCache,i=e.timeouts,s=e.userAgent,c=e.hosts,l=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:a,responsesCache:u,timeouts:i,userAgent:s,headers:e.headers,queryParameters:l,hosts:c.map((function(e){return b(e)})),read:function(e,t){var r=d(t,f.timeouts.read),n=function(){return w(f,f.hosts.filter((function(e){return 0!=(e.accept&m.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var a={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(a,(function(){return f.requestsCache.get(a,(function(){return f.requestsCache.set(a,n()).then((function(e){return Promise.all([f.requestsCache.delete(a),e])}),(function(e){return Promise.all([f.requestsCache.delete(a),Promise.reject(e)])})).then((function(e){var t=o(e,2);t[0];return t[1]}))}))}),{miss:function(e){return f.responsesCache.set(a,e)}})},write:function(e,t){return w(f,f.hosts.filter((function(e){return 0!=(e.accept&m.Write)})),e,d(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:\"\".concat(t,\"-dsn.algolia.net\"),accept:m.Read},{url:\"\".concat(t,\".algolia.net\"),accept:m.Write}].concat(c([{url:\"\".concat(t,\"-1.algolianet.com\")},{url:\"\".concat(t,\"-2.algolianet.com\")},{url:\"\".concat(t,\"-3.algolianet.com\")}]))},e),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/x-www-form-urlencoded\"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return l({transporter:a,appId:t,addAlgoliaAgent:function(e,t){a.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},e.methods)},C=function(e){return function(t,r){return t.method===O?e.transporter.read(t,r):e.transporter.write(t,r)}},k=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={transporter:e.transporter,appId:e.appId,indexName:t};return l(n,r.methods)}},J=function(e){return function(t,n){var o=t.map((function(e){return r(r({},e),{},{params:T(e.params||{})})}));return e.transporter.read({method:P,path:\"1/indexes/*/queries\",data:{requests:o},cacheable:!0},n)}},E=function(e){return function(t,o){return Promise.all(t.map((function(t){var a=t.params,u=a.facetName,i=a.facetQuery,s=n(a,[\"facetName\",\"facetQuery\"]);return k(e)(t.indexName,{methods:{searchForFacetValues:R}}).searchForFacetValues(u,i,r(r({},o),s))})))}},I=function(e){return function(t,r,n){return e.transporter.read({method:P,path:f(\"1/answers/%s/prediction\",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},F=function(e){return function(t,r){return e.transporter.read({method:P,path:f(\"1/indexes/%s/query\",e.indexName),data:{query:t},cacheable:!0},r)}},R=function(e){return function(t,r,n){return e.transporter.read({method:P,path:f(\"1/indexes/%s/facets/%s/query\",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,W=2,H=3;function Q(e,t,n){var o,a={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,o=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},a=o(e.connectTimeout,\"Connection timeout\");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(a),n=o(e.responseTimeout,\"Socket timeout\"))},r.onerror=function(){0===r.status&&(clearTimeout(a),clearTimeout(n),t({content:r.responseText||\"Network request failed\",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(a),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(o=H,{debug:function(e,t){return D>=o&&console.debug(e,t),Promise.resolve()},info:function(e,t){return W>=o&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:s(),requestsCache:s({serializable:!1}),hostsCache:i({caches:[u({key:\"\".concat(\"4.17.0\",\"-\").concat(e)}),s()]}),userAgent:j(\"4.17.0\").add({segment:\"Browser\",version:\"lite\"}),authMode:h.WithinQueryParameters};return N(r(r(r({},a),n),{},{methods:{search:J,searchForFacetValues:E,multipleQueries:J,multipleSearchForFacetValues:E,customRequest:C,initIndex:function(e){return function(t){return k(e)(t,{methods:{search:F,searchForFacetValues:R,findAnswers:I}})}}}}))}return Q.version=\"4.17.0\",Q}));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","\r\nexport class Shifter {\r\n constructor(element) {\r\n this.element = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n this.container = this.element.querySelector('.shift-block');\r\n this.level = 0;\r\n this.activeLayers = [];\r\n \r\n }\r\n\r\n init() {\r\n this.testNode = this.element.querySelector('.shifter-group:nth-child(2)');\r\n this.backLink = this.element.querySelector('.back');\r\n this.backLink.addEventListener('click', this.back.bind(this));\r\n this.toStartLink = this.element.querySelector('.back-to-start');\r\n this.toStartLink.addEventListener('click', this.backToStart.bind(this));\r\n Array.from(this.element.querySelectorAll('.has-children')).forEach(link => {\r\n link.addEventListener('click', function(event) {\r\n event.preventDefault();\r\n this.loadNext(link.getAttribute(\"group-id\"));\r\n }.bind(this))\r\n })\r\n }\r\n\r\n back(event) {\r\n event.preventDefault();\r\n this.backToLevel(this.level - 1);\r\n }\r\n\r\n backToStart(event) {\r\n event.preventDefault();\r\n this.backToLevel(0);\r\n }\r\n\r\n backToLevel(level) {\r\n if (!this._locked && level >= 0 && level < this.level) {\r\n this.animate(level);\r\n }\r\n }\r\n\r\n loadNext(id) {\r\n if (!this._locked) {\r\n var target = this.element.querySelector('#' + id);\r\n if (target) {\r\n target.classList.add('active');\r\n this.activeLayers.push(target);\r\n this.animate(this.level + 1, true)\r\n }\r\n }\r\n }\r\n\r\n animate(level, isForward) {\r\n if (this.testNode) {\r\n var styles = getComputedStyle(this.testNode);\r\n this.testNode.style.display = 'block';\r\n this.offset = parseInt(styles.marginLeft) + this.testNode.clientWidth;\r\n this.testNode.style.display = '';\r\n }\r\n this._locked = true;\r\n var self = this;\r\n var tl = gsap.timeline({\r\n onComplete: () => {\r\n self._locked = false;\r\n while (self.activeLayers.length > this.level) {\r\n self.activeLayers.pop().classList.remove('active');\r\n }\r\n }\r\n })\r\n .addLabel('start');\r\n if (!isForward) {\r\n if (level === 0) {\r\n tl\r\n .to(this.backLink, .3, { x: -20, autoAlpha: 0, pointerEvents: 'none' });\r\n }\r\n if (level < 2) {\r\n tl\r\n .to(this.toStartLink, .3, { x: 20, autoAlpha: 0, pointerEvents: 'none' });\r\n }\r\n }\r\n tl\r\n .to(this.container, {\r\n duration: .6,\r\n x: -level * this.offset,\r\n }, 'start');\r\n if (isForward) {\r\n if (this.level === 0) {\r\n tl\r\n .fromTo(this.backLink, .3, { x: -20 }, { x: 0, autoAlpha: 1, pointerEvents: 'initial' }, '-=.1')\r\n }\r\n if (level > 1 && this.level < 2) {\r\n tl\r\n .fromTo(this.toStartLink, .3, { x: 20 }, { x: 0, autoAlpha: 1, pointerEvents: 'initial' }, '-=.1')\r\n }\r\n }\r\n this.level = level;\r\n }\r\n\r\n reset() {\r\n this.level = 0;\r\n this.activeLayers = [];\r\n gsap.set([this.backLink, this.toStartLink, this.container], { clearProps: 'all' });\r\n }\r\n}","import { createAutocomplete } from '@algolia/autocomplete-core';\r\nimport algoliasearch from 'algoliasearch/lite';\r\nimport { getAlgoliaResults } from '@algolia/autocomplete-preset-algolia';\r\n\r\nexport class Suggestor {\r\n constructor(options) {\r\n this.element = typeof (options.element) === 'string' ? document.querySelector(options.element) : options.element;\r\n this.suggestionLimit = options.suggestionLimit || 4;\r\n this.container = this.element.querySelector('.reveal-wrapper');\r\n this.suggestionContainer = this.element.querySelector('.suggestions');\r\n this.open = false;\r\n this.callback = options.callback;\r\n this.emptyWarning = this.element.querySelector('.warning');\r\n }\r\n\r\n updateSuggestions(searchTerm, items, callback) {\r\n clearTimeout(this._timeout);\r\n this._timeout = setTimeout(() => {\r\n if (searchTerm) {\r\n if (!callback) {\r\n callback = this.callback;\r\n }\r\n this._setSuggestions(searchTerm, items, callback)\r\n .then(() => {\r\n if (this._open) {\r\n if (this._tween) {\r\n this._tween.progress(1).kill();\r\n delete this._tween;\r\n }\r\n gsap.set(this.element, { height: this.container.clientHeight })\r\n }\r\n else {\r\n this._tween = gsap.to(this.element, { duration: .3, height: this.container.clientHeight });\r\n }\r\n this._open = true;\r\n });\r\n }\r\n else {\r\n this.hide();\r\n }\r\n }, 800);\r\n }\r\n\r\n _setSuggestions(searchTerm, items, callback) {\r\n return new Promise((resolve, reject) => {\r\n if (items) {\r\n if (items.length) {\r\n this.emptyWarning.style.display = 'none';\r\n\r\n var suggestions = '';\r\n var replacer = new RegExp(searchTerm.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'gi');\r\n items.forEach(suggestion => {\r\n suggestions += '
  • ' + suggestion.replace(replacer, '$&') + '
  • ';\r\n });\r\n this.suggestionContainer.innerHTML = suggestions;\r\n if (callback) {\r\n Array.from(this.suggestionContainer.querySelectorAll('li')).forEach(option => {\r\n option.addEventListener('mousedown', () => {\r\n callback(option.innerText);\r\n });\r\n });\r\n }\r\n }\r\n else {\r\n this.emptyWarning.style.display = 'block';\r\n this.suggestionContainer.innerHTML = '';\r\n }\r\n resolve();\r\n }\r\n else {\r\n this.suggestionContainer.innerHTML = '';\r\n resolve();\r\n }\r\n })\r\n }\r\n\r\n hide() {\r\n this._open = false;\r\n gsap.set(this.element, { clearProps: 'all' });\r\n }\r\n\r\n reset() {\r\n this.suggestionContainer.html('');\r\n }\r\n}","export function debounce(fn, time) {\n var timerId = undefined;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (timerId) {\n clearTimeout(timerId);\n }\n timerId = setTimeout(function () {\n return fn.apply(void 0, args);\n }, time);\n };\n}","function isPrimitive(obj) {\n return obj !== Object(obj);\n}\nexport function isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (isPrimitive(first) || isPrimitive(second) || typeof first === 'function' || typeof second === 'function') {\n return first === second;\n }\n if (Object.keys(first).length !== Object.keys(second).length) {\n return false;\n }\n for (var _i = 0, _Object$keys = Object.keys(first); _i < _Object$keys.length; _i++) {\n var key = _Object$keys[_i];\n if (!(key in second)) {\n return false;\n }\n if (!isEqual(first[key], second[key])) {\n return false;\n }\n }\n return true;\n}","export var noop = function noop() {};","export function createClickedEvent(_ref) {\n var item = _ref.item,\n items = _ref.items;\n return {\n index: item.__autocomplete_indexName,\n items: [item],\n positions: [1 + items.findIndex(function (x) {\n return x.objectID === item.objectID;\n })],\n queryID: item.__autocomplete_queryID,\n algoliaSource: ['autocomplete']\n };\n}","function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n/**\n * Determines if a given insights `client` supports the optional call to `init`\n * and the ability to set credentials via extra parameters when sending events.\n */\nexport function isModernInsightsClient(client) {\n var _split$map = (client.version || '').split('.').map(Number),\n _split$map2 = _slicedToArray(_split$map, 2),\n major = _split$map2[0],\n minor = _split$map2[1];\n\n /* eslint-disable @typescript-eslint/camelcase */\n var v3 = major >= 3;\n var v2_4 = major === 2 && minor >= 4;\n var v1_10 = major === 1 && minor >= 10;\n return v3 || v2_4 || v1_10;\n /* eslint-enable @typescript-eslint/camelcase */\n}","var _excluded = [\"items\"],\n _excluded2 = [\"items\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { isModernInsightsClient } from './isModernInsightsClient';\nfunction chunk(item) {\n var chunkSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n var chunks = [];\n for (var i = 0; i < item.objectIDs.length; i += chunkSize) {\n chunks.push(_objectSpread(_objectSpread({}, item), {}, {\n objectIDs: item.objectIDs.slice(i, i + chunkSize)\n }));\n }\n return chunks;\n}\nfunction mapToInsightsParamsApi(params) {\n return params.map(function (_ref) {\n var items = _ref.items,\n param = _objectWithoutProperties(_ref, _excluded);\n return _objectSpread(_objectSpread({}, param), {}, {\n objectIDs: (items === null || items === void 0 ? void 0 : items.map(function (_ref2) {\n var objectID = _ref2.objectID;\n return objectID;\n })) || param.objectIDs\n });\n });\n}\nexport function createSearchInsightsApi(searchInsights) {\n var canSendHeaders = isModernInsightsClient(searchInsights);\n function sendToInsights(method, payloads, items) {\n if (canSendHeaders && typeof items !== 'undefined') {\n var _items$0$__autocomple = items[0].__autocomplete_algoliaCredentials,\n appId = _items$0$__autocomple.appId,\n apiKey = _items$0$__autocomple.apiKey;\n var headers = {\n 'X-Algolia-Application-Id': appId,\n 'X-Algolia-API-Key': apiKey\n };\n searchInsights.apply(void 0, [method].concat(_toConsumableArray(payloads), [{\n headers: headers\n }]));\n } else {\n searchInsights.apply(void 0, [method].concat(_toConsumableArray(payloads)));\n }\n }\n return {\n /**\n * Initializes Insights with Algolia credentials.\n */\n init: function init(appId, apiKey) {\n searchInsights('init', {\n appId: appId,\n apiKey: apiKey\n });\n },\n /**\n * Sets the user token to attach to events.\n */\n setUserToken: function setUserToken(userToken) {\n searchInsights('setUserToken', userToken);\n },\n /**\n * Sends click events to capture a query and its clicked items and positions.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids-after-search/\n */\n clickedObjectIDsAfterSearch: function clickedObjectIDsAfterSearch() {\n for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {\n params[_key] = arguments[_key];\n }\n if (params.length > 0) {\n sendToInsights('clickedObjectIDsAfterSearch', mapToInsightsParamsApi(params), params[0].items);\n }\n },\n /**\n * Sends click events to capture clicked items.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-object-ids/\n */\n clickedObjectIDs: function clickedObjectIDs() {\n for (var _len2 = arguments.length, params = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n params[_key2] = arguments[_key2];\n }\n if (params.length > 0) {\n sendToInsights('clickedObjectIDs', mapToInsightsParamsApi(params), params[0].items);\n }\n },\n /**\n * Sends click events to capture the filters a user clicks on.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/clicked-filters/\n */\n clickedFilters: function clickedFilters() {\n for (var _len3 = arguments.length, params = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n params[_key3] = arguments[_key3];\n }\n if (params.length > 0) {\n searchInsights.apply(void 0, ['clickedFilters'].concat(params));\n }\n },\n /**\n * Sends conversion events to capture a query and its clicked items.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids-after-search/\n */\n convertedObjectIDsAfterSearch: function convertedObjectIDsAfterSearch() {\n for (var _len4 = arguments.length, params = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n params[_key4] = arguments[_key4];\n }\n if (params.length > 0) {\n sendToInsights('convertedObjectIDsAfterSearch', mapToInsightsParamsApi(params), params[0].items);\n }\n },\n /**\n * Sends conversion events to capture clicked items.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/converted-object-ids/\n */\n convertedObjectIDs: function convertedObjectIDs() {\n for (var _len5 = arguments.length, params = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n params[_key5] = arguments[_key5];\n }\n if (params.length > 0) {\n sendToInsights('convertedObjectIDs', mapToInsightsParamsApi(params), params[0].items);\n }\n },\n /**\n * Sends conversion events to capture the filters a user uses when converting.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/converted-filters/\n */\n convertedFilters: function convertedFilters() {\n for (var _len6 = arguments.length, params = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n params[_key6] = arguments[_key6];\n }\n if (params.length > 0) {\n searchInsights.apply(void 0, ['convertedFilters'].concat(params));\n }\n },\n /**\n * Sends view events to capture clicked items.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-object-ids/\n */\n viewedObjectIDs: function viewedObjectIDs() {\n for (var _len7 = arguments.length, params = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n params[_key7] = arguments[_key7];\n }\n if (params.length > 0) {\n params.reduce(function (acc, _ref3) {\n var items = _ref3.items,\n param = _objectWithoutProperties(_ref3, _excluded2);\n return [].concat(_toConsumableArray(acc), _toConsumableArray(chunk(_objectSpread(_objectSpread({}, param), {}, {\n objectIDs: (items === null || items === void 0 ? void 0 : items.map(function (_ref4) {\n var objectID = _ref4.objectID;\n return objectID;\n })) || param.objectIDs\n })).map(function (payload) {\n return {\n items: items,\n payload: payload\n };\n })));\n }, []).forEach(function (_ref5) {\n var items = _ref5.items,\n payload = _ref5.payload;\n return sendToInsights('viewedObjectIDs', [payload], items);\n });\n }\n },\n /**\n * Sends view events to capture the filters a user uses when viewing.\n *\n * @link https://www.algolia.com/doc/api-reference/api-methods/viewed-filters/\n */\n viewedFilters: function viewedFilters() {\n for (var _len8 = arguments.length, params = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n params[_key8] = arguments[_key8];\n }\n if (params.length > 0) {\n searchInsights.apply(void 0, ['viewedFilters'].concat(params));\n }\n }\n };\n}","export function createViewedEvents(_ref) {\n var items = _ref.items;\n var itemsByIndexName = items.reduce(function (acc, current) {\n var _acc$current$__autoco;\n acc[current.__autocomplete_indexName] = ((_acc$current$__autoco = acc[current.__autocomplete_indexName]) !== null && _acc$current$__autoco !== void 0 ? _acc$current$__autoco : []).concat(current);\n return acc;\n }, {});\n return Object.keys(itemsByIndexName).map(function (indexName) {\n var items = itemsByIndexName[indexName];\n return {\n index: indexName,\n items: items,\n algoliaSource: ['autocomplete']\n };\n });\n}","export function isAlgoliaInsightsHit(hit) {\n return hit.objectID && hit.__autocomplete_indexName && hit.__autocomplete_queryID;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createRef, debounce, isEqual, noop, safelyRunOnBrowser } from '@algolia/autocomplete-shared';\nimport { createClickedEvent } from './createClickedEvent';\nimport { createSearchInsightsApi } from './createSearchInsightsApi';\nimport { createViewedEvents } from './createViewedEvents';\nimport { isAlgoliaInsightsHit } from './isAlgoliaInsightsHit';\nvar VIEW_EVENT_DELAY = 400;\nvar ALGOLIA_INSIGHTS_VERSION = '2.6.0';\nvar ALGOLIA_INSIGHTS_SRC = \"https://cdn.jsdelivr.net/npm/search-insights@\".concat(ALGOLIA_INSIGHTS_VERSION, \"/dist/search-insights.min.js\");\nvar sendViewedObjectIDs = debounce(function (_ref) {\n var onItemsChange = _ref.onItemsChange,\n items = _ref.items,\n insights = _ref.insights,\n state = _ref.state;\n onItemsChange({\n insights: insights,\n insightsEvents: createViewedEvents({\n items: items\n }).map(function (event) {\n return _objectSpread({\n eventName: 'Items Viewed'\n }, event);\n }),\n state: state\n });\n}, VIEW_EVENT_DELAY);\nexport function createAlgoliaInsightsPlugin(options) {\n var _getOptions = getOptions(options),\n providedInsightsClient = _getOptions.insightsClient,\n onItemsChange = _getOptions.onItemsChange,\n onSelectEvent = _getOptions.onSelect,\n onActiveEvent = _getOptions.onActive;\n var insightsClient = providedInsightsClient;\n if (!providedInsightsClient) {\n safelyRunOnBrowser(function (_ref2) {\n var window = _ref2.window;\n var pointer = window.AlgoliaAnalyticsObject || 'aa';\n if (typeof pointer === 'string') {\n insightsClient = window[pointer];\n }\n if (!insightsClient) {\n window.AlgoliaAnalyticsObject = pointer;\n if (!window[pointer]) {\n window[pointer] = function () {\n if (!window[pointer].queue) {\n window[pointer].queue = [];\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n window[pointer].queue.push(args);\n };\n }\n window[pointer].version = ALGOLIA_INSIGHTS_VERSION;\n insightsClient = window[pointer];\n loadInsights(window);\n }\n });\n }\n var insights = createSearchInsightsApi(insightsClient);\n var previousItems = createRef([]);\n var debouncedOnStateChange = debounce(function (_ref3) {\n var state = _ref3.state;\n if (!state.isOpen) {\n return;\n }\n var items = state.collections.reduce(function (acc, current) {\n return [].concat(_toConsumableArray(acc), _toConsumableArray(current.items));\n }, []).filter(isAlgoliaInsightsHit);\n if (!isEqual(previousItems.current.map(function (x) {\n return x.objectID;\n }), items.map(function (x) {\n return x.objectID;\n }))) {\n previousItems.current = items;\n if (items.length > 0) {\n sendViewedObjectIDs({\n onItemsChange: onItemsChange,\n items: items,\n insights: insights,\n state: state\n });\n }\n }\n }, 0);\n return {\n name: 'aa.algoliaInsightsPlugin',\n subscribe: function subscribe(_ref4) {\n var setContext = _ref4.setContext,\n onSelect = _ref4.onSelect,\n onActive = _ref4.onActive;\n insightsClient('addAlgoliaAgent', 'insights-plugin');\n setContext({\n algoliaInsightsPlugin: {\n __algoliaSearchParameters: {\n clickAnalytics: true\n },\n insights: insights\n }\n });\n onSelect(function (_ref5) {\n var item = _ref5.item,\n state = _ref5.state,\n event = _ref5.event;\n if (!isAlgoliaInsightsHit(item)) {\n return;\n }\n onSelectEvent({\n state: state,\n event: event,\n insights: insights,\n item: item,\n insightsEvents: [_objectSpread({\n eventName: 'Item Selected'\n }, createClickedEvent({\n item: item,\n items: previousItems.current\n }))]\n });\n });\n onActive(function (_ref6) {\n var item = _ref6.item,\n state = _ref6.state,\n event = _ref6.event;\n if (!isAlgoliaInsightsHit(item)) {\n return;\n }\n onActiveEvent({\n state: state,\n event: event,\n insights: insights,\n item: item,\n insightsEvents: [_objectSpread({\n eventName: 'Item Active'\n }, createClickedEvent({\n item: item,\n items: previousItems.current\n }))]\n });\n });\n },\n onStateChange: function onStateChange(_ref7) {\n var state = _ref7.state;\n debouncedOnStateChange({\n state: state\n });\n },\n __autocomplete_pluginOptions: options\n };\n}\nfunction getOptions(options) {\n return _objectSpread({\n onItemsChange: function onItemsChange(_ref8) {\n var insights = _ref8.insights,\n insightsEvents = _ref8.insightsEvents;\n insights.viewedObjectIDs.apply(insights, _toConsumableArray(insightsEvents.map(function (event) {\n return _objectSpread(_objectSpread({}, event), {}, {\n algoliaSource: [].concat(_toConsumableArray(event.algoliaSource || []), ['autocomplete-internal'])\n });\n })));\n },\n onSelect: function onSelect(_ref9) {\n var insights = _ref9.insights,\n insightsEvents = _ref9.insightsEvents;\n insights.clickedObjectIDsAfterSearch.apply(insights, _toConsumableArray(insightsEvents.map(function (event) {\n return _objectSpread(_objectSpread({}, event), {}, {\n algoliaSource: [].concat(_toConsumableArray(event.algoliaSource || []), ['autocomplete-internal'])\n });\n })));\n },\n onActive: noop\n }, options);\n}\nfunction loadInsights(environment) {\n var errorMessage = \"[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete\";\n try {\n var script = environment.document.createElement('script');\n script.async = true;\n script.src = ALGOLIA_INSIGHTS_SRC;\n script.onerror = function () {\n // eslint-disable-next-line no-console\n console.error(errorMessage);\n };\n document.body.appendChild(script);\n } catch (cause) {\n // eslint-disable-next-line no-console\n console.error(errorMessage);\n }\n}","/**\n * Safely runs code meant for browser environments only.\n */\nexport function safelyRunOnBrowser(callback) {\n if (typeof window !== 'undefined') {\n return callback({\n window: window\n });\n }\n return undefined;\n}","export function createRef(initialValue) {\n return {\n current: initialValue\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createCancelablePromiseList } from './utils';\nexport function createStore(reducer, props, onStoreStateChange) {\n var state = props.initialState;\n return {\n getState: function getState() {\n return state;\n },\n dispatch: function dispatch(action, payload) {\n var prevState = _objectSpread({}, state);\n state = reducer(state, {\n type: action,\n props: props,\n payload: payload\n });\n onStoreStateChange({\n state: state,\n prevState: prevState\n });\n },\n pendingRequests: createCancelablePromiseList()\n };\n}","export function flatten(values) {\n return values.reduce(function (a, b) {\n return a.concat(b);\n }, []);\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { flatten } from '@algolia/autocomplete-shared';\nexport function getAutocompleteSetters(_ref) {\n var store = _ref.store;\n var setActiveItemId = function setActiveItemId(value) {\n store.dispatch('setActiveItemId', value);\n };\n var setQuery = function setQuery(value) {\n store.dispatch('setQuery', value);\n };\n var setCollections = function setCollections(rawValue) {\n var baseItemId = 0;\n var value = rawValue.map(function (collection) {\n return _objectSpread(_objectSpread({}, collection), {}, {\n // We flatten the stored items to support calling `getAlgoliaResults`\n // from the source itself.\n items: flatten(collection.items).map(function (item) {\n return _objectSpread(_objectSpread({}, item), {}, {\n __autocomplete_id: baseItemId++\n });\n })\n });\n });\n store.dispatch('setCollections', value);\n };\n var setIsOpen = function setIsOpen(value) {\n store.dispatch('setIsOpen', value);\n };\n var setStatus = function setStatus(value) {\n store.dispatch('setStatus', value);\n };\n var setContext = function setContext(value) {\n store.dispatch('setContext', value);\n };\n return {\n setActiveItemId: setActiveItemId,\n setQuery: setQuery,\n setCollections: setCollections,\n setIsOpen: setIsOpen,\n setStatus: setStatus,\n setContext: setContext\n };\n}","export function getItemsCount(state) {\n if (state.collections.length === 0) {\n return 0;\n }\n return state.collections.reduce(function (sum, collection) {\n return sum + collection.items.length;\n }, 0);\n}","var autocompleteId = 0;\nexport function generateAutocompleteId() {\n return \"autocomplete-\".concat(autocompleteId++);\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport { invariant, decycle, noop } from '@algolia/autocomplete-shared';\nexport function getNormalizedSources(getSources, params) {\n var seenSourceIds = [];\n return Promise.resolve(getSources(params)).then(function (sources) {\n invariant(Array.isArray(sources), function () {\n return \"The `getSources` function must return an array of sources but returned type \".concat(JSON.stringify(_typeof(sources)), \":\\n\\n\").concat(JSON.stringify(decycle(sources), null, 2));\n });\n return Promise.all(sources\n // We allow `undefined` and `false` sources to allow users to use\n // `Boolean(query) && source` (=> `false`).\n // We need to remove these values at this point.\n .filter(function (maybeSource) {\n return Boolean(maybeSource);\n }).map(function (source) {\n invariant(typeof source.sourceId === 'string', 'A source must provide a `sourceId` string.');\n if (seenSourceIds.includes(source.sourceId)) {\n throw new Error(\"[Autocomplete] The `sourceId` \".concat(JSON.stringify(source.sourceId), \" is not unique.\"));\n }\n seenSourceIds.push(source.sourceId);\n var defaultSource = {\n getItemInputValue: function getItemInputValue(_ref) {\n var state = _ref.state;\n return state.query;\n },\n getItemUrl: function getItemUrl() {\n return undefined;\n },\n onSelect: function onSelect(_ref2) {\n var setIsOpen = _ref2.setIsOpen;\n setIsOpen(false);\n },\n onActive: noop,\n onResolve: noop\n };\n Object.keys(defaultSource).forEach(function (key) {\n defaultSource[key].__default = true;\n });\n var normalizedSource = _objectSpread(_objectSpread({}, defaultSource), source);\n return Promise.resolve(normalizedSource);\n }));\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getItemsCount, generateAutocompleteId, flatten } from '@algolia/autocomplete-shared';\nimport { getNormalizedSources } from './utils';\nexport function getDefaultProps(props, pluginSubscribers) {\n var _props$id;\n /* eslint-disable no-restricted-globals */\n var environment = typeof window !== 'undefined' ? window : {};\n /* eslint-enable no-restricted-globals */\n var plugins = props.plugins || [];\n return _objectSpread(_objectSpread({\n debug: false,\n openOnFocus: false,\n placeholder: '',\n autoFocus: false,\n defaultActiveItemId: null,\n stallThreshold: 300,\n insights: false,\n environment: environment,\n shouldPanelOpen: function shouldPanelOpen(_ref) {\n var state = _ref.state;\n return getItemsCount(state) > 0;\n },\n reshape: function reshape(_ref2) {\n var sources = _ref2.sources;\n return sources;\n }\n }, props), {}, {\n // Since `generateAutocompleteId` triggers a side effect (it increments\n // an internal counter), we don't want to execute it if unnecessary.\n id: (_props$id = props.id) !== null && _props$id !== void 0 ? _props$id : generateAutocompleteId(),\n plugins: plugins,\n // The following props need to be deeply defaulted.\n initialState: _objectSpread({\n activeItemId: null,\n query: '',\n completion: null,\n collections: [],\n isOpen: false,\n status: 'idle',\n context: {}\n }, props.initialState),\n onStateChange: function onStateChange(params) {\n var _props$onStateChange;\n (_props$onStateChange = props.onStateChange) === null || _props$onStateChange === void 0 ? void 0 : _props$onStateChange.call(props, params);\n plugins.forEach(function (x) {\n var _x$onStateChange;\n return (_x$onStateChange = x.onStateChange) === null || _x$onStateChange === void 0 ? void 0 : _x$onStateChange.call(x, params);\n });\n },\n onSubmit: function onSubmit(params) {\n var _props$onSubmit;\n (_props$onSubmit = props.onSubmit) === null || _props$onSubmit === void 0 ? void 0 : _props$onSubmit.call(props, params);\n plugins.forEach(function (x) {\n var _x$onSubmit;\n return (_x$onSubmit = x.onSubmit) === null || _x$onSubmit === void 0 ? void 0 : _x$onSubmit.call(x, params);\n });\n },\n onReset: function onReset(params) {\n var _props$onReset;\n (_props$onReset = props.onReset) === null || _props$onReset === void 0 ? void 0 : _props$onReset.call(props, params);\n plugins.forEach(function (x) {\n var _x$onReset;\n return (_x$onReset = x.onReset) === null || _x$onReset === void 0 ? void 0 : _x$onReset.call(x, params);\n });\n },\n getSources: function getSources(params) {\n return Promise.all([].concat(_toConsumableArray(plugins.map(function (plugin) {\n return plugin.getSources;\n })), [props.getSources]).filter(Boolean).map(function (getSources) {\n return getNormalizedSources(getSources, params);\n })).then(function (nested) {\n return flatten(nested);\n }).then(function (sources) {\n return sources.map(function (source) {\n return _objectSpread(_objectSpread({}, source), {}, {\n onSelect: function onSelect(params) {\n source.onSelect(params);\n pluginSubscribers.forEach(function (x) {\n var _x$onSelect;\n return (_x$onSelect = x.onSelect) === null || _x$onSelect === void 0 ? void 0 : _x$onSelect.call(x, params);\n });\n },\n onActive: function onActive(params) {\n source.onActive(params);\n pluginSubscribers.forEach(function (x) {\n var _x$onActive;\n return (_x$onActive = x.onActive) === null || _x$onActive === void 0 ? void 0 : _x$onActive.call(x, params);\n });\n },\n onResolve: function onResolve(params) {\n source.onResolve(params);\n pluginSubscribers.forEach(function (x) {\n var _x$onResolve;\n return (_x$onResolve = x.onResolve) === null || _x$onResolve === void 0 ? void 0 : _x$onResolve.call(x, params);\n });\n }\n });\n });\n });\n },\n navigator: _objectSpread({\n navigate: function navigate(_ref3) {\n var itemUrl = _ref3.itemUrl;\n environment.location.assign(itemUrl);\n },\n navigateNewTab: function navigateNewTab(_ref4) {\n var itemUrl = _ref4.itemUrl;\n var windowReference = environment.open(itemUrl, '_blank', 'noopener');\n windowReference === null || windowReference === void 0 ? void 0 : windowReference.focus();\n },\n navigateNewWindow: function navigateNewWindow(_ref5) {\n var itemUrl = _ref5.itemUrl;\n environment.open(itemUrl, '_blank', 'noopener');\n }\n }, props.navigator)\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { flatten } from '@algolia/autocomplete-shared';\nexport function reshape(_ref) {\n var collections = _ref.collections,\n props = _ref.props,\n state = _ref.state;\n // Sources are grouped by `sourceId` to conveniently pick them via destructuring.\n // Example: `const { recentSearchesPlugin } = sourcesBySourceId`\n var originalSourcesBySourceId = collections.reduce(function (acc, collection) {\n return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, collection.source.sourceId, _objectSpread(_objectSpread({}, collection.source), {}, {\n getItems: function getItems() {\n // We provide the resolved items from the collection to the `reshape` prop.\n return flatten(collection.items);\n }\n })));\n }, {});\n var _props$plugins$reduce = props.plugins.reduce(function (acc, plugin) {\n if (plugin.reshape) {\n return plugin.reshape(acc);\n }\n return acc;\n }, {\n sourcesBySourceId: originalSourcesBySourceId,\n state: state\n }),\n sourcesBySourceId = _props$plugins$reduce.sourcesBySourceId;\n var reshapeSources = props.reshape({\n sourcesBySourceId: sourcesBySourceId,\n sources: Object.values(sourcesBySourceId),\n state: state\n });\n\n // We reconstruct the collections with the items modified by the `reshape` prop.\n return flatten(reshapeSources).filter(Boolean).map(function (source) {\n return {\n source: source,\n items: source.getItems()\n };\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport function mapToAlgoliaResponse(rawResults) {\n var results = rawResults.map(function (result) {\n var _hits;\n return _objectSpread(_objectSpread({}, result), {}, {\n hits: (_hits = result.hits) === null || _hits === void 0 ? void 0 : _hits.map(function (hit) {\n // Bring support for the Insights plugin.\n return _objectSpread(_objectSpread({}, hit), {}, {\n __autocomplete_indexName: result.index,\n __autocomplete_queryID: result.queryID\n });\n })\n });\n });\n return {\n results: results,\n hits: results.map(function (result) {\n return result.hits;\n }).filter(Boolean),\n facetHits: results.map(function (result) {\n var _facetHits;\n return (_facetHits = result.facetHits) === null || _facetHits === void 0 ? void 0 : _facetHits.map(function (facetHit) {\n // Bring support for the highlighting components.\n return {\n label: facetHit.value,\n count: facetHit.count,\n _highlightResult: {\n label: {\n value: facetHit.highlighted\n }\n }\n };\n });\n }).filter(Boolean)\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nimport { decycle, flatten, invariant } from '@algolia/autocomplete-shared';\nimport { mapToAlgoliaResponse } from './utils';\nfunction isDescription(item) {\n return Boolean(item.execute);\n}\nfunction isRequesterDescription(description) {\n return Boolean(description === null || description === void 0 ? void 0 : description.execute);\n}\nexport function preResolve(itemsOrDescription, sourceId, state) {\n if (isRequesterDescription(itemsOrDescription)) {\n var contextParameters = itemsOrDescription.requesterId === 'algolia' ? Object.assign.apply(Object, [{}].concat(_toConsumableArray(Object.keys(state.context).map(function (key) {\n var _state$context$key;\n return (_state$context$key = state.context[key]) === null || _state$context$key === void 0 ? void 0 : _state$context$key.__algoliaSearchParameters;\n })))) : {};\n return _objectSpread(_objectSpread({}, itemsOrDescription), {}, {\n requests: itemsOrDescription.queries.map(function (query) {\n return {\n query: itemsOrDescription.requesterId === 'algolia' ? _objectSpread(_objectSpread({}, query), {}, {\n params: _objectSpread(_objectSpread({}, contextParameters), query.params)\n }) : query,\n sourceId: sourceId,\n transformResponse: itemsOrDescription.transformResponse\n };\n })\n });\n }\n return {\n items: itemsOrDescription,\n sourceId: sourceId\n };\n}\nexport function resolve(items) {\n var packed = items.reduce(function (acc, current) {\n if (!isDescription(current)) {\n acc.push(current);\n return acc;\n }\n var searchClient = current.searchClient,\n execute = current.execute,\n requesterId = current.requesterId,\n requests = current.requests;\n var container = acc.find(function (item) {\n return isDescription(current) && isDescription(item) && item.searchClient === searchClient && Boolean(requesterId) && item.requesterId === requesterId;\n });\n if (container) {\n var _container$items;\n (_container$items = container.items).push.apply(_container$items, _toConsumableArray(requests));\n } else {\n var request = {\n execute: execute,\n requesterId: requesterId,\n items: requests,\n searchClient: searchClient\n };\n acc.push(request);\n }\n return acc;\n }, []);\n var values = packed.map(function (maybeDescription) {\n if (!isDescription(maybeDescription)) {\n return Promise.resolve(maybeDescription);\n }\n var _ref = maybeDescription,\n execute = _ref.execute,\n items = _ref.items,\n searchClient = _ref.searchClient;\n return execute({\n searchClient: searchClient,\n requests: items\n });\n });\n return Promise.all(values).then(function (responses) {\n return flatten(responses);\n });\n}\nexport function postResolve(responses, sources, store) {\n return sources.map(function (source) {\n var matches = responses.filter(function (response) {\n return response.sourceId === source.sourceId;\n });\n var results = matches.map(function (_ref2) {\n var items = _ref2.items;\n return items;\n });\n var transform = matches[0].transformResponse;\n var items = transform ? transform(mapToAlgoliaResponse(results)) : results;\n source.onResolve({\n source: source,\n results: results,\n items: items,\n state: store.getState()\n });\n invariant(Array.isArray(items), function () {\n return \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned type \").concat(JSON.stringify(_typeof(items)), \":\\n\\n\").concat(JSON.stringify(decycle(items), null, 2), \".\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\");\n });\n invariant(items.every(Boolean), \"The `getItems` function from source \\\"\".concat(source.sourceId, \"\\\" must return an array of items but returned \").concat(JSON.stringify(undefined), \".\\n\\nDid you forget to return items?\\n\\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems\"));\n return {\n source: source,\n items: items\n };\n });\n}","function createInternalCancelablePromise(promise, initialState) {\n var state = initialState;\n return {\n then: function then(onfulfilled, onrejected) {\n return createInternalCancelablePromise(promise.then(createCallback(onfulfilled, state, promise), createCallback(onrejected, state, promise)), state);\n },\n catch: function _catch(onrejected) {\n return createInternalCancelablePromise(promise.catch(createCallback(onrejected, state, promise)), state);\n },\n finally: function _finally(onfinally) {\n if (onfinally) {\n state.onCancelList.push(onfinally);\n }\n return createInternalCancelablePromise(promise.finally(createCallback(onfinally && function () {\n state.onCancelList = [];\n return onfinally();\n }, state, promise)), state);\n },\n cancel: function cancel() {\n state.isCanceled = true;\n var callbacks = state.onCancelList;\n state.onCancelList = [];\n callbacks.forEach(function (callback) {\n callback();\n });\n },\n isCanceled: function isCanceled() {\n return state.isCanceled === true;\n }\n };\n}\nexport function createCancelablePromise(executor) {\n return createInternalCancelablePromise(new Promise(function (resolve, reject) {\n return executor(resolve, reject);\n }), {\n isCanceled: false,\n onCancelList: []\n });\n}\ncreateCancelablePromise.resolve = function (value) {\n return cancelable(Promise.resolve(value));\n};\ncreateCancelablePromise.reject = function (reason) {\n return cancelable(Promise.reject(reason));\n};\nexport function cancelable(promise) {\n return createInternalCancelablePromise(promise, {\n isCanceled: false,\n onCancelList: []\n });\n}\nfunction createCallback(onResult, state, fallback) {\n if (!onResult) {\n return fallback;\n }\n return function callback(arg) {\n if (state.isCanceled) {\n return arg;\n }\n return onResult(arg);\n };\n}","// We don't have access to the autocomplete source when we call `onKeyDown`\n// or `onClick` because those are native browser events.\n// However, we can get the source from the suggestion index.\nfunction getCollectionFromActiveItemId(state) {\n // Given 3 sources with respectively 1, 2 and 3 suggestions: [1, 2, 3]\n // We want to get the accumulated counts:\n // [1, 1 + 2, 1 + 2 + 3] = [1, 3, 3 + 3] = [1, 3, 6]\n var accumulatedCollectionsCount = state.collections.map(function (collections) {\n return collections.items.length;\n }).reduce(function (acc, collectionsCount, index) {\n var previousValue = acc[index - 1] || 0;\n var nextValue = previousValue + collectionsCount;\n acc.push(nextValue);\n return acc;\n }, []);\n\n // Based on the accumulated counts, we can infer the index of the suggestion.\n var collectionIndex = accumulatedCollectionsCount.reduce(function (acc, current) {\n if (current <= state.activeItemId) {\n return acc + 1;\n }\n return acc;\n }, 0);\n return state.collections[collectionIndex];\n}\n\n/**\n * Gets the highlighted index relative to a suggestion object (not the absolute\n * highlighted index).\n *\n * Example:\n * [['a', 'b'], ['c', 'd', 'e'], ['f']]\n * ↑\n * (absolute: 3, relative: 1)\n */\nfunction getRelativeActiveItemId(_ref) {\n var state = _ref.state,\n collection = _ref.collection;\n var isOffsetFound = false;\n var counter = 0;\n var previousItemsOffset = 0;\n while (isOffsetFound === false) {\n var currentCollection = state.collections[counter];\n if (currentCollection === collection) {\n isOffsetFound = true;\n break;\n }\n previousItemsOffset += currentCollection.items.length;\n counter++;\n }\n return state.activeItemId - previousItemsOffset;\n}\nexport function getActiveItem(state) {\n var collection = getCollectionFromActiveItemId(state);\n if (!collection) {\n return null;\n }\n var item = collection.items[getRelativeActiveItemId({\n state: state,\n collection: collection\n })];\n var source = collection.source;\n var itemInputValue = source.getItemInputValue({\n item: item,\n state: state\n });\n var itemUrl = source.getItemUrl({\n item: item,\n state: state\n });\n return {\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n source: source\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"event\", \"nextState\", \"props\", \"query\", \"refresh\", \"store\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { reshape } from './reshape';\nimport { preResolve, resolve, postResolve } from './resolve';\nimport { cancelable, createConcurrentSafePromise, getActiveItem } from './utils';\nvar lastStalledId = null;\nvar runConcurrentSafePromise = createConcurrentSafePromise();\nexport function onInput(_ref) {\n var event = _ref.event,\n _ref$nextState = _ref.nextState,\n nextState = _ref$nextState === void 0 ? {} : _ref$nextState,\n props = _ref.props,\n query = _ref.query,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n if (lastStalledId) {\n props.environment.clearTimeout(lastStalledId);\n }\n var setCollections = setters.setCollections,\n setIsOpen = setters.setIsOpen,\n setQuery = setters.setQuery,\n setActiveItemId = setters.setActiveItemId,\n setStatus = setters.setStatus;\n setQuery(query);\n setActiveItemId(props.defaultActiveItemId);\n if (!query && props.openOnFocus === false) {\n var _nextState$isOpen;\n var collections = store.getState().collections.map(function (collection) {\n return _objectSpread(_objectSpread({}, collection), {}, {\n items: []\n });\n });\n setStatus('idle');\n setCollections(collections);\n setIsOpen((_nextState$isOpen = nextState.isOpen) !== null && _nextState$isOpen !== void 0 ? _nextState$isOpen : props.shouldPanelOpen({\n state: store.getState()\n }));\n\n // We make sure to update the latest resolved value of the tracked\n // promises to keep late resolving promises from \"cancelling\" the state\n // updates performed in this code path.\n // We chain with a void promise to respect `onInput`'s expected return type.\n var _request = cancelable(runConcurrentSafePromise(collections).then(function () {\n return Promise.resolve();\n }));\n return store.pendingRequests.add(_request);\n }\n setStatus('loading');\n lastStalledId = props.environment.setTimeout(function () {\n setStatus('stalled');\n }, props.stallThreshold);\n\n // We track the entire promise chain triggered by `onInput` before mutating\n // the Autocomplete state to make sure that any state manipulation is based on\n // fresh data regardless of when promises individually resolve.\n // We don't track nested promises and only rely on the full chain resolution,\n // meaning we should only ever manipulate the state once this concurrent-safe\n // promise is resolved.\n var request = cancelable(runConcurrentSafePromise(props.getSources(_objectSpread({\n query: query,\n refresh: refresh,\n state: store.getState()\n }, setters)).then(function (sources) {\n return Promise.all(sources.map(function (source) {\n return Promise.resolve(source.getItems(_objectSpread({\n query: query,\n refresh: refresh,\n state: store.getState()\n }, setters))).then(function (itemsOrDescription) {\n return preResolve(itemsOrDescription, source.sourceId, store.getState());\n });\n })).then(resolve).then(function (responses) {\n return postResolve(responses, sources, store);\n }).then(function (collections) {\n return reshape({\n collections: collections,\n props: props,\n state: store.getState()\n });\n });\n }))).then(function (collections) {\n var _nextState$isOpen2;\n // Parameters passed to `onInput` could be stale when the following code\n // executes, because `onInput` calls may not resolve in order.\n // If it becomes a problem we'll need to save the last passed parameters.\n // See: https://codesandbox.io/s/agitated-cookies-y290z\n\n setStatus('idle');\n setCollections(collections);\n var isPanelOpen = props.shouldPanelOpen({\n state: store.getState()\n });\n setIsOpen((_nextState$isOpen2 = nextState.isOpen) !== null && _nextState$isOpen2 !== void 0 ? _nextState$isOpen2 : props.openOnFocus && !query && isPanelOpen || isPanelOpen);\n var highlightedItem = getActiveItem(store.getState());\n if (store.getState().activeItemId !== null && highlightedItem) {\n var item = highlightedItem.item,\n itemInputValue = highlightedItem.itemInputValue,\n itemUrl = highlightedItem.itemUrl,\n source = highlightedItem.source;\n source.onActive(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n }\n }).finally(function () {\n setStatus('idle');\n if (lastStalledId) {\n props.environment.clearTimeout(lastStalledId);\n }\n });\n return store.pendingRequests.add(request);\n}","/**\n * Creates a runner that executes promises in a concurrent-safe way.\n *\n * This is useful to prevent older promises to resolve after a newer promise,\n * otherwise resulting in stale resolved values.\n */\nexport function createConcurrentSafePromise() {\n var basePromiseId = -1;\n var latestResolvedId = -1;\n var latestResolvedValue = undefined;\n return function runConcurrentSafePromise(promise) {\n basePromiseId++;\n var currentPromiseId = basePromiseId;\n return Promise.resolve(promise).then(function (x) {\n // The promise might take too long to resolve and get outdated. This would\n // result in resolving stale values.\n // When this happens, we ignore the promise value and return the one\n // coming from the latest resolved value.\n //\n // +----------------------------------+\n // | 100ms |\n // | run(1) +---> R1 |\n // | 300ms |\n // | run(2) +-------------> R2 (SKIP) |\n // | 200ms |\n // | run(3) +--------> R3 |\n // +----------------------------------+\n if (latestResolvedValue && currentPromiseId < latestResolvedId) {\n return latestResolvedValue;\n }\n latestResolvedId = currentPromiseId;\n latestResolvedValue = x;\n return x;\n });\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"event\", \"props\", \"refresh\", \"store\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { onInput } from './onInput';\nimport { getActiveItem } from './utils';\nexport function onKeyDown(_ref) {\n var event = _ref.event,\n props = _ref.props,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n // eslint-disable-next-line no-inner-declarations\n var triggerScrollIntoView = function triggerScrollIntoView() {\n var nodeItem = props.environment.document.getElementById(\"\".concat(props.id, \"-item-\").concat(store.getState().activeItemId));\n if (nodeItem) {\n if (nodeItem.scrollIntoViewIfNeeded) {\n nodeItem.scrollIntoViewIfNeeded(false);\n } else {\n nodeItem.scrollIntoView(false);\n }\n }\n }; // eslint-disable-next-line no-inner-declarations\n var triggerOnActive = function triggerOnActive() {\n var highlightedItem = getActiveItem(store.getState());\n if (store.getState().activeItemId !== null && highlightedItem) {\n var item = highlightedItem.item,\n itemInputValue = highlightedItem.itemInputValue,\n itemUrl = highlightedItem.itemUrl,\n source = highlightedItem.source;\n source.onActive(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n }\n }; // Default browser behavior changes the caret placement on ArrowUp and\n // ArrowDown.\n event.preventDefault();\n\n // When re-opening the panel, we need to split the logic to keep the actions\n // synchronized as `onInput` returns a promise.\n if (store.getState().isOpen === false && (props.openOnFocus || Boolean(store.getState().query))) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: store.getState().query,\n refresh: refresh,\n store: store\n }, setters)).then(function () {\n store.dispatch(event.key, {\n nextActiveItemId: props.defaultActiveItemId\n });\n triggerOnActive();\n // Since we rely on the DOM, we need to wait for all the micro tasks to\n // finish (which include re-opening the panel) to make sure all the\n // elements are available.\n setTimeout(triggerScrollIntoView, 0);\n });\n } else {\n store.dispatch(event.key, {});\n triggerOnActive();\n triggerScrollIntoView();\n }\n } else if (event.key === 'Escape') {\n // This prevents the default browser behavior on `input[type=\"search\"]`\n // from removing the query right away because we first want to close the\n // panel.\n event.preventDefault();\n store.dispatch(event.key, null);\n\n // Hitting the `Escape` key signals the end of a user interaction with the\n // autocomplete. At this point, we should ignore any requests that are still\n // pending and could reopen the panel once they resolve, because that would\n // result in an unsolicited UI behavior.\n store.pendingRequests.cancelAll();\n } else if (event.key === 'Tab') {\n store.dispatch('blur', null);\n\n // Hitting the `Escape` key signals the end of a user interaction with the\n // autocomplete. At this point, we should ignore any requests that are still\n // pending and could reopen the panel once they resolve, because that would\n // result in an unsolicited UI behavior.\n store.pendingRequests.cancelAll();\n } else if (event.key === 'Enter') {\n // No active item, so we let the browser handle the native `onSubmit` form\n // event.\n if (store.getState().activeItemId === null || store.getState().collections.every(function (collection) {\n return collection.items.length === 0;\n })) {\n // If requests are still pending when the panel closes, they could reopen\n // the panel once they resolve.\n // We want to prevent any subsequent query from reopening the panel\n // because it would result in an unsolicited UI behavior.\n if (!props.debug) {\n store.pendingRequests.cancelAll();\n }\n return;\n }\n\n // This prevents the `onSubmit` event to be sent because an item is\n // highlighted.\n event.preventDefault();\n var _ref2 = getActiveItem(store.getState()),\n item = _ref2.item,\n itemInputValue = _ref2.itemInputValue,\n itemUrl = _ref2.itemUrl,\n source = _ref2.source;\n if (event.metaKey || event.ctrlKey) {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigateNewTab({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n }\n } else if (event.shiftKey) {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigateNewWindow({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n }\n } else if (event.altKey) {\n // Keep native browser behavior\n } else {\n if (itemUrl !== undefined) {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n props.navigator.navigate({\n itemUrl: itemUrl,\n item: item,\n state: store.getState()\n });\n return;\n }\n onInput(_objectSpread({\n event: event,\n nextState: {\n isOpen: false\n },\n props: props,\n query: itemInputValue,\n refresh: refresh,\n store: store\n }, setters)).then(function () {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n });\n }\n }\n}","var regex = /((gt|sm)-|galaxy nexus)|samsung[- ]/i;\nexport function isSamsung(userAgent) {\n return Boolean(userAgent && userAgent.match(regex));\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"props\", \"refresh\", \"store\"],\n _excluded2 = [\"inputElement\", \"formElement\", \"panelElement\"],\n _excluded3 = [\"inputElement\"],\n _excluded4 = [\"inputElement\", \"maxLength\"],\n _excluded5 = [\"sourceIndex\"],\n _excluded6 = [\"sourceIndex\"],\n _excluded7 = [\"item\", \"source\", \"sourceIndex\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { noop } from '@algolia/autocomplete-shared';\nimport { onInput } from './onInput';\nimport { onKeyDown as _onKeyDown } from './onKeyDown';\nimport { getActiveItem, isOrContainsNode, isSamsung } from './utils';\nexport function getPropGetters(_ref) {\n var props = _ref.props,\n refresh = _ref.refresh,\n store = _ref.store,\n setters = _objectWithoutProperties(_ref, _excluded);\n var getEnvironmentProps = function getEnvironmentProps(providedProps) {\n var inputElement = providedProps.inputElement,\n formElement = providedProps.formElement,\n panelElement = providedProps.panelElement,\n rest = _objectWithoutProperties(providedProps, _excluded2);\n function onMouseDownOrTouchStart(event) {\n // The `onTouchStart`/`onMouseDown` events shouldn't trigger the `blur`\n // handler when it's not an interaction with Autocomplete.\n // We detect it with the following heuristics:\n // - the panel is closed AND there are no pending requests\n // (no interaction with the autocomplete, no future state updates)\n // - OR the touched target is the input element (should open the panel)\n var isAutocompleteInteraction = store.getState().isOpen || !store.pendingRequests.isEmpty();\n if (!isAutocompleteInteraction || event.target === inputElement) {\n return;\n }\n\n // @TODO: support cases where there are multiple Autocomplete instances.\n // Right now, a second instance makes this computation return false.\n var isTargetWithinAutocomplete = [formElement, panelElement].some(function (contextNode) {\n return isOrContainsNode(contextNode, event.target);\n });\n if (isTargetWithinAutocomplete === false) {\n store.dispatch('blur', null);\n\n // If requests are still pending when the user closes the panel, they\n // could reopen the panel once they resolve.\n // We want to prevent any subsequent query from reopening the panel\n // because it would result in an unsolicited UI behavior.\n if (!props.debug) {\n store.pendingRequests.cancelAll();\n }\n }\n }\n return _objectSpread({\n // We do not rely on the native `blur` event of the input to close the\n // panel, but rather on a custom `touchstart`/`mousedown` event outside\n // of the autocomplete elements.\n // This ensures we don't mistakenly interpret interactions within the\n // autocomplete (but outside of the input) as a signal to close the panel.\n // For example, clicking reset button causes an input blur, but if\n // `openOnFocus=true`, it shouldn't close the panel.\n // On touch devices, scrolling results (`touchmove`) causes an input blur\n // but shouldn't close the panel.\n onTouchStart: onMouseDownOrTouchStart,\n onMouseDown: onMouseDownOrTouchStart,\n // When scrolling on touch devices (mobiles, tablets, etc.), we want to\n // mimic the native platform behavior where the input is blurred to\n // hide the virtual keyboard. This gives more vertical space to\n // discover all the suggestions showing up in the panel.\n onTouchMove: function onTouchMove(event) {\n if (store.getState().isOpen === false || inputElement !== props.environment.document.activeElement || event.target === inputElement) {\n return;\n }\n inputElement.blur();\n }\n }, rest);\n };\n var getRootProps = function getRootProps(rest) {\n return _objectSpread({\n role: 'combobox',\n 'aria-expanded': store.getState().isOpen,\n 'aria-haspopup': 'listbox',\n 'aria-owns': store.getState().isOpen ? \"\".concat(props.id, \"-list\") : undefined,\n 'aria-labelledby': \"\".concat(props.id, \"-label\")\n }, rest);\n };\n var getFormProps = function getFormProps(providedProps) {\n var inputElement = providedProps.inputElement,\n rest = _objectWithoutProperties(providedProps, _excluded3);\n return _objectSpread({\n action: '',\n noValidate: true,\n role: 'search',\n onSubmit: function onSubmit(event) {\n var _providedProps$inputE;\n event.preventDefault();\n props.onSubmit(_objectSpread({\n event: event,\n refresh: refresh,\n state: store.getState()\n }, setters));\n store.dispatch('submit', null);\n (_providedProps$inputE = providedProps.inputElement) === null || _providedProps$inputE === void 0 ? void 0 : _providedProps$inputE.blur();\n },\n onReset: function onReset(event) {\n var _providedProps$inputE2;\n event.preventDefault();\n props.onReset(_objectSpread({\n event: event,\n refresh: refresh,\n state: store.getState()\n }, setters));\n store.dispatch('reset', null);\n (_providedProps$inputE2 = providedProps.inputElement) === null || _providedProps$inputE2 === void 0 ? void 0 : _providedProps$inputE2.focus();\n }\n }, rest);\n };\n var getInputProps = function getInputProps(providedProps) {\n var _props$environment$na;\n function onFocus(event) {\n // We want to trigger a query when `openOnFocus` is true\n // because the panel should open with the current query.\n if (props.openOnFocus || Boolean(store.getState().query)) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: store.getState().completion || store.getState().query,\n refresh: refresh,\n store: store\n }, setters));\n }\n store.dispatch('focus', null);\n }\n var _ref2 = providedProps || {},\n inputElement = _ref2.inputElement,\n _ref2$maxLength = _ref2.maxLength,\n maxLength = _ref2$maxLength === void 0 ? 512 : _ref2$maxLength,\n rest = _objectWithoutProperties(_ref2, _excluded4);\n var activeItem = getActiveItem(store.getState());\n var userAgent = ((_props$environment$na = props.environment.navigator) === null || _props$environment$na === void 0 ? void 0 : _props$environment$na.userAgent) || '';\n var shouldFallbackKeyHint = isSamsung(userAgent);\n var enterKeyHint = activeItem !== null && activeItem !== void 0 && activeItem.itemUrl && !shouldFallbackKeyHint ? 'go' : 'search';\n return _objectSpread({\n 'aria-autocomplete': 'both',\n 'aria-activedescendant': store.getState().isOpen && store.getState().activeItemId !== null ? \"\".concat(props.id, \"-item-\").concat(store.getState().activeItemId) : undefined,\n 'aria-controls': store.getState().isOpen ? \"\".concat(props.id, \"-list\") : undefined,\n 'aria-labelledby': \"\".concat(props.id, \"-label\"),\n value: store.getState().completion || store.getState().query,\n id: \"\".concat(props.id, \"-input\"),\n autoComplete: 'off',\n autoCorrect: 'off',\n autoCapitalize: 'off',\n enterKeyHint: enterKeyHint,\n spellCheck: 'false',\n autoFocus: props.autoFocus,\n placeholder: props.placeholder,\n maxLength: maxLength,\n type: 'search',\n onChange: function onChange(event) {\n onInput(_objectSpread({\n event: event,\n props: props,\n query: event.currentTarget.value.slice(0, maxLength),\n refresh: refresh,\n store: store\n }, setters));\n },\n onKeyDown: function onKeyDown(event) {\n _onKeyDown(_objectSpread({\n event: event,\n props: props,\n refresh: refresh,\n store: store\n }, setters));\n },\n onFocus: onFocus,\n // We don't rely on the `blur` event.\n // See explanation in `onTouchStart`/`onMouseDown`.\n // @MAJOR See if we need to keep this handler.\n onBlur: noop,\n onClick: function onClick(event) {\n // When the panel is closed and you click on the input while\n // the input is focused, the `onFocus` event is not triggered\n // (default browser behavior).\n // In an autocomplete context, it makes sense to open the panel in this\n // case.\n // We mimic this event by catching the `onClick` event which\n // triggers the `onFocus` for the panel to open.\n if (providedProps.inputElement === props.environment.document.activeElement && !store.getState().isOpen) {\n onFocus(event);\n }\n }\n }, rest);\n };\n var getAutocompleteId = function getAutocompleteId(instanceId, sourceId) {\n return typeof sourceId !== 'undefined' ? \"\".concat(instanceId, \"-\").concat(sourceId) : instanceId;\n };\n var getLabelProps = function getLabelProps(providedProps) {\n var _ref3 = providedProps || {},\n sourceIndex = _ref3.sourceIndex,\n rest = _objectWithoutProperties(_ref3, _excluded5);\n return _objectSpread({\n htmlFor: \"\".concat(getAutocompleteId(props.id, sourceIndex), \"-input\"),\n id: \"\".concat(getAutocompleteId(props.id, sourceIndex), \"-label\")\n }, rest);\n };\n var getListProps = function getListProps(providedProps) {\n var _ref4 = providedProps || {},\n sourceIndex = _ref4.sourceIndex,\n rest = _objectWithoutProperties(_ref4, _excluded6);\n return _objectSpread({\n role: 'listbox',\n 'aria-labelledby': \"\".concat(getAutocompleteId(props.id, sourceIndex), \"-label\"),\n id: \"\".concat(getAutocompleteId(props.id, sourceIndex), \"-list\")\n }, rest);\n };\n var getPanelProps = function getPanelProps(rest) {\n return _objectSpread({\n onMouseDown: function onMouseDown(event) {\n // Prevents the `activeElement` from being changed to the panel so\n // that the blur event is not triggered, otherwise it closes the\n // panel.\n event.preventDefault();\n },\n onMouseLeave: function onMouseLeave() {\n store.dispatch('mouseleave', null);\n }\n }, rest);\n };\n var getItemProps = function getItemProps(providedProps) {\n var item = providedProps.item,\n source = providedProps.source,\n sourceIndex = providedProps.sourceIndex,\n rest = _objectWithoutProperties(providedProps, _excluded7);\n return _objectSpread({\n id: \"\".concat(getAutocompleteId(props.id, sourceIndex), \"-item-\").concat(item.__autocomplete_id),\n role: 'option',\n 'aria-selected': store.getState().activeItemId === item.__autocomplete_id,\n onMouseMove: function onMouseMove(event) {\n if (item.__autocomplete_id === store.getState().activeItemId) {\n return;\n }\n store.dispatch('mousemove', item.__autocomplete_id);\n var activeItem = getActiveItem(store.getState());\n if (store.getState().activeItemId !== null && activeItem) {\n var _item = activeItem.item,\n itemInputValue = activeItem.itemInputValue,\n itemUrl = activeItem.itemUrl,\n _source = activeItem.source;\n _source.onActive(_objectSpread({\n event: event,\n item: _item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: _source,\n state: store.getState()\n }, setters));\n }\n },\n onMouseDown: function onMouseDown(event) {\n // Prevents the `activeElement` from being changed to the item so it\n // can remain with the current `activeElement`.\n event.preventDefault();\n },\n onClick: function onClick(event) {\n var itemInputValue = source.getItemInputValue({\n item: item,\n state: store.getState()\n });\n var itemUrl = source.getItemUrl({\n item: item,\n state: store.getState()\n });\n\n // If `getItemUrl` is provided, it means that the suggestion\n // is a link, not plain text that aims at updating the query.\n // We can therefore skip the state change because it will update\n // the `activeItemId`, resulting in a UI flash, especially\n // noticeable on mobile.\n var runPreCommand = itemUrl ? Promise.resolve() : onInput(_objectSpread({\n event: event,\n nextState: {\n isOpen: false\n },\n props: props,\n query: itemInputValue,\n refresh: refresh,\n store: store\n }, setters));\n runPreCommand.then(function () {\n source.onSelect(_objectSpread({\n event: event,\n item: item,\n itemInputValue: itemInputValue,\n itemUrl: itemUrl,\n refresh: refresh,\n source: source,\n state: store.getState()\n }, setters));\n });\n }\n }, rest);\n };\n return {\n getEnvironmentProps: getEnvironmentProps,\n getRootProps: getRootProps,\n getFormProps: getFormProps,\n getLabelProps: getLabelProps,\n getInputProps: getInputProps,\n getPanelProps: getPanelProps,\n getListProps: getListProps,\n getItemProps: getItemProps\n };\n}","export function isOrContainsNode(parent, child) {\n return parent === child || parent.contains(child);\n}","export var version = '1.9.2';","import { version } from './version';\nexport var userAgents = [{\n segment: 'autocomplete-core',\n version: version\n}];","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { userAgents } from '@algolia/autocomplete-shared';\nexport function getMetadata(_ref) {\n var _, _options$__autocomple, _options$__autocomple2, _options$__autocomple3;\n var plugins = _ref.plugins,\n options = _ref.options;\n var optionsKey = (_ = (((_options$__autocomple = options.__autocomplete_metadata) === null || _options$__autocomple === void 0 ? void 0 : _options$__autocomple.userAgents) || [])[0]) === null || _ === void 0 ? void 0 : _.segment;\n var extraOptions = optionsKey ? _defineProperty({}, optionsKey, Object.keys(((_options$__autocomple2 = options.__autocomplete_metadata) === null || _options$__autocomple2 === void 0 ? void 0 : _options$__autocomple2.options) || {})) : {};\n return {\n plugins: plugins.map(function (plugin) {\n return {\n name: plugin.name,\n options: Object.keys(plugin.__autocomplete_pluginOptions || [])\n };\n }),\n options: _objectSpread({\n 'autocomplete-core': Object.keys(options)\n }, extraOptions),\n ua: userAgents.concat(((_options$__autocomple3 = options.__autocomplete_metadata) === null || _options$__autocomple3 === void 0 ? void 0 : _options$__autocomple3.userAgents) || [])\n };\n}\nexport function injectMetadata(_ref3) {\n var _environment$navigato, _environment$navigato2;\n var metadata = _ref3.metadata,\n environment = _ref3.environment;\n var isMetadataEnabled = (_environment$navigato = environment.navigator) === null || _environment$navigato === void 0 ? void 0 : (_environment$navigato2 = _environment$navigato.userAgent) === null || _environment$navigato2 === void 0 ? void 0 : _environment$navigato2.includes('Algolia Crawler');\n if (isMetadataEnabled) {\n var metadataContainer = environment.document.createElement('meta');\n var headRef = environment.document.querySelector('head');\n metadataContainer.name = 'algolia:metadata';\n setTimeout(function () {\n metadataContainer.content = JSON.stringify(metadata);\n headRef.appendChild(metadataContainer);\n }, 0);\n }\n}","import { getActiveItem } from './utils';\nexport function getCompletion(_ref) {\n var _getActiveItem;\n var state = _ref.state;\n if (state.isOpen === false || state.activeItemId === null) {\n return null;\n }\n return ((_getActiveItem = getActiveItem(state)) === null || _getActiveItem === void 0 ? void 0 : _getActiveItem.itemInputValue) || null;\n}","/**\n * Returns the next active item ID from the current state.\n *\n * We allow circular keyboard navigation from the base index.\n * The base index can either be `null` (nothing is highlighted) or `0`\n * (the first item is highlighted).\n * The base index is allowed to get assigned `null` only if\n * `props.defaultActiveItemId` is `null`. This pattern allows to \"stop\"\n * by the actual query before navigating to other suggestions as seen on\n * Google or Amazon.\n *\n * @param moveAmount The offset to increment (or decrement) the last index\n * @param baseIndex The current index to compute the next index from\n * @param itemCount The number of items\n * @param defaultActiveItemId The default active index to fallback to\n */\nexport function getNextActiveItemId(moveAmount, baseIndex, itemCount, defaultActiveItemId) {\n if (!itemCount) {\n return null;\n }\n if (moveAmount < 0 && (baseIndex === null || defaultActiveItemId !== null && baseIndex === 0)) {\n return itemCount + moveAmount;\n }\n var numericIndex = (baseIndex === null ? -1 : baseIndex) + moveAmount;\n if (numericIndex <= -1 || numericIndex >= itemCount) {\n return defaultActiveItemId === null ? null : 0;\n }\n return numericIndex;\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getItemsCount, invariant } from '@algolia/autocomplete-shared';\nimport { getCompletion } from './getCompletion';\nimport { getNextActiveItemId } from './utils';\nexport var stateReducer = function stateReducer(state, action) {\n switch (action.type) {\n case 'setActiveItemId':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.payload\n });\n }\n case 'setQuery':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n query: action.payload,\n completion: null\n });\n }\n case 'setCollections':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n collections: action.payload\n });\n }\n case 'setIsOpen':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n isOpen: action.payload\n });\n }\n case 'setStatus':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n status: action.payload\n });\n }\n case 'setContext':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n context: _objectSpread(_objectSpread({}, state.context), action.payload)\n });\n }\n case 'ArrowDown':\n {\n var nextState = _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.payload.hasOwnProperty('nextActiveItemId') ? action.payload.nextActiveItemId : getNextActiveItemId(1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n });\n return _objectSpread(_objectSpread({}, nextState), {}, {\n completion: getCompletion({\n state: nextState\n })\n });\n }\n case 'ArrowUp':\n {\n var _nextState = _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: getNextActiveItemId(-1, state.activeItemId, getItemsCount(state), action.props.defaultActiveItemId)\n });\n return _objectSpread(_objectSpread({}, _nextState), {}, {\n completion: getCompletion({\n state: _nextState\n })\n });\n }\n case 'Escape':\n {\n if (state.isOpen) {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\n isOpen: false,\n completion: null\n });\n }\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\n query: '',\n status: 'idle',\n collections: []\n });\n }\n case 'submit':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: null,\n isOpen: false,\n status: 'idle'\n });\n }\n case 'reset':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId:\n // Since we open the panel on reset when openOnFocus=true\n // we need to restore the highlighted index to the defaultActiveItemId. (DocSearch use-case)\n\n // Since we close the panel when openOnFocus=false\n // we lose track of the highlighted index. (Query-suggestions use-case)\n action.props.openOnFocus === true ? action.props.defaultActiveItemId : null,\n status: 'idle',\n query: ''\n });\n }\n case 'focus':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.props.defaultActiveItemId,\n isOpen: (action.props.openOnFocus || Boolean(state.query)) && action.props.shouldPanelOpen({\n state: state\n })\n });\n }\n case 'blur':\n {\n if (action.props.debug) {\n return state;\n }\n return _objectSpread(_objectSpread({}, state), {}, {\n isOpen: false,\n activeItemId: null\n });\n }\n case 'mousemove':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.payload\n });\n }\n case 'mouseleave':\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n activeItemId: action.props.defaultActiveItemId\n });\n }\n default:\n invariant(false, \"The reducer action \".concat(JSON.stringify(action.type), \" is not supported.\"));\n return state;\n }\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { createAlgoliaInsightsPlugin } from '@algolia/autocomplete-plugin-algolia-insights';\nimport { checkOptions } from './checkOptions';\nimport { createStore } from './createStore';\nimport { getAutocompleteSetters } from './getAutocompleteSetters';\nimport { getDefaultProps } from './getDefaultProps';\nimport { getPropGetters } from './getPropGetters';\nimport { getMetadata, injectMetadata } from './metadata';\nimport { onInput } from './onInput';\nimport { stateReducer } from './stateReducer';\nexport function createAutocomplete(options) {\n checkOptions(options);\n var subscribers = [];\n var props = getDefaultProps(options, subscribers);\n var store = createStore(stateReducer, props, onStoreStateChange);\n var setters = getAutocompleteSetters({\n store: store\n });\n var propGetters = getPropGetters(_objectSpread({\n props: props,\n refresh: refresh,\n store: store,\n navigator: props.navigator\n }, setters));\n function onStoreStateChange(_ref) {\n var prevState = _ref.prevState,\n state = _ref.state;\n props.onStateChange(_objectSpread({\n prevState: prevState,\n state: state,\n refresh: refresh,\n navigator: props.navigator\n }, setters));\n }\n function refresh() {\n return onInput(_objectSpread({\n event: new Event('input'),\n nextState: {\n isOpen: store.getState().isOpen\n },\n props: props,\n navigator: props.navigator,\n query: store.getState().query,\n refresh: refresh,\n store: store\n }, setters));\n }\n if (options.insights && !props.plugins.some(function (plugin) {\n return plugin.name === 'aa.algoliaInsightsPlugin';\n })) {\n var insightsParams = typeof options.insights === 'boolean' ? {} : options.insights;\n props.plugins.push(createAlgoliaInsightsPlugin(insightsParams));\n }\n props.plugins.forEach(function (plugin) {\n var _plugin$subscribe;\n return (_plugin$subscribe = plugin.subscribe) === null || _plugin$subscribe === void 0 ? void 0 : _plugin$subscribe.call(plugin, _objectSpread(_objectSpread({}, setters), {}, {\n navigator: props.navigator,\n refresh: refresh,\n onSelect: function onSelect(fn) {\n subscribers.push({\n onSelect: fn\n });\n },\n onActive: function onActive(fn) {\n subscribers.push({\n onActive: fn\n });\n },\n onResolve: function onResolve(fn) {\n subscribers.push({\n onResolve: fn\n });\n }\n }));\n });\n injectMetadata({\n metadata: getMetadata({\n plugins: props.plugins,\n options: options\n }),\n environment: props.environment\n });\n return _objectSpread(_objectSpread({\n refresh: refresh,\n navigator: props.navigator\n }, propGetters), setters);\n}","export function createCancelablePromiseList() {\n var list = [];\n return {\n add: function add(cancelablePromise) {\n list.push(cancelablePromise);\n return cancelablePromise.finally(function () {\n list = list.filter(function (item) {\n return item !== cancelablePromise;\n });\n });\n },\n cancelAll: function cancelAll() {\n list.forEach(function (promise) {\n return promise.cancel();\n });\n },\n isEmpty: function isEmpty() {\n return list.length === 0;\n }\n };\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"params\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nimport { userAgents as coreUserAgents } from '@algolia/autocomplete-shared';\nimport { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';\nimport { getAppIdAndApiKey } from '../utils';\nexport function fetchAlgoliaResults(_ref) {\n var searchClient = _ref.searchClient,\n queries = _ref.queries,\n _ref$userAgents = _ref.userAgents,\n userAgents = _ref$userAgents === void 0 ? [] : _ref$userAgents;\n if (typeof searchClient.addAlgoliaAgent === 'function') {\n var algoliaAgents = [].concat(_toConsumableArray(coreUserAgents), _toConsumableArray(userAgents));\n algoliaAgents.forEach(function (_ref2) {\n var segment = _ref2.segment,\n version = _ref2.version;\n searchClient.addAlgoliaAgent(segment, version);\n });\n }\n var _getAppIdAndApiKey = getAppIdAndApiKey(searchClient),\n appId = _getAppIdAndApiKey.appId,\n apiKey = _getAppIdAndApiKey.apiKey;\n return searchClient.search(queries.map(function (searchParameters) {\n var params = searchParameters.params,\n headers = _objectWithoutProperties(searchParameters, _excluded);\n return _objectSpread(_objectSpread({}, headers), {}, {\n params: _objectSpread({\n hitsPerPage: 5,\n highlightPreTag: HIGHLIGHT_PRE_TAG,\n highlightPostTag: HIGHLIGHT_POST_TAG\n }, params)\n });\n })).then(function (response) {\n return response.results.map(function (result) {\n var _result$hits;\n return _objectSpread(_objectSpread({}, result), {}, {\n hits: (_result$hits = result.hits) === null || _result$hits === void 0 ? void 0 : _result$hits.map(function (hit) {\n return _objectSpread(_objectSpread({}, hit), {}, {\n __autocomplete_algoliaCredentials: {\n appId: appId,\n apiKey: apiKey\n }\n });\n })\n });\n });\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport function createRequester(fetcher, requesterId) {\n function execute(fetcherParams) {\n return fetcher({\n searchClient: fetcherParams.searchClient,\n queries: fetcherParams.requests.map(function (x) {\n return x.query;\n })\n }).then(function (responses) {\n return responses.map(function (response, index) {\n var _fetcherParams$reques = fetcherParams.requests[index],\n sourceId = _fetcherParams$reques.sourceId,\n transformResponse = _fetcherParams$reques.transformResponse;\n return {\n items: response,\n sourceId: sourceId,\n transformResponse: transformResponse\n };\n });\n });\n }\n return function createSpecifiedRequester(requesterParams) {\n return function requester(requestParams) {\n return _objectSpread(_objectSpread({\n requesterId: requesterId,\n execute: execute\n }, requesterParams), requestParams);\n };\n };\n}","import { fetchAlgoliaResults } from '../search';\nimport { createRequester } from './createRequester';\nexport var createAlgoliaRequester = createRequester(fetchAlgoliaResults, 'algolia');","export function getAppIdAndApiKey(searchClient) {\n var _searchClient$transpo = searchClient.transporter,\n headers = _searchClient$transpo.headers,\n queryParameters = _searchClient$transpo.queryParameters;\n var APP_ID = 'x-algolia-application-id';\n var API_KEY = 'x-algolia-api-key';\n var appId = headers[APP_ID] || queryParameters[APP_ID];\n var apiKey = headers[API_KEY] || queryParameters[API_KEY];\n return {\n appId: appId,\n apiKey: apiKey\n };\n}","export var HIGHLIGHT_PRE_TAG = '__aa-highlight__';\nexport var HIGHLIGHT_POST_TAG = '__/aa-highlight__';","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport { invariant } from '@algolia/autocomplete-shared';\nimport { createAlgoliaRequester } from './createAlgoliaRequester';\n\n/**\n * Retrieves Algolia results from multiple indices.\n */\nexport function getAlgoliaResults(requestParams) {\n invariant(_typeof(requestParams.searchClient) === 'object', 'The `searchClient` parameter is required for getAlgoliaResults({ searchClient }).');\n var requester = createAlgoliaRequester({\n transformResponse: function transformResponse(response) {\n return response.hits;\n }\n });\n return requester(requestParams);\n}","/* eslint-disable */\n\n/**\n * Touch-specific event aliases\n *\n * See https://w3c.github.io/touch-events/#extensions-to-the-globaleventhandlers-mixin\n */\nvar TOUCH_EVENTS_ALIASES = ['ontouchstart', 'ontouchend', 'ontouchmove', 'ontouchcancel'];\n\n/*\n * Taken from Preact\n *\n * See https://github.com/preactjs/preact/blob/6ab49d9020740127577bf4af66bf63f4af7f9fee/src/diff/props.js#L58-L151\n */\n\nfunction setStyle(style, key, value) {\n if (value === null) {\n style[key] = '';\n } else if (typeof value !== 'number') {\n style[key] = value;\n } else {\n style[key] = value + 'px';\n }\n}\n\n/**\n * Proxy an event to hooked event handlers\n */\nfunction eventProxy(event) {\n this._listeners[event.type](event);\n}\n\n/**\n * Set a property value on a DOM node\n */\nexport function setProperty(dom, name, value) {\n var useCapture;\n var nameLower;\n var oldValue = dom[name];\n if (name === 'style') {\n if (typeof value == 'string') {\n dom.style = value;\n } else {\n if (value === null) {\n dom.style = '';\n } else {\n for (name in value) {\n if (!oldValue || value[name] !== oldValue[name]) {\n setStyle(dom.style, name, value[name]);\n }\n }\n }\n }\n }\n // Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n else if (name[0] === 'o' && name[1] === 'n') {\n useCapture = name !== (name = name.replace(/Capture$/, ''));\n nameLower = name.toLowerCase();\n if (nameLower in dom || TOUCH_EVENTS_ALIASES.includes(nameLower)) name = nameLower;\n name = name.slice(2);\n if (!dom._listeners) dom._listeners = {};\n dom._listeners[name] = value;\n if (value) {\n if (!oldValue) dom.addEventListener(name, eventProxy, useCapture);\n } else {\n dom.removeEventListener(name, eventProxy, useCapture);\n }\n } else if (name !== 'list' && name !== 'tagName' &&\n // HTMLButtonElement.form and HTMLInputElement.form are read-only but can be set using\n // setAttribute\n name !== 'form' && name !== 'type' && name !== 'size' && name !== 'download' && name !== 'href' && name in dom) {\n dom[name] = value == null ? '' : value;\n } else if (typeof value != 'function' && name !== 'dangerouslySetInnerHTML') {\n if (value == null || value === false &&\n // ARIA-attributes have a different notion of boolean values.\n // The value `false` is different from the attribute not\n // existing on the DOM, so we can't remove it. For non-boolean\n // ARIA-attributes we could treat false as a removal, but the\n // amount of exceptions would cost us too many bytes. On top of\n // that other VDOM frameworks also always stringify `false`.\n !/^ar/.test(name)) {\n dom.removeAttribute(name);\n } else {\n dom.setAttribute(name, value);\n }\n }\n}\nfunction getNormalizedName(name) {\n switch (name) {\n case 'onChange':\n return 'onInput';\n default:\n return name;\n }\n}\nexport function setProperties(dom, props) {\n for (var name in props) {\n setProperty(dom, getNormalizedName(name), props[name]);\n }\n}\nexport function setPropertiesWithoutEvents(dom, props) {\n for (var name in props) {\n if (!(name[0] === 'o' && name[1] === 'n')) {\n setProperty(dom, getNormalizedName(name), props[name]);\n }\n }\n}","export default function UmbracoFormsValidation() {\r\n // polyfill for matches and closest\r\n if (!Element.prototype.matches) Element.prototype.matches = Element.prototype.msMatchesSelector;\r\n if (!Element.prototype.closest) Element.prototype.closest = function (selector) {\r\n var el = this;\r\n while (el) {\r\n if (el.matches(selector)) {\r\n return el;\r\n }\r\n el = el.parentElement;\r\n }\r\n };\r\n\r\n\r\n\r\n //execute init() on document ready\r\n if (document.readyState === \"complete\" || (document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\r\n listen();\r\n } else {\r\n document.addEventListener(\"DOMContentLoaded\", listen);\r\n }\r\n\r\n function listen() {\r\n if (typeof umbracoFormsCollection === \"undefined\") {\r\n //this will occur if this js file is loaded before the inline scripts, in which case\r\n //we'll listen for the inline scripts to execute a custom event.\r\n document.addEventListener(\"umbracoFormLoaded\", init);\r\n }\r\n else {\r\n initCollection(umbracoFormsCollection);\r\n }\r\n }\r\n\r\n function initCollection(formsCollection) {\r\n configureUmbracoFormsValidation();\r\n\r\n for (var i = 0; i < formsCollection.length; i++) {\r\n init({ form: formsCollection[i] });\r\n }\r\n }\r\n\r\n function init(e) {\r\n var formItem = JSON.parse(decodeURI(e.form));\r\n\r\n var forms = document.querySelectorAll('.umbraco-forms-form');\r\n for (var i = 0; i < forms.length; i++) {\r\n var form = forms[i];\r\n\r\n dependencyCheck(form);\r\n\r\n var page = form.querySelector('.umbraco-forms-page');\r\n var conditions = new UmbracoFormsConditions(page,\r\n formItem.fieldSetConditions,\r\n formItem.fieldConditions,\r\n formItem.recordValues);\r\n conditions.watch();\r\n }\r\n }\r\n\r\n /** Configures the jquery validation for Umbraco forms */\r\n function configureUmbracoFormsValidation() {\r\n\r\n if (window.aspnetValidation !== undefined) {\r\n // Asp-net validation setup:\r\n\r\n var validationService = new aspnetValidation.ValidationService();\r\n\r\n // TODO: equivilant to this:\r\n /*\r\n $.validator.setDefaults({\r\n ignore: \":hidden\"\r\n });\r\n */\r\n\r\n function required(value, element, params) {\r\n // Handle single and multiple checkboxes:\r\n if (element.type.toLowerCase() === \"checkbox\" || element.type.toLowerCase() === \"radio\") {\r\n var allCheckboxesOfThisName = element.form.querySelectorAll(\"input[name='\" + element.name + \"']\");\r\n for (var i = 0; i < allCheckboxesOfThisName.length; i++) {\r\n if (allCheckboxesOfThisName[i].checked === true) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n return Boolean(value);\r\n }\r\n validationService.addProvider(\"requiredcb\", required);\r\n validationService.addProvider(\"required\", required);// this will go instead of the build-in required.\r\n\r\n\r\n function umbracoforms_regex(value, element, params) {\r\n if (!value || !params.pattern) {\r\n return true;\r\n }\r\n\r\n var r = new RegExp(params.pattern);\r\n return r.test(value);\r\n }\r\n validationService.addProvider(\"umbracoforms_regex\", umbracoforms_regex);\r\n\r\n function wrapProviderWithIgnorerBehaviour(provider) {\r\n return function (value, element, params) {\r\n\r\n // If field is hidden we ignorer the validation.\r\n if (element.offsetParent === null) {\r\n return true;\r\n }\r\n\r\n return provider(value, element, params);\r\n }\r\n }\r\n\r\n // we can only incept with default validator if we do it after bootstrapping but before window load event triggers validationservice.\r\n window.addEventListener('load', function () {\r\n\r\n // Wrap all providers with ignorer hidden fields logic:\r\n for (var key in validationService.providers) {\r\n validationService.providers[key] = wrapProviderWithIgnorerBehaviour(validationService.providers[key]);\r\n }\r\n });\r\n\r\n // bootstrap validation service.\r\n validationService.bootstrap();\r\n\r\n // Without jquery validation, the previous page submit button click isn't sent with it's name,\r\n // so can't be used server-side to determine whether to go forward or back.\r\n // Hence we'll use an alternate method, setting a hidden field that's also used in the check.\r\n var handlePreviousClicked = function () {\r\n this.form.elements[\"PreviousClicked\"].value = \"clicked\";\r\n };\r\n var previousButtonElements = document.getElementsByClassName(\"prev cancel\");\r\n for (var i = 0; i < previousButtonElements.length; i++) {\r\n previousButtonElements[i].form.elements[\"PreviousClicked\"].value = \"\";\r\n previousButtonElements[i].addEventListener('click', handlePreviousClicked, false);\r\n }\r\n\r\n } else if (typeof jQuery === \"function\" && $.validator) {\r\n //Jquery validation setup\r\n\r\n $.validator.setDefaults({\r\n ignore: \"\"\r\n });\r\n\r\n $.validator.unobtrusive.adapters.addBool(\"requiredcb\", \"required\");\r\n\r\n\r\n $.validator.addMethod(\"umbracoforms_regex\", function (value, element) {\r\n var regex = $(element).attr(\"data-regex\");\r\n var val = $(element).val();\r\n if (val.length === 0) {\r\n return true;\r\n }\r\n return val.match(regex);\r\n });\r\n\r\n $.validator.unobtrusive.adapters.addBool(\"regex\", \"umbracoforms_regex\");\r\n\r\n //var submitInputs = document.querySelectorAll(\".umbraco-forms-form input[type=submit]:not(.cancel)\");\r\n //for (var i = 0; i < submitInputs.length; i++) {\r\n // var input = submitInputs[i];\r\n // input.addEventListener(\"click\", function (evt) {\r\n // evt.preventDefault();\r\n // var frm = $(this).closest(\"form\");\r\n // frm.validate();\r\n // if (frm.valid()) {\r\n // frm.submit();\r\n // this.setAttribute(\"disabled\", \"disabled\");\r\n\r\n // }\r\n // }.bind(input));\r\n //}\r\n }\r\n\r\n }\r\n\r\n /**\r\n * method to determine if Umbraco Forms can run and has the required dependencies loaded\r\n * @param {Form Element} formEl the element of the form\r\n */\r\n function dependencyCheck(formEl) {\r\n // Only perform check if the global 'Umbraco.Sys' is null/undefined.\r\n // If present means we are in backoffice & that this is being rendered as a macro preview and We do not need to perform this check here.\r\n // Similarly we need a check for if running in a rich text editor.\r\n var isBackOffice = function () {\r\n return typeof Umbraco !== \"undefined\" && typeof Umbraco.Sys !== \"undefined\";\r\n };\r\n var isBackOfficeRte = function () {\r\n return document.body.id === \"tinymce\";\r\n };\r\n if (isBackOffice() || isBackOfficeRte()) {\r\n return;\r\n }\r\n\r\n var errorElement = document.createElement(\"div\");\r\n errorElement.className = \"umbraco-forms missing-library\";\r\n errorElement.style.color = \"#fff\";\r\n errorElement.style.backgroundColor = \"#9d261d\";\r\n errorElement.style.padding = \"15px\";\r\n errorElement.style.margin = \"10px 0\";\r\n var errorMessage = \"\";\r\n\r\n //Ensure umbracoForm is not null\r\n if (formEl) {\r\n\r\n //Check to see if the message for the form has been inserted already\r\n var checkForExistinhgErr = formEl.getElementsByClassName('umbraco-forms missing-library');\r\n if (checkForExistinhgErr.length > 0) {\r\n return;\r\n }\r\n\r\n var hasValidationFramework = false;\r\n\r\n if (window.jQuery && $ && $.validator !== undefined) {\r\n hasValidationFramework = true;\r\n } else if (window.aspnetValidation !== undefined) {\r\n hasValidationFramework = true;\r\n }\r\n\r\n if (hasValidationFramework === false) {\r\n errorMessage = errorMessage + \"Umbraco Forms requires a validation framework to run, please read documentation for posible options.\";\r\n }\r\n\r\n if (errorMessage !== \"\") {\r\n errorElement.innerHTML = errorMessage + '
    See Umbraco Forms Documentation';\r\n\r\n formEl.insertBefore(errorElement, formEl.childNodes[0]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Class to handle Umbraco Forms conditional statements\r\n * @param {any} form a reference to the form\r\n * @param {any} fieldsetConditions a reference to the fieldset conditions\r\n * @param {any} fieldConditions a reference to the field conditions\r\n * @param {any} values the form values\r\n * @return {Object} reference to the created class\r\n */\r\n function UmbracoFormsConditions(form, fieldsetConditions, fieldConditions, values) {\r\n\r\n //our conditions \"class\" - must always be newed to work as it uses a form instance to operate on\r\n //load all the information from the dom and serverside info and then the class will take care of the rest\r\n\r\n var self = {};\r\n self.form = form;\r\n self.fieldsetConditions = fieldsetConditions;\r\n self.fieldConditions = fieldConditions;\r\n self.values = values;\r\n self.dataTypes = {};\r\n\r\n //Iterates through all the form elements found on the page to update the registered value\r\n function populateFieldValues(page, formValues, dataTypes) {\r\n\r\n var selectFields = page.querySelectorAll(\"select\");\r\n for (var i = 0; i < selectFields.length; i++) {\r\n var field = selectFields[i];\r\n formValues[field.getAttribute(\"id\")] = field.value ? field.querySelector(\"option[value='\" + field.value.replace(/'/g, \"\\\\'\") + \"']\").innerText : null;\r\n dataTypes[field.getAttribute(\"id\")] = \"select\";\r\n }\r\n\r\n var textareaFields = page.querySelectorAll(\"textarea\");\r\n for (var i = 0; i < textareaFields.length; i++) {\r\n var field = textareaFields[i];\r\n formValues[field.getAttribute(\"id\")] = field.value;\r\n dataTypes[field.getAttribute(\"id\")] = \"textarea\";\r\n }\r\n\r\n // clear out all saved checkbox values to we can safely append\r\n var checkboxFields = page.querySelectorAll(\"input[type=checkbox]\");\r\n for (var i = 0; i < checkboxFields.length; i++) {\r\n var field = checkboxFields[i];\r\n formValues[field.getAttribute(\"name\")] = null;\r\n dataTypes[field.getAttribute(\"id\")] = \"checkbox\";\r\n }\r\n\r\n //$page.find(\"input\").each(function () {\r\n var inputFields = page.querySelectorAll(\"input\");\r\n for (var i = 0; i < inputFields.length; i++) {\r\n var field = inputFields[i];\r\n\r\n if (field.getAttribute('type') === \"text\" || field.getAttribute(\"type\") === \"hidden\") {\r\n formValues[field.getAttribute(\"id\")] = field.value;\r\n dataTypes[field.getAttribute(\"id\")] = \"text\";\r\n }\r\n\r\n if (field.getAttribute('type') === \"radio\") {\r\n if (field.matches(':checked')) {\r\n formValues[field.getAttribute(\"name\")] = field.value;\r\n dataTypes[field.getAttribute(\"id\")] = \"radio\";\r\n }\r\n }\r\n\r\n if (field.getAttribute(\"type\") === \"checkbox\") {\r\n if (field.getAttribute(\"id\") !== field.getAttribute(\"name\")) {\r\n if (field.matches(\":checked\")) {\r\n if (formValues[field.getAttribute(\"name\")] === null) {\r\n formValues[field.getAttribute(\"name\")] = field.value;\r\n }\r\n else {\r\n formValues[field.getAttribute(\"name\")] += \";;\" + field.value;\r\n }\r\n }\r\n }\r\n else {\r\n formValues[field.getAttribute(\"name\")] = (field.matches(\":checked\") ? \"true\" : \"false\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /* Public api */\r\n\r\n self.operators = {\r\n Is: function (value, expected, dataType) {\r\n if ((value || \"\") === expected) {\r\n return true;\r\n }\r\n if (value == null) {\r\n return (expected == value);\r\n }\r\n\r\n if (dataType === \"checkbox\") {\r\n if (expected.toUpperCase() === \"TRUE\" || expected.toUpperCase() === \"ON\") {\r\n expected = \"true\"\r\n } else if (expected.toUpperCase() === \"FALSE\" || expected.toUpperCase() === \"OFF\") {\r\n expected = \"false\"\r\n }\r\n }\r\n\r\n var values = value.split(';;');\r\n var matchingExpected = values.filter(\r\n function (o) {\r\n return o === expected;\r\n });\r\n return matchingExpected.length > 0;\r\n },\r\n IsNot: function (value, unexpected, dataType) {\r\n if (value == null) {\r\n return (unexpected != value);\r\n }\r\n var values = value.split(';;');\r\n var matchingUnexpected = values.filter(\r\n function (o) {\r\n return o === unexpected;\r\n });\r\n\r\n if (dataType === \"checkbox\") {\r\n if (unexpected.toUpperCase() === \"TRUE\" || unexpected.toUpperCase() === \"ON\") {\r\n unexpected = \"true\"\r\n } else if (unexpected.toUpperCase() === \"FALSE\" || unexpected.toUpperCase() === \"OFF\") {\r\n unexpected = \"false\"\r\n }\r\n }\r\n return (value || \"\") !== unexpected && matchingUnexpected.length === 0;\r\n },\r\n GreaterThen: function (value, limit, dataType) {\r\n return parseInt(value) > parseInt(limit);\r\n },\r\n LessThen: function (value, limit, dataType) {\r\n return parseInt(value) < parseInt(limit);\r\n },\r\n StartsWith: function (value, criteria, dataType) {\r\n return value && value.indexOf(criteria) === 0;\r\n },\r\n EndsWith: function (value, criteria, dataType) {\r\n return value && value.indexOf(criteria) === value.length - criteria.length;\r\n },\r\n Contains: function (value, criteria, dataType) {\r\n return value && value.indexOf(criteria) > -1;\r\n }\r\n };\r\n\r\n self.watch = function () {\r\n // This is a special case for pikaday\r\n // The only way around to pickup the value, for now, is to \r\n // subscribe to blur events \r\n var datepickerfields = self.form.querySelectorAll('.datepickerfield');\r\n for (var i = 0; i < datepickerfields.length; i++) {\r\n var field = datepickerfields[i];\r\n field.addEventListener('blur', function () {\r\n if (this.value === \"\") {\r\n // Here comes the hack\r\n // Force the hidden datepicker field the datepicker field\r\n var id = this.getAttribute(\"id\");\r\n var hiddenDatePickerField = id.substr(0, id.length - 2);\r\n self.values[hiddenDatePickerField] = \"\";\r\n document.getElementById(hiddenDatePickerField).value = \"\";// sadly we cant use querySelector with current mark-up (would need to prefix IDs)\r\n }\r\n\r\n populateFieldValues(self.form, self.values, self.dataTypes);\r\n //process the conditions\r\n self.run();\r\n }.bind(field));\r\n }\r\n //subscribe to change events\r\n var changeablefields = self.form.querySelectorAll(\"input, textarea, select\");\r\n for (var i = 0; i < changeablefields.length; i++) {\r\n var field = changeablefields[i];\r\n field.addEventListener(\"change\", function () {\r\n populateFieldValues(self.form, self.values, self.dataTypes);\r\n //process the conditions\r\n self.run();\r\n }.bind(field));\r\n }\r\n\r\n //register all values from the current fields on the page\r\n populateFieldValues(self.form, self.values, self.dataTypes);\r\n\r\n //the initial run-through of all the conditions\r\n self.run();\r\n };\r\n\r\n self.run = function () {\r\n var fsId,\r\n fieldId,\r\n\r\n /*\r\n fsConditions = params.fsConditions || {},\r\n fieldConditions = params.fieldConditions || {},\r\n values = params.values || {},*/\r\n\r\n cachedResults = {};\r\n\r\n function evaluateRuleInstance(rule) {\r\n var value = self.values[rule.field],\r\n dataType = self.dataTypes[rule.field],\r\n func = self.operators[rule.operator],\r\n result = value !== null && func(value, rule.value, dataType);\r\n return result;\r\n }\r\n\r\n function evaluateRule(rule) {\r\n var dependencyIsVisible = true;\r\n\r\n if (self.fieldConditions[rule.field]) {\r\n dependencyIsVisible = isVisible(rule.field, self.fieldConditions[rule.field]);\r\n }\r\n\r\n if (dependencyIsVisible) {\r\n return evaluateRuleInstance(rule);\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n function evaluateCondition(id, condition) {\r\n // This was once pretty. Now it needs refactoring again. :)\r\n\r\n var any = condition.logicType === \"Any\",\r\n all = condition.logicType === \"All\",\r\n fieldsetVisibilities = {},\r\n hasHiddenFieldset = false,\r\n success = true,\r\n rule,\r\n i;\r\n\r\n for (i = 0; i < condition.rules.length; i++) {\r\n rule = condition.rules[i];\r\n\r\n if (id === rule.field || id === rule.fieldsetId) {\r\n throw new Error(\"Field or fieldset \" + id + \" has a condition on itself.\");\r\n }\r\n\r\n if (fieldsetVisibilities[rule.fieldsetId] !== undefined) {\r\n continue;\r\n }\r\n\r\n if (self.fieldsetConditions[rule.fieldsetId]) {\r\n\r\n fieldsetVisibilities[rule.fieldsetId] =\r\n isVisible(rule.fieldsetId, self.fieldsetConditions[rule.fieldsetId]);\r\n\r\n if (!fieldsetVisibilities[rule.fieldsetId]) {\r\n hasHiddenFieldset = true;\r\n }\r\n }\r\n else {\r\n fieldsetVisibilities[rule.fieldsetId] = true;\r\n }\r\n }\r\n\r\n if (all && hasHiddenFieldset) {\r\n return false;\r\n }\r\n\r\n for (i = 0; i < condition.rules.length; i++) {\r\n rule = condition.rules[i];\r\n\r\n if (fieldsetVisibilities[rule.fieldsetId]) {\r\n success = evaluateRule(condition.rules[i]);\r\n }\r\n else {\r\n success = false;\r\n }\r\n\r\n if (any && success) {\r\n break;\r\n }\r\n if (all && !success) {\r\n break;\r\n }\r\n }\r\n return success;\r\n }\r\n\r\n function evaluateConditionVisibility(id, condition) {\r\n var show = condition.actionType === \"Show\",\r\n cachedResult = cachedResults[id];\r\n\r\n var success;\r\n if (cachedResult === undefined) {\r\n cachedResults[id] = show; // set default value to avoid circular issues\r\n success = (cachedResults[id] = evaluateCondition(id, condition));\r\n } else {\r\n success = cachedResult;\r\n }\r\n\r\n var visible = !(success ^ show);\r\n return visible;\r\n }\r\n\r\n function isVisible(id, condition) {\r\n if (condition) {\r\n return evaluateConditionVisibility(id, condition);\r\n }\r\n return true;\r\n }\r\n\r\n function handleCondition(element, id, condition, type) {\r\n var shouldShow = isVisible(id, condition);\r\n if (element) {\r\n if (shouldShow) {\r\n element.style.display = \"\";\r\n }\r\n else {\r\n element.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n for (fsId in self.fieldsetConditions) {\r\n if (self.fieldsetConditions.hasOwnProperty(fsId)) {\r\n handleCondition(document.getElementById(fsId), fsId, self.fieldsetConditions[fsId], \"Fieldset\");// sadly we cant use querySelector with current mark-up (would need to prefix IDs)\r\n }\r\n }\r\n\r\n for (fieldId in self.fieldConditions) {\r\n if (self.fieldConditions.hasOwnProperty(fieldId)) {\r\n if (document.getElementById(fieldId)) {\r\n handleCondition(document.getElementById(fieldId).closest(\".umbraco-forms-field\"),// sadly we cant use querySelector with current mark-up (would need to prefix IDs)\r\n fieldId,\r\n self.fieldConditions[fieldId],\r\n \"Field\");\r\n }\r\n }\r\n }\r\n };\r\n\r\n return self;\r\n }\r\n};","import UmbracoFormsValidation from './umbraco-forms-validation';\r\nimport UmbracoFormsController from './umbraco-forms.controller';\r\nimport UmbracoFormsUtilController from './util.controller';\r\nexport default function UmbracoForms(module) {\r\n UmbracoFormsValidation();\r\n UmbracoFormsController(module);\r\n UmbracoFormsUtilController(module);\r\n};","export default function UmbracoFormsController(module) {\r\n angular.module(module || 'app')\r\n .controller('UmbracoFormsController', UmbracoFormsController);\r\n\r\n UmbracoFormsController.$inject = ['$window', '$scope', '$element', '$attrs', '$http', '$compile'];\r\n function UmbracoFormsController($window, $scope, $element, $attrs, $http, $compile) {\r\n var ctrl = this;\r\n ctrl.$onInit = function () {\r\n //if (!$rootScope.umbracoForms) {\r\n // geolocation.getLocation('status,continentCode,countryCode,region,timezone', ctrl._apiKey)\r\n // .then(function (userData) {\r\n // $rootScope.umbracoForms = {\r\n // region: userData.region,\r\n // countryCode: userData.countryCode,\r\n // timezone: userData.timezone\r\n // };\r\n // });\r\n //}\r\n };\r\n\r\n ctrl.goBack = () => {\r\n ctrl._goBack = true;\r\n }\r\n\r\n ctrl.submitForm = function ($event, isMultiStep, continueInModal) {\r\n $event.preventDefault();\r\n\r\n if (!ctrl.submitting) {\r\n ctrl.submitting = true;\r\n postForm(isMultiStep, continueInModal);\r\n }\r\n };\r\n\r\n function postForm(isMultiStep, continueInModal) {\r\n var valid = false;\r\n if (!ctrl._goBack) {\r\n $element.validate();\r\n valid = $element.valid();\r\n if (!valid) {\r\n ctrl.submitting = false;\r\n }\r\n }\r\n\r\n if (ctrl._goBack || valid) {\r\n var values = $element.serializeArray();\r\n var data = new FormData();\r\n var jsonData = {};\r\n var jsonCheck = /^[\\{\\[]/\r\n values.forEach(function (item, index) {\r\n data.append(item.name, item.value);\r\n if (jsonData[item.name] === undefined) { // New\r\n jsonData[item.name] = item.value ? (jsonCheck.test(item.value) ? JSON.parse(item.value) : item.value) : '';\r\n } else { // Existing\r\n if (!jsonData[item.name].push) {\r\n jsonData[item.name] = [jsonData[item.name]];\r\n }\r\n jsonData[item.name].push(item.value || '');\r\n }\r\n });\r\n\r\n if (ctrl._goBack) {\r\n data.append('__prev', $element[0].querySelector('[name=\"__prev\"]').innerText);\r\n }\r\n\r\n $.post({\r\n method: 'POST',\r\n url: location.pathname,\r\n data: data,\r\n processData: false,\r\n contentType: false,\r\n success: function (response) {\r\n var html = document.createElement('html');\r\n html.innerHTML = response;\r\n var container = $element.parent();\r\n var id = container.attr('id').replace('umbraco_form_', '');\r\n var form = html.querySelector('#' + $element.parent().attr('id') + '> form');\r\n var continueMessage = angular.element('#continue_prompt_' + id);\r\n if (!form) {\r\n var popup = $('#form_popup_' + id);\r\n popup.foundation('open');\r\n var pageForms = Array.from(document.querySelectorAll('#umbraco_form_' + id + ' form'));\r\n if (continueMessage.length) {\r\n continueMessage.css('display', 'none');\r\n }\r\n pageForms.forEach(pageForm => {\r\n pageForm.reset();\r\n });\r\n if ($window.umbracoFormsData && $window.umbracoFormsData[id]) {\r\n delete $window.umbracoFormsData[id];\r\n }\r\n }\r\n else if (isMultiStep) {\r\n if (!$window.umbracoFormsData) {\r\n $window.umbracoFormsData = {};\r\n }\r\n var formData = $window.umbracoFormsData && $window.umbracoFormsData[id] ? $window.umbracoFormsData[id] : {};\r\n formData = {\r\n ...formData,\r\n ...jsonData\r\n };\r\n $window.umbracoFormsData[id] = ctrl.formData = formData;\r\n if (continueInModal) {\r\n var modal = $('#form_step_' + id);\r\n var modalForm;\r\n var isClosed = modal.css('display') === 'none';\r\n if (isClosed) {\r\n var formContainer = modal.find('.form-container');\r\n formContainer = modal.find('.form-container');\r\n formContainer.html(form.parentNode.parentNode.innerHTML);\r\n modalForm = formContainer.find('form');\r\n $compile(formContainer.contents())($scope.$parent);\r\n if (!modal._initialized) {\r\n modal.on('closed.zf.reveal', () => {\r\n if (continueMessage.length && $window.umbracoFormsData[id]) {\r\n continueMessage.css('display', '');\r\n }\r\n });\r\n modal._initialized = true;\r\n }\r\n }\r\n else {\r\n modalForm = modal.find('form');\r\n modalForm.html(form.innerHTML);\r\n $compile(modalForm.contents())($scope);\r\n }\r\n modalForm.removeData(\"validator\").removeData(\"unobtrusiveValidation\");\r\n $.validator.unobtrusive.parse(modalForm);\r\n if (isClosed) {\r\n modal.foundation('open');\r\n }\r\n }\r\n else {\r\n $element.html(form.innerHTML);\r\n $compile($element.contents())($scope);\r\n $element.removeData(\"validator\").removeData(\"unobtrusiveValidation\");\r\n $.validator.unobtrusive.parse($element);\r\n }\r\n }\r\n $scope.$evalAsync(function () {\r\n ctrl.submitted = true;\r\n ctrl.submitting = false;\r\n });\r\n },\r\n error: function () {\r\n $scope.$evalAsync(function () {\r\n ctrl.submitting = false;\r\n });\r\n }\r\n\r\n });\r\n }\r\n ctrl._goBack = false;\r\n }\r\n\r\n ctrl.verifyCaptcha = function (token) {\r\n var verifyCaptchaResult =\r\n $http.get('/api/recaptcha/verify/', {\r\n params: { token: token }\r\n })\r\n .then(function (response) {\r\n return response.data;\r\n })\r\n .catch(function (response) {\r\n console.log(response);\r\n return false;\r\n });\r\n return verifyCaptchaResult;\r\n };\r\n }\r\n};","export default function UmbracoFormsUtilController(module) {\r\n angular.module(module || 'app')\r\n .controller('UmbracoFormsUtilController', UmbracoFormsUtilController);\r\n\r\n UmbracoFormsUtilController.$inject = ['$scope'];\r\n function UmbracoFormsUtilController($scope) {\r\n $scope.isArray = (value) => {\r\n return Array.isArray(value);\r\n }\r\n }\r\n}","/*!\r\n * VelocityTracker: 3.5.0\r\n * https://greensock.com\r\n *\r\n * Copyright 2008-2020, GreenSock. All rights reserved.\r\n * Subject to the terms at https://greensock.com/standard-license or for\r\n * Club GreenSock members, the agreement issued with that membership.\r\n * @author: Jack Doyle, jack@greensock.com\r\n*/\r\n\r\n/* eslint-disable */\r\nvar gsap,\r\n _coreInitted,\r\n _toArray,\r\n _getUnit,\r\n _first,\r\n _ticker,\r\n _time1,\r\n _time2,\r\n _getCache,\r\n _getGSAP = function _getGSAP() {\r\n return gsap || typeof window !== \"undefined\" && (gsap = window.gsap);\r\n},\r\n _lookup = {},\r\n _round = function _round(value) {\r\n return Math.round(value * 10000) / 10000;\r\n},\r\n _getID = function _getID(target) {\r\n return _getCache(target).id;\r\n},\r\n _getByTarget = function _getByTarget(target) {\r\n return _lookup[_getID(typeof target === \"string\" ? _toArray(target)[0] : target)];\r\n},\r\n _onTick = function _onTick(time) {\r\n var pt = _first,\r\n val; //if the frame rate is too high, we won't be able to track the velocity as well, so only update the values about 20 times per second\r\n\r\n if (time - _time1 >= 0.05) {\r\n _time2 = _time1;\r\n _time1 = time;\r\n\r\n while (pt) {\r\n val = pt.g(pt.t, pt.p);\r\n\r\n if (val !== pt.v1 || time - pt.t1 > 0.2) {\r\n //use a threshold of 0.2 seconds for zeroing-out velocity. If we only use 0.05 and things update slightly slower, like some Android devices dispatch \"touchmove\" events sluggishly so 2 or 3 ticks of the gsap.ticker may elapse inbetween, thus it may appear like the object is not moving but it actually is but it's not updating as frequently. A threshold of 0.2 seconds seems to be a good balance. We want to update things frequently (0.05 seconds) when they're moving so that we can respond to fast motions accurately, but we want to be more resistant to go back to a zero velocity.\r\n pt.v2 = pt.v1;\r\n pt.v1 = val;\r\n pt.t2 = pt.t1;\r\n pt.t1 = time;\r\n }\r\n\r\n pt = pt._next;\r\n }\r\n }\r\n},\r\n _types = {\r\n deg: 360,\r\n rad: Math.PI * 2\r\n},\r\n _initCore = function _initCore() {\r\n gsap = _getGSAP();\r\n\r\n if (gsap) {\r\n _toArray = gsap.utils.toArray;\r\n _getUnit = gsap.utils.getUnit;\r\n _getCache = gsap.core.getCache;\r\n _ticker = gsap.ticker;\r\n _coreInitted = 1;\r\n }\r\n};\r\n\r\nvar PropTracker = function PropTracker(target, property, type, next) {\r\n this.t = target;\r\n this.p = property;\r\n this.g = target._gsap.get;\r\n this.rCap = _types[type || _getUnit(this.g(target, property))]; //rotational cap (for degrees, \"deg\", it's 360 and for radians, \"rad\", it's Math.PI * 2)\r\n\r\n this.v1 = this.v2 = 0;\r\n this.t1 = this.t2 = _ticker.time;\r\n\r\n if (next) {\r\n this._next = next;\r\n next._prev = this;\r\n }\r\n};\r\n\r\nexport var VelocityTracker = /*#__PURE__*/function () {\r\n function VelocityTracker(target, property) {\r\n if (!_coreInitted) {\r\n _initCore();\r\n }\r\n\r\n this.target = _toArray(target)[0];\r\n _lookup[_getID(this.target)] = this;\r\n this._props = {};\r\n property && this.add(property);\r\n }\r\n\r\n VelocityTracker.register = function register(core) {\r\n gsap = core;\r\n\r\n _initCore();\r\n };\r\n\r\n var _proto = VelocityTracker.prototype;\r\n\r\n _proto.get = function get(property, skipRecentTick) {\r\n var pt = this._props[property] || console.warn(\"Not tracking \" + property + \" velocity.\"),\r\n val,\r\n dif,\r\n rotationCap;\r\n val = parseFloat(skipRecentTick ? pt.v1 : pt.g(pt.t, pt.p));\r\n dif = val - parseFloat(pt.v2);\r\n rotationCap = pt.rCap;\r\n\r\n if (rotationCap) {\r\n //rotational values need special interpretation so that if, for example, they go from 179 to -178 degrees it is interpreted as a change of 3 instead of -357.\r\n dif = dif % rotationCap;\r\n\r\n if (dif !== dif % (rotationCap / 2)) {\r\n dif = dif < 0 ? dif + rotationCap : dif - rotationCap;\r\n }\r\n }\r\n\r\n return _round(dif / ((skipRecentTick ? pt.t1 : _ticker.time) - pt.t2));\r\n };\r\n\r\n _proto.getAll = function getAll() {\r\n var result = {},\r\n props = this._props,\r\n p;\r\n\r\n for (p in props) {\r\n result[p] = this.get(p);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n _proto.isTracking = function isTracking(property) {\r\n return property in this._props;\r\n };\r\n\r\n _proto.add = function add(property, type) {\r\n if (!(property in this._props)) {\r\n if (!_first) {\r\n _ticker.add(_onTick);\r\n\r\n _time1 = _time2 = _ticker.time;\r\n }\r\n\r\n _first = this._props[property] = new PropTracker(this.target, property, type, _first);\r\n }\r\n };\r\n\r\n _proto.remove = function remove(property) {\r\n var pt = this._props[property],\r\n prev,\r\n next;\r\n\r\n if (pt) {\r\n prev = pt._prev;\r\n next = pt._next;\r\n\r\n if (prev) {\r\n prev._next = next;\r\n }\r\n\r\n if (next) {\r\n next._prev = prev;\r\n } else if (_first === pt) {\r\n _ticker.remove(_onTick);\r\n\r\n _first = 0;\r\n }\r\n\r\n delete this._props[property];\r\n }\r\n };\r\n\r\n _proto.kill = function kill(shallow) {\r\n for (var p in this._props) {\r\n this.remove(p);\r\n }\r\n\r\n if (!shallow) {\r\n delete _lookup[_getID(this.target)];\r\n }\r\n };\r\n\r\n VelocityTracker.track = function track(targets, properties, types) {\r\n if (!_coreInitted) {\r\n _initCore();\r\n }\r\n\r\n var result = [],\r\n targs = _toArray(targets),\r\n a = properties.split(\",\"),\r\n t = (types || \"\").split(\",\"),\r\n i = targs.length,\r\n tracker,\r\n j;\r\n\r\n while (i--) {\r\n tracker = _getByTarget(targs[i]) || new VelocityTracker(targs[i]);\r\n j = a.length;\r\n\r\n while (j--) {\r\n tracker.add(a[j], t[j] || t[0]);\r\n }\r\n\r\n result.push(tracker);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n VelocityTracker.untrack = function untrack(targets, properties) {\r\n var props = (properties || \"\").split(\",\");\r\n\r\n _toArray(targets).forEach(function (target) {\r\n var tracker = _getByTarget(target);\r\n\r\n if (tracker) {\r\n if (!props.length) {\r\n tracker.kill(1);\r\n } else {\r\n props.forEach(function (p) {\r\n return tracker.remove(p);\r\n });\r\n }\r\n }\r\n });\r\n };\r\n\r\n VelocityTracker.isTracking = function isTracking(target, property) {\r\n var tracker = _getByTarget(target);\r\n\r\n return tracker && tracker.isTracking(property);\r\n };\r\n\r\n VelocityTracker.getVelocity = function getVelocity(target, property) {\r\n var tracker = _getByTarget(target);\r\n\r\n return !tracker || !tracker.isTracking(property) ? console.warn(\"Not tracking velocity of \" + property) : tracker.get(property);\r\n };\r\n\r\n return VelocityTracker;\r\n}();\r\nVelocityTracker.getByTarget = _getByTarget;\r\n_getGSAP() && gsap.registerPlugin(VelocityTracker);\r\nexport { VelocityTracker as default };","/*!\r\n * InertiaPlugin 3.5.0\r\n * https://greensock.com\r\n *\r\n * @license Copyright 2008-2020, GreenSock. All rights reserved.\r\n * Subject to the terms at https://greensock.com/standard-license or for\r\n * Club GreenSock members, the agreement issued with that membership.\r\n * @author: Jack Doyle, jack@greensock.com\r\n*/\r\n\r\n/* eslint-disable */\r\nimport { VelocityTracker } from \"./utils/VelocityTracker.js\";\r\n\r\nvar gsap,\r\n _coreInitted,\r\n _parseEase,\r\n _toArray,\r\n _power3,\r\n _config,\r\n _getUnit,\r\n PropTween,\r\n _getCache,\r\n _checkPointRatio,\r\n _clamp,\r\n _processingVars,\r\n _getTracker = VelocityTracker.getByTarget,\r\n _getGSAP = function _getGSAP() {\r\n return gsap || typeof window !== \"undefined\" && (gsap = window.gsap) && gsap.registerPlugin && gsap;\r\n},\r\n _isString = function _isString(value) {\r\n return typeof value === \"string\";\r\n},\r\n _isNumber = function _isNumber(value) {\r\n return typeof value === \"number\";\r\n},\r\n _isObject = function _isObject(value) {\r\n return typeof value === \"object\";\r\n},\r\n _isFunction = function _isFunction(value) {\r\n return typeof value === \"function\";\r\n},\r\n _bonusValidated = 1,\r\n //InertiaPlugin\r\n_isArray = Array.isArray,\r\n _emptyFunc = function _emptyFunc(p) {\r\n return p;\r\n},\r\n _bigNum = 1e10,\r\n _tinyNum = 1 / _bigNum,\r\n _checkPoint = 0.05,\r\n _round = function _round(value) {\r\n return Math.round(value * 10000) / 10000;\r\n},\r\n _extend = function _extend(obj, defaults, exclude) {\r\n for (var p in defaults) {\r\n if (!(p in obj) && p !== exclude) {\r\n obj[p] = defaults[p];\r\n }\r\n }\r\n\r\n return obj;\r\n},\r\n _deepClone = function _deepClone(obj) {\r\n var copy = {},\r\n p,\r\n v;\r\n\r\n for (p in obj) {\r\n copy[p] = _isObject(v = obj[p]) ? _deepClone(v) : v;\r\n }\r\n\r\n return copy;\r\n},\r\n _getClosest = function _getClosest(n, values, max, min, radius) {\r\n var i = values.length,\r\n closest = 0,\r\n absDif = _bigNum,\r\n val,\r\n dif,\r\n p,\r\n dist;\r\n\r\n if (_isObject(n)) {\r\n while (i--) {\r\n val = values[i];\r\n dif = 0;\r\n\r\n for (p in n) {\r\n dist = val[p] - n[p];\r\n dif += dist * dist;\r\n }\r\n\r\n if (dif < absDif) {\r\n closest = i;\r\n absDif = dif;\r\n }\r\n }\r\n\r\n if ((radius || _bigNum) < _bigNum && radius < Math.sqrt(absDif)) {\r\n return n;\r\n }\r\n } else {\r\n while (i--) {\r\n val = values[i];\r\n dif = val - n;\r\n\r\n if (dif < 0) {\r\n dif = -dif;\r\n }\r\n\r\n if (dif < absDif && val >= min && val <= max) {\r\n closest = i;\r\n absDif = dif;\r\n }\r\n }\r\n }\r\n\r\n return values[closest];\r\n},\r\n _parseEnd = function _parseEnd(curProp, end, max, min, name, radius) {\r\n if (curProp.end === \"auto\") {\r\n return curProp;\r\n }\r\n\r\n var endVar = curProp.end,\r\n adjustedEnd,\r\n p;\r\n max = isNaN(max) ? _bigNum : max;\r\n min = isNaN(min) ? -_bigNum : min;\r\n\r\n if (_isObject(end)) {\r\n //for objects, like {x, y} where they're linked and we must pass an object to the function or find the closest value in an array.\r\n adjustedEnd = end.calculated ? end : (_isFunction(endVar) ? endVar(end) : _getClosest(end, endVar, max, min, radius)) || end;\r\n\r\n if (!end.calculated) {\r\n for (p in adjustedEnd) {\r\n end[p] = adjustedEnd[p];\r\n }\r\n\r\n end.calculated = true;\r\n }\r\n\r\n adjustedEnd = adjustedEnd[name];\r\n } else {\r\n adjustedEnd = _isFunction(endVar) ? endVar(end) : _isArray(endVar) ? _getClosest(end, endVar, max, min, radius) : parseFloat(endVar);\r\n }\r\n\r\n if (adjustedEnd > max) {\r\n adjustedEnd = max;\r\n } else if (adjustedEnd < min) {\r\n adjustedEnd = min;\r\n }\r\n\r\n return {\r\n max: adjustedEnd,\r\n min: adjustedEnd,\r\n unitFactor: curProp.unitFactor\r\n };\r\n},\r\n _getNumOrDefault = function _getNumOrDefault(vars, property, defaultValue) {\r\n return isNaN(vars[property]) ? defaultValue : +vars[property];\r\n},\r\n _calculateChange = function _calculateChange(velocity, duration) {\r\n return duration * _checkPoint * velocity / _checkPointRatio;\r\n},\r\n _calculateDuration = function _calculateDuration(start, end, velocity) {\r\n return Math.abs((end - start) * _checkPointRatio / velocity / _checkPoint);\r\n},\r\n _reservedProps = {\r\n resistance: 1,\r\n checkpoint: 1,\r\n preventOvershoot: 1,\r\n linkedProps: 1,\r\n radius: 1,\r\n duration: 1\r\n},\r\n _processLinkedProps = function _processLinkedProps(target, vars, getVal, resistance) {\r\n if (vars.linkedProps) {\r\n //when there are linkedProps (typically \"x,y\" where snapping has to factor in multiple properties, we must first populate an object with all of those end values, then feed it to the function that make any necessary alterations. So the point of this first loop is to simply build an object (like {x:100, y:204.5}) for feeding into that function which we'll do later in the \"real\" loop.\r\n var linkedPropNames = vars.linkedProps.split(\",\"),\r\n linkedProps = {},\r\n i,\r\n p,\r\n curProp,\r\n curVelocity,\r\n tracker,\r\n curDuration;\r\n\r\n for (i = 0; i < linkedPropNames.length; i++) {\r\n p = linkedPropNames[i];\r\n curProp = vars[p];\r\n\r\n if (curProp) {\r\n if (_isNumber(curProp.velocity)) {\r\n curVelocity = curProp.velocity;\r\n } else {\r\n tracker = tracker || _getTracker(target);\r\n curVelocity = tracker && tracker.isTracking(p) ? tracker.get(p) : 0;\r\n }\r\n\r\n curDuration = Math.abs(curVelocity / _getNumOrDefault(curProp, \"resistance\", resistance));\r\n linkedProps[p] = parseFloat(getVal(target, p)) + _calculateChange(curVelocity, curDuration);\r\n }\r\n }\r\n\r\n return linkedProps;\r\n }\r\n},\r\n _calculateTweenDuration = function _calculateTweenDuration(target, vars, maxDuration, minDuration, overshootTolerance, recordEnd) {\r\n if (maxDuration === void 0) {\r\n maxDuration = 10;\r\n }\r\n\r\n if (minDuration === void 0) {\r\n minDuration = 0.2;\r\n }\r\n\r\n if (overshootTolerance === void 0) {\r\n overshootTolerance = 1;\r\n }\r\n\r\n if (recordEnd === void 0) {\r\n recordEnd = 0;\r\n }\r\n\r\n _isString(target) && (target = _toArray(target)[0]);\r\n\r\n if (!target) {\r\n return 0;\r\n }\r\n\r\n var duration = 0,\r\n clippedDuration = _bigNum,\r\n inertiaVars = vars.inertia || vars,\r\n getVal = _getCache(target).get,\r\n resistance = _getNumOrDefault(inertiaVars, \"resistance\", _config.resistance),\r\n p,\r\n curProp,\r\n curDuration,\r\n curVelocity,\r\n curVal,\r\n end,\r\n curClippedDuration,\r\n tracker,\r\n unitFactor,\r\n linkedProps; //when there are linkedProps (typically \"x,y\" where snapping has to factor in multiple properties, we must first populate an object with all of those end values, then feed it to the function that make any necessary alterations. So the point of this first loop is to simply build an object (like {x:100, y:204.5}) for feeding into that function which we'll do later in the \"real\" loop.\r\n\r\n\r\n linkedProps = _processLinkedProps(target, inertiaVars, getVal, resistance);\r\n\r\n for (p in inertiaVars) {\r\n if (!_reservedProps[p]) {\r\n curProp = inertiaVars[p];\r\n\r\n if (!_isObject(curProp)) {\r\n tracker = tracker || _getTracker(target);\r\n\r\n if (tracker && tracker.isTracking(p)) {\r\n curProp = _isNumber(curProp) ? {\r\n velocity: curProp\r\n } : {\r\n velocity: tracker.get(p)\r\n }; //if we're tracking this property, we should use the tracking velocity and then use the numeric value that was passed in as the min and max so that it tweens exactly there.\r\n } else {\r\n curVelocity = +curProp || 0;\r\n curDuration = Math.abs(curVelocity / resistance);\r\n }\r\n }\r\n\r\n if (_isObject(curProp)) {\r\n if (_isNumber(curProp.velocity)) {\r\n curVelocity = curProp.velocity;\r\n } else {\r\n tracker = tracker || _getTracker(target);\r\n curVelocity = tracker && tracker.isTracking(p) ? tracker.get(p) : 0;\r\n }\r\n\r\n curDuration = _clamp(minDuration, maxDuration, Math.abs(curVelocity / _getNumOrDefault(curProp, \"resistance\", resistance)));\r\n curVal = parseFloat(getVal(target, p)) || 0;\r\n end = curVal + _calculateChange(curVelocity, curDuration);\r\n\r\n if (\"end\" in curProp) {\r\n curProp = _parseEnd(curProp, linkedProps && p in linkedProps ? linkedProps : end, curProp.max, curProp.min, p, inertiaVars.radius);\r\n\r\n if (recordEnd) {\r\n _processingVars === vars && (_processingVars = inertiaVars = _deepClone(vars));\r\n inertiaVars[p] = _extend(curProp, inertiaVars[p], \"end\");\r\n }\r\n }\r\n\r\n if (\"max\" in curProp && end > +curProp.max + _tinyNum) {\r\n unitFactor = curProp.unitFactor || _config.unitFactors[p] || 1; //some values are measured in special units like radians in which case our thresholds need to be adjusted accordingly.\r\n //if the value is already exceeding the max or the velocity is too low, the duration can end up being uncomfortably long but in most situations, users want the snapping to occur relatively quickly (0.75 seconds), so we implement a cap here to make things more intuitive. If the max and min match, it means we're animating to a particular value and we don't want to shorten the time unless the velocity is really slow. Example: a rotation where the start and natural end value are less than the snapping spot, but the natural end is pretty close to the snap.\r\n\r\n curClippedDuration = curVal > curProp.max && curProp.min !== curProp.max || curVelocity * unitFactor > -15 && curVelocity * unitFactor < 45 ? minDuration + (maxDuration - minDuration) * 0.1 : _calculateDuration(curVal, curProp.max, curVelocity);\r\n\r\n if (curClippedDuration + overshootTolerance < clippedDuration) {\r\n clippedDuration = curClippedDuration + overshootTolerance;\r\n }\r\n } else if (\"min\" in curProp && end < +curProp.min - _tinyNum) {\r\n unitFactor = curProp.unitFactor || _config.unitFactors[p] || 1; //some values are measured in special units like radians in which case our thresholds need to be adjusted accordingly.\r\n //if the value is already exceeding the min or if the velocity is too low, the duration can end up being uncomfortably long but in most situations, users want the snapping to occur relatively quickly (0.75 seconds), so we implement a cap here to make things more intuitive.\r\n\r\n curClippedDuration = curVal < curProp.min && curProp.min !== curProp.max || curVelocity * unitFactor > -45 && curVelocity * unitFactor < 15 ? minDuration + (maxDuration - minDuration) * 0.1 : _calculateDuration(curVal, curProp.min, curVelocity);\r\n\r\n if (curClippedDuration + overshootTolerance < clippedDuration) {\r\n clippedDuration = curClippedDuration + overshootTolerance;\r\n }\r\n }\r\n\r\n curClippedDuration > duration && (duration = curClippedDuration);\r\n }\r\n\r\n curDuration > duration && (duration = curDuration);\r\n }\r\n }\r\n\r\n duration > clippedDuration && (duration = clippedDuration);\r\n return duration > maxDuration ? maxDuration : duration < minDuration ? minDuration : duration;\r\n},\r\n _initCore = function _initCore() {\r\n gsap = _getGSAP();\r\n\r\n if (gsap) {\r\n _parseEase = gsap.parseEase;\r\n _toArray = gsap.utils.toArray;\r\n _getUnit = gsap.utils.getUnit;\r\n _getCache = gsap.core.getCache;\r\n _clamp = gsap.utils.clamp;\r\n _power3 = _parseEase(\"power3\");\r\n _checkPointRatio = _power3(0.05);\r\n PropTween = gsap.core.PropTween;\r\n gsap.config({\r\n resistance: 100,\r\n unitFactors: {\r\n time: 1000,\r\n totalTime: 1000,\r\n progress: 1000,\r\n totalProgress: 1000\r\n }\r\n });\r\n _config = gsap.config();\r\n gsap.registerPlugin(VelocityTracker);\r\n _coreInitted = 1;\r\n }\r\n};\r\n\r\nexport var InertiaPlugin = {\r\n version: \"3.5.0\",\r\n name: \"inertia\",\r\n register: function register(core) {\r\n gsap = core;\r\n\r\n _initCore();\r\n },\r\n init: function init(target, vars, tween, index, targets) {\r\n _coreInitted || _initCore();\r\n\r\n var tracker = _getTracker(target);\r\n\r\n if (vars === \"auto\") {\r\n if (!tracker) {\r\n console.warn(\"No inertia tracking on \" + target + \". InertiaPlugin.track(target) first.\");\r\n return;\r\n }\r\n\r\n vars = tracker.getAll();\r\n }\r\n\r\n this.target = target;\r\n this.tween = tween;\r\n _processingVars = vars; // gets swapped inside _calculateTweenDuration() if there's a function-based value encountered (to avoid double-calling it)\r\n\r\n var cache = target._gsap,\r\n getVal = cache.get,\r\n dur = vars.duration,\r\n durIsObj = _isObject(dur),\r\n preventOvershoot = vars.preventOvershoot || durIsObj && dur.overshoot === 0,\r\n resistance = _getNumOrDefault(vars, \"resistance\", _config.resistance),\r\n duration = _isNumber(dur) ? dur : _calculateTweenDuration(target, vars, durIsObj && dur.max || 10, durIsObj && dur.min || 0.2, durIsObj && \"overshoot\" in dur ? +dur.overshoot : preventOvershoot ? 0 : 1, true),\r\n p,\r\n curProp,\r\n curVal,\r\n unit,\r\n velocity,\r\n change1,\r\n end,\r\n change2,\r\n linkedProps;\r\n\r\n vars = _processingVars;\r\n _processingVars = 0; //when there are linkedProps (typically \"x,y\" where snapping has to factor in multiple properties, we must first populate an object with all of those end values, then feed it to the function that make any necessary alterations. So the point of this first loop is to simply build an object (like {x:100, y:204.5}) for feeding into that function which we'll do later in the \"real\" loop.\r\n\r\n linkedProps = _processLinkedProps(target, vars, getVal, resistance);\r\n\r\n for (p in vars) {\r\n if (!_reservedProps[p]) {\r\n curProp = vars[p];\r\n _isFunction(curProp) && (curProp = curProp(index, target, targets));\r\n\r\n if (_isNumber(curProp)) {\r\n velocity = curProp;\r\n } else if (_isObject(curProp) && !isNaN(curProp.velocity)) {\r\n velocity = +curProp.velocity;\r\n } else {\r\n if (tracker && tracker.isTracking(p)) {\r\n velocity = tracker.get(p);\r\n } else {\r\n console.warn(\"ERROR: No velocity was defined for \" + target + \" property: \" + p);\r\n }\r\n }\r\n\r\n change1 = _calculateChange(velocity, duration);\r\n change2 = 0;\r\n curVal = getVal(target, p);\r\n unit = _getUnit(curVal);\r\n curVal = parseFloat(curVal);\r\n\r\n if (_isObject(curProp)) {\r\n end = curVal + change1;\r\n\r\n if (\"end\" in curProp) {\r\n curProp = _parseEnd(curProp, linkedProps && p in linkedProps ? linkedProps : end, curProp.max, curProp.min, p, vars.radius);\r\n }\r\n\r\n if (\"max\" in curProp && +curProp.max < end) {\r\n if (preventOvershoot || curProp.preventOvershoot) {\r\n change1 = curProp.max - curVal;\r\n } else {\r\n change2 = curProp.max - curVal - change1;\r\n }\r\n } else if (\"min\" in curProp && +curProp.min > end) {\r\n if (preventOvershoot || curProp.preventOvershoot) {\r\n change1 = curProp.min - curVal;\r\n } else {\r\n change2 = curProp.min - curVal - change1;\r\n }\r\n }\r\n }\r\n\r\n this._props.push(p);\r\n\r\n this._pt = new PropTween(this._pt, target, p, curVal, 0, _emptyFunc, 0, cache.set(target, p, this));\r\n this._pt.u = unit || 0;\r\n this._pt.c1 = change1;\r\n this._pt.c2 = change2;\r\n }\r\n }\r\n\r\n tween.duration(duration);\r\n return _bonusValidated;\r\n },\r\n render: function render(ratio, data) {\r\n var pt = data._pt;\r\n ratio = _power3(data.tween._time / data.tween._dur);\r\n\r\n while (pt) {\r\n pt.set(pt.t, pt.p, _round(pt.s + pt.c1 * ratio + pt.c2 * ratio * ratio) + pt.u, pt.d, ratio);\r\n pt = pt._next;\r\n }\r\n }\r\n};\r\n\"track,untrack,isTracking,getVelocity,getByTarget\".split(\",\").forEach(function (name) {\r\n return InertiaPlugin[name] = VelocityTracker[name];\r\n});\r\n_getGSAP() && gsap.registerPlugin(InertiaPlugin);\r\nexport { InertiaPlugin as default, VelocityTracker };","/**\r\n * @ngdoc directive\r\n * @module components.carousel\r\n * @name components.carousel:carousel\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * Carousel with physics driven animations powered by greensock. Note that it does not currently support infinite scroll.\r\n * @param {array=} slides Data used to manually set the slides included in the carousel.\r\n * @param {number=} slideCount The number of slides to show at once. Defaults to 1 if left empty.\r\n * @param {bool=} auto Causes the carousel to automatically move through its slides if true.\r\n * @param {number=} autoInterval The time in milliseconds before an autoplaying carousel moves to the next slide.\r\n * @param {number=} startSlide The index of the slide to start on.\r\n * @param {function=} onInit Function triggered when the carousel is initialized. Passes the following data to the callback.\r\n * - ctrl: A reference to the carousel object. Used for cases where carousel methods need to be triggered by an external source.\r\n * @param {function=} onSlideChange Function triggered when the current slide changes. Passes the following data to the callback.\r\n * - index: the index of the current slide\r\n * - slide: the data for the current slide\r\n * @param {function=} onEdge Function triggered when attempting to move past the first or last slide. Passes the following data to the callback.\r\n * - direction: 0 if the carousel is moving to the left and 1 if the carousel is moving to the right\r\n * @example\r\n \r\n \r\n
    \r\n \r\n \r\n \r\n

    {{slide.name}}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n (function() {\r\n angular.module('dataExample', ['components.carousel'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n $scope.slides = [];\r\n for (var i=0; i<5; i++) {\r\n $scope.slides.push({\r\n name: 'Slide ' + i,\r\n summary: '

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eu pharetra ex. Curabitur eu nunc id dolor laoreet consectetur nec ornare elit. Vivamus elementum turpis ac mi vehicula fermentum. Morbi eget neque justo. Cras id elit condimentum felis vehicula suscipit. Maecenas sagittis pulvinar ante, eu cursus justo placerat ac. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacus leo, tristique eu nunc a, placerat placerat tortor. Fusce eget consectetur ante. Suspendisse lobortis dui libero. In ac libero vel eros ultricies auctor nec in felis. Vestibulum sed odio orci.

    Curabitur pellentesque lobortis dui, et luctus ex convallis id. Cras scelerisque augue at imperdiet placerat. In diam velit, congue at diam ut, iaculis feugiat turpis. Donec id elit id elit vestibulum semper. Curabitur quis neque quis ipsum ultricies tincidunt vitae varius lectus. Proin at erat vestibulum, hendrerit urna ac, cursus mi. Cras pulvinar at felis vitae gravida. Nunc egestas rhoncus felis, vel vestibulum nisl condimentum quis. Vestibulum quis iaculis elit.

    '\r\n });\r\n }\r\n }\r\n })();\r\n
    \r\n
    \r\n */\r\nimport { InertiaPlugin } from \"../../../scripts/greensock/InertiaPlugin\";\r\ngsap.registerPlugin(InertiaPlugin);\r\nexport default function CarouselComponent(module) {\r\n angular.module(module || 'app')\r\n .component('carousel', {\r\n require: {\r\n parentCarousel: '?^^carousel',\r\n carouselSync: '?^carouselSync',\r\n paginator: '?^bmgPagination'\r\n },\r\n bindings: {\r\n slides: '<',\r\n slideCount: '');\r\n slideContent.html($element.html().replace(/template\\-if/g, 'ng-if'));\r\n ctrl._dragDisabled = slideContent.find('carousel').length > 0 || (ctrl._slideCount && ctrl.slides && ctrl.slides.length <= ctrl._slideCount);\r\n if (ctrl.carouselSync !== null) {\r\n ctrl.carouselSync.registerCarousel(ctrl);\r\n }\r\n\r\n if (ctrl.auto) {\r\n ctrl._nextAutoStep();\r\n }\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.startSlide && ctrl.slides && ctrl.slides.length > 0) {\r\n ctrl.goToSlide(changes.startSlide.currentValue, false);\r\n }\r\n if (changes.slides && changes.slides.currentValue && changes.slides.currentValue.length > 0) {\r\n if (ctrl.circular && changes.slides.currentValue.length < ctrl._slideCount * 2) {\r\n ctrl.slides = changes.slides.currentValue.concat(changes.slides.currentValue);\r\n }\r\n\r\n if (!ctrl.circular) {\r\n ctrl.prevDisabled = !ctrl.index;\r\n ctrl.nextDisabled = ctrl.index >= ctrl.slides.length - ctrl._slideCount;\r\n }\r\n ctrl._angle = 360 / ctrl.slides.length;\r\n $timeout(function () {\r\n ctrl.slideElements = ctrl._slider.find('> .slide');\r\n ctrl._updateWidth();\r\n \r\n if (!ctrl._draggable) {\r\n if (!ctrl._dragDisabled) {\r\n //var sliderWidth = ctrl._slider.width();\r\n //if (ctrl.slides.length > ctrl._slideCount) {\r\n // $element.width(sliderWidth);\r\n //}\r\n ctrl._draggable = Draggable.create(ctrl._dragger, {\r\n type: 'x',\r\n trigger: ctrl._slider,\r\n inertia: true,\r\n lockAxis: true,\r\n edgeResistance: .65,\r\n dragResistance: .1,\r\n throwResistance: .1,\r\n maxDuration: 3,\r\n throwProps: true,\r\n zIndexBoost: false,\r\n onThrowUpdate: ctrl._updatePositions,\r\n onThrowComplete: function () {\r\n if (ctrl.auto) {\r\n ctrl._nextAutoStep();\r\n }\r\n },\r\n snap: function (endValue) {\r\n var width = ctrl.slides.length * ctrl.width;\r\n if (ctrl.circular) {\r\n var pos = ((this.x % width) + width) % width;\r\n ctrl._updateIndex(Math.round(pos / ctrl.width));\r\n var virtualIndex = Math.round(endValue / ctrl.width);\r\n console.log(virtualIndex);\r\n return virtualIndex * ctrl.width;\r\n }\r\n var index = -Math.round((ctrl._slideSpacing ? endValue - Math.floor(endValue / ctrl._slideSpacing) : endValue) / ctrl.width);\r\n ctrl._updateIndex(index);\r\n if (!ctrl.circular) {\r\n $scope.$evalAsync(() => {\r\n ctrl.prevDisabled = ctrl.index === 0;\r\n ctrl.nextDisabled = ctrl.index >= ctrl.slides.length - ctrl._slideCount;\r\n });\r\n }\r\n return -(Math.min(ctrl.index, ctrl.slides.length - ctrl._slideCount)) * ctrl.width - (ctrl.index === 0 ? 0 : ctrl._slideSpacing * (ctrl.index - ctrl._slideCount + 1));\r\n },\r\n onDragStart: function () {\r\n if (ctrl.auto) {\r\n $timeout.cancel(ctrl._autoRunner);\r\n }\r\n },\r\n onDragEnd: function () {\r\n if (ctrl.auto) {\r\n ctrl._nextAutoStep();\r\n }\r\n },\r\n onDrag: ctrl._updatePositions\r\n });\r\n }\r\n }\r\n\r\n if (ctrl.onChange) {\r\n ctrl.onChange({\r\n changes: changes\r\n });\r\n }\r\n })\r\n }\r\n }\r\n\r\n ctrl.$postLink = function () {\r\n var markup = `\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n `;\r\n if ($scope.$destroyed)\r\n return;\r\n var html = angular.element(markup);\r\n ctrl._slides = html.find('.slides');\r\n ctrl._slider = html.find('.slides').find('>div');\r\n html.find('.slide').html(slideContent.find('>slide').html());\r\n html.find('.controls').html(slideContent.find('>controls').html());\r\n ctrl._dragger = html.find('.drag-tracker');\r\n ctrl.previousPosition = 0;\r\n $element.html(html);\r\n $compile($element.contents())($scope);\r\n \r\n\r\n win = $($window)\r\n .on('resize.carousel', ctrl._resize)\r\n .on('changed.zf.mediaquery', ctrl._setSlideCount);\r\n $scope.$on('feedModalOpened', ctrl._resize);\r\n if (ctrl.onInit) {\r\n ctrl.onInit({\r\n ctrl: ctrl\r\n });\r\n }\r\n }\r\n\r\n ctrl._resize = function () {\r\n $timeout.cancel(ctrl._autoRunner);\r\n ctrl.width = (ctrl._slides.width() - ctrl._slideSpacing * (ctrl._slideCount - 1)) * ctrl._slideScale / ctrl._slideCount;\r\n ctrl.positionDraggable(ctrl.index, false);\r\n if (ctrl.auto) {\r\n ctrl._nextAutoStep();\r\n }\r\n }\r\n\r\n ctrl._updateWidth = function () {\r\n ctrl.width = (ctrl._slides.width() - ctrl._slideSpacing * (ctrl._slideCount - 1)) * ctrl._slideScale / ctrl._slideCount;\r\n if (ctrl.slides) {\r\n ctrl._updatePositions();\r\n }\r\n }\r\n\r\n ctrl._nextAutoStep = function () {\r\n $timeout.cancel(ctrl._autoRunner);\r\n ctrl._autoRunner = $timeout(function () {\r\n var targetIndex = ctrl.index + ctrl._slideCount;\r\n var half = Math.floor(ctrl._slideCount / 2);\r\n if (ctrl.index == 0) {\r\n targetIndex += Math.floor(ctrl._slideCount / 2);\r\n }\r\n var max = ctrl.slides.length - ctrl._slideCount + half;\r\n var old = targetIndex;\r\n if (targetIndex > max) {\r\n targetIndex = ctrl.index < max ? max : 0;\r\n }\r\n ctrl.goToSlide(targetIndex, true).then(ctrl._nextAutoStep);\r\n }, ctrl.autoInterval);\r\n }\r\n\r\n ctrl._setSlideCount = function () {\r\n ctrl._slideSpacing = helper.getResponsiveValue(ctrl.modifiers.spacing);\r\n ctrl._slideScale = helper.getResponsiveValue(ctrl.modifiers.slideWidth);\r\n ctrl._slideCount = helper.getResponsiveValue(ctrl.slideCount);\r\n if (ctrl._slideCount === undefined) {\r\n ctrl._slideCount = 1;\r\n }\r\n };\r\n\r\n ctrl._updatePositions = function () {\r\n var isSlideable = ctrl.slides.length > ctrl._slideCount;\r\n var width = ctrl.slides.length * ctrl.width + (ctrl.slides.length - 1) * ctrl._slideSpacing;\r\n var x = this.x || (ctrl._draggable ? parseInt(ctrl._dragger[0]._gsap.x) : 0);\r\n var pos = !isSlideable ? 0 : (ctrl.circular ? ((x % width) + width) % width : (isNaN(x) ? parseInt(x) : x));\r\n gsap.set(ctrl._slider, {\r\n x: pos,\r\n width: width\r\n });\r\n var absPos = Math.abs(pos);\r\n var indexPos = absPos / (ctrl.width + (ctrl._slideSpacing || 0));\r\n var newIndex = Math.round(indexPos);\r\n if (ctrl.index !== newIndex) {\r\n var previousIndex = ctrl.index;\r\n ctrl._updateIndex(newIndex);\r\n if (ctrl.onSlideChange) {\r\n ctrl.onSlideChange({\r\n index: ctrl.index,\r\n previousIndex: previousIndex,\r\n slide: ctrl.slides[ctrl.index],\r\n ctrl: ctrl\r\n });\r\n }\r\n $scope.$broadcast('slideChange', {\r\n index: newIndex,\r\n slide: ctrl.slides[ctrl.index]\r\n });\r\n }\r\n \r\n for (var i = 0; i < ctrl.slideElements.length; i++) {\r\n var slideOffset = 0;\r\n if (ctrl.circular) {\r\n var slide = ctrl.slides[i];\r\n if (isSlideable) {\r\n var angle = ctrl._angle * (indexPos - i);\r\n if (Math.abs(angle) < 90) {\r\n if (!slide._test) {\r\n slide._test = 0;\r\n }\r\n slideOffset = slide._test;\r\n }\r\n else if (angle > 180) {\r\n slide._test = slideOffset = width;\r\n }\r\n else if (angle < -180) {\r\n slide._test = slideOffset = -width;\r\n }\r\n }\r\n }\r\n var baseStyles = {\r\n x: slideOffset,\r\n width: ctrl.width,\r\n marginLeft: i > 0 ? ctrl._slideSpacing + 'px' : 0\r\n };\r\n var newStyles = ctrl.modifiers.slideStyles(i - indexPos, ctrl._slideCount);\r\n TweenLite.set(ctrl.slideElements[i], {\r\n ...baseStyles,\r\n ...newStyles\r\n });\r\n }\r\n\r\n $scope.$broadcast('carouselV2.updated', {\r\n offset: this.x\r\n });\r\n }\r\n\r\n ctrl.handleChildEdgeHit = function (direction) {\r\n if (direction) {\r\n ctrl.nextSlide();\r\n }\r\n else {\r\n ctrl.prevSlide();\r\n }\r\n }\r\n\r\n ctrl.$onDestroy = function () {\r\n win\r\n .off('resize.carousel')\r\n .off('changed.zf.mediaquery');\r\n }\r\n\r\n /*ctrl._registerTransitions = function () {\r\n $transitions.onStart({\r\n to: ctrl.route,\r\n from: function (state) {\r\n return state.name !== ctrl.route;\r\n }\r\n }, function (transition) {\r\n ctrl.targetParams = transition.params('to');\r\n if (!ctrl.blockTransition) {\r\n var deferred = $q.defer();\r\n var target = ctrl.targetParams[ctrl.routeTarget];\r\n if (isNaN(target)) {\r\n ctrl._findIndexByKey(target, 0, deferred)\r\n }\r\n else {\r\n\r\n if (ctrl.parentCarousel) {\r\n if (angular.equals(ctrl.parentCarousel.slides[ctrl.parentCarousel.index].images, ctrl.slides)) {\r\n deferred.resolve(parseInt(target));\r\n }\r\n else {\r\n deferred.reject('Not active sub slide');\r\n }\r\n }\r\n else {\r\n deferred.resolve(parseInt(target));\r\n }\r\n }\r\n deferred.promise.then(function (index) {\r\n if (transition.from().name !== ctrl.route && ctrl.onSlideChange) {\r\n ctrl.onSlideChange({\r\n index: index,\r\n slide: ctrl.slides[index]\r\n });\r\n }\r\n ctrl.goToSlide(index, transition.from().name === ctrl.route && !ctrl.parentCarousel);\r\n });\r\n //return deferred.promise;\r\n }\r\n ctrl.blockTransition = false;\r\n });\r\n if ($state.current.name === ctrl.route) {\r\n ctrl.targetParams = angular.copy($stateParams);\r\n var deferred = $q.defer();\r\n ctrl.indexResolved = deferred.promise;\r\n var target = $stateParams[ctrl.routeTarget];\r\n if (isNaN(target)) {\r\n ctrl._findIndexByKey(target, 0, deferred)\r\n }\r\n else {\r\n if (ctrl.parentCarousel) {\r\n ctrl.parentCarousel.indexResolved.then(function (index) {\r\n if (angular.equals(ctrl.parentCarousel.slides[index].images, ctrl.slides)) {\r\n deferred.resolve(parseInt(target));\r\n }\r\n else {\r\n deferred.reject('Not active sub slide');\r\n }\r\n }).catch(function (response) {\r\n deferred.reject('Parent carousel failed to determine index');\r\n });\r\n }\r\n else {\r\n deferred.resolve(parseInt(target));\r\n }\r\n }\r\n deferred.promise.then(function (index) {\r\n if (ctrl.onSlideChange) {\r\n ctrl.onSlideChange({\r\n index: index,\r\n slide: ctrl.slides[index]\r\n });\r\n }\r\n $timeout(function () {\r\n ctrl.goToSlide(index, false);\r\n });\r\n });\r\n }\r\n }*/\r\n\r\n ctrl._updateIndex = function (index, lockAnimation) {\r\n if (ctrl.onEdge) {\r\n if (index >= ctrl.slides.length) {\r\n ctrl.onEdge({\r\n direction: 1\r\n });\r\n }\r\n else if (index < 0) {\r\n ctrl.onEdge({\r\n direction: -1\r\n });\r\n }\r\n }\r\n index = Math.min(ctrl.slides.length - 1, Math.max(0, index));\r\n if (ctrl.index !== index) {\r\n var previousIndex = ctrl.index;\r\n ctrl.index = index;\r\n if (!ctrl.circular) {\r\n ctrl.prevDisabled = ctrl.index === 0;\r\n ctrl.nextDisabled = ctrl.index >= ctrl.slides.length - ctrl._slideCount;\r\n }\r\n if (ctrl.carouselSync) {\r\n ctrl.carouselSync.updateCarousels(index);\r\n }\r\n if (ctrl.onSlideChange) {\r\n ctrl.onSlideChange({\r\n index: ctrl.index,\r\n previousIndex: previousIndex,\r\n slide: ctrl.slides[index],\r\n ctrl: ctrl\r\n });\r\n }\r\n }\r\n\r\n }\r\n\r\n ctrl.updateSlides = function (data) {\r\n ctrl.prevDisabled = data.rows - 1 < 0;\r\n ctrl.nextDisabled = data.rows - 1 > ctrl.index;\r\n }\r\n\r\n ctrl.goToSlide = function (index, animate) {\r\n ctrl._updateIndex(index);\r\n var animationComplete = ctrl.positionDraggable(ctrl.index, animate);\r\n return animationComplete;\r\n }\r\n\r\n ctrl.prevSlide = function () {\r\n if (ctrl.index === 0 && ctrl.onEdge) {\r\n ctrl.onEdge({\r\n direction: 0\r\n });\r\n }\r\n else {\r\n ctrl.goToSlide(ctrl.index - ctrl._slideCount, true)\r\n }\r\n }\r\n\r\n ctrl.nextSlide = function () {\r\n if (ctrl.index === ctrl.slides.length - 1 && ctrl.onEdge) {\r\n ctrl.onEdge({\r\n direction: 1\r\n });\r\n }\r\n else {\r\n ctrl.goToSlide(ctrl.index + ctrl._slideCount, true);\r\n }\r\n }\r\n\r\n ctrl.positionDraggable = function (targetIndex, animate) {\r\n if (ctrl.slides === null || ctrl.slides.length === undefined)\r\n return;\r\n\r\n var deferred = $q.defer();\r\n if (ctrl._slider) {\r\n if (animate) {\r\n if (!ctrl._dragDisabled)\r\n ctrl._draggable[0].disable();\r\n var pos = parseInt(ctrl._dragger[0]._gsap.x);\r\n var maxIndex = ctrl.slides.length - ctrl._slideCount;\r\n var end = -Math.max(0, Math.min(ctrl.slides.length - ctrl._slideCount, targetIndex)) * (ctrl.width + ctrl._slideSpacing);\r\n var velocity = ctrl._slides.width();\r\n if (targetIndex >= maxIndex || end < pos) {\r\n velocity = -velocity;\r\n }\r\n gsap.to(ctrl._dragger, {\r\n inertia: {\r\n x: {\r\n velocity: velocity,\r\n end: end\r\n }\r\n },\r\n onUpdate: ctrl._updatePositions,\r\n onComplete: function () {\r\n if (!ctrl._dragDisabled) {\r\n ctrl._draggable[0].update();\r\n ctrl._draggable[0].enable();\r\n }\r\n deferred.resolve();\r\n }\r\n });\r\n }\r\n else {\r\n gsap.set(ctrl._dragger, {\r\n x: -Math.max(0, Math.min(ctrl.slides.length - ctrl._slideCount, targetIndex)) * (ctrl.width + ctrl._slideSpacing)\r\n });\r\n ctrl._updatePositions();\r\n if (!ctrl._dragDisabled) {\r\n ctrl._draggable[0].update();\r\n }\r\n deferred.resolve();\r\n }\r\n }\r\n else {\r\n deferred.resolve();\r\n }\r\n return deferred.promise;\r\n }\r\n }\r\n}","import WidgetUtility from '../shared/widget-utility';\r\n\r\nclass ProductsByCategory {\r\n constructor(container) {\r\n if (typeof (container) === 'string') {\r\n this.selector = container;\r\n }\r\n else if (container instanceof NodeList) {\r\n this.containers = Array.from(container);\r\n }\r\n else {\r\n this.container = [container];\r\n }\r\n }\r\n\r\n init() {\r\n if (this.selector) {\r\n this.containers = Array.from(document.querySelectorAll(this.selector));\r\n }\r\n this.containers.forEach(container => {\r\n var groups = container.querySelectorAll('.category-group');\r\n Array.from(groups).forEach(group => {\r\n var group = new CategoryGroup(group);\r\n group.init();\r\n })\r\n })\r\n }\r\n}\r\n\r\nclass CategoryGroup {\r\n constructor(element) {\r\n this.element = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n\r\n }\r\n\r\n init() {\r\n this.controls = this.element.querySelector('.controls');\r\n this.tabs = Array.from(this.element.querySelectorAll('.underline-link'));\r\n this.summaries = Array.from(this.element.querySelectorAll('.summary'));\r\n this.backgrounds = Array.from(this.element.querySelectorAll('.background > img'));\r\n this.carouselContainers = Array.from(this.element.querySelectorAll('.products-container'));\r\n this.carousels = Array.from(this.element.querySelectorAll('.products > ul'));\r\n this.index = 0;\r\n this._items = Array.from(this.carousels[this.index].querySelectorAll('li'));\r\n this.tabs.forEach(tab => {\r\n tab.addEventListener('click', this.switchCategory.bind(this));\r\n });\r\n this.prevButton = this.element.querySelector('.circle-button--previous');\r\n this.prevButton.addEventListener('click', this._shiftLeft.bind(this));\r\n this.nextButton = this.element.querySelector('.circle-button--next');\r\n this.nextButton.addEventListener('click', this._shiftRight.bind(this));\r\n window.addEventListener('DOMContentLoaded', () => {\r\n this._findViewpointIndexes();\r\n this._updateNavigationVisibility();\r\n if (!this.nextButton.classList.contains('disabled')) {\r\n this.controls.style.display = 'inherit';\r\n }\r\n });\r\n window.addEventListener('resize', this._handleResize.bind(this));\r\n }\r\n _handleResize() {\r\n this._findViewpointIndexes();\r\n this._updateNavigationVisibility();\r\n }\r\n\r\n switchCategory(event) {\r\n if (!this._locked) {\r\n this._locked = true;\r\n var parent = event.target.parentNode;\r\n var index = Array.from(parent.parentNode.children).indexOf(parent);\r\n var activeItems = this._getAnimationElements(this.index);\r\n var targetItems = this._getAnimationElements(index);\r\n activeItems.tab.classList.remove('active');\r\n targetItems.tab.classList.add('active');\r\n var tl = new TimelineLite({\r\n onComplete: function () {\r\n this._locked = false;\r\n activeItems.background.classList.remove('active');\r\n activeItems.itemsContainer.classList.remove('active');\r\n activeItems.summary.classList.remove('active');\r\n targetItems.background.classList.add('active');\r\n targetItems.itemsContainer.classList.add('active');\r\n targetItems.summary.classList.add('active');\r\n gsap.set([activeItems.background, activeItems.summary, activeItems.carousel, activeItems.button], { clearProps: 'all' });\r\n if (activeItems.items.length) {\r\n gsap.set([activeItems.background, activeItems.summary, activeItems.carousel, activeItems.button, activeItems.items], { clearProps: 'all' });\r\n }\r\n gsap.set([targetItems.background, targetItems.summary, targetItems.label, targetItems.visibleItems, targetItems.button, this.prevButton, this.nextButton], { clearProps: 'all' });\r\n if (targetItems.items.length) {\r\n gsap.set([targetItems.background, targetItems.summary, targetItems.carousel, targetItems.button], { clearProps: 'all' });\r\n }\r\n this._items = targetItems.items;\r\n this._findViewpointIndexes();\r\n this._updateNavigationVisibility();\r\n }.bind(this)\r\n })\r\n .set(targetItems.background, { display: 'inherit' })\r\n .addLabel('start')\r\n .to([this.prevButton, this.nextButton], { autoAlpha: 0, duration: .4 })\r\n .fromTo(activeItems.background, { zIndex: 2, autoAlpha: 1, x: 0 }, { autoAlpha: 0, x: 200, duration: 1 }, 'start')\r\n .to(activeItems.summary, { x: 100, autoAlpha: 0, duration: .5 }, '-=.8')\r\n .to(activeItems.label, { x: 100, autoAlpha: 0, duration: .5 }, '-=.4')\r\n .set(targetItems.itemsContainer, { display: 'inherit' })\r\n .set(targetItems.summary, { display: 'inherit' })\r\n .addLabel('summary')\r\n if (activeItems.visibleItems.length) {\r\n tl.staggerTo(activeItems.visibleItems, .3, { x: 100, autoAlpha: 0 }, .05, '-=.4')\r\n }\r\n tl\r\n .fromTo(activeItems.button, { x: 0, autoAlpha: 1 }, { x: 64, autoAlpha: 0, duration: .3 }, '-=.1')\r\n .fromTo(targetItems.summary, { x: -100, autoAlpha: 0 }, { x: 0, autoAlpha: 1, duration: .5 }, 'summary')\r\n .fromTo(targetItems.label, { x: -100, autoAlpha: 0 }, { x: 0, autoAlpha: 1, duration: .5 }, '-=.4')\r\n .staggerFrom(targetItems.visibleItems, .3, { x: -50, autoAlpha: 0 }, .05, '-=.4')\r\n .addLabel('carouselReady')\r\n .set(this.controls, { display: targetItems.showControls ? 'block' : 'none' });\r\n if (targetItems.showControls) {\r\n tl.to([this.prevButton, this.nextButton], { autoAlpha: 1, duration: .4 });\r\n }\r\n tl.fromTo(targetItems.button, { x: -64, autoAlpha: 0 }, { x: 0, autoAlpha: 1, duration: .2 }, 'carouselReady-=.2');\r\n this.index = index;\r\n }\r\n }\r\n\r\n _getAnimationElements(index) {\r\n var carouselContainer = this.carouselContainers[index];\r\n carouselContainer.style.display = 'inherit';\r\n var allItems = Array.from(carouselContainer.querySelectorAll('li'));\r\n var docWidth = document.documentElement.clientWidth;\r\n var items = Array.from(allItems).filter(node => {\r\n var rect = node.getBoundingClientRect();\r\n return rect.left > -rect.width && rect.right < docWidth + rect.width;\r\n });\r\n carouselContainer.style.display = '';\r\n return {\r\n showControls: allItems.length !== items.length,\r\n tab: this.tabs[index],\r\n background: this.backgrounds[index],\r\n label: carouselContainer.querySelector('h5'),\r\n carousel: this.carousels[index],\r\n items: allItems,\r\n visibleItems: items,\r\n itemsContainer: carouselContainer,\r\n summary: this.summaries[index],\r\n button: carouselContainer.querySelector('.button-container')\r\n }\r\n }\r\n\r\n _shiftLeft() {\r\n this._shift(1);\r\n }\r\n\r\n _shiftRight() {\r\n this._shift(-1);\r\n }\r\n\r\n _shift(direction) {\r\n if (!this._locked) {\r\n this._locked = true;\r\n var currentCarousel = this.carouselContainers[this.index].querySelector('.products');\r\n var containerEdge = currentCarousel.getBoundingClientRect().left;\r\n var list = this.carousels[this.index];\r\n var leftShiftMax = currentCarousel.clientWidth - this._items[this._items.length - 1].getBoundingClientRect().right;\r\n var shift, oldShift;\r\n shift = oldShift = list._gsap ? parseInt(list._gsap.x) : 0;\r\n if (direction === 1) {\r\n var left = document.documentElement.clientWidth - this._items[this.leftEdge].getBoundingClientRect().right;\r\n var offset = left;\r\n for (var i = this.leftEdge - 1; i >= 0; i--) {\r\n var newOffset = containerEdge - this._items[i].getBoundingClientRect().left;\r\n if (newOffset <= left) {\r\n offset = newOffset;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n shift = Math.min(0, shift + offset);\r\n }\r\n else {\r\n var right = containerEdge - this._items[this.rightEdge].getBoundingClientRect().left;\r\n shift += Math.max(right, leftShiftMax);\r\n }\r\n if (shift === 0) {\r\n this.prevButton.classList.add('disabled');\r\n }\r\n else {\r\n this.prevButton.classList.remove('disabled');\r\n }\r\n if (oldShift + leftShiftMax === shift) {\r\n\r\n this.nextButton.classList.add('disabled');\r\n }\r\n else {\r\n this.nextButton.classList.remove('disabled');\r\n }\r\n TweenLite.to(list, .5, {\r\n x: shift,\r\n onComplete: function () {\r\n this._locked = false;\r\n this._findViewpointIndexes();\r\n }.bind(this)\r\n });\r\n }\r\n }\r\n\r\n\r\n _findViewpointIndexes() {\r\n var found = false;\r\n var lastFound = false;\r\n var docWidth = document.documentElement.clientWidth;\r\n for (var i = 0; i < this._items.length; i++) {\r\n var rect = this._items[i].getBoundingClientRect();\r\n if (rect.left >= 0 && rect.right <= docWidth) {\r\n if (!found) {\r\n this.leftEdge = Math.max(i - 1, 0);\r\n found = true;\r\n }\r\n }\r\n else if (found) {\r\n this.rightEdge = i;\r\n lastFound = true;\r\n break;\r\n }\r\n\r\n }\r\n if (!lastFound) {\r\n this.rightEdge = this._items.length - 1;\r\n }\r\n }\r\n\r\n _updateNavigationVisibility() {\r\n if (this.leftEdge === 0) {\r\n this.prevButton.classList.add('disabled');\r\n }\r\n else {\r\n this.prevButton.classList.remove('disabled');\r\n }\r\n if (this.rightEdge === this._items.length - 1) {\r\n this.nextButton.classList.add('disabled');\r\n }\r\n else {\r\n this.nextButton.classList.remove('disabled');\r\n }\r\n }\r\n}\r\n\r\nexport { ProductsByCategory as default, CategoryGroup };","export default class Revealer {\r\n constructor(element) {\r\n this.trigger = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n this.container = this.trigger.parentNode.querySelector('.reveal-container');\r\n this.items = Array.from(this.container.querySelectorAll('.reveal-target'));\r\n }\r\n\r\n init() {\r\n this.trigger.addEventListener('click', this.reveal.bind(this));\r\n }\r\n\r\n reveal() {\r\n var startHeight = this.container.clientHeight;\r\n this.items.forEach(item => {\r\n item.classList.remove('reveal-target');\r\n });\r\n gsap.timeline()\r\n .set(this.trigger, { display: 'none' })\r\n .fromTo(this.container, { height: startHeight }, { height: this.container.clientHeight, duration: .6 });\r\n\r\n }\r\n}","export default class Zoomer {\r\n constructor(options) {\r\n if (options.trigger) {\r\n this.trigger = typeof (options.trigger) === 'string' ? document.querySelector(options.trigger) : options.trigger;\r\n }\r\n this.images = Array.from(typeof (options.image) === 'string' ? document.querySelectorAll(options.images) : options.images);\r\n this.aligner = typeof (options.trigger) === 'string' ? document.querySelector(options.aligner) : options.aligner;\r\n }\r\n\r\n init() {\r\n this.imageSizes = {};\r\n this._createElements();\r\n if (this.trigger) {\r\n this.enabled = false;\r\n this.trigger.addEventListener('click', this.toggle.bind(this));\r\n }\r\n else {\r\n this.enable();\r\n }\r\n }\r\n\r\n _createElements() {\r\n this.zoomPanel = document.createElement('div');\r\n this.zoomPanel.classList.add('zoom-panel');\r\n this.overlays = [];\r\n this.overlayMarkers = [];\r\n document.body.appendChild(this.zoomPanel);\r\n this.images.forEach((image, i) => {\r\n image.event = this.revealZoomedView.bind(this);\r\n var overlay = image.closest('.zoom-overlay-container');\r\n overlay.addEventListener('mouseleave', function (event) {\r\n this.hideZoomedView(i);\r\n }.bind(this));\r\n overlay.addEventListener('mousemove', function(event) {\r\n this._positionZoom(event, i);\r\n }.bind(this));\r\n\r\n var overlayMarker = document.createElement('div');\r\n overlayMarker.classList.add('zoom-overlay');\r\n overlay.appendChild(overlayMarker);\r\n this.overlays.push(overlay);\r\n this.overlayMarkers.push(overlayMarker);\r\n });\r\n }\r\n\r\n toggle() {\r\n if (this.enabled) {\r\n this.disable();\r\n }\r\n else {\r\n this.enable();\r\n }\r\n }\r\n\r\n enable() {\r\n if (this.trigger) {\r\n this.trigger.classList.add('active');\r\n }\r\n this.images.forEach(image => {\r\n image.addEventListener('mouseenter', image.event);\r\n });\r\n this.enabled = true;\r\n }\r\n\r\n disable() {\r\n if (this.trigger) {\r\n this.trigger.classList.remove('active');\r\n }\r\n this.images.forEach(image => {\r\n image.removeEventListener('mouseenter', image.event);\r\n });\r\n this.enabled = false;\r\n }\r\n\r\n revealZoomedView(event) {\r\n var image = event.target;\r\n var index = this.images.indexOf(image);\r\n var pos = image.getBoundingClientRect();\r\n var alignRect = this.aligner.getBoundingClientRect();\r\n if ((pos.left + pos.right) / 2 > (document.body.clientWidth / 2)) {\r\n this.zoomPanel.style.width = (alignRect.width + alignRect.x - 16) + \"px\";\r\n this.zoomPanel.style.left = \"16px\";\r\n }\r\n else {\r\n this.zoomPanel.style.width = (document.body.clientWidth - 16 - alignRect.x) + \"px\";\r\n this.zoomPanel.style.left = alignRect.x + \"px\";\r\n }\r\n var source = image.src;\r\n var queryPoint = source.indexOf(\"?\");\r\n if (queryPoint > -1) {\r\n source = image.src.substring(0, queryPoint);\r\n }\r\n this.imageSize = {\r\n width: image.clientWidth,\r\n height: image.clientHeight\r\n };\r\n this._getImage(source)\r\n .then(zoomedSize => {\r\n this.zoomedSize = zoomedSize;\r\n if (this.imageSize.width < this.zoomedSize.width || this.imageSize.height < this.zoomedSize.height) {\r\n this.zoomPanel.style.backgroundImage = 'url(\"' + source + '\")';\r\n\r\n this.zoomPanel.classList.add('active');\r\n this._updateOverlay(event, index);\r\n }\r\n });\r\n }\r\n\r\n _getImage(url) {\r\n return new Promise((resolve, reject) => {\r\n if (this.imageSizes[url]) {\r\n resolve(this.imageSizes[url]);\r\n }\r\n else {\r\n var image = new Image();\r\n image.onload = function() {\r\n var dimensions = {\r\n width: image.width,\r\n height: image.height\r\n };\r\n this.imageSizes[url] = dimensions;\r\n resolve(dimensions);\r\n }.bind(this);\r\n image.onerror = (error) => {\r\n reject(error);\r\n };\r\n image.src = url;\r\n }\r\n });\r\n }\r\n\r\n _updateOverlay(event, index) {\r\n var marker = this.overlayMarkers[index];\r\n var overlay = this.overlays[index];\r\n var image = this.images[index];\r\n overlay.style.height = (image.clientHeight * 100 / overlay.parentNode.clientHeight) + '%';\r\n overlay.classList.add('active');\r\n var ratio = this._getRatio();\r\n marker.style.width = ratio.x * 100 + '%';\r\n marker.style.height = ratio.y * 100 + '%';\r\n this._positionZoom(event, index);\r\n }\r\n\r\n _getRatio() {\r\n if (!this.zoomedSize) {\r\n return null;\r\n }\r\n return {\r\n x: Math.min(this.zoomPanel.clientWidth / this.zoomedSize.width, 1),\r\n y: Math.min(this.zoomPanel.clientHeight / this.zoomedSize.height, 1)\r\n };\r\n }\r\n\r\n _positionZoom(event, index) {\r\n window.requestAnimationFrame(function () {\r\n var ratio = this._getRatio();\r\n if (!ratio) {\r\n return;\r\n }\r\n var edgeLimit = {\r\n x: 1 - ratio.x,\r\n y: 1 - ratio.y\r\n }\r\n var center = {\r\n x: ratio.x / 2,\r\n y: ratio.y / 2\r\n }\r\n\r\n var pos;\r\n if (event.offsetX) {\r\n pos = {\r\n x: event.offsetX / this.imageSize.width,\r\n y: event.offsetY / this.imageSize.height\r\n };\r\n }\r\n else {\r\n var overlayRect = this.overlays[index].getBoundingClientRect();\r\n pos = {\r\n x: (event.pageX - overlayRect.x) / this.imageSize.width,\r\n y: (event.pageY - overlayRect.y) / this.imageSize.height\r\n }\r\n }\r\n var offset = {\r\n x: Math.min(Math.max(0, pos.x - center.x), edgeLimit.x),\r\n y: Math.min(Math.max(0, pos.y - center.y), edgeLimit.y)\r\n }\r\n this.overlayMarkers[index].style.transform = 'translate(' + (offset.x * this.imageSize.width) + 'px,' + (offset.y * this.imageSize.height) + 'px)';\r\n this.zoomPanel.style.backgroundPosition = (-offset.x * this.zoomedSize.width) + 'px ' + (-offset.y * this.zoomedSize.height) + 'px';\r\n }.bind(this));\r\n }\r\n\r\n hideZoomedView(index) {\r\n this.overlays[index].classList.remove('active');\r\n this.zoomPanel.classList.remove('active');\r\n }\r\n}","class Brands {\r\n constructor(element) {\r\n this.container = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n }\r\n\r\n init() {\r\n this._rightAligned = !!this.container.querySelector('.right-aligned');\r\n this.triggers = this.container.querySelectorAll('.brand-trigger');\r\n this.targetContainer = this.container.querySelector('.brand-target-container');\r\n this.tabBackgrounds = this.container.querySelectorAll('.tab-background');\r\n this.targets = this.targetContainer.querySelectorAll('.brand-target');\r\n this.tabs = Array.from(this.container.querySelectorAll('.brand-tab'));\r\n this.targetId = this.container.querySelector('[target-id]').getAttribute('target-id');\r\n this.modal = document.querySelector('#' + this.targetId);\r\n this.modalContainer = this.modal.querySelector('.message');\r\n this.triggers.forEach(trigger => {\r\n trigger.addEventListener('click', function () {\r\n this._triggerSwitch(trigger);\r\n }.bind(this));\r\n });\r\n\r\n this.tabs.forEach(tab => {\r\n tab.addEventListener('click', function () {\r\n this._filterTargets(tab);\r\n }.bind(this));\r\n });\r\n this._setHeight();\r\n window.addEventListener('resize', this._setHeight.bind(this));\r\n this._currentTrigger = 0;\r\n this._currentTab = 0;\r\n }\r\n\r\n _triggerSwitch(element) {\r\n var parent = element.parentNode;\r\n var index = Array.from(parent.parentNode.children).indexOf(parent);\r\n this._switchBrand(index);\r\n }\r\n\r\n _switchBrand(index) {\r\n if (!this._locked) {\r\n var isLarge = Foundation.MediaQuery.atLeast('large');\r\n if (index !== this._currentTrigger || !isLarge) {\r\n this._locked = true;\r\n this.triggers[this._currentTrigger].classList.remove('active');\r\n this.triggers[index].classList.add('active');\r\n if (isLarge) {\r\n var tl = new TimelineLite({\r\n onComplete: function () {\r\n this._currentTrigger = index;\r\n this._locked = false;\r\n }.bind(this)\r\n })\r\n .set(this.targets[index], { display: 'block' })\r\n .addLabel('start')\r\n .to(this.targets[this._currentTrigger], { x: this._rightAligned ? '-50%' : '50%', autoAlpha: 0, duration: .4 }, 'start')\r\n .fromTo(this.targets[index], { x: this._rightAligned ? '10%' : '-10%', autoAlpha: 0 }, { x: '0%', autoAlpha: 1, duration: .4, delay: -.2 });\r\n }\r\n else {\r\n this.modalContainer.innerHTML = this.targets[index].innerHTML;\r\n $(this.modal).foundation('open');\r\n this._currentTrigger = index;\r\n this._locked = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _setHeight() {\r\n if (this.tabs.length) {\r\n var text = this.container.querySelector('.text');\r\n text.style.height = '';\r\n var hiddens = Array.from(this.container.querySelectorAll('.hidden'));\r\n hiddens.forEach(hidden => {\r\n hidden.classList.remove('hidden');\r\n });\r\n text.style.height = text.clientHeight + 'px';\r\n hiddens.forEach(hidden => {\r\n hidden.classList.add('hidden');\r\n });\r\n }\r\n var info = this.container.querySelector('.brand-info');\r\n info.style.height = '';\r\n if (Foundation.MediaQuery.atLeast('large')) {\r\n var maxHeight = 0;\r\n this.targets.forEach(target => {\r\n target.style.display = 'block';\r\n maxHeight = Math.max(target.clientHeight, maxHeight);\r\n target.style.display = '';\r\n });\r\n info.style.height = (maxHeight + 102) + 'px';\r\n }\r\n }\r\n\r\n _filterTargets(tab) {\r\n if (!this._locked) {\r\n var parent = tab.parentNode;\r\n var index = Array.from(parent.parentNode.children).indexOf(parent);\r\n if (index != this._currentTab) {\r\n var targetClass = tab.getAttribute(\"target-class\");\r\n var notHidden;\r\n var currentHidden = false;\r\n this.tabs.forEach((tab, i) => {\r\n if (i === index) {\r\n tab.classList.add('active');\r\n }\r\n else {\r\n tab.classList.remove('active');\r\n }\r\n });\r\n this.triggers.forEach((trigger, i) => {\r\n var parent = trigger.parentNode;\r\n if (parent.classList.contains(targetClass)) {\r\n parent.classList.remove('hidden');\r\n if (notHidden === undefined) {\r\n notHidden = i\r\n }\r\n }\r\n else {\r\n parent.classList.add('hidden');\r\n if (i === this._currentTrigger) {\r\n currentHidden = true;\r\n }\r\n }\r\n });\r\n if (Foundation.MediaQuery.atLeast('large')) {\r\n if (currentHidden) {\r\n this._switchBrand(notHidden);\r\n }\r\n if (this.tabBackgrounds && this.tabBackgrounds.length) {\r\n var tl = new TimelineLite({\r\n onComplete: function () {\r\n gsap.set(this.tabBackgrounds[this._currentTab], { clearProps: 'zIndex,opacity,visibility,x,display' });\r\n this._currentTab = index;\r\n }.bind(this)\r\n })\r\n .set(this.tabBackgrounds[index], { display: 'inherit' })\r\n .fromTo(this.tabBackgrounds[this._currentTab], { zIndex: 2, autoAlpha: 1, x: 0 }, { autoAlpha: 0, x: 200, duration: .5 }, 'start')\r\n }\r\n }\r\n else {\r\n this._currentTab = index;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { Brands as default };","class Services {\r\n constructor(element) {\r\n this.container = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n }\r\n\r\n init() {\r\n this.tiles = Array.from(this.container.querySelectorAll('.tile'));\r\n if (Foundation.MediaQuery.atLeast('medium')) {\r\n this.tiles.forEach(tile => {\r\n var hiddenBlock = tile.querySelector('.hidden-block');\r\n hiddenBlock.style.display = 'block';\r\n hiddenBlock.style.marginBottom = -hiddenBlock.clientHeight + 'px';\r\n tile.addEventListener('mouseenter', () => {\r\n if (!tile._timeline) {\r\n var icon = tile.querySelector('.icon');\r\n var hiddenBlock = tile.querySelector('.hidden-block');\r\n hiddenBlock.style.display = 'block';\r\n tile._timeline = gsap.timeline()\r\n .addLabel('start');\r\n if (icon) {\r\n tile._timeline\r\n .to(icon, { marginTop: -(icon.clientHeight + parseInt(getComputedStyle(icon).marginBottom)), autoAlpha: 0, duration: .3 });\r\n }\r\n tile._timeline.to(hiddenBlock, { autoAlpha: 1, marginBottom: 0, duration: .3 }, 'start');\r\n }\r\n else {\r\n tile._timeline.play();\r\n }\r\n });\r\n tile.addEventListener('mouseleave', () => {\r\n tile._timeline.reverse();\r\n })\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport { Services as default };","export default class SearchClearer {\r\n constructor(element) {\r\n this.trigger = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n this.input = this.trigger.querySelector(('input[type=\"text\"]'));\r\n this.crossButton = this.trigger.querySelector('button');\r\n this.submitButton = this.trigger.querySelector('button[type=\"submit\"]');\r\n this.scopeValue = undefined;\r\n this.lastPropertyName = undefined;\r\n }\r\n init() {\r\n this.input.addEventListener('input', this.searchclearer.bind(this));\r\n this.crossButton.addEventListener('click', this.clearText.bind(this));\r\n this.input.addEventListener('load', this.pageLoad.bind(this));\r\n\r\n window.addEventListener(\"load\", this.pageLoad.bind(this));\r\n }\r\n\r\n searchclearer(e) {\r\n if (e.target.value.length > 0)\r\n this.crossButton.style.display = 'block';\r\n else\r\n this.crossButton.style.display = 'none';\r\n }\r\n\r\n clearText() {\r\n this.crossButton.click();\r\n this.crossButton.style.display = 'none';\r\n\r\n if (!this.crossButton.className.includes(\"clear-not-submit\") && this.input.attributes[\"ng-model\"]) {\r\n let parts = this.input.attributes[\"ng-model\"].value.split('.');\r\n this.lastPropertyName = parts[parts.length - 1];\r\n let scope = $(this.input).scope();\r\n this.scopeValue = scope;\r\n for (let i = 0; i < parts.length - 1; i++) {\r\n this.scopeValue = scope[parts[i]]; //this.scopeValue will hold last property object here\r\n }\r\n this.scopeValue[this.lastPropertyName] = undefined; //it will clear last property value\r\n scope.$apply(); //this tells angular to update all the bindings with the new data\r\n this.submitButton.click();\r\n this.input.focus();\r\n }\r\n else {\r\n this.input.value = '';\r\n this.input.focus();\r\n }\r\n }\r\n\r\n pageLoad() {\r\n if (this.input.value.length > 0)\r\n this.crossButton.style.display = 'block';\r\n else\r\n this.crossButton.style.display = 'none';\r\n }\r\n}","class PageBoxLinks {\r\n constructor(element) {\r\n this.container = typeof (element) === 'string' ? document.querySelector(element) : element;\r\n }\r\n\r\n init() {\r\n this.boxes = this.container.querySelectorAll('.outer');\r\n this.boxes.forEach(box => {\r\n var trigger = box.querySelector('.show-more');\r\n if (trigger) {\r\n trigger.addEventListener('click', () => {\r\n this._showMore(box, trigger)\r\n })\r\n }\r\n });\r\n }\r\n\r\n _showMore(box, trigger) {\r\n var hiddenItems = box.querySelectorAll('.cell.hidden');\r\n var revealCount = Math.min(hiddenItems.length, 6);\r\n for (var i = 0; i < revealCount; i++) {\r\n hiddenItems[i].classList.remove('hidden');\r\n }\r\n if (hiddenItems.length <= 6) {\r\n trigger.parentElement.classList.add('hidden');\r\n var link = box.querySelector('.show-after');\r\n if (link) {\r\n link.classList.remove('hidden');\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { PageBoxLinks as default };","import { Shifter } from './shifter';\r\nimport { Suggestor } from './suggestor';\r\nimport { createAutocomplete } from '@algolia/autocomplete-core';\r\nimport algoliasearch from 'algoliasearch/lite';\r\nimport { autocomplete, getAlgoliaResults } from '@algolia/autocomplete-preset-algolia';\r\nimport { setProperties } from '@algolia/autocomplete-js/dist/esm/utils/setProperties';\r\n\r\nexport default function Header() {\r\n var header = document.querySelector('#header');\r\n\r\n var shifter = new Shifter(header.querySelector('.shifter'));\r\n shifter.init();\r\n header.querySelector('#menu-toggle').addEventListener('click', () => {\r\n document.body.classList.toggle('menu-open');\r\n document.body.classList.remove('languages-open');\r\n if (!document.body.classList.contains('menu-open')) {\r\n shifter.reset();\r\n }\r\n });\r\n header.querySelector('#language-toggle').addEventListener('click', () => {\r\n document.body.classList.toggle('languages-open');\r\n document.body.classList.remove('menu-open');\r\n shifter.reset();\r\n });\r\n header.querySelector('.mobile-overlay').addEventListener('click', () => {\r\n document.body.classList.remove('menu-open');\r\n document.body.classList.remove('languages-open');\r\n shifter.reset();\r\n });\r\n\r\n var searchForm = header.querySelector('.expandable.search');\r\n\r\n var searchClient = algoliasearch(\r\n 'YF1VQF76E2',\r\n '9f3e3de34ee1ce14cdf44f61f2c15fb6'\r\n );\r\n var items = [];\r\n\r\n var suggestor = new Suggestor({\r\n element: searchForm.querySelector('.suggestor'),\r\n callback: (value) => {\r\n searchInput.value = value;\r\n searchForm.submit();\r\n }\r\n });\r\n\r\n var searchInput = header.querySelector('.expandable.search input');\r\n searchInput.addEventListener('blur', event => {\r\n suggestor.hide();\r\n });\r\n\r\n var autocomplete = createAutocomplete({\r\n onStateChange(state) {\r\n var items = null;\r\n if (state.state.collections.length && state.state.query) {\r\n items = [];\r\n for (var i = 0; i < state.state.collections[0].items.length; i++) {\r\n var item = state.state.collections[0].items[i];\r\n var skuFound = false;\r\n if (item.skus && item.skus.length) {\r\n for (var j = 0; j < item.skus.length; j++) {\r\n if (item.skus[j].indexOf(state.state.query) > -1) {\r\n items.push(item.skus[j]);\r\n skuFound = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!skuFound) {\r\n items.push(item.name);\r\n }\r\n }\r\n }\r\n suggestor.updateSuggestions(state.state.query, items);\r\n },\r\n getSources() {\r\n return [\r\n {\r\n sourceId: 'querySuggestions',\r\n getItemInputValue: (item) => item.query,\r\n getItems(data) {\r\n return getAlgoliaResults({\r\n searchClient,\r\n queries: [\r\n {\r\n indexName: window.searchIndex,\r\n query: data.query,\r\n params: {\r\n filters: 'NOT contentTypeAlias:document AND cultures:' + window.currentCulture.toLowerCase(),\r\n hitsPerPage: 5,\r\n highlightPreTag: '',\r\n highlightPostTag: ''\r\n }\r\n }\r\n ]\r\n })\r\n },\r\n getItemUrl(item) {\r\n return item.url;\r\n }\r\n }\r\n ]\r\n }\r\n });\r\n const { getEnvironmentProps } = autocomplete;\r\n const { onTouchStart, onTouchMove, onMouseDown } = getEnvironmentProps({\r\n formElement: searchForm,\r\n inputElement: searchInput,\r\n });\r\n window.addEventListener('mousedown', onMouseDown);\r\n window.addEventListener('touchstart', onTouchStart);\r\n window.addEventListener('touchmove', onTouchMove);\r\n //console.log(autocomplete.getFormProps());\r\n //setProperties(searchForm, autocomplete.getFormProps());\r\n setProperties(searchInput, autocomplete.getInputProps({ type: 'text', placeholder: searchInput.getAttribute(\"placeholder\") }));\r\n}","import Header from './shared/header';\r\nimport App from '../angular/app';\r\nimport ProductsByCategory from './widgets/products-by-category';\r\nimport Revealer from './shared/revealer';\r\nimport Zoomer from './shared/zoomer';\r\nimport Brands from './widgets/brands';\r\nimport Services from './widgets/services';\r\nimport SearchClearer from './shared/searchclearer';\r\nimport PageBoxLinks from './widgets/page-box-links';\r\nHeader();\r\nApp();\r\nvar productsByCategory = new ProductsByCategory('.widget-products-by-category');\r\nproductsByCategory.init();\r\nvar revealers = Array.from(document.querySelectorAll('.revealer'));\r\nrevealers.forEach(revealer => {\r\n var item = new Revealer(revealer);\r\n item.init();\r\n});\r\n\r\n// external redirect\r\n$(document).on(\"click\", \"a[target='_blank']:not(.leave-website)\", function (e) {\r\n var href = e.currentTarget.href;\r\n var hostUrl = window.location.origin;\r\n var modal = $(\"#leave-message\");\r\n if (!href.includes(hostUrl) && modal.find($(e.currentTarget)).length == 0) {\r\n e.preventDefault();\r\n modal.find(\"a[target='_blank']\").attr(\"href\", href);\r\n var spanTag = \"\" + href + \"\";\r\n if (modal.html().includes(\"{url}\")) {\r\n modal.html(modal.html().replace(/{url}/g, spanTag));\r\n }\r\n else {\r\n modal.find(\".external-url\").text(href);\r\n }\r\n modal.foundation('open');\r\n }\r\n});\r\n\r\n// SearchClearer \r\nvar SearchClearers = Array.from(document.querySelectorAll('.clear-search'));\r\nSearchClearers.forEach(searcher => {\r\n var item = new SearchClearer(searcher);\r\n item.init();\r\n});\r\nvar productIntro = document.querySelector('.widget-intro.variant-product');\r\nif (productIntro) {\r\n var zoomer = new Zoomer({\r\n trigger: productIntro.querySelector('.zoomer'),\r\n aligner: productIntro.querySelector('.product-info'),\r\n images: productIntro.querySelectorAll('.product-image img')\r\n });\r\n zoomer.init();\r\n}\r\nvar brands = Array.from(document.querySelectorAll('.widget-brands.variant-brands'));\r\nbrands.forEach(brand => {\r\n var item = new Brands(brand);\r\n item.init();\r\n})\r\nvar services = Array.from(document.querySelectorAll('.widget-services'));\r\nservices.forEach(service => {\r\n var item = new Services(service);\r\n item.init();\r\n})\r\n\r\nvar pageBoxLinks = Array.from(document.querySelectorAll('.widget-page-box-links'));\r\npageBoxLinks.forEach(box => {\r\n var item = new PageBoxLinks(box);\r\n item.init();\r\n});\r\n$(document).foundation();","/****----COMMON----****/\r\nimport Utility from './components/utility/wrapper';\r\n/****----COMPONENTS----****/\r\nimport Sticky from './components/sticky/wrapper';\r\nimport UmbracoForms from './components/umbracoForms/wrapper';\r\nimport Carousel from './components/carousel/wrapper';\r\nimport FeedGridController from '../app_plugins/Feed/feedGrid.controller';\r\nimport FeedResource from '../app_plugins/Feed/feedResource.factory';\r\nimport SearchController from '../app_plugins/Search/search.controller';\r\nimport SearchResource from '../app_plugins/Search/searchResource.factory';\r\nimport VideoWrapper from '../app_plugins/VideoEmbedder/js/wrapper';\r\nimport DataOpenDirective from '../app_plugins/LazyModals/data-open.directive';\r\nimport ModalLoaderDirective from '../app_plugins/LazyModals/modal-loader.directive';\r\nimport MultiCheckbox from './components/multiCheckbox/multi-checkbox.component';\r\nimport ReviewsController from './components/reviews/reviews.controller';\r\nimport StarsComponent from './components/stars/stars.component';\r\nimport LocationSearchComponent from './components/locationSearch/location-search.component';\r\nimport CheckboxDropdownComponent from './components/checkboxDropdown/checkbox-dropdown.component';\r\nimport DealerSearchController from '../scripts/widgets/dealer-search.controller';\r\nimport GoogleMapComponent from './components/googleMap/google-map-component';\r\nimport ProductSelectorComponent from './components/formFields/product-selector.component';\r\nimport DistributorSelectorComponent from './components/formFields/distributor-selector.component';\r\nimport CountryPickerComponent from './components/countryPicker/country-picker.component';\r\nimport ProductResource from '../app_plugins/Products/productResource.factory';\r\n\r\nexport default function App() {\r\n var module = 'app';\r\n angular.module('app', [])\r\n .config(config)\r\n .run(run);\r\n\r\n run.$inject = [];\r\n function run() {\r\n\r\n }\r\n\r\n config.$inject = ['$locationProvider'];\r\n function config($locationProvider) {\r\n $locationProvider.html5Mode({\r\n enabled: true,\r\n requireBase: false,\r\n rewriteLinks: false\r\n });\r\n }\r\n Utility(module);\r\n ReviewsController(module);\r\n StarsComponent(module);\r\n DataOpenDirective(module);\r\n ModalLoaderDirective(module);\r\n VideoWrapper(module);\r\n Sticky(module);\r\n Carousel(module);\r\n MultiCheckbox(module);\r\n UmbracoForms(module);\r\n FeedResource(module);\r\n FeedGridController(module);\r\n SearchResource(module);\r\n SearchController(module);\r\n LocationSearchComponent(module);\r\n CheckboxDropdownComponent(module);\r\n GoogleMapComponent(module);\r\n DealerSearchController(module);\r\n ProductSelectorComponent(module);\r\n DistributorSelectorComponent(module);\r\n CountryPickerComponent(module);\r\n ProductResource(module);\r\n\r\n angular.bootstrap(document, ['app']);\r\n}","import VideoEnableJsFilter from \"./video-enable-js.filter\";\r\nimport VideoManagerDirective from \"./video-manager.directive\";\r\nimport VideoProvidersFactory from \"./video-providers.factory\";\r\n\r\nexport default function VideoWrapper(moduleName) {\r\n VideoEnableJsFilter(moduleName);\r\n VideoManagerDirective(moduleName);\r\n VideoProvidersFactory(moduleName);\r\n}","import ImageSourceDirective from './image-source.directive.js';\r\nimport HelperFactory from './helper.factory.js';\r\nimport QueryComponent from './query.component';\r\nimport PaginationComponent from './pagination.component';\r\nimport LazyElementComponent from './lazy-element.component';\r\nimport CompileComponent from './compile.component';\r\nimport GetCropUrlFilter from './get-crop-url.filter';\r\nimport TrustAsMarkupFilter from './trust-as-markup.filter.js';\r\nimport StripParagraphsFilter from './strip-paragraphs.filter.js';\r\nimport FitTextDirective from './fit-text.directive.js';\r\nimport ToNumArrayFilter from './to-num-array.js';\r\nimport AttrsDirective from './attrs.directive';\r\nimport JoinFilter from './join.filter';\r\nexport default function Utility(module) {\r\n JoinFilter(module);\r\n TrustAsMarkupFilter(module);\r\n ToNumArrayFilter(module);\r\n HelperFactory(module);\r\n ImageSourceDirective(module);\r\n QueryComponent(module);\r\n PaginationComponent(module);\r\n LazyElementComponent(module);\r\n CompileComponent(module);\r\n GetCropUrlFilter(module);\r\n StripParagraphsFilter(module);\r\n FitTextDirective(module);\r\n AttrsDirective(module);\r\n};","export default function JoinFilter(module) {\r\n angular.module(module || 'app')\r\n .filter('join', join);\r\n\r\n function join() {\r\n return function (value, property, separator) {\r\n if (!value || !Array.isArray(value)) {\r\n return value;\r\n }\r\n if (!separator) {\r\n separator = ', ';\r\n }\r\n var result = property ? value[0][property] : value[0];\r\n for (var i = 1; i < value.length; i++) {\r\n result += separator + (property ? value[i][property] : value[i]);\r\n }\r\n return result;\r\n }\r\n }\r\n}","export default function TrustAsMarkupFilter(moduleName) {\r\n angular.module(moduleName || 'app')\r\n .filter('trustAsMarkup', trustAsMarkup);\r\n\r\n trustAsMarkup.$inject = ['$sce'];\r\n function trustAsMarkup($sce) {\r\n return function (val) {\r\n if (!!val) {\r\n val = val.replace(/style=\"float\\: left;\"/g, 'class=\"left rte\"');\r\n val = val.replace(/style=\"float\\: right;\"/g, 'class=\"right rte\"');\r\n val = val.replace(/');\r\n }\r\n return $sce.trustAs('html', val);\r\n };\r\n }\r\n} ","export default function ToNumArrayFilter(moduleName) {\r\n angular.module(moduleName || 'app')\r\n .filter('toNumArray', toNumArray);\r\n\r\n toNumArray.$inject = ['$sce'];\r\n function toNumArray($sce) {\r\n return function (val, start) {\r\n if (isNaN(val)) {\r\n return [];\r\n }\r\n if (start === undefined) {\r\n start = 1;\r\n }\r\n var result = [];\r\n for (var i = start; i <= val; i++) {\r\n result.push(i);\r\n }\r\n return result;\r\n };\r\n }\r\n} ","export default function HelperFactory(module) {\r\n angular.module(module || 'app')\r\n .factory('helper', helper);\r\n helper.$inject = ['$window', '$rootScope', '$q', '$timeout'];\r\n var userPromise;\r\n var scripts = [];\r\n var googleApiPromise;\r\n\r\n function helper($window, $rootScope, $q, $timeout) {\r\n return {\r\n getMediaQueries: getMediaQueries,\r\n getMediaQuery: getMediaQuery,\r\n getLoadingIndicator: getLoadingIndicator,\r\n getCurrentMediaQuery: getCurrentMediaQuery,\r\n getResponsiveValue: getResponsiveValue,\r\n alert: alert,\r\n loadScript: loadScript,\r\n loadGoogleScripts: loadGoogleScripts\r\n };\r\n\r\n function getMediaQueries() {\r\n var queries = angular.element('meta.foundation-mq').css('fontFamily').replace('\"', '').replace(\"'\", '').split('&');\r\n var mediaQueries = {};\r\n for (var i = 0; i < queries.length; i++) {\r\n var pieces = queries[i].split('=');\r\n var key = pieces[0];\r\n var size = parseFloat(pieces[1]);\r\n mediaQueries[key] = $window.matchMedia('only screen and (min-width: ' + size + 'em)');\r\n mediaQueries[key + ' down'] = $window.matchMedia('only screen and (max-width: ' + size + 'em)');\r\n var nextSize;\r\n if (i < queries.length - 1) {\r\n var nextPieces = queries[i + 1].split('=');\r\n var query = 'only screen and ';\r\n if (size) {\r\n query += '(min-width: ' + size + 'em) and ';\r\n }\r\n query += '(max-width: ' + parseFloat(nextPieces[1]) + 'em';\r\n mediaQueries[key + ' only'] = $window.matchMedia(query);\r\n }\r\n }\r\n return mediaQueries;\r\n }\r\n\r\n function getMediaQuery(key) {\r\n var mediaQueries = getMediaQueries();\r\n return mediaQueries[key];\r\n }\r\n\r\n function getLoadingIndicator() {\r\n return angular.element('');\r\n }\r\n\r\n function getCurrentMediaQuery() {\r\n if (Foundation.MediaQuery.current) {\r\n return Foundation.MediaQuery.current;\r\n }\r\n var queries = getMediaQueries();\r\n var keys = Object.keys(queries);\r\n var result;\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n if (queries[key].matches) {\r\n result = key;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n function alert(title, text) {\r\n $rootScope.alert = {\r\n title: title,\r\n text: text.indexOf('<') === 0 ? text : '

    ' + text + '

    '\r\n };\r\n $rootScope.$evalAsync(function () {\r\n angular.element('#alert').foundation('open');\r\n });\r\n }\r\n\r\n function getResponsiveValue(value) {\r\n if (Foundation.MediaQuery.queries.length < 2) {\r\n Foundation.MediaQuery._reInit();\r\n }\r\n if (!value || typeof (value) !== 'object') {\r\n return value;\r\n }\r\n if (('large' in value) && Foundation.MediaQuery.atLeast('large')) {\r\n return value.large;\r\n }\r\n if (('medium' in value) && Foundation.MediaQuery.atLeast('medium')) {\r\n return value.medium;\r\n }\r\n if ('small' in value) {\r\n return value.small;\r\n }\r\n return null;\r\n }\r\n\r\n\r\n function loadScript(source) {\r\n var scriptFound = !!scripts[source];\r\n if (!scriptFound) {\r\n var script = document.createElement('script');\r\n script.async = 1;\r\n script.src = source;\r\n document.querySelector('head').appendChild(script);\r\n }\r\n return scriptFound;\r\n }\r\n\r\n function loadGoogleScripts(apiKey) {\r\n if (googleApiPromise) {\r\n return googleApiPromise;\r\n }\r\n var deferred = $q.defer();\r\n googleApiPromise = deferred.promise;\r\n var scripts = [\r\n 'https://maps.googleapis.com/maps/api/js?libraries=places&callback=_initGoogleApi&key=' + apiKey\r\n ];\r\n var remainingScripts = scripts.length;\r\n $window._initGoogleApi = () => {\r\n remainingScripts--;\r\n if (remainingScripts === 0) {\r\n deferred.resolve();\r\n }\r\n }\r\n scripts.forEach(script => loadScript(script));\r\n return googleApiPromise;\r\n }\r\n }\r\n};","export default function ImageSourceDirective(module) {\r\n angular.module(module || 'app')\r\n .directive('imageSource', imageSource);\r\n\r\n var id = 0;\r\n imageSource.$inject = ['helper', '$window', '$parse', '$q', '$timeout'];\r\n function imageSource(helper, $window, $parse, $q, $timeout) {\r\n var directive = {\r\n priority: 99,\r\n restrict: 'A',\r\n link: link\r\n };\r\n return directive;\r\n\r\n function link($scope, $element, $attrs, carousel) {\r\n var directiveId = id;\r\n id++;\r\n var expression;\r\n var settings = $parse($attrs.imageSource)($scope);\r\n var queries = helper.getMediaQueries();\r\n var url;\r\n var win = angular.element(module === 'umbraco' ? '.umb-editor-container' : $window);\r\n var deferred = $q.defer();\r\n var cancelListener = $scope.$on('carouselV2.updated', checkPosition);\r\n deferred.promise.then(cancelListener);\r\n var placeholder = angular.element('
    ');\r\n var placeholderImage = placeholder.find('img');\r\n var positioned = false;\r\n if ($element.height() > 30) {\r\n positioned = true;\r\n placeholderImage.css({\r\n top: -$element.outerHeight() / 2 - 17\r\n });\r\n }\r\n if ($element.is('img')) {\r\n $element.after(placeholder);\r\n }\r\n else {\r\n $element.append(placeholder);\r\n }\r\n\r\n function setSource() {\r\n deferred.promise.then(function () {\r\n if (!url) {\r\n $element.addClass('loaded no-image');\r\n placeholder.remove();\r\n }\r\n else {\r\n $element.removeClass('loaded');\r\n var image = new Image();\r\n image.onload = image.onerror = function () {\r\n if (typeof $scope.onloadCallback === \"function\") {\r\n $scope.onloadCallback();\r\n }\r\n\r\n $element.addClass('loaded');\r\n if (!positioned) {\r\n positioned = true;\r\n placeholderImage.css({\r\n position: 'absolute',\r\n top: -$element.outerHeight() / 2 - 17\r\n });\r\n }\r\n placeholder.remove();\r\n $scope.$emit('updateSlantedBackground');\r\n };\r\n image.src = url;\r\n if ($element.is('img')) {\r\n $element.attr('src', url);\r\n }\r\n else {\r\n $element.css('backgroundImage', \"url('\" + url + \"')\");\r\n }\r\n }\r\n scroller.off('scroll.imageSource' + directiveId);\r\n });\r\n }\r\n\r\n function checkPosition() {\r\n var rect = $element[0].getBoundingClientRect();\r\n if (rect.top <= win.height() * 1.5 && rect.left <= win.width() * 1.5 && rect.bottom <= win.height() * 1.5 + rect.height && rect.right >= -win.width() * .5) {\r\n deferred.resolve();\r\n }\r\n }\r\n\r\n var scroller = win.on('scroll.imageSource' + directiveId, checkPosition);\r\n var previousSize;\r\n\r\n //var offsets = scroller[0].getBoundingClientRect();\r\n if (!settings || typeof (settings) === 'string') {\r\n url = settings;\r\n setSource();\r\n }\r\n else {\r\n var retina = $window.matchMedia('only screen and (min-resolution: 124dpi), only screen and (min-resolution: 1.3dppx), only screen and (min-resolution: 48.8dpcm)');\r\n function getUrl() {\r\n var keys = Object.keys(queries);\r\n var result;\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n if (key.indexOf(\"down\") === -1 && key.indexOf(\"up\") === -1 && key.indexOf(\"only\") === -1) {\r\n if (queries[key].matches) {\r\n if (settings[key]) {\r\n result = key;\r\n }\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n if (result) {\r\n if (retina.matches && settings[result + 'retina']) {\r\n result = result + 'retina';\r\n }\r\n url = settings[result];\r\n }\r\n if (previousSize !== result) {\r\n setSource();\r\n }\r\n previousSize = result;\r\n }\r\n\r\n win.on('resize.imageSource' + directiveId, getUrl);\r\n getUrl();\r\n }\r\n $timeout(function () {\r\n checkPosition();\r\n });\r\n\r\n $attrs.$observe(\"imageSourceModel\", function (value) {\r\n if (!value) return;\r\n\r\n deferred.resolve();\r\n url = value;\r\n setSource();\r\n });\r\n }\r\n\r\n $scope.$on('$destroy', function () {\r\n win.off('resize.imageSource' + directiveId);\r\n scroller.off('scroll.imageSource' + directiveId);\r\n $element.off('transitionend.imageSource');\r\n cancelListener();\r\n });\r\n }\r\n};","/**\r\n * @ngdoc directive\r\n * @module components.query\r\n * @name components.query:query\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * A utility widget for calling apis. The data returned by the api is accessed with \"$ctrl.results.\"\r\n * @param {string} service The name of resource defined at /angular/services/global.js.\r\n * @param {number=} take The number of items to process. Typically used for apis that support pagination.\r\n * @param {string=} method The type of request to make to the service. Defaults to 'GET' if empty.\r\n * @param {object=} params Additional parameters that will be passed to the api.\r\n * @example\r\n \r\n \r\n
    \r\n \r\n
    \r\n

    {{post.name}}\r\n

    {{post.summary}}\r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n (function() {\r\n angular.module('dataExample', ['components.query', 'services.global'])\r\n .controller('exampleController', exampleController);\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n }\r\n })();\r\n \r\n
    \r\n */\r\nexport default function QueryComponent(module) {\r\n angular.module(module || 'app')\r\n .component('query', {\r\n bindings: {\r\n 'service': '@',\r\n 'take': '
    ',\r\n controller: queryController\r\n });\r\n\r\n queryController.$inject = ['$scope', '$injector', '$transclude', '$element', '$timeout'];\r\n function queryController($scope, $injector, $transclude, $element, $timeout) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n $transclude($scope, function (clone) {\r\n if (clone.length) {\r\n $element.find('.content').append(clone);\r\n }\r\n });\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.method && !changes.method.currentValue) {\r\n ctrl.method = 'get';\r\n }\r\n if (changes.params && !changes.params.currentValue) {\r\n ctrl.params = {};\r\n }\r\n\r\n if (ctrl.take !== undefined) {\r\n ctrl.params.pageSize = ctrl.take;\r\n }\r\n if (changes.service) {\r\n var servicePieces = ctrl.service.split('.');\r\n var serviceContainer = $injector.get(servicePieces[0]);\r\n ctrl.$resource = serviceContainer[servicePieces[1]];\r\n }\r\n if (changes.params && ctrl.$$paramsValid()) {\r\n ctrl.loading = true;\r\n ctrl.$resource(ctrl.params).then(function (results) {\r\n ctrl.results = results.data;\r\n $timeout(function () {\r\n ctrl.loading = false;\r\n if (ctrl.onChange) {\r\n ctrl.onChange({\r\n data: ctrl.results,\r\n items: ctrl.results && ctrl.results.items ? ctrl.results.items : []\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n ctrl.$$paramsValid = function () {\r\n if (!ctrl.requiredParams)\r\n return true;\r\n if (!ctrl.params) {\r\n return false;\r\n }\r\n var requirements = ctrl.requiredParams.replace(' ', '').split(',');\r\n for (var i = 0; i < requirements.length; i++) {\r\n var target = ctrl.params[requirements[i]];\r\n if (target === undefined || target === null)\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n};","/**\r\n * @ngdoc directive\r\n * @module components.pagination\r\n * @name components.pagination:pagination\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * The pagination component \r\n * @param {string=} service String that refers to an ngResource stored in a factory. Should be in the form of \"factory.resource.\" This resource will be called each time the filters change and when a new page is loaded. Should **not** be used together with the **data** param.\r\n * @param {number=} take Controls the number of items to include in each page. Defaults to 15.\r\n * @param {array=} data Array to be split up into pages. Should **not** be used with the **service** param.\r\n * @param {number=} page Page number to start on. Defaults to 1.\r\n * @param {string=} required Comma separated list of parameters that required. Delays the initial pagination load until each parameter has a value set. Used to avoid unnessary api calls.\r\n * @param {function=} onChange Callback function for when the page/filter is changed. Passes the following fields to the function.\r\n * - page: the current page\r\n * - newItems: the items that were just loaded\r\n * - items: all items that have been loaded for the current set of filters\r\n * - rows: the total number of items that can be loaded\r\n * - finished: flag indicating whether all items have been loaded\r\n * - empty: flag indicating that no items were found\r\n * @example\r\n \r\n \r\n
    \r\n \r\n
      \r\n
    • {{item}}
    • \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n (function() {\r\n angular.module('dataExample', ['components.pagination'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n var data = [];\r\n for (var i=0; i<25; i++) {\r\n data.push('example ' + i);\r\n }\r\n $scope.exampleData = data;\r\n }\r\n })();\r\n \r\n
    \r\n */\r\n\r\nexport default function PaginationComponent(module) {\r\n angular.module(module || 'app')\r\n .component('pagination', {\r\n bindings: {\r\n service: '@?',\r\n take: 'item');\r\n ctrl.params.reservedIndexes = [];\r\n for (var i = 0; i < items.length; i++) {\r\n var item = angular.element(items[i]);\r\n var index = parseInt(item.attr('index'));\r\n ctrl.params.reservedIndexes.push(index);\r\n ctrl._injectedItems.push({\r\n id: 'injected-' + i,\r\n index: index,\r\n markup: item.html(),\r\n _isInjected: true\r\n })\r\n }\r\n }\r\n $element.append(clone.filter(':not(injected-items)'));\r\n }\r\n });\r\n ctrl._transcluded = true;\r\n }\r\n if (changes.service) {\r\n if (changes.service.currentValue) {\r\n var servicePieces = changes.service.currentValue.split('.');\r\n var serviceContainer = $injector.get(servicePieces[0]);\r\n ctrl.$resource = serviceContainer[servicePieces[1]];\r\n }\r\n else {\r\n ctrl.$resource = null;\r\n }\r\n }\r\n if (changes.params && changes.params.currentValue) {\r\n if (ctrl.$$paramsValid(changes.params.currentValue) && ctrl._paramsChanged(changes.params.currentValue, changes.params.previousValue)) {\r\n ctrl.$$toPage(!changes.params.previousValue || changes.params.previousValue.page === undefined ? ctrl.page : 1, true, changes.params.currentValue);\r\n }\r\n else if (ctrl.onError) {\r\n ctrl.onError({ message: 'Required parameter is missing.' });\r\n }\r\n }\r\n };\r\n\r\n ctrl._paramsChanged = function (newValue, oldValue) {\r\n if (newValue && oldValue) {\r\n var newKeys = Object.keys(newValue);\r\n var oldKeys = Object.keys(oldValue);\r\n if (newKeys.length !== oldKeys.length) {\r\n return true;\r\n }\r\n for (var i = 0; i < newKeys.length; i++) {\r\n var key = newKeys[i];\r\n if (typeof (newValue[key]) === 'object') {\r\n if (JSON.stringify(newValue[key]) !== JSON.stringify(oldValue[key])) {\r\n return true;\r\n }\r\n }\r\n else if (newValue[key] !== oldValue[key]) {\r\n return true;\r\n }\r\n }\r\n }\r\n else {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n //$scope.$watch('$ctrl.params', function (newVal, prevVal) {\r\n // if (newVal !== undefined && !angular.equals(newVal, prevVal)) {\r\n // //console.info('DEBUG: changes.params' + changes.params);\r\n // ctrl.params = newVal;\r\n // if (ctrl.$$paramsValid()) {\r\n // ctrl.$$toPage(1, true);\r\n // }\r\n // else if (ctrl.onError) {\r\n // ctrl.onError({ message: 'Required parameter is missing.' })\r\n // }\r\n // }\r\n //}, true);\r\n //ctrl.$onChanges = function (changes) {\r\n // if (changes.params && !angular.equals(changes.params.currentValue, changes.params.previousValue)) {\r\n // //console.info('DEBUG: changes.params' + changes.params);\r\n // if (ctrl.$$paramsValid()) {\r\n // ctrl.$$toPage(1, true);\r\n // }\r\n // else if (ctrl.onError) {\r\n // ctrl.onError({ message: 'Required parameter is missing.' })\r\n // }\r\n // }\r\n //}\r\n\r\n ctrl.$postLink = function () {\r\n ctrl.$isInfinite = false;\r\n ctrl.scrollTarget = angular.element('[pagination-scroll]');\r\n if (!ctrl.scrollTarget.length) {\r\n ctrl.scrollTarget = angular.element('body,html');\r\n }\r\n if (ctrl.$isInfinite) {\r\n ctrl.$scroller.on('scroll.pagination', function () {\r\n var boundingBox = $element[0].getBoundingClientRect();\r\n if (ctrl.$scroller.height() >= boundingBox.bottom - 500) {\r\n ctrl.nextPage();\r\n }\r\n });\r\n }\r\n };\r\n\r\n ctrl.$onDestroy = function () {\r\n if (ctrl.$scroller) {\r\n ctrl.$scroller.off('scroll.pagination');\r\n }\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#updateParam\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Updates a param passed to the pagination service. Only works for service driven pagination.\r\n * @param {string} key The name of the parameter that will be passed to the api call.\r\n * @param {object} value The value of the parameter.\r\n */\r\n ctrl.updateParam = function (key, value) {\r\n //console.info('DEBUG: updateParam');\r\n //console.info(ctrl.params);\r\n if (!ctrl.params)\r\n ctrl.params = {};\r\n ctrl.params[key] = value;\r\n ctrl.$$toPage(1, true);\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#$$paramsValid\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Internal method used to check whether a value has been set for every required parameter. Used to delay service requests until all of the parameters have been populated.\r\n * @return {bool} True if all required parameters have a value.\r\n */\r\n ctrl.$$paramsValid = function (params) {\r\n params = params || ctrl.params;\r\n if (!ctrl.requiredParams)\r\n return true;\r\n if (!params) {\r\n return false;\r\n }\r\n var requirements = ctrl.requiredParams.replace(' ', '').split(',');\r\n for (var i = 0; i < requirements.length; i++) {\r\n var target = params[requirements[i]];\r\n if (target === undefined || target === null)\r\n return false;\r\n }\r\n \r\n return true;\r\n };\r\n\r\n\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#getParam\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Gets the current value of a filter parameter.\r\n * @param {string} param The key for the filter parameter.\r\n * @return {object} The value of the requested parameter. Returns undefined if no value has been set.\r\n */\r\n ctrl.getParam = function (param) {\r\n if (ctrl.params)\r\n return ctrl.params[param];\r\n return undefined;\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#prevPage\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Loads the items for the previous page of content.\r\n * @param {bool=} param If true, the newly loaded content will replace the current content.\r\n */\r\n ctrl.prevPage = function (refresh) {\r\n if (ctrl.page > 1 && !ctrl.loading) {\r\n ctrl.$$toPage(ctrl.page - 1, refresh);\r\n }\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#nextPage\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Loads the items for the next page of content.\r\n * @param {bool=} param If true, the newly loaded content will replace the current content.\r\n */\r\n ctrl.nextPage = function (refresh) {\r\n if (!ctrl.finished && !ctrl.loading) {\r\n ctrl.$$toPage(ctrl.page + 1, refresh);\r\n }\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#clearParam\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Used to remove a param from the pagination filtering. Primarily used to clear out search terms.\r\n * @param {string} param The filter parameter to be reset.\r\n */\r\n ctrl.clearParam = function (param) {\r\n ctrl.params[param] = null;\r\n ctrl.$$toPage(1, true);\r\n };\r\n\r\n /**\r\n * @ngdoc method\r\n * @name pagination#$$toPage\r\n * @methodOf components.pagination:pagination\r\n * @kind function\r\n * @description\r\n * Loads the content for a selected page.\r\n * @param {number} page The page to load content for.\r\n * @param {bool=} refresh Replace the existing list of content with the new list if true. Used when filter parameters change and when the pagination is navigable with buttons.\r\n */\r\n ctrl.$$toPage = function (page, refresh, params) {\r\n page = page || 1;\r\n var skip = (page - 1) * ctrl.take;\r\n var deferred = $q.defer();\r\n ctrl.$promise = deferred.promise;\r\n ctrl.loading = true;\r\n ctrl.empty = false;\r\n if (ctrl.$resource) {\r\n if (refresh && ctrl.initialized) {\r\n ctrl.refreshing = true;\r\n var stickPoint = ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(1) : 0;\r\n var top = $element[0].getBoundingClientRect().top;\r\n if (top < stickPoint) {\r\n ctrl.scrollTarget.stop().animate({\r\n scrollTop: '+=' + (top - stickPoint)\r\n }, 300);\r\n }\r\n else if (top >= ctrl.$scroller.height()) {\r\n ctrl.scrollTarget.stop().animate({\r\n scrollTop: '+=' + (top - stickPoint)\r\n }, 300);\r\n }\r\n }\r\n params = angular.copy(params || ctrl.params);\r\n params.pageSize = ctrl.take;\r\n params.page = page;\r\n ctrl.$resource(params).then(function (data) {\r\n deferred.resolve(data);\r\n }).catch(function (error) {\r\n deferred.reject(error);\r\n })\r\n /*ctrl.$resource.getCamel(params).$promise.then(function (data) {\r\n deferred.resolve(data);\r\n }).catch(function (error) {\r\n deferred.reject(error);\r\n })*/\r\n }\r\n else if (ctrl.data) {\r\n if (skip > ctrl.data.length - 1)\r\n deferred.reject({ message: 'No content found for this page.' });\r\n else {\r\n deferred.resolve({\r\n items: ctrl.data.slice(skip, skip + ctrl.take),\r\n rows: ctrl.data.length\r\n });\r\n }\r\n }\r\n deferred.promise.then(function (response) {\r\n var data = response.data;\r\n if (refresh !== undefined && refresh) {\r\n ctrl.items = data.items;\r\n ctrl.$lastCheck = 0;\r\n }\r\n else {\r\n ctrl.items = ctrl.items || [];\r\n for (var i = 0; i < data.items.length; i++)\r\n ctrl.items.push(data.items[i]);\r\n }\r\n\r\n ctrl.page = page;\r\n ctrl.count = data.count;\r\n ctrl.list = data.list;\r\n ctrl.labels = data.labels;\r\n ctrl.pageLimit = data.totalPages;\r\n ctrl.finished = ctrl.page === data.totalPages;\r\n ctrl.initialized = true;\r\n ctrl.empty = ctrl.items.length === 0;\r\n ctrl.loading = false;\r\n ctrl.refreshing = false;\r\n\r\n for (var i = 0; i < ctrl._injectedItems.length; i++) {\r\n var item = ctrl._injectedItems[i];\r\n if (ctrl.items.length >= item.index) {\r\n if (!ctrl.items[item.index] || !ctrl.items[item.index]._isInjected) {\r\n ctrl.items.splice(item.index, 0, item);\r\n }\r\n }\r\n else if (ctrl.finished) {\r\n ctrl.items.push(item);\r\n }\r\n }\r\n $timeout(function () {\r\n // var boundingBox = $element[0].getBoundingClientRect();\r\n // if (ctrl.$isInfinite && !ctrl.finished && ctrl.$scroller.height() >= boundingBox.bottom - 500) {\r\n // ctrl.nextPage();\r\n // }\r\n if (ctrl.onChange) {\r\n ctrl.onChange({\r\n page: ctrl.page,\r\n pageSize: ctrl.take,\r\n newItems: data.items,\r\n items: ctrl.items,\r\n count: ctrl.count,\r\n finished: ctrl.finished,\r\n empty: ctrl.empty,\r\n controller: ctrl\r\n });\r\n }\r\n });\r\n }).catch(function (error) {\r\n if (ctrl.onError)\r\n ctrl.onError({ message: error.message });\r\n });\r\n return deferred.promise;\r\n };\r\n }\r\n};","export default function LazyElementComponent(module) {\r\n angular.module(module || 'app')\r\n .component('lazyElement', {\r\n bindings: {\r\n markup: '@'\r\n },\r\n controller: LazyElementController\r\n });\r\n\r\n LazyElementController.$inject = ['$scope', '$element'];\r\n function LazyElementController($scope, $element) {\r\n var vm = this;\r\n vm.$onInit = function () {\r\n vm._clearListener = $scope.$on('loadLazyElement', function (event, data) {\r\n vm._load(data);\r\n });\r\n };\r\n\r\n vm._load = function (data) {\r\n $element.html(vm.markup);\r\n $element.addClass('loaded');\r\n vm._clearListener();\r\n $scope.$emit('lazyElementLoaded', data);\r\n }\r\n }\r\n};","export default function CompileComponent(module) {\r\n angular.module(module || 'app')\r\n .component('compile', {\r\n bindings: {\r\n 'content': '<',\r\n 'ready': ' -1;\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n if ((key === 'height' || key === 'width') && cropName[key] > input[key]) {\r\n continue;\r\n }\r\n url += (!hasQueryString && i === 0 ? '?' : '&') + key + '=' + cropName[key];\r\n }\r\n return url;\r\n }\r\n if (!crops) {\r\n if (!url)\r\n return input;\r\n return url;\r\n }\r\n for (var i = 0; i < crops.length; i++) {\r\n var crop = crops[i];\r\n var _cropName = crop.name || crop.Name;\r\n if (_cropName === cropName)\r\n return crop.url || crop.Url;\r\n }\r\n return url;\r\n }\r\n }\r\n};","export default function StripParagraphsFilter(module) {\r\n angular.module(module || 'app')\r\n .filter('stripParagraphs', stripParagraphs)\r\n\r\n function stripParagraphs() {\r\n return function (value) {\r\n if (!value) {\r\n return value;\r\n }\r\n return value.replaceAll('

    ', '').replaceAll('

    ', '');\r\n }\r\n }\r\n}","export default function FitTextDirective(module) {\r\n angular.module(module || 'app')\r\n .directive('fitText', fitText);\r\n\r\n var id = 0;\r\n fitText.$inject = ['$window', '$timeout'];\r\n function fitText($window, $timeout) {\r\n var directive = {\r\n restrict: 'A',\r\n scope: {\r\n container: '@?',\r\n minWidth: '=',\r\n maxWidth: '=',\r\n minSize: '=',\r\n maxSize: '=?',\r\n maxHeight: '=?'\r\n },\r\n link: link\r\n };\r\n return directive;\r\n function link($scope, $element) {\r\n $scope.id = id++;\r\n\r\n function sizeText() {\r\n $timeout(function () {\r\n var container = $scope.container ? $element.closest($scope.container) : $element;\r\n var currentSize = parseInt($element.css('font-size'));\r\n $element.css({\r\n fontSize: '',\r\n width: ''\r\n });\r\n var containerWidth = container.width();\r\n var elementWidth = $element.width();\r\n if (containerWidth <= elementWidth) {\r\n $scope.$maxSize = $scope.maxSize || parseInt($element.css('font-size'));\r\n if (elementWidth > 0) {\r\n var finalSize;\r\n if ($scope.container) {\r\n var size = containerWidth / elementWidth * $scope.$maxSize;\r\n finalSize = Math.max(size, $scope.minSize);\r\n }\r\n else {\r\n if (containerWidth <= $scope.minWidth) {\r\n finalSize = $scope.minSize;\r\n }\r\n else if (elementWidth <= $scope.maxWidth) {\r\n var widthDiff = $scope.maxWidth - $scope.minWidth;\r\n var sizeDiff = $scope.$maxSize - $scope.minSize;\r\n finalSize = sizeDiff * ((width - $scope.minWidth) / widthDiff) + $scope.minSize;\r\n }\r\n else {\r\n var newSize = $scope.maxSize * ($scope.maxWidth / elementWidth);\r\n finalSize = Math.max(newSize, $scope.minSize);\r\n }\r\n }\r\n if ($scope.maxHeight && finalSize > $scope.minSize) {\r\n var elementHeight = $element.height();\r\n if (elementHeight > $scope.maxHeight) {\r\n newSize = $scope.maxSize * ($scope.maxHeight / elementHeight);\r\n finalSize = Math.max(newSize, $scope.minSize);\r\n }\r\n }\r\n $element.css('font-size', finalSize);\r\n if (finalSize !== currentSize) {\r\n $scope.$emit('sizeChange.fitText', {\r\n size: finalSize\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n sizeText();\r\n var win = angular.element($window)\r\n .on(`resize.fitText${id}`, sizeText);\r\n $scope.$on('carouselV2.ready', sizeText);\r\n }\r\n }\r\n};","export default function AttrsDirective(module) {\r\n angular.module(module || 'app')\r\n .directive('attrs', attrs);\r\n\r\n var id = 0;\r\n attrs.$inject = ['$parse'];\r\n function attrs($parse) {\r\n var directive = {\r\n priority: 99,\r\n restrict: 'A',\r\n link: link\r\n };\r\n return directive;\r\n\r\n function link($scope, $element, $attrs) {\r\n var attrs = $parse($attrs.attrs)($scope);\r\n if (attrs) {\r\n for (const [key, value] of Object.entries(attrs)) {\r\n $element[0].setAttribute(key, value);\r\n }\r\n }\r\n }\r\n }\r\n};","export default function ReviewsController(module) {\r\n angular.module(module)\r\n .controller('ReviewsController', ReviewsController);\r\n\r\n ReviewsController.$inject = ['$http', '$attrs', '$element', '$timeout'];\r\n function ReviewsController($http, $attrs, $element, $timeout) {\r\n var vm = this;\r\n vm.$onInit = () => {\r\n var target = $attrs.reviewSource;\r\n if (target) {\r\n $http.get('/api/reviews/', {\r\n params: {\r\n source: target\r\n },\r\n cache: true\r\n })\r\n .then(response => {\r\n vm.data = response.data;\r\n $timeout(() => {\r\n $element.find('.reviews > div').css('display', '');\r\n })\r\n })\r\n .catch(response => {\r\n vm.error = true;\r\n $timeout(() => {\r\n $element.find('.reviews .error').css('display', '');\r\n })\r\n });\r\n }\r\n }\r\n }\r\n}","export default function StarsComponent(module) {\r\n angular.module(module)\r\n .component('stars', {\r\n bindings: {\r\n fill: '<',\r\n count: '<'\r\n },\r\n controllerAs: 'vm',\r\n controller: StarsController\r\n });\r\n\r\n var id = 1;\r\n\r\n StarsController.$inject = ['$element'];\r\n function StarsController($element) {\r\n var vm = this;\r\n var svgns = 'http://www.w3.org/2000/svg';\r\n vm.$onInit = () => {\r\n vm._id = id++;\r\n if (vm.fill && vm.count) {\r\n $element[0].setAttribute('title', vm.fill + ' out of ' + vm.count + ' stars');\r\n var pos = vm.fill;\r\n for (var i = 0; i < vm.count; i++) {\r\n var fill = '100%';\r\n if (pos < 0) {\r\n fill = '0%';\r\n }\r\n else if (pos < 1) {\r\n fill = ((pos % 1) * 100) + '%';\r\n }\r\n vm._createStar(fill, i);\r\n pos--;\r\n }\r\n }\r\n }\r\n\r\n vm._createStar = (fill, index) => {\r\n var svg = document.createElementNS(svgns, 'svg');\r\n var defs = document.createElementNS(svgns, 'defs');\r\n var gradient = document.createElementNS(svgns, 'linearGradient');\r\n var path = document.createElementNS(svgns, 'path');\r\n var start = document.createElementNS(svgns, 'stop');\r\n var end = document.createElementNS(svgns, 'stop');\r\n\r\n svg.setAttribute('viewBox', '0 0 329.942 329.942')\r\n gradient.id = 'fill-' + vm._id + '-' + index;\r\n path.setAttribute('fill', 'url(#fill-' + vm._id + '-' + index + ')');\r\n path.setAttribute('d', `M329.208,126.666c-1.765-5.431-6.459-9.389-12.109-10.209l-95.822-13.922l-42.854-86.837\r\n\t c-2.527-5.12-7.742-8.362-13.451-8.362c-5.71,0-10.925,3.242-13.451,8.362l-42.851,86.836l-95.825,13.922\r\n\t c-5.65,0.821-10.345,4.779-12.109,10.209c-1.764,5.431-0.293,11.392,3.796,15.377l69.339,67.582L57.496,305.07\r\n\t c-0.965,5.628,1.348,11.315,5.967,14.671c2.613,1.899,5.708,2.865,8.818,2.865c2.387,0,4.784-0.569,6.979-1.723l85.711-45.059\r\n\t l85.71,45.059c2.208,1.161,4.626,1.714,7.021,1.723c8.275-0.012,14.979-6.723,14.979-15c0-1.152-0.13-2.275-0.376-3.352\r\n\t l-16.233-94.629l69.339-67.583C329.501,138.057,330.972,132.096,329.208,126.666z`);\r\n start.setAttribute('offset', fill);\r\n start.setAttribute('stop-color', '#ECBC2F');\r\n end.setAttribute('offset', fill);\r\n end.setAttribute('stop-color', '#ACADB0');\r\n\r\n svg.appendChild(defs);\r\n defs.appendChild(gradient);\r\n gradient.appendChild(start);\r\n gradient.appendChild(end);\r\n svg.appendChild(path);\r\n $element[0].appendChild(svg);\r\n }\r\n }\r\n}","export default function DataOpenDirective(module) {\r\n angular.module(module || 'app')\r\n .directive('open', dataOpen);\r\n\r\n dataOpen.$inject = [];\r\n function dataOpen() {\r\n var directive = {\r\n restrict: 'A',\r\n require: {\r\n modalLoader: '^^modalLoader'\r\n },\r\n bindToController: true,\r\n controller: controller\r\n };\r\n\r\n controller.$inject = ['$element', '$timeout'];\r\n function controller($element, $timeout) {\r\n var ctrl = this;\r\n ctrl.$onInit = function () {\r\n $timeout(function () {\r\n ctrl.target = $element.data('open');\r\n ctrl.modalLoader.load(ctrl.target);\r\n });\r\n };\r\n }\r\n\r\n return directive;\r\n }\r\n};","export default function ModalLoaderDirective(module) {\r\n angular.module(module || 'app')\r\n .directive('modalLoader', modalLoader);\r\n\r\n function modalLoader() {\r\n var directive = {\r\n restrict: 'A',\r\n controller: controller,\r\n controllerAs: 'ml'\r\n };\r\n\r\n controller.$inject = ['$timeout', '$attrs', '$http', '$compile', '$scope', '$window'];\r\n function controller($timeout, $attrs, $http, $compile, $scope, $window) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.delay = $attrs.delay ? parseInt($attrs.delay) : 800;\r\n ctrl.loadedModals = [];\r\n ctrl._modalQueue = [];\r\n if ($attrs.rootId) {\r\n ctrl.rootId = parseInt($attrs.rootId);\r\n }\r\n };\r\n\r\n ctrl.load = function (modalName) {\r\n if (angular.element('#' + modalName).length) {\r\n if (ctrl.loadedModals.indexOf(modalName) === -1) {\r\n ctrl.loadedModals.push(modalName);\r\n }\r\n }\r\n else if (ctrl.loadedModals.indexOf(modalName) === -1) {\r\n ctrl.loadedModals.push(modalName);\r\n ctrl._modalQueue.push(modalName);\r\n $timeout.cancel(ctrl._requestTimer);\r\n ctrl._requestTimer = $timeout(function () {\r\n if (ctrl.rootId) {\r\n $http.get('/api/modals/get/' + ctrl.rootId + '/', {\r\n params: {\r\n modals: ctrl._modalQueue\r\n }\r\n })\r\n .then(function (response) {\r\n var body = angular.element('body');\r\n var items = response.data;\r\n for (var i = 0; i < items.length; i++) {\r\n var modal = angular.element(items[i].markup);\r\n body.append(modal);\r\n new Foundation.Reveal(modal);\r\n $compile(modal.contents())($scope);\r\n $timeout(function () {\r\n if ($window.bindUmbracoFormHandling) {\r\n var button = this.modal.find('.umbraco-forms-form [type=\"submit\"]:not(.cancel)');\r\n if (button.length) {\r\n $window.bindUmbracoFormHandling(button);\r\n }\r\n }\r\n var innerModals = this.modal.find('.reveal');\r\n if (innerModals.length) {\r\n for (var j = 0; j < innerModals.length; j++) {\r\n var innerModal = angular.element(innerModals[j]);\r\n new Foundation.Reveal(innerModal);\r\n }\r\n }\r\n }.bind({ modal: modal }));\r\n }\r\n })\r\n .catch(function (error) {\r\n console.log(error);\r\n });\r\n ctrl._modalQueue = [];\r\n }\r\n }, ctrl.delay);\r\n }\r\n };\r\n }\r\n\r\n return directive;\r\n }\r\n};","export default function VideoEnableJsFilter(moduleName) {\r\n angular.module(moduleName || 'app')\r\n .filter('videoEnableJs', videoEnableJs);\r\n\r\n videoEnableJs.$inject = [];\r\n function videoEnableJs() {\r\n return function (markup, provider, id) {\r\n switch (provider) {\r\n case \"YouTube\":\r\n return markup.replace(\"?\", \"?enablejsapi=1&origin=\" + location.origin + \"&\").replace(\"(function () { if (!document.getElementById('vimeo-script')) { var s = document.createElement('script'); s.id = 'vimeo-script'; s.type = 'text/javascript'; s.async = true; s.onload=window.vimeoPlayerReady; s.src = 'https://player.vimeo.com/api/player.js'; var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x); } })();\";\r\n case \"Wistia, Inc.\":\r\n return markup.replace(\"class=\\\"wistia_embed\", \"id=\\\"\" + id + \"\\\" class=\\\"wistia_embed\");\r\n }\r\n return markup;\r\n };\r\n }\r\n};","/**\r\n * @ngdoc directive\r\n * @module app\r\n * @name app:videoManager\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * Sizes videos to ensure they fit on screen and wires up modal event handling.\r\n * @param {boolean=} fitToScreen Forces the video to fill the viewport. Even if this is false, the video's height will be restricted to ensure the video isn't taller than the viewport.\r\n * @param {string=} provider The name of the video service the video part of. Used to determine how the video events should be wired up.\r\n * @param {string=} videoId Unique id used to identify the video.\r\n */\r\nexport default function VideoManagerDirective(moduleName) {\r\n angular.module(moduleName || 'app')\r\n .directive('videoManager', videoManager);\r\n\r\n var id = 0;\r\n videoManager.$inject = ['$window', '$timeout', 'videoProviders'];\r\n function videoManager($window, $timeout, videoProviders) {\r\n var directive = {\r\n restrict: 'A',\r\n require: '?^^stickyManager',\r\n scope: true,\r\n controller: controller,\r\n bindToController: {\r\n fitToScreen: ' headerSize && boundingRect.top <= $window.innerHeight) {\r\n vm._provider.play();\r\n }\r\n else {\r\n vm._provider.pause();\r\n }\r\n }\r\n };\r\n\r\n vm._loadVideo = function () {\r\n var deferred = $q.defer();\r\n if (vm._loaded) {\r\n deferred.resolve();\r\n }\r\n else {\r\n vm._loadState = 'started';\r\n var clearLoader = $scope.$on('lazyElementLoaded', function (event, videoId) {\r\n if (videoId === vm.videoId) {\r\n clearLoader();\r\n vm._provider.init('player-' + vm.videoId, vm.loop).then(function () {\r\n vm.configure();\r\n vm._loaded = true;\r\n vm._loadState = 'finished';\r\n deferred.resolve();\r\n });\r\n }\r\n });\r\n $scope.$broadcast('loadLazyElement', vm.videoId);\r\n }\r\n return deferred.promise;\r\n };\r\n\r\n vm.playVideo = function () {\r\n if (vm._loadState !== 'started') {\r\n vm._loadVideo()\r\n .then(function () {\r\n vm._provider.play();\r\n });\r\n }\r\n };\r\n }\r\n\r\n return directive;\r\n }\r\n\r\n};","/**\r\n * @ngdoc directive\r\n * @module app\r\n * @name app:videoManager\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * Factory used to create video provider instances. Used to generalize video event handling so that the same methods can be used to control multiple video services. All providers must have the following\r\n * - init: Initializes the video controls, where the id is the id on the player element.\r\n * - play: Plays the video.\r\n * - pause: Pauses the video.\r\n * - stop: Stops the video (for services that don't directly support this, the video should be paused and time should be set back to the start).\r\n * There are also a couple optional settings.\r\n * - callback: Name of the callback function that is triggered when the video service javascript api is ready.\r\n * - scripts: Scripts needed to enable javascript control of the video.\r\n */\r\nexport default function VideoProvidersFactory(moduleName) {\r\n angular.module(moduleName || 'app')\r\n .factory('videoProviders', videoProviders);\r\n\r\n videoProviders.$inject = ['$window', '$q'];\r\n function videoProviders($window, $q) {\r\n var queue = {};\r\n var providerPromises = {};\r\n var providers = {\r\n YouTube: {\r\n callback: 'onYouTubeIframeAPIReady',\r\n scripts: [\r\n 'https://www.youtube.com/iframe_api'\r\n ],\r\n init: function (id, loop) {\r\n var deferred = $q.defer();\r\n var self = this;\r\n self.loop = loop;\r\n providerPromises['YouTube'].then(function () {\r\n self.player = new YT.Player(id, {\r\n events: {\r\n 'onReady': function () {\r\n self.ready = true;\r\n deferred.resolve();\r\n },\r\n onStateChange: function (event) {\r\n if (self.loop && event.data === YT.PlayerState.ENDED) {\r\n self.play();\r\n }\r\n }\r\n }\r\n });\r\n });\r\n return deferred.promise;\r\n },\r\n play: function () {\r\n this.player.playVideo();\r\n },\r\n pause: function () {\r\n this.player.pauseVideo();\r\n },\r\n stop: function () {\r\n this.player.stopVideo();\r\n }\r\n },\r\n Vimeo: {\r\n callback: 'vimeoPlayerReady',\r\n init: function (id) {\r\n var deferred = $q.defer();\r\n var self = this;\r\n providerPromises['Vimeo'].then(function () {\r\n var iframe = angular.element('#' + id);\r\n if (!iframe.is('iframe')) {\r\n iframe = iframe.find('iframe');\r\n }\r\n self.player = new Vimeo.Player(iframe[0]);\r\n self.player.on('loaded', function () {\r\n self.ready = true;\r\n deferred.resolve();\r\n });\r\n });\r\n return deferred.promise;\r\n },\r\n play: function () {\r\n this.player.play();\r\n },\r\n pause: function () {\r\n this.player.pause();\r\n },\r\n stop: function () {\r\n this.player.pause();\r\n this.player.setCurrentTime(0);\r\n }\r\n },\r\n 'Wistia, Inc.': {\r\n scripts: [\r\n '//fast.wistia.com/assets/external/E-v1.js'\r\n ],\r\n init: function (id) {\r\n var deferred = $q.defer();\r\n var self = this;\r\n var vid = angular.element('#' + id);\r\n var classes = vid.attr('class');\r\n var idExtractor = /wistia_async_(\\w+)/;\r\n var videoId = idExtractor.exec(classes)[1];\r\n $window._wq = $window._wq || [];\r\n _wq.push({\r\n id: videoId,\r\n onEmbedded: function (video) {\r\n self.ready = true;\r\n self.player = video;\r\n deferred.resolve();\r\n }\r\n });\r\n return deferred.promise;\r\n },\r\n play: function () {\r\n this.player.play();\r\n },\r\n pause: function () {\r\n this.player.pause();\r\n },\r\n stop: function () {\r\n this.player.pause();\r\n this.player.time(0);\r\n }\r\n }\r\n };\r\n\r\n return {\r\n /**\r\n * @ngdoc method\r\n * @name app.videoProviders#get\r\n * @description\r\n * Creates an instance of the video provider and loads any required scripts.\r\n * @param {string} provider Name of the video service to enable javascript controls for.\r\n * @returns {object} Service that can used to control the video.\r\n */\r\n get: function (provider) {\r\n if (!providers[provider]) {\r\n return null;\r\n }\r\n var prov = providers[provider];\r\n if (!providerPromises[provider]) {\r\n var deferred = $q.defer();\r\n if (prov.callback) {\r\n $window[prov.callback] = function () {\r\n deferred.resolve();\r\n };\r\n if (prov.scripts) {\r\n var firstScriptTag = document.getElementsByTagName('script')[0];\r\n for (var i = 0; i < prov.scripts.length; i++) {\r\n var tag = document.createElement('script');\r\n document.defer = true;\r\n tag.src = prov.scripts[i];\r\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\r\n }\r\n }\r\n }\r\n else {\r\n deferred.resolve();\r\n }\r\n providerPromises[provider] = deferred.promise;\r\n }\r\n return angular.copy(providers[provider]);\r\n }\r\n }\r\n }\r\n};","import StickyComponent from './sticky.component.js';\r\nimport StickyContainerDirective from './sticky-container.directive.js';\r\nimport StickyManagerDirective from './sticky-manager.directive.js';\r\nexport default function Sticky(module) {\r\n StickyManagerDirective(module);\r\n StickyContainerDirective(module);\r\n StickyComponent(module);\r\n};","\r\nexport default function StickyManagerDirective(module) {\r\n angular.module(module || 'app')\r\n .directive('stickyManager', stickyManager);\r\n\r\n stickyManager.$inject = [];\r\n function stickyManager() {\r\n var directive = {\r\n restrict: 'A',\r\n controller: controller\r\n };\r\n return directive;\r\n function controller() {\r\n var ctrl = this;\r\n ctrl.$onInit = function () {\r\n ctrl.stickies = [];\r\n ctrl._header = document.querySelector('#header');\r\n };\r\n\r\n ctrl.stickPoint = 0;\r\n ctrl.getStickPoint = function (id) {\r\n var offset = ctrl._header.clientHeight;\r\n for (var i = 0; i < ctrl.stickies.length; i++) {\r\n var target = ctrl.stickies[i];\r\n if (target.id === id) {\r\n return offset;\r\n }\r\n else if (!target.controller.released && target.controller.sticking) {\r\n offset += target.element.height();\r\n }\r\n }\r\n return offset;\r\n };\r\n\r\n ctrl.registerSticky = function (id, element, controller) {\r\n var registration = {\r\n id: id,\r\n element: element,\r\n controller: controller\r\n };\r\n if (controller.prioritize) {\r\n ctrl.stickies.unshift(registration);\r\n }\r\n else {\r\n ctrl.stickies.push(registration);\r\n }\r\n };\r\n }\r\n }\r\n};","export default function StickyContainerDirective(module) {\r\n angular.module(module || 'app')\r\n .directive('stickyContainer', stickyContainer);\r\n \r\n function stickyContainer() {\r\n var directive = {\r\n restrict: 'A',\r\n require: {\r\n stickyManager: '?^^stickyManager'\r\n },\r\n bindToController: true,\r\n controller: controller,\r\n controllerAs: 'sc'\r\n };\r\n function controller($element, $timeout) {\r\n var ctrl = this;\r\n ctrl.getBottom = function () {\r\n return $element[0].getBoundingClientRect().bottom;\r\n };\r\n\r\n ctrl.scrollToTop = function () {\r\n $timeout(function () {\r\n var offset = $element[0].getBoundingClientRect().top;\r\n if (offset < 0) {\r\n angular.element('html, body').animate({\r\n scrollTop: '-=' + -(offset - (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(1) : 0))\r\n });\r\n }\r\n });\r\n };\r\n }\r\n controller.$inject = ['$element', '$timeout'];\r\n return directive;\r\n }\r\n};","/**\r\n * @ngdoc directive\r\n * @module components.sticky\r\n * @name components.sticky:sticky\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * Used for elements that stick to the top of the defined scrollable region when the user scrolls past the element. Do note that there is an issue with how the sticky element displays caused by differences in how this page is structured with our typical front end.\r\n * @param {string} scrollTarget Selector for the scrollable element that will be stuck to.\r\n * @param {function=} onStick Callback triggered when sticky element starts sticking. (not implemented)\r\n * @param {function=} onRelease Callback triggered when sticky element stops sticking. (not implemented)\r\n * @example\r\n \r\n \r\n
    \r\n

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac condimentum neque, vitae faucibus ipsum. Ut porttitor justo nec ante ultricies, eget luctus massa porta. Curabitur pellentesque consequat nulla in tempor. Nullam rutrum odio non mattis sagittis. Vestibulum tincidunt enim vitae ex ultrices, id finibus quam tincidunt. Vivamus hendrerit lorem vitae diam porta luctus. Mauris fermentum imperdiet tempus. Fusce eu lacus est. Curabitur vel condimentum enim, sit amet auctor urna. Nam volutpat enim enim, vel egestas justo fermentum hendrerit. Donec sagittis tincidunt accumsan. Donec feugiat tempor orci. Maecenas condimentum ligula at accumsan fermentum. Integer cursus tellus non dictum condimentum.

    \r\n \r\n

    Testing things

    \r\n
    \r\n

    Cras lacinia iaculis ex, eu laoreet turpis semper ac. In vulputate sagittis sem nec laoreet. Nunc nec ornare sapien. Nam quis lectus felis. Pellentesque at eros accumsan, tincidunt lorem quis, aliquam leo. Integer in aliquet dolor. Integer interdum posuere dignissim. Donec commodo ligula a quam mattis, quis pharetra neque porta. Morbi facilisis ligula vitae ligula dignissim, at sollicitudin nibh ultrices. Proin at facilisis magna. Sed fermentum varius pulvinar. Fusce iaculis nibh eu mi rutrum egestas in vel felis. Suspendisse pulvinar ante vel ante ullamcorper maximus.

    \r\n

    Vivamus urna est, convallis nec aliquam et, dictum a erat. Praesent nunc est, viverra sit amet urna ac, eleifend tincidunt ligula. Praesent porta luctus tellus vel gravida. Ut leo lorem, finibus et rhoncus in, ornare at sapien. Aenean mi nibh, accumsan maximus volutpat sit amet, tincidunt in erat. Morbi eros tellus, ullamcorper vitae odio sed, egestas placerat nunc. Morbi ac lacinia felis. Integer posuere facilisis turpis at sollicitudin. Donec odio tellus, posuere eget neque et, imperdiet lobortis ligula. Aliquam quis dolor rhoncus, iaculis lacus tempus, pellentesque turpis. Cras lobortis leo sit amet magna ullamcorper semper. Proin gravida neque id metus commodo congue. Praesent condimentum, quam imperdiet pulvinar convallis, ex tellus tincidunt sapien, quis vulputate ex nulla quis eros.

    \r\n

    Donec ornare lectus sit amet ipsum scelerisque, eu varius nisi tincidunt. Pellentesque vestibulum justo eget risus commodo, sed vehicula magna consequat. Etiam mollis risus sit amet magna pellentesque hendrerit. Donec ut lorem tincidunt, semper massa in, pretium mauris. Quisque in tincidunt est, et finibus dolor. Aenean ac dolor eu mi laoreet suscipit vitae sed ipsum. Curabitur placerat varius lorem ac rutrum. Fusce in nibh et magna luctus vulputate. Pellentesque sit amet dictum magna, vitae molestie nunc. Morbi iaculis sapien mollis nulla blandit convallis. In a elementum elit. Sed vel dolor condimentum lectus lacinia accumsan quis vitae diam.

    \r\n

    Duis lectus libero, tempor quis neque ut, feugiat lacinia ex. Nunc sed tortor eget lacus bibendum congue. Sed eget mi sit amet elit volutpat tempus et quis nunc. Mauris id aliquam nulla. Phasellus cursus scelerisque mi. Nulla a suscipit quam. Sed eleifend odio non tellus tincidunt iaculis. Mauris nec tortor justo. Fusce pretium, velit at ultricies mattis, justo elit ultricies nibh, a elementum metus nibh rhoncus lorem. Pellentesque vitae nunc vel ante facilisis aliquet tincidunt et dolor. Etiam ante augue, laoreet ac elit vitae, tristique vestibulum ipsum. Vivamus faucibus mauris non nunc convallis, interdum interdum enim sodales. Cras ipsum neque, dignissim eu vestibulum et, tincidunt non odio. Morbi non ornare odio. Duis dignissim, sem at vehicula porttitor, libero lorem finibus turpis, nec pharetra neque augue ut eros.

    \r\n
    \r\n
    \r\n \r\n (function() {\r\n angular.module('dataExample', ['components.sticky'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n }\r\n })();\r\n \r\n \r\n #content {\r\n height: 600px;\r\n overflow: auto;\r\n }\r\n \r\n
    \r\n */\r\nexport default function StickyComponent(module) {\r\n angular.module(module || 'app')\r\n .component('sticky', {\r\n bindings: {\r\n scrollTarget: '@',\r\n restrict: '@?',\r\n prioritize: '
    ',\r\n transclude: true,\r\n controller: stickyController\r\n });\r\n\r\n stickyController.$inject = ['$element', '$window', '$scope', '$timeout'];\r\n var id = 0;\r\n function stickyController($element, $window, $scope, $timeout) {\r\n var ctrl = this;\r\n ctrl.$id = id++;\r\n ctrl.$onInit = function () {\r\n ctrl.sticking = false;\r\n ctrl.stickyManager.registerSticky(ctrl.$id, $element, ctrl);\r\n };\r\n ctrl.$postLink = function () {\r\n ctrl._stylesReady = new Promise(ctrl._stylesReadyCheck);\r\n var position = $element.css('position');\r\n ($window.secondaryStylesReady || ctrl._stylesReady).then(function () {\r\n ctrl.$sticker = $element.find('>.sticker');\r\n ctrl.$content = ctrl.$sticker.find('> .content');\r\n ctrl._height = ctrl.$content.outerHeight();\r\n ctrl.$spacer = $element.find('>.spacer');\r\n ctrl.$scrollTarget = ctrl.scrollTarget ? angular.element(ctrl.scrollTarget) : angular.element($window);\r\n ctrl.$scrollTarget.on('scroll.sticky', ctrl.$$asyncUpdateSticky);\r\n ctrl.$window = angular.element($window).on('resize.sticky', ctrl.$$asyncUpdateSticky);\r\n ctrl.$$updateSticky();\r\n $scope.$on('updateSticky', ctrl.$$updateSticky)\r\n if (ctrl.onInit) {\r\n $timeout(function () {\r\n ctrl.onInit({\r\n sticking: ctrl.sticking,\r\n element: $element\r\n });\r\n });\r\n }\r\n });\r\n };\r\n\r\n ctrl._stylesReadyCheck = function (resolve, reject) {\r\n var display = $element.css('display');\r\n if (display !== 'inline' && display !== 'none') {\r\n resolve();\r\n }\r\n else {\r\n $timeout(function () {\r\n ctrl._stylesReadyCheck(resolve, reject);\r\n }, 100);\r\n }\r\n };\r\n\r\n ctrl.$$asyncUpdateSticky = function () {\r\n $scope.$evalAsync(ctrl.$$updateSticky);\r\n };\r\n\r\n ctrl.$$updateSticky = function (forceUpdate) {\r\n var isReleased = ctrl.released;\r\n ctrl.released = ctrl.$$isReleased();\r\n if (!isReleased && ctrl.released && ctrl.onRelease) {\r\n ctrl.onRelease({\r\n element: $element\r\n });\r\n }\r\n if (!ctrl.released) {\r\n var newSticky = ctrl.$$isSticky();\r\n if (newSticky !== ctrl.sticking || forceUpdate) {\r\n ctrl.sticking = newSticky;\r\n ctrl.$$updateStyling();\r\n if (ctrl.sticking && ctrl.onStick) {\r\n ctrl.onStick({\r\n element: $element\r\n });\r\n }\r\n \r\n }\r\n }\r\n ctrl.$content.css({\r\n maxHeight: ctrl.sticking ? 'calc(100vh - ' + ((ctrl.scrollTarget ? ctrl.$scrollTarget.offset().top : 0) + (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(ctrl.$id) : 0)) + 'px)' : ''\r\n });\r\n\r\n //if ($('#header').hasClass('alternate')) {\r\n // ctrl._height = 0;\r\n // $('#header').find('.spacer').css('height', '0');\r\n //}\r\n };\r\n\r\n ctrl.$$isSticky = function () {\r\n if (ctrl.restrict && !Foundation.MediaQuery.atLeast(ctrl.restrict)) {\r\n return false;\r\n }\r\n var offset = $element[0].getBoundingClientRect().top + parseInt($element.css('padding-top')) + parseInt($element.css('margin-top'));\r\n var topOffset = (ctrl.scrollTarget ? ctrl.$scrollTarget.offset().top : 0) + (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(ctrl.$id) : 0);\r\n return offset <= topOffset;\r\n };\r\n\r\n ctrl.$$isReleased = function () {\r\n if (!ctrl.stickyContainer || (ctrl.restrict && !Foundation.MediaQuery.atLeast(ctrl.restrict))) {\r\n return false;\r\n }\r\n return ctrl.$content.outerHeight() >= ctrl.stickyContainer.getBottom() - (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(ctrl.$id) : 0);\r\n };\r\n\r\n ctrl.$$updateStyling = function () {\r\n var elementOffset = $element[0].getBoundingClientRect();\r\n ctrl.$sticker.css({\r\n left: ctrl.sticking ? elementOffset.left : '',\r\n width: ctrl.sticking ? elementOffset.width : '',\r\n top: ctrl.sticking ? (ctrl.scrollTarget ? ctrl.$scrollTarget.offset().top : 0) + (ctrl.stickyManager ? ctrl.stickyManager.getStickPoint(ctrl.$id) : 0) : ''\r\n });\r\n ctrl._height = ctrl.$content.outerHeight();\r\n };\r\n\r\n ctrl.$onDestroy = function () {\r\n ctrl.$scrollTarget.off('scroll.sticky');\r\n ctrl.$window.off('resize.sticky');\r\n };\r\n }\r\n};","import CarouselComponent from './carousel.component';\r\nimport CarouselNavComponent from './carousel-nav.component';\r\nimport CarouselSyncComponent from './carousel-sync.component';\r\nimport CarouselResource from './carousel-resource.factory';\r\nimport CarouselController from './carousel.controller';\r\nimport RelatedProductsCarouselController from './related-products-carousel.controller';\r\n\r\nexport default function Carousel(module) {\r\n CarouselComponent(module);\r\n CarouselNavComponent(module);\r\n CarouselSyncComponent(module);\r\n CarouselResource(module);\r\n CarouselController(module);\r\n RelatedProductsCarouselController(module);\r\n};","/**\r\n * @ngdoc directive\r\n * @module components.carousel\r\n * @name components.carousel:carouselNav\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * Generates a set of buttons that used to change the current slide of the attached carousel. Must be nested beneath a (carousel-sync)[/docs/api/components.carousel:carouselSync] tag to function.\r\n * @param {array} slides Same array that is passed to its associated carousel. Used to generate a matching number of buttons.\r\n * @example\r\n \r\n \r\n
    \r\n \r\n \r\n \r\n

    {{slide.name}}

    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n (function() {\r\n angular.module('dataExample', ['components.carousel'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n $scope.slides = [];\r\n for (var i=0; i<5; i++) {\r\n $scope.slides.push({\r\n name: 'Slide ' + i,\r\n summary: '

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eu pharetra ex. Curabitur eu nunc id dolor laoreet consectetur nec ornare elit. Vivamus elementum turpis ac mi vehicula fermentum. Morbi eget neque justo. Cras id elit condimentum felis vehicula suscipit. Maecenas sagittis pulvinar ante, eu cursus justo placerat ac. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacus leo, tristique eu nunc a, placerat placerat tortor. Fusce eget consectetur ante. Suspendisse lobortis dui libero. In ac libero vel eros ultricies auctor nec in felis. Vestibulum sed odio orci.

    Curabitur pellentesque lobortis dui, et luctus ex convallis id. Cras scelerisque augue at imperdiet placerat. In diam velit, congue at diam ut, iaculis feugiat turpis. Donec id elit id elit vestibulum semper. Curabitur quis neque quis ipsum ultricies tincidunt vitae varius lectus. Proin at erat vestibulum, hendrerit urna ac, cursus mi. Cras pulvinar at felis vitae gravida. Nunc egestas rhoncus felis, vel vestibulum nisl condimentum quis. Vestibulum quis iaculis elit.

    '\r\n });\r\n }\r\n }\r\n })();\r\n
    \r\n
    \r\n */\r\nexport default function CarouselNavComponent(module) {\r\n\tangular.module(module || 'app')\r\n\t\t.component('carouselNav', {\r\n\t\t bindings: {\r\n slides: '<'\r\n\t\t },\r\n\t\t\trequire: {\r\n\t\t\t\t'carouselSync': '^carouselSync'\r\n\t\t\t},\r\n\t\t\ttemplate: '',\r\n\t\t\tcontroller: carouselNavController\r\n\t\t});\r\n\r\n\tcarouselNavController.$inject = ['$scope'];\r\n\tfunction carouselNavController($scope) {\r\n\t\tvar ctrl = this;\r\n\t\tctrl.$onInit = function () {\r\n\t\t\tctrl.index = 0;\r\n\t\t\tctrl.carouselIndex = ctrl.carouselSync.registerCarousel(ctrl);\r\n\t\t}\r\n\r\n\t\tctrl.goToSlide = function (index) {\r\n\t\t $scope.$evalAsync(function () {\r\n\t\t ctrl.index = index;\r\n\t\t });\r\n\t\t}\r\n\t}\r\n};","/**\r\n * @ngdoc directive\r\n * @module components.carousel\r\n * @name components.carousel:carouselSync\r\n * @scope\r\n * @restrict E\r\n * @description\r\n * Container that syncs carousels and carousel navs.\r\n * @example\r\n \r\n \r\n
    \r\n \r\n \r\n \r\n

    {{slide.name}}

    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n (function() {\r\n angular.module('dataExample', ['components.carousel'])\r\n .controller('exampleController', exampleController);\r\n\r\n exampleController.$inject = ['$scope'];\r\n function exampleController($scope) {\r\n $scope.slides = [];\r\n for (var i=0; i<5; i++) {\r\n $scope.slides.push({\r\n name: 'Slide ' + i,\r\n summary: '

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam eu pharetra ex. Curabitur eu nunc id dolor laoreet consectetur nec ornare elit. Vivamus elementum turpis ac mi vehicula fermentum. Morbi eget neque justo. Cras id elit condimentum felis vehicula suscipit. Maecenas sagittis pulvinar ante, eu cursus justo placerat ac. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacus leo, tristique eu nunc a, placerat placerat tortor. Fusce eget consectetur ante. Suspendisse lobortis dui libero. In ac libero vel eros ultricies auctor nec in felis. Vestibulum sed odio orci.

    Curabitur pellentesque lobortis dui, et luctus ex convallis id. Cras scelerisque augue at imperdiet placerat. In diam velit, congue at diam ut, iaculis feugiat turpis. Donec id elit id elit vestibulum semper. Curabitur quis neque quis ipsum ultricies tincidunt vitae varius lectus. Proin at erat vestibulum, hendrerit urna ac, cursus mi. Cras pulvinar at felis vitae gravida. Nunc egestas rhoncus felis, vel vestibulum nisl condimentum quis. Vestibulum quis iaculis elit.

    '\r\n });\r\n }\r\n }\r\n })();\r\n
    \r\n
    \r\n */\r\nexport default function CarouselSyncComponent(module) {\r\n angular.module(module || 'app')\r\n\t\t.component('carouselSync', {\r\n\t\t\tcontroller: carouselSyncController\r\n\t\t});\r\n\r\n\tfunction carouselSyncController() {\r\n\t\tvar ctrl = this;\r\n\t\tctrl.$onInit = function() {\r\n\t\t\tctrl.$carousels = [];\r\n };\r\n\t\tctrl.registerCarousel = function(carousel) {\r\n ctrl.$carousels.push(carousel);\r\n return ctrl.$carousels.length - 1;\r\n\t\t};\r\n\r\n ctrl.updateCarousels = function (index, carouselIndex) {\r\n for (var i = 0; i < ctrl.$carousels.length; i++) {\r\n if (i !== carouselIndex) {\r\n ctrl.$carousels[i].goToSlide(index, true, true);\r\n }\r\n }\r\n };\r\n\t}\r\n};","export default function CarouselResource(module) {\r\n angular.module(module || 'app')\r\n .factory('carouselResource', carouselResource);\r\n\r\n carouselResource.$inject = ['$http'];\r\n function carouselResource($http) {\r\n return {\r\n slides: function (params) {\r\n return $http.get('/api/carousel/', {\r\n params: params\r\n });\r\n }\r\n };\r\n }\r\n};","export default function CarouselController(module) {\r\n angular.module(module || 'app').controller('CarouselController', CarouselController);\r\n CarouselController.$inject = ['$scope', '$element', '$window'];\r\n\r\n function CarouselController($scope, $element, $window) {\r\n var ctrl = this;\r\n\r\n ctrl.blog = {\r\n spacing: { small: 16, medium: 58, large: 58 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n return {};\r\n }\r\n };\r\n ctrl.videos = {\r\n spacing: { small: 16, medium: 58, large: 58 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n pointerEvents: indexDiff === 0 ? '' : 'none',\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n };\r\n ctrl.products = {\r\n spacing: { small: 16, medium: 58, large: 58 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n //pointerEvents: indexDiff >= 0 && indexDiff <= slideCount - 1 ? '' : 'none',\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n };\r\n ctrl.reviews = {\r\n spacing: { small: 16, medium: 92, large: 92 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n pointerEvents: indexDiff === 0 ? '' : 'none',\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n };\r\n ctrl.images = {\r\n spacing: { small: 16, medium: 92, large: 92 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n pointerEvents: indexDiff === 0 ? '' : 'none',\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n };\r\n ctrl.caseStudies = {\r\n spacing: { small: 16, medium: 32, large: 48 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n }\r\n ctrl.services = {\r\n spacing: { small: 16, medium: 32, large: 48 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n }\r\n }\r\n};","export default function RelatedProductsCarouselController(module) {\r\n angular.module(module || 'app').controller('RelatedProductsCarouselController', RelatedProductsCarouselController);\r\n RelatedProductsCarouselController.$inject = ['$scope', '$element', '$attrs', 'carouselResource'];\r\n\r\n function RelatedProductsCarouselController($scope, $element, $attrs, carouselResource) {\r\n var vm = this;\r\n vm.modifiers = {\r\n spacing: { small: 16, medium: 58, large: 58 },\r\n slideWidth: 1,\r\n slideStyles: function (indexDiff, slideCount) {\r\n var opacity = ((indexDiff < 0 ? indexDiff : (indexDiff - slideCount + 1)) * .5);\r\n return {\r\n //pointerEvents: indexDiff >= 0 && indexDiff <= slideCount - 1 ? '' : 'none',\r\n opacity: indexDiff < 0 ? 1 + opacity : 1 - opacity\r\n };\r\n }\r\n };\r\n\r\n vm.$onInit = function () {\r\n if (!$attrs.products) {\r\n carouselResource.slides(JSON.parse($attrs.params)).then(slides => {\r\n vm.products = slides.data;\r\n });\r\n }\r\n else {\r\n vm.products = JSON.parse($attrs.products);\r\n }\r\n if ($attrs.accessories) {\r\n vm.accessories = JSON.parse($attrs.accessories);\r\n }\r\n }\r\n }\r\n};","export default function MultiCheckbox(module) {\r\n angular.module(module)\r\n .component('multiCheckbox', {\r\n bindings: {\r\n allLabel: '@?',\r\n options: '<',\r\n modelAsString: '\r\n \r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n `,\r\n controller: multiCheckboxController,\r\n controllerAs: 'vm'\r\n });\r\n var id = 1;\r\n multiCheckboxController.$inject = ['$element', '$scope', '$compile'];\r\n function multiCheckboxController($element, $scope, $compile) {\r\n var vm = this;\r\n\r\n vm.$onInit = () => {\r\n vm._id = id++;\r\n $scope.$on('clear', vm.clear);\r\n vm.ngModel.$viewChangeListeners.push(vm.updateOptionsStatus);\r\n }\r\n\r\n vm.$onChanges = changes => {\r\n if (changes.options && changes.options.currentValue) {\r\n vm.updateOptionsStatus();\r\n }\r\n }\r\n\r\n vm.clear = () => {\r\n vm.updateOptionsStatus(true);\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateOptionsStatus = (clear) => {\r\n vm.selections = clear ? [] : vm.ngModel.$viewValue || [];\r\n if (vm.options) {\r\n var stringifiedSelections = [];\r\n vm.selections.forEach(selection => {\r\n stringifiedSelections.push(Array.isArray(selection) ? JSON.stringify(selection) : selection);\r\n })\r\n vm.options.forEach(option => {\r\n option.active = stringifiedSelections.indexOf(Array.isArray(option.value) ? JSON.stringify(option.value) : option.value) > -1;\r\n });\r\n }\r\n }\r\n\r\n vm.updateValue = value => {\r\n var stringifiedSelections = [];\r\n vm.selections.forEach(selection => {\r\n stringifiedSelections.push(Array.isArray(selection) ? JSON.stringify(selection) : selection);\r\n })\r\n var index = stringifiedSelections.indexOf(Array.isArray(value) ? JSON.stringify(value) : value);\r\n if (index === -1) {\r\n vm.selections.push(value);\r\n }\r\n else {\r\n vm.selections.splice(index, 1);\r\n }\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateModel = () => {\r\n var model = vm.modelAsString ? vm.ngModel.$setViewValue(vm.selections.join(',')) : vm.selections;\r\n if (vm.ngModel) {\r\n vm.ngModel.$setViewValue(model);\r\n }\r\n if (vm.onChange) {\r\n vm.onChange({\r\n value: model\r\n });\r\n }\r\n }\r\n }\r\n}","export default function FeedResource(module) {\r\n angular.module(module || 'app')\r\n .factory('feedResource', feedResource);\r\n\r\n /**\r\n * @ngdoc function\r\n * @name feedResource\r\n * @description\r\n * Collection of api routes used for feeds.\r\n * @requires $resource\r\n * */\r\n feedResource.$inject = ['$http'];\r\n function feedResource($http) {\r\n return {\r\n list: function (params) {\r\n return $http.get('/api/feed/', {\r\n params: params\r\n });\r\n },\r\n calibrateFilters: (ids, pageId, filters, allowedContentTypes, deepSearch, culture) => {\r\n return $http.get('/api/feed/filters/', {\r\n params: {\r\n ids: ids,\r\n pageId: pageId,\r\n filters: filters,\r\n allowedContentTypes: allowedContentTypes,\r\n deepSearch: deepSearch,\r\n culture, culture\r\n }\r\n })\r\n }\r\n };\r\n }\r\n};","export default function FeedGridController(module) {\r\n /**\r\n * @ngdoc controller\r\n * @name FeedGridController\r\n * @description\r\n * Collects information used to filter the feed and sets up configuration for modal carousel.\r\n * */\r\n angular.module(module || 'app')\r\n .controller('FeedGridController', FeedGridController);\r\n\r\n FeedGridController.$inject = ['$scope', '$attrs', '$window', '$timeout', '$q', 'feedResource'];\r\n function FeedGridController($scope, $attrs, $window, $timeout, $q, feedResource) {\r\n var vm = this;\r\n vm.$onInit = function () {\r\n vm.params = JSON.parse($attrs.parameters);\r\n vm.defaultState = JSON.parse($attrs.defaultState);\r\n vm._filtersData = JSON.parse($attrs.filters);\r\n vm.categories = [];\r\n vm._filtersData.forEach(filter => {\r\n vm.categories.push([]);\r\n });\r\n var hasHistory = $window.history.state;\r\n if ($window.history && $attrs.preserveFilters === 'true') {\r\n $window.addEventListener('beforeunload', event => {\r\n var state = angular.copy(vm.params);\r\n if (state.categories) {\r\n state.categoriesRaw = state.categories.map(item => {\r\n return Array.isArray(item.tags) ? item.tags : Object.values(item.tags);\r\n });\r\n }\r\n $window.history.replaceState(state, document.querySelector('title').innerText);\r\n });\r\n if (hasHistory) {\r\n vm.params = angular.copy($window.history.state);\r\n if ($window.history.state.categoriesRaw) {\r\n vm.categories = $window.history.state.categoriesRaw;\r\n delete vm.params.categoriesRaw;\r\n }\r\n }\r\n }\r\n vm.page = vm.params.page;\r\n vm.searchTerm = vm.params.searchTerm;\r\n vm.sortType = vm.params.sortType;\r\n vm.location = vm.params.location;\r\n vm.filters = [];\r\n\r\n vm._calibrateFilters();\r\n }\r\n vm.openModal = function ($event, index, id) {\r\n $event.preventDefault();\r\n $scope.$root.lockScroll = true;\r\n if (vm.carousel) {\r\n vm.carousel.goToSlide(index, false);\r\n }\r\n this.modalOpen = true;\r\n $scope.$broadcast('playVideo', id + '-' + index);\r\n $timeout(function () {\r\n $scope.$broadcast('feedModalOpened', index);\r\n })\r\n };\r\n\r\n vm.searchByText = (field) => {\r\n vm.params = angular.copy(vm.params);\r\n vm.params[field] = vm[field];\r\n vm.closeFilters();\r\n }\r\n\r\n vm.playVideo = function (index) {\r\n $scope.$broadcast('playVideo', vm._contentTypeAlias + '-' + index);\r\n }\r\n\r\n vm.pauseVideo = function (previousIndex) {\r\n $scope.$broadcast('pauseVideo', vm._contentTypeAlias + '-' + previousIndex);\r\n }\r\n\r\n vm.closeModal = function () {\r\n this.modalOpen = false;\r\n $scope.$root.lockScroll = false;\r\n $scope.$broadcast('closeVideos');\r\n $scope.$broadcast('feedModalClosed');\r\n };\r\n\r\n vm.blockClose = function (event) {\r\n event.stopPropagation();\r\n };\r\n\r\n vm.registerCarousel = function (carousel) {\r\n vm.carousel = carousel;\r\n };\r\n\r\n vm.updateSlides = function (slides, page) {\r\n if (slides && slides.length) {\r\n vm._contentTypeAlias = slides[0].contentTypeAlias;\r\n }\r\n if (page) {\r\n vm.page = page;\r\n }\r\n vm._resetCheck();\r\n vm.modalSlides = angular.copy(slides);\r\n };\r\n\r\n vm.updateHash = function (slide) {\r\n if (slide) {\r\n $window.location.hash = slide.urlName;\r\n }\r\n };\r\n\r\n vm.syncAnimations = function () {\r\n if ($window.wow) {\r\n $timeout(function () {\r\n $window.wow.sync();\r\n });\r\n }\r\n };\r\n\r\n vm.updateCountry = () => {\r\n vm.params = angular.copy(vm.params);\r\n vm.params.country = vm.country;\r\n vm._calibrateFilters();\r\n }\r\n\r\n vm.updateCategories = () => {\r\n if (vm._categoriesCalibrated) {\r\n var categories = [];\r\n vm.categories.forEach((category, i) => {\r\n categories.push({\r\n tags: typeof(category) === 'string' ? [category] : angular.copy(category),\r\n orLogic: vm.filters[i].orLogic\r\n });\r\n });\r\n vm.params = angular.copy(vm.params);\r\n vm.params.categories = categories.length ? categories : null;\r\n vm.page = 1;\r\n }\r\n }\r\n\r\n vm.checkCaps = function () {\r\n $scope.$broadcast('checkCaps');\r\n };\r\n\r\n vm._calibrateFilters = () => {\r\n var calibrationPromises = [];\r\n vm._filtersData.forEach(filters => {\r\n calibrationPromises.push(feedResource.calibrateFilters(vm.params.ids, vm.params.pageId, filters.tags, vm.params.allowedContentTypes, vm.params.deepSearch, vm.params.culture));\r\n });\r\n calibrationPromises.forEach((promise, i) => {\r\n promise.then(function (result) {\r\n var filters = result.data;\r\n filters.forEach(filter => {\r\n filter.value = filter.key.replaceAll('-', '');\r\n filter.label = filter.name;\r\n\r\n });\r\n vm.filters[this] = {\r\n tags: filters,\r\n orLogic: vm._filtersData[this].orLogic\r\n };\r\n }.bind(i));\r\n });\r\n\r\n $q.all(calibrationPromises)\r\n .then(() => {\r\n vm._categoriesCalibrated = true;\r\n });\r\n }\r\n\r\n vm.updateSort = () => {\r\n vm.params = angular.copy(vm.params);\r\n vm.params.sortType = vm.sortType;\r\n vm._resetCheck();\r\n };\r\n\r\n vm.openFilters = () => {\r\n vm.filtersOpen = true;\r\n };\r\n\r\n vm.closeFilters = () => {\r\n vm.filtersOpen = false;\r\n }\r\n\r\n vm.reset = () => {\r\n var defaultData = JSON.parse(JSON.stringify(vm.defaultState));\r\n if (vm.params.location) {\r\n defaultData.location = vm.params.location;\r\n }\r\n defaultData.categories = vm.categories.length ? vm.categories : null;\r\n vm.params.page = vm.page;\r\n vm.page = defaultData.page;\r\n vm.searchTerm = defaultData.searchTerm;\r\n vm.country = null;\r\n vm.sortType = defaultData.sortType;\r\n if (vm.filters && vm.filters.length) {\r\n var categories = []\r\n vm.filters.forEach((filter, i) => {\r\n filter.tags.forEach(tag => {\r\n tag.active = false;\r\n });\r\n categories.push({\r\n tags: [],\r\n orLogic: filter.orLogic\r\n });\r\n if (vm.categories[i].length) {\r\n vm.categories[i].splice(0, vm.categories[i].length);\r\n }\r\n });\r\n defaultData.categories = categories;\r\n }\r\n $scope.$broadcast('clear');\r\n vm.params = defaultData;\r\n vm.resetable = false;\r\n }\r\n\r\n vm._resetCheck = () => {\r\n vm.resetable = vm.page > 1 || JSON.stringify(vm.defaultState) !== JSON.stringify(vm.params);\r\n }\r\n }\r\n};","export default function FeedResource(module) {\r\n angular.module(module || 'app')\r\n .factory('searchResource', searchResource);\r\n\r\n /**\r\n * @ngdoc function\r\n * @name feedResource\r\n * @description\r\n * Collection of api routes used for feeds.\r\n * @requires $resource\r\n * */\r\n searchResource.$inject = ['$http'];\r\n function searchResource($http) {\r\n return {\r\n list: function (params) {\r\n return $http.get('/api/search/', {\r\n params: params\r\n });\r\n }\r\n };\r\n }\r\n};","export default function SearchController(module) {\r\n /**\r\n * @ngdoc controller\r\n * @name FeedGridController\r\n * @description\r\n * Collects information used to filter the feed and sets up configuration for modal carousel.\r\n * */\r\n angular.module(module || 'app')\r\n .controller('SearchController', SearchController);\r\n\r\n SearchController.$inject = ['$scope', '$attrs', '$window', '$timeout', '$q', 'feedResource', 'productResource'];\r\n function SearchController($scope, $attrs, $window, $timeout, $q, feedResource, productResource) {\r\n var vm = this;\r\n vm.$onInit = function () {\r\n vm.params = JSON.parse($attrs.parameters);\r\n vm.labelOverides = JSON.parse($attrs.labelOverrides);\r\n var hasHistory = $window.history.state;\r\n if ($window.history) {\r\n $window.addEventListener('beforeunload', event => {\r\n var state = angular.copy(vm.params);\r\n if (state.categories) {\r\n state.categoriesRaw = state.categories.map(item => item.tags);\r\n }\r\n state.page = vm.page;\r\n $window.history.replaceState(state, document.querySelector('title').innerText);\r\n });\r\n if (hasHistory) {\r\n vm.params = angular.copy($window.history.state);\r\n }\r\n }\r\n vm.pageTypes = angular.copy(vm.params.pageTypes || []);\r\n vm.page = vm.params.page;\r\n vm.searchTerm = vm.params.searchTerm;\r\n vm.sortType = vm.params.sortType;\r\n vm._filtersData = JSON.parse($attrs.filters);\r\n vm.filters = [];\r\n vm.initCategories = JSON.parse($attrs.categories);\r\n vm._calibrateFilters();\r\n vm.includeDiscontinued = vm.params.includeDiscontinued === '1';\r\n vm.products = [];\r\n vm.product = vm.params.product;\r\n if ($attrs.customerId) {\r\n var deferred = $q.defer();\r\n vm.cludoReady = deferred.promise;\r\n $window.loadScript('https://customer.cludo.com/scripts/bundles/analytics/1.0.3/cludo-statistics.app.js', () => {\r\n CludoSearch.initialize($attrs.customerId, $attrs.engineId, true);\r\n deferred.resolve();\r\n });\r\n }\r\n vm._videoPopup = $('#video-popup');\r\n vm._videoPopup.on('closed.zf.reveal', () => {\r\n vm.setIframeUrl('');\r\n });\r\n\r\n if ($attrs.withProducts === '1') {\r\n vm._getProducts(true);\r\n }\r\n }\r\n\r\n //Video modal start\r\n vm.openVideoModal = (event, src) => {\r\n if (event.currentTarget.className == \"open-video\") {\r\n event.preventDefault();\r\n if (!src.includes('embed') && src.includes('youtu')) {\r\n var videoId = vm.getVideoEmbedUrl(src);\r\n var videoUrl = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1';\r\n vm.setIframeUrl(videoUrl);\r\n }\r\n else {\r\n vm.setIframeUrl(src);\r\n }\r\n\r\n vm._videoPopup.foundation('open');\r\n }\r\n else {\r\n var href = event.currentTarget.href;\r\n var hostUrl = $window.location.origin;\r\n var modal = $(\"#leave-message\");\r\n if (!href.includes(hostUrl)) {\r\n event.preventDefault();\r\n modal.find(\"a[target='_blank']\").attr(\"href\", href);\r\n var spanTag = \"\" + href + \"\";\r\n if (modal.html().includes(\"{url}\")) {\r\n modal.html(modal.html().replace(/{url}/g, spanTag));\r\n }\r\n else {\r\n modal.find(\".external-url\").text(href);\r\n }\r\n modal.foundation('open');\r\n }\r\n }\r\n }\r\n\r\n vm.setIframeUrl = (src) => {\r\n document.getElementById('video-iframe').innerHTML = '';\r\n }\r\n\r\n vm.getVideoEmbedUrl = (url) => {\r\n const regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\r\n const match = url?.match(regExp);\r\n return (match && match[2].length === 11)\r\n ? match[2]\r\n : null;\r\n }\r\n //Video modal end\r\n\r\n vm._getProducts = (initLoad) => {\r\n let brand = '';\r\n let isDiscontinued = false;\r\n if (vm.params.categories && vm.params.categories.length && vm.params.categories[0].tags && vm.params.categories[0].tags.length) {\r\n brand = vm.params.categories[0].tags[0];\r\n }\r\n\r\n if (vm.params.includeDiscontinued) {\r\n isDiscontinued = vm.params.includeDiscontinued;\r\n }\r\n if (!initLoad) {\r\n vm.product = null;\r\n vm.params.product = null;\r\n }\r\n productResource.list({\r\n culture: vm.params.culture,\r\n brand: brand,\r\n isDiscontinued: isDiscontinued\r\n }).then((res) => {\r\n vm.products = res.data ?? [];\r\n });\r\n }\r\n\r\n vm.searchByText = () => {\r\n vm.params = angular.copy(vm.params);\r\n vm.page = 1;\r\n vm.params.page = 1;\r\n vm.params.searchTerm = vm.searchTerm;\r\n }\r\n\r\n vm.updateProduct = () => {\r\n vm.params = angular.copy(vm.params);\r\n //vm.params.categories = null;\r\n vm.params.product = vm.product;\r\n /*for (var i = 0; i < vm.categories.length; i++) {\r\n vm.categories[i] = null;\r\n }\r\n vm.params.categories = null;*/\r\n vm.page = 1;\r\n vm.params.page = 1;\r\n }\r\n\r\n vm.updateDiscontinued = () => {\r\n vm.params = angular.copy(vm.params);\r\n vm.params.includeDiscontinued = vm.includeDiscontinued ? \"1\" : \"0\";\r\n vm.page = 1;\r\n vm.params.page = 1;\r\n vm._getProducts();\r\n }\r\n\r\n vm.updateCategories = (index) => {\r\n if (vm._categoriesCalibrated) {\r\n var categories = [];\r\n vm.categories.forEach((category, i) => {\r\n categories.push({\r\n tags: typeof (category) === 'string' ? [category] : angular.copy(category),\r\n orLogic: vm.filters[i].orLogic\r\n });\r\n });\r\n vm.params = angular.copy(vm.params);\r\n /*vm.product = null;\r\n vm.params.product = null;*/\r\n vm.params.categories = categories.length ? categories : null;\r\n vm.page = 1;\r\n vm._getProducts();\r\n }\r\n }\r\n\r\n vm.syncPage = (page, items) => {\r\n vm.page = page;\r\n if (vm.cludoReady) {\r\n vm.cludoReady.then(() => {\r\n var queryLog = CludoSearch.trackQuery(\r\n vm.searchTerm,\r\n vm.searchTerm + '-' + new Date().getTime(),\r\n items.length,\r\n page,\r\n $attrs.referer\r\n );\r\n CludoSearch.trackClicks(queryLog, '.widget-search .search-result');\r\n });\r\n }\r\n }\r\n\r\n vm.updatePageTypes = () => {\r\n vm.params = angular.copy(vm.params);\r\n vm.page = 1;\r\n vm.params.page = 1;\r\n vm.params.pageTypes = angular.copy(vm.pageTypes);\r\n }\r\n\r\n vm.updateSort = () => {\r\n vm.params = angular.copy(vm.params);\r\n vm.params.sortType = vm.sortType;\r\n vm.page = 1;\r\n vm.params.page = 1;\r\n };\r\n\r\n vm.openFilters = () => {\r\n vm.filtersOpen = true;\r\n };\r\n\r\n vm.closeFilters = () => {\r\n vm.filtersOpen = false;\r\n }\r\n\r\n vm._calibrateFilters = () => {\r\n vm.categories = [];\r\n var sourceIds = $attrs.sourceId ? [$attrs.sourceId] : [];\r\n var calibrationPromises = [];\r\n vm._filtersData.forEach(filters => {\r\n calibrationPromises.push(feedResource.calibrateFilters(sourceIds, 0, filters.tags, null, null, vm.params.culture));\r\n });\r\n calibrationPromises.forEach((promise, i) => {\r\n promise.then(function (result) {\r\n var filters = result.data;\r\n var matches = [];\r\n filters.forEach(filter => {\r\n filter.value = filter.key.replaceAll('-', '');\r\n filter.label = filter.name;\r\n if (vm.initCategories.length) {\r\n if (vm.initCategories.indexOf(filter.value) > -1) {\r\n matches.push(filter.value);\r\n }\r\n }\r\n });\r\n vm.filters[this] = {\r\n tags: filters,\r\n orLogic: vm._filtersData[this].orLogic\r\n };\r\n vm.categories[this] = matches[0];\r\n }.bind(i));\r\n });\r\n\r\n $q.all(calibrationPromises)\r\n .then(() => {\r\n vm._categoriesCalibrated = true;\r\n });\r\n }\r\n }\r\n};","export default function LocationSearchComponent(module) {\r\n angular.module(module)\r\n .component('locationSearch', {\r\n bindings: {\r\n placeholder: '@',\r\n countries: '\r\n \r\n `,\r\n controller: LocationSearchController,\r\n controllerAs: 'vm'\r\n });\r\n\r\n LocationSearchController.$inject = ['$scope', '$element', 'helper'];\r\n function LocationSearchController($scope, $element, helper) {\r\n var vm = this;\r\n\r\n vm.$onInit = function () {\r\n vm._input = $element[0].querySelector('input');\r\n vm._wrapListeners();\r\n vm._input.addEventListener('focus', vm.resetModel);\r\n\r\n vm._scriptReady\r\n .then(() => {\r\n vm._autocomplete = new google.maps.places.Autocomplete(vm._input, {\r\n fields: ['formatted_address', 'geometry'],\r\n componentRestrictions: { country: vm.countries }\r\n });\r\n vm._autocomplete.addListener(\"place_changed\", () => {\r\n var place = vm._autocomplete.getPlace();\r\n $scope.$evalAsync(() => {\r\n vm.model = {\r\n latitude: place.geometry.location.lat(),\r\n longitude: place.geometry.location.lng()\r\n };\r\n vm.address = place.formatted_address;\r\n vm.updateModel();\r\n if (vm._delayedSubmit) {\r\n vm._delayedSubmit = false;\r\n $scope.$emit('triggerSubmit');\r\n }\r\n });\r\n });\r\n });\r\n };\r\n\r\n vm.$onChanges = changes => {\r\n if (changes.model.isFirstChange()) {\r\n vm._scriptReady = helper.loadGoogleScripts(vm.apiKey);\r\n }\r\n if (changes.model.currentValue) {\r\n if (!vm.address && changes.model.currentValue.latitude && changes.model.currentValue.longitude) {\r\n vm._scriptReady.then(() => {\r\n var geocoder = new google.maps.Geocoder();\r\n geocoder.geocode({\r\n location: {\r\n lat: vm.model.latitude,\r\n lng: vm.model.longitude\r\n }\r\n })\r\n .then(response => {\r\n $scope.$evalAsync(() => {\r\n vm.address = response.results[0].formatted_address;\r\n });\r\n });\r\n })\r\n }\r\n }\r\n }\r\n\r\n vm._wrapListeners = () => {\r\n var _addEventListener = vm._input.addEventListener;\r\n vm._input.addEventListener = (type, listener) => {\r\n const _listener = listener;\r\n switch (type) {\r\n case 'keydown':\r\n listener = (event) => {\r\n /* Simulate a 'down arrow' keypress if no address has been selected */\r\n const suggestionSelected = document.getElementsByClassName('pac-item-selected').length;\r\n if (event.key === 'Enter' && !suggestionSelected) {\r\n const e = new KeyboardEvent('keydown', {\r\n key: 'ArrowDown',\r\n code: 'ArrowDown',\r\n keyCode: 40,\r\n });\r\n event.preventDefault();\r\n vm._delayedSubmit = true;\r\n _listener.apply(vm._input, [e])\r\n }\r\n _listener.apply(vm._input, [event])\r\n }\r\n break;\r\n case 'blur':\r\n listener = (event) => {\r\n const suggestionSelected = document.getElementsByClassName('pac-item-selected').length;\r\n if (!suggestionSelected) {\r\n event.preventDefault();\r\n vm._delayedSubmit = false;\r\n google.maps.event.trigger(vm._input, 'keydown', {\r\n key: 'ArrowDown',\r\n code: 'ArrowDown',\r\n keyCode: 40,\r\n stopPropagation: () => { },\r\n preventDefault: () => { }\r\n });\r\n }\r\n _listener.apply(vm._input, [event])\r\n }\r\n break;\r\n }\r\n _addEventListener.apply(vm._input, [type, listener])\r\n }\r\n }\r\n\r\n vm.updateModel = () => {\r\n vm.ngModel.$setViewValue(vm.model);\r\n if (vm.onChange) {\r\n vm.onChange({\r\n coordinates: vm.model\r\n });\r\n }\r\n };\r\n\r\n vm.resetModel = () => {\r\n if (vm.model) {\r\n $scope.$evalAsync(() => {\r\n vm.model = undefined;\r\n delete vm.address;\r\n vm.updateModel();\r\n });\r\n }\r\n }\r\n }\r\n}","export default function CheckboxDropdownComponent(module) {\r\n angular.module(module)\r\n .component('checkboxDropdown', {\r\n bindings: {\r\n options: '<',\r\n placeholder: '@?',\r\n modelAsString: '\r\n {{vm.text}}\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n clear\r\n
    \r\n `,\r\n controller: checkboxDropdownController,\r\n controllerAs: 'vm'\r\n });\r\n var id = 1;\r\n checkboxDropdownController.$inject = ['$element', '$scope', '$compile'];\r\n function checkboxDropdownController($element, $scope, $compile) {\r\n var vm = this;\r\n\r\n vm.$onInit = () => {\r\n vm._id = id++;\r\n if (vm.placeholder) {\r\n $element[0].addEventListener('mouseleave', vm.close);\r\n }\r\n $scope.$on('clear', vm.clear);\r\n vm.ngModel.$viewChangeListeners.push(vm.updateOptionsStatus);\r\n }\r\n\r\n vm.$onChanges = changes => {\r\n if (changes.options && changes.options.currentValue) {\r\n vm._disabled = changes.options.currentValue && !changes.options.currentValue.length;\r\n if (vm._disabled) {\r\n $element[0].setAttribute('disabled', 'disabled');\r\n }\r\n else {\r\n $element[0].removeAttribute('disabled');\r\n }\r\n vm.updateOptionsStatus();\r\n }\r\n }\r\n\r\n vm.clear = () => {\r\n vm.updateOptionsStatus(true);\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateOptionsStatus = (clear) => {\r\n vm.selections = clear ? [] : vm.ngModel.$viewValue || [];\r\n if (vm.options) {\r\n var selectionItems = [];\r\n vm.options.forEach(option => {\r\n var selectionIndex = vm.selections.indexOf(option.value);\r\n if (selectionIndex > -1) {\r\n option.active = true;\r\n selectionItems[selectionIndex] = option;\r\n }\r\n option.active = vm.selections.indexOf(option.value) > -1;\r\n });\r\n if (selectionItems.length) {\r\n var text = '';\r\n selectionItems.forEach((option, i) => {\r\n if (i > 0) {\r\n text += ', ';\r\n }\r\n text += option.label;\r\n });\r\n vm.text = text;\r\n }\r\n else {\r\n vm.text = vm.placeholder;\r\n }\r\n }\r\n }\r\n\r\n vm.toggle = () => {\r\n if (!vm._disabled) {\r\n vm.dropdownOpen = !vm.dropdownOpen;\r\n if (Foundation.MediaQuery.current === 'small' && vm.placeholder) {\r\n if (vm.dropdownOpen) {\r\n if (!vm._externalOptions) {\r\n vm._externalOptions = document.createElement('div');\r\n vm._externalOptions.innerHTML = `\r\n
    \r\n {{vm.text}}\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n `;\r\n vm._externalOptions.id = 'checkbox-dropdown-options-' + vm._id;\r\n vm._externalOptions.classList.add('checkbox-dropdown-options');\r\n document.body.append(vm._externalOptions);\r\n $compile(vm._externalOptions)($scope);\r\n }\r\n vm._externalOptions.style.display = 'block';\r\n }\r\n else {\r\n vm._externalOptions.style.display = 'none';\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n vm.close = () => {\r\n if (!vm._externalOptions) {\r\n $scope.$evalAsync(() => {\r\n vm.dropdownOpen = false;\r\n });\r\n }\r\n }\r\n\r\n vm.closeExternal = () => {\r\n vm.dropdownOpen = false;\r\n vm._externalOptions.style.display = 'none';\r\n }\r\n\r\n vm.updateValue = option => {\r\n var index = vm.selections.indexOf(option.value);\r\n if (index === -1) {\r\n vm.selections.push(option.value);\r\n if (vm.selections.length === 1) {\r\n vm.text = option.label;\r\n }\r\n else {\r\n vm.text += ', ' + option.label;\r\n }\r\n }\r\n else {\r\n vm.selections.splice(index, 1);\r\n if (!vm.selections.length) {\r\n vm.text = vm.placeholder;\r\n }\r\n else {\r\n var textParts = vm.text.split(', ');\r\n textParts.splice(index, 1);\r\n vm.text = textParts.join(', ');\r\n }\r\n }\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateModel = () => {\r\n if (vm.modelAsString) {\r\n vm.ngModel.$setViewValue(vm.selections.join(','));\r\n }\r\n else {\r\n vm.ngModel.$setViewValue(vm.selections);\r\n }\r\n if (vm.onChange) {\r\n vm.onChange({\r\n selections: vm.selections\r\n });\r\n }\r\n }\r\n }\r\n}","export default function GoogleMapComponent(module) {\r\n angular.module(module)\r\n .component('googleMap', {\r\n bindings: {\r\n apiKey: '@',\r\n position: '<',\r\n items: '<',\r\n mapStyle: ' {\r\n vm._apiReady\r\n .then(() => {\r\n if (vm.initPromise) {\r\n vm.initPromise.then(vm._initMap);\r\n }\r\n else {\r\n vm._initMap();\r\n }\r\n })\r\n }\r\n\r\n vm.$onChanges = changes => {\r\n if (!vm._apiReady) {\r\n vm._mapPromise = $q.defer();\r\n vm._mapReady = vm._mapPromise.promise;\r\n vm._apiReady = helper.loadGoogleScripts(vm.apiKey);\r\n }\r\n vm._apiReady\r\n .then(() => {\r\n return vm._mapReady;\r\n })\r\n .then(() => {\r\n if (changes.position && changes.position.currentValue) {\r\n if (!vm._initPosition) {\r\n vm._initPosition = changes.position.currentValue;\r\n }\r\n vm._updatePosition();\r\n }\r\n if (changes.mapStyle && changes.mapStyle.currentValue) {\r\n vm._updateStyle();\r\n }\r\n if (changes.items && changes.items.currentValue) {\r\n vm._createMarkers();\r\n }\r\n });\r\n }\r\n\r\n vm._initMap = () => {\r\n vm._map = new google.maps.Map($element[0], {\r\n zoom: 12,\r\n mapTypeControl: false,\r\n streetViewControl: false\r\n });\r\n vm._addLocationControl();\r\n if (vm.position) {\r\n vm._mapPromise.resolve();\r\n }\r\n vm._mapPromise.resolve();\r\n }\r\n\r\n vm._addLocationControl = () => {\r\n var controlDiv = document.createElement('div');\r\n\r\n var firstChild = document.createElement('button');\r\n firstChild.style.backgroundColor = '#fff';\r\n firstChild.style.border = 'none';\r\n firstChild.style.outline = 'none';\r\n firstChild.style.width = '40px';\r\n firstChild.style.height = '40px';\r\n firstChild.style.borderRadius = '2px';\r\n firstChild.style.boxShadow = '0 1px 4px rgba(0,0,0,0.3)';\r\n firstChild.style.cursor = 'pointer';\r\n firstChild.style.marginRight = '10px';\r\n firstChild.style.padding = '0';\r\n firstChild.title = 'Your Location';\r\n controlDiv.appendChild(firstChild);\r\n\r\n var secondChild = document.createElement('div');\r\n secondChild.style.margin = '7px';\r\n secondChild.style.width = '26px';\r\n secondChild.style.height = '26px';\r\n secondChild.style.backgroundImage = 'url(https://maps.gstatic.com/tactile/mylocation/mylocation-sprite-2x.png)';\r\n secondChild.style.backgroundSize = '260px 26px';\r\n secondChild.style.backgroundPosition = '-234px 0';\r\n secondChild.style.backgroundRepeat = 'no-repeat';\r\n firstChild.appendChild(secondChild);\r\n\r\n google.maps.event.addListener(vm._map, 'center_changed', function () {\r\n secondChild.style['background-position'] = '-52px 0';\r\n });\r\n\r\n firstChild.addEventListener('click', function () {\r\n vm._map.setCenter(vm._initPosition);\r\n secondChild.style['background-position'] = '-234px 0';\r\n });\r\n\r\n controlDiv.index = 1;\r\n vm._map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(controlDiv);\r\n }\r\n\r\n vm._updateStyle = () => {\r\n vm._map.setOptions({\r\n styles: vm.mapStyle\r\n });\r\n }\r\n\r\n vm._updatePosition = () => {\r\n vm._map.setCenter(vm.position);\r\n }\r\n\r\n vm._convertPosition = position => {\r\n return {\r\n lat: position.latitude,\r\n lng: position.longitude\r\n }\r\n }\r\n\r\n vm._createMarkers = () => {\r\n vm._clearMarkers();\r\n if (vm.items && vm.items.length) {\r\n var bounds = new google.maps.LatLngBounds();\r\n vm.items.forEach(item => {\r\n var marker = new google.maps.Marker({\r\n position: vm._getValue(item, vm.mappings.position),\r\n map: vm._map,\r\n label: {\r\n text: vm._getValue(item, vm.mappings.number) + '',\r\n fontWeight: '700',\r\n fontFamily: 'Barlow, sans-serif',\r\n fontSize: '1rem'\r\n },\r\n title: vm._getValue(item, vm.mappings.title),\r\n icon: {\r\n path: google.maps.SymbolPath.CIRCLE,\r\n scale: 16,\r\n fillColor: '#ECBC2F',\r\n strokeWeight: 0.4,\r\n fillOpacity: 1\r\n }\r\n });\r\n if (vm.onMarkerClick) {\r\n marker.addListener('click', () => {\r\n vm.onMarkerClick({\r\n item: item\r\n });\r\n });\r\n }\r\n bounds.extend(marker.getPosition());\r\n vm._markers.push(marker);\r\n });\r\n vm._map.setCenter(bounds.getCenter());\r\n if (vm.items.length < 2) {\r\n vm._map.setZoom(12);\r\n }\r\n else {\r\n vm._map.fitBounds(bounds);\r\n }\r\n }\r\n }\r\n\r\n vm._getValue = (item, key) => {\r\n var keys = key.split('.');\r\n var val = item;\r\n keys.forEach(piece => {\r\n val = val[piece];\r\n });\r\n return val;\r\n }\r\n\r\n vm._clearMarkers = () => {\r\n if (vm._markers) {\r\n vm._markers.forEach(marker => {\r\n marker.setMap(null);\r\n });\r\n }\r\n vm._markers = [];\r\n }\r\n }\r\n}","export default function DealerSearchController(module) {\r\n angular.module(module)\r\n .controller('DealerSearchController', DealerSearchController);\r\n\r\n DealerSearchController.$inject = ['$scope', '$attrs', '$q', '$timeout', '$window'];\r\n function DealerSearchController($scope, $attrs, $q, $timeout, $window) {\r\n var vm = this;\r\n\r\n vm.$onInit = () => {\r\n vm.mapStyle = [\r\n {\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#212121\"\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#ffffff\"\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.text.stroke\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#212121\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.neighborhood\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#4e4e4e\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.neighborhood\",\r\n \"elementType\": \"labels.text.stroke\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#212121\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\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\": \"poi\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#3c3c3c\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\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\": \"road.highway\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#4e4e4e\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#000000\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#3c3c3c\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"labels.text.stroke\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#17263c\"\r\n }\r\n ]\r\n }\r\n ];\r\n\r\n vm.mapMappings = {\r\n position: 'properties._location',\r\n title: 'name',\r\n number: 'number'\r\n }\r\n\r\n vm._createStickyPromise();\r\n\r\n vm.params = JSON.parse($attrs.parameters);\r\n\r\n var hasHistory = $window.history.state;\r\n if ($window.history) {\r\n $window.addEventListener('beforeunload', event => {\r\n var state = angular.copy(vm.params);\r\n if (state.categories) {\r\n state.categoriesRaw = state.categories.map(item => item.tags);\r\n }\r\n state.page = vm.page;\r\n $window.history.replaceState(state, document.querySelector('title').innerText);\r\n });\r\n if (hasHistory) {\r\n vm.params = angular.copy($window.history.state);\r\n }\r\n }\r\n var locationReady = $q.defer();\r\n vm._locationReadyPromise = locationReady.promise;\r\n var notDefault = false;\r\n if (vm.params.location) {\r\n notDefault = !vm.params.location.isDefault || (hasHistory && $window.history.state.location);\r\n vm.location = {\r\n lat: vm.params.location.latitude,\r\n lng: vm.params.location.longitude\r\n }\r\n delete vm.params.location;\r\n }\r\n if (vm.location && notDefault) {\r\n locationReady.resolve();\r\n vm.params.location = {\r\n latitude: vm.location.lat,\r\n longitude: vm.location.lng\r\n }\r\n vm.updateFilters();\r\n }\r\n else {\r\n navigator.geolocation.getCurrentPosition(position => {\r\n vm.location = {\r\n lat: position.coords.latitude,\r\n lng: position.coords.longitude\r\n };\r\n vm.params.location = {\r\n latitude: vm.location.lat,\r\n longitude: vm.location.lng\r\n };\r\n locationReady.resolve();\r\n vm.updateFilters();\r\n }, () => {\r\n vm.params.location = {\r\n latitude: vm.location.lat,\r\n longitude: vm.location.lng\r\n };\r\n locationReady.resolve();\r\n vm.updateFilters();\r\n });\r\n }\r\n $scope.$on('triggerSubmit', vm.updateFilters);\r\n }\r\n\r\n vm.updateFilters = () => {\r\n if (JSON.stringify(vm.params) !== vm._previousParams) {\r\n vm.submitting = true;\r\n vm.paginationParams = angular.copy(vm.params);\r\n vm.closeFilters();\r\n vm._previousParams = JSON.stringify(vm.params);\r\n }\r\n }\r\n\r\n vm.updateMap = (items, page, pageSize) => {\r\n vm.submitting = false;\r\n vm.page = page;\r\n if (vm.params.location && vm.location.lat !== vm.params.location.latitude && vm.location.lng !== vm.params.location.longitude) {\r\n vm.location = {\r\n lat: vm.params.location.latitude,\r\n lng: vm.params.location.longitude\r\n }\r\n }\r\n vm.searchResults = angular.copy(items);\r\n vm.searchResults.forEach((item, i) => {\r\n item.properties._location = {\r\n lat: item.properties.location.coordinates.latitude,\r\n lng: item.properties.location.coordinates.longitude\r\n };\r\n item.number = (i + 1) + ((page - 1) * pageSize);\r\n });\r\n if (items.length === 0) {\r\n angular.element('#dealer-search-alert').foundation('open');\r\n }\r\n $timeout(() => {\r\n $scope.$broadcast('updateSticky');\r\n });\r\n }\r\n\r\n vm.goToLocation = item => {\r\n if (vm._previousLocation) {\r\n var previous = document.querySelector('#' + vm._previousLocation);\r\n previous.classList.remove('active');\r\n }\r\n location.hash = 'location-' + item.id;\r\n var target = document.querySelector(location.hash);\r\n target.classList.add('active');\r\n }\r\n\r\n vm._createStickyPromise = () => {\r\n vm._stickyPromise = $q.defer();\r\n vm.stickyReady = vm._stickyPromise.promise;\r\n }\r\n\r\n vm.initMap = () => {\r\n vm._locationReadyPromise\r\n .then(() => {\r\n vm._stickyPromise.resolve();\r\n });\r\n }\r\n\r\n vm.openFilters = () => {\r\n vm.filtersOpen = true;\r\n };\r\n\r\n vm.closeFilters = () => {\r\n vm.filtersOpen = false;\r\n }\r\n }\r\n}","export default function ProductSelectorComponent(module) {\r\n angular.module(module)\r\n .component('productSelector', {\r\n bindings: {\r\n datepickerPlaceholder: '@',\r\n dateFormat: '@?',\r\n productPickerPlaceholder: '@',\r\n serialNumbersPlaceholder: '@',\r\n selectionsLabel: '@',\r\n addButtonText: '@',\r\n clearButtonText: '@',\r\n onChange: '&?'\r\n },\r\n require: {\r\n ngModel: '?ngModel'\r\n },\r\n template: `\r\n
    \r\n\t\t
    \r\n \r\n
    \r\n {{vm.errors.purchaseDate}}\r\n\t\t\t \r\n {{vm.errors.product}}\r\n\t\t\t \r\n {{vm.errors.serialNumbers}}\r\n\t\t {{vm.addButtonText}}\r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    {{vm.selectionsLabel}}
    \r\n\t\t\t
      \r\n
    • \r\n {{selection.serialNumbers.join(', ')}} ({{selection.name}})\r\n
    • \r\n
    \r\n\t\t {{vm.clearButtonText}}\r\n\t\t
    \r\n\t
    \r\n `,\r\n controller: productSelectorController,\r\n controllerAs: 'vm'\r\n });\r\n var id = 1;\r\n productSelectorController.$inject = ['$http', '$timeout', '$filter', '$element', '$window', '$scope'];\r\n function productSelectorController($http, $timeout, $filter, $element, $window, $scope) {\r\n var vm = this;\r\n\r\n vm.$onInit = () => {\r\n vm._id = id++;\r\n vm.today = new Date();\r\n vm.ngModel.$viewChangeListeners.push(vm.updateViewModel);\r\n vm.options = {};\r\n $http.get('/api/formextensions/products/', {\r\n cache: true\r\n })\r\n .then((response) => {\r\n vm.products = response.data;\r\n });\r\n $timeout(vm.updateViewModel);\r\n if ($window.Pikaday) {\r\n vm._initDatePicker();\r\n }\r\n else {\r\n $window.loadScript('/App_Plugins/UmbracoForms/Assets/moment/min/moment-with-locales.min.js', () => {\r\n $window.loadScript('/App_Plugins/UmbracoForms/Assets/pikaday/pikaday.js', () => {\r\n vm._initDatePicker();\r\n });\r\n });\r\n }\r\n }\r\n\r\n vm.$onDestroy = () => {\r\n if (vm.datePicker) {\r\n vm.datePicker.destroy();\r\n }\r\n }\r\n\r\n vm.$onChanges = changes => {\r\n if (changes.options && changes.options.currentValue) {\r\n vm.updateViewModel();\r\n }\r\n }\r\n\r\n vm._initDatePicker = () => {\r\n var element = $element[0];\r\n var datePickerContainer = element.querySelector('.datepicker-container');\r\n vm.datePicker = new Pikaday({\r\n field: element.querySelector('.datepicker'),\r\n container: datePickerContainer ? datePickerContainer : undefined,\r\n yearRange: $window.umbracoFormsLocale.datePickerYearRange,\r\n i18n: $window.umbracoFormsLocale.locales,\r\n format: vm.dateFormat || \"MM/D/YYYY\",\r\n onSelect: function (date) {\r\n $scope.$evalAsync(() => {\r\n vm.options.purchaseDate = $filter('date')(date, 'yyyy-MM-dd');\r\n vm.updateErrorStatus();\r\n });\r\n },\r\n minDate: new Date('1753-01-01T00:00:00'), //Min value of datetime in SQL Server CE\r\n maxDate: new Date(vm.today.getFullYear(), vm.today.getMonth(), vm.today.getDate()),\r\n setDefaultDate: false\r\n })\r\n }\r\n\r\n vm.clear = () => {\r\n vm.updateViewModel(true);\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateViewModel = (clear) => {\r\n if (clear || !vm.ngModel.$viewValue) {\r\n vm.selections = [];\r\n }\r\n else {\r\n if (typeof (vm.ngModel.$viewValue) === 'string') {\r\n vm.selections = JSON.parse(vm.ngModel.$viewValue);\r\n }\r\n else {\r\n vm.selections = angular.copy(vm.ngModel.$viewValue);\r\n }\r\n }\r\n }\r\n\r\n vm.updateErrorStatus = () => {\r\n if (vm.checkErrors) {\r\n vm.isValid();\r\n }\r\n }\r\n\r\n vm.isValid = () => {\r\n vm.errors = {};\r\n if (!vm.options.purchaseDate) {\r\n vm.errors.purchaseDate = 'A purchase date must be set.';\r\n }\r\n if (!vm.options.product) {\r\n vm.errors.product = 'A product must be selected.';\r\n }\r\n if (!vm.options.serialNumbers) {\r\n vm.errors.serialNumbers = 'A serial number must be entered.'\r\n }\r\n else if (!vm.options.serialNumbers.match(/^((\\d+(,\\s*|\\n)?)+|n\\/a)+$/gmi)) {\r\n vm.errors.serialNumbers = 'Serial numbers must be numbers or \"n/a\" separated by newlines or commas.'\r\n }\r\n return Object.keys(vm.errors).length === 0;\r\n }\r\n\r\n vm.addSelection = () => {\r\n if (vm.isValid()) {\r\n if (!vm.selections) {\r\n vm.selections = [];\r\n }\r\n vm.selections.push({\r\n purchaseDate: vm.options.purchaseDate,\r\n name: vm.options.product,\r\n serialNumbers: vm.options.serialNumbers.split(/\\s*(\\n|,)+\\s*/).filter(text => !text.match(/(\\s|,)+/))\r\n });\r\n vm.updateModel();\r\n vm.checkErrors = false;\r\n vm.options = {};\r\n vm.datePicker.setDate(null);\r\n }\r\n else {\r\n vm.checkErrors = true;\r\n }\r\n }\r\n\r\n vm.updateModel = () => {\r\n if (vm.ngModel) {\r\n if (vm.selections.length) {\r\n vm.ngModel.$setViewValue(angular.copy(vm.selections));\r\n }\r\n else {\r\n vm.ngModel.$setViewValue(null);\r\n }\r\n }\r\n if (vm.onChange) {\r\n vm.onChange({\r\n value: angular.copy(vm.selections)\r\n });\r\n }\r\n }\r\n }\r\n}","export default function DistributorSelectorComponent(module) {\r\n angular.module(module)\r\n .component('distributorSelector', {\r\n bindings: {\r\n distributorSelectorPlaceholder: '@',\r\n customDistributorPrompt: '@',\r\n namePlaceholder: '@',\r\n cityPlaceholder: '@',\r\n countryPlaceholder: '@',\r\n countries: '<',\r\n nameErrorMessage: '@',\r\n cityErrorMessage: '@',\r\n countryErrorMessage: '@',\r\n onChange: '&?'\r\n },\r\n require: {\r\n ngModel: '?ngModel'\r\n },\r\n template: `\r\n \r\n \r\n {{vm.nameErrorMessage}}\r\n \r\n {{vm.cityErrorMessage}}\r\n \r\n {{vm.countryErrorMessage}}\r\n `,\r\n controller: distributorSelectorController,\r\n controllerAs: 'vm'\r\n });\r\n var id = 1;\r\n distributorSelectorController.$inject = ['$http', '$timeout', '$element'];\r\n function distributorSelectorController($http, $timeout, $element) {\r\n var vm = this;\r\n\r\n vm.$onInit = () => {\r\n vm._id = id++;\r\n vm.ngModel.$viewChangeListeners.push(vm.updateViewModel);\r\n vm.changed = {};\r\n vm.locked = true;\r\n $timeout(vm.updateViewModel);\r\n }\r\n\r\n vm.$onChanges = changes => {\r\n if (changes.options) {\r\n vm.updateViewModel();\r\n }\r\n }\r\n\r\n vm.clear = () => {\r\n vm.updateViewModel(true);\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateData = () => {\r\n vm.isCustom = vm.distributor === 'custom';\r\n if (!vm.distributor || vm.isCustom) {\r\n vm.model = {};\r\n }\r\n else {\r\n vm.model = angular.copy(vm.distributor);\r\n }\r\n if (vm.isCustom) {\r\n vm.changed = {};\r\n vm.locked = false;\r\n $timeout(() => {\r\n $element[0].querySelector('input').focus();\r\n });\r\n }\r\n else {\r\n vm.locked = true;\r\n }\r\n vm.updateModel();\r\n }\r\n\r\n vm.updateViewModel = (clear) => {\r\n if (clear) {\r\n vm.model = {};\r\n delete vm.distributor;\r\n }\r\n else {\r\n if (typeof (vm.ngModel.$viewValue) === 'string') {\r\n vm.model = vm.ngModel.$viewValue ? JSON.parse(vm.ngModel.$viewValue) : {};\r\n }\r\n else {\r\n vm.model = angular.copy(vm.ngModel.$viewValue);\r\n }\r\n\r\n $http.get('/api/formextensions/distributors/', {\r\n cache: true\r\n })\r\n .then((response) => {\r\n vm.distributors = response.data;\r\n if (vm.model) {\r\n var name = vm.model.name;\r\n if (name) {\r\n for (var i = 0; i < vm.distributors.length; i++) {\r\n var distributor = vm.distributors[i];\r\n if (distributor.name === name) {\r\n vm.distributor = distributor;\r\n break;\r\n }\r\n }\r\n if (!vm.distributor) {\r\n vm.distributor = 'custom';\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n vm.inputChanged = key => {\r\n if (!vm.locked) {\r\n if (vm.changed[key]) {\r\n vm.updateModel();\r\n }\r\n else {\r\n vm.changed[key] = true;\r\n }\r\n }\r\n }\r\n\r\n vm.updateModel = () => {\r\n if (vm.ngModel) {\r\n if (JSON.stringify(vm.model) === '{}') {\r\n vm.ngModel.$setViewValue(undefined);\r\n }\r\n else {\r\n vm.ngModel.$setViewValue(angular.copy(vm.model));\r\n }\r\n }\r\n if (vm.onChange) {\r\n vm.onChange({\r\n value: angular.copy(vm.model)\r\n });\r\n }\r\n }\r\n }\r\n}","export default function CountryPickerComponent(module) {\r\n /**\r\n * @ngdoc compoenent\r\n * @name flexibleLink\r\n * @description\r\n * Displays a link that can connect to content, media, modals, external urls and phones.\r\n * @param {object} link Data the flexible link renders.\r\n * @param {bool=} disableLable Removes the label control from the rendered view when true.\r\n * @param {object=} config Configuration settings for the rendered view.\r\n * @param {function=} onChange Callback function that triggers when the user makes a change to the label or url.\r\n * - link: current value of the control\r\n * @param {function=} onRemove Callback function that triggers when the flexible link is removed.\r\n * - link: current value of the control\r\n * */\r\n var id = 0;\r\n angular.module(module)\r\n .component('countryPicker', {\r\n bindings: {\r\n loadingText: '@?loadingText',\r\n culture: '@?culture',\r\n contentTypes: '{{vm.loadingText || 'Loading...'}}

    \r\n \r\n `,\r\n controller: CountryPickerController,\r\n controllerAs: 'vm'\r\n });\r\n\r\n CountryPickerController.$inject = ['$http'];\r\n function CountryPickerController($http) {\r\n var vm = this;\r\n\r\n vm.$onInit = function () {\r\n $http.get('/api/countries/', {\r\n params: {\r\n contentTypes: vm.contentTypes,\r\n culture: vm.culture\r\n }\r\n }).then(function (response) {\r\n vm.countries = response.data;\r\n });\r\n };\r\n vm.$onChanges = function (changes) {\r\n if (changes.model && changes.model.currentValue != vm.countries) {\r\n vm.country = changes.model.currentValue;\r\n }\r\n }\r\n\r\n vm.updateModel = () => {\r\n vm.ngModel.$setViewValue(vm.country);\r\n };\r\n }\r\n}","export default function FeedResource(module) {\r\n angular.module(module || 'app')\r\n .factory('productResource', productResource);\r\n\r\n /**\r\n * @ngdoc function\r\n * @name productResource\r\n * @description\r\n * Collection of api routes used for products.\r\n * @requires $resource\r\n * */\r\n productResource.$inject = ['$http'];\r\n function productResource($http) {\r\n return {\r\n list: function (params) {\r\n return $http.get('/api/products/', {\r\n params: params\r\n });\r\n }\r\n };\r\n }\r\n};"],"names":["t","e","r","Object","defineProperty","value","enumerable","configurable","writable","keys","getOwnPropertySymbols","n","filter","getOwnPropertyDescriptor","push","apply","arguments","length","o","forEach","getOwnPropertyDescriptors","defineProperties","Array","isArray","Symbol","iterator","prototype","toString","call","a","u","i","next","done","TypeError","from","concat","key","localStorage","window","JSON","parse","getItem","get","miss","Promise","resolve","then","stringify","all","set","setItem","delete","clear","removeItem","caches","shift","s","serializable","c","Math","floor","random","l","f","replace","encodeURIComponent","d","data","indexOf","entries","timeout","headers","queryParameters","cacheable","m","Read","Write","Any","g","status","lastUpdate","Date","now","b","protocol","url","accept","O","P","w","method","toLowerCase","userAgent","h","pop","name","message","transporterStackTrace","A","S","path","connectTimeout","timeouts","connect","responseTimeout","request","response","host","triesLeft","p","onSuccess","content","onRetry","isTimedOut","logger","info","x","hostsCache","onFail","requester","send","map","getTimeout","statelessHosts","q","reverse","j","add","segment","version","T","charAt","substr","join","C","transporter","read","write","k","appId","indexName","methods","J","params","requests","E","facetName","facetQuery","propertyIsEnumerable","searchForFacetValues","R","I","query","queryLanguages","F","Q","apiKey","XMLHttpRequest","open","setRequestHeader","setTimeout","abort","onreadystatechange","readyState","OPENED","clearTimeout","onerror","responseText","onload","debug","error","console","responsesCache","requestsCache","authMode","hosts","mappedRequestOptions","reject","addAlgoliaAgent","clearCache","N","search","multipleQueries","multipleSearchForFacetValues","customRequest","initIndex","findAnswers","exports","module","define","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","obj","prop","hasOwnProperty","Shifter","element","this","document","querySelector","container","level","activeLayers","testNode","backLink","addEventListener","back","bind","toStartLink","backToStart","querySelectorAll","link","event","preventDefault","loadNext","getAttribute","backToLevel","_locked","animate","id","target","classList","isForward","styles","getComputedStyle","style","display","offset","parseInt","marginLeft","clientWidth","self","tl","gsap","timeline","onComplete","remove","addLabel","to","autoAlpha","pointerEvents","duration","fromTo","clearProps","Suggestor","options","suggestionLimit","suggestionContainer","callback","emptyWarning","searchTerm","items","_timeout","_setSuggestions","_open","_tween","progress","kill","height","clientHeight","hide","suggestions","replacer","RegExp","suggestion","innerHTML","option","innerText","html","debounce","fn","time","timerId","_len","args","_key","isPrimitive","isEqual","first","second","_i","_Object$keys","noop","createClickedEvent","_ref","item","index","__autocomplete_indexName","positions","findIndex","objectID","queryID","__autocomplete_queryID","algoliaSource","_arrayLikeToArray","arr","len","arr2","_excluded","_excluded2","_typeof","constructor","_toConsumableArray","_arrayWithoutHoles","iter","_iterableToArray","minLen","slice","test","_unsupportedIterableToArray","_nonIterableSpread","_objectWithoutProperties","source","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","ownKeys","object","enumerableOnly","symbols","sym","_objectSpread","_defineProperty","arg","input","hint","prim","toPrimitive","res","String","_toPrimitive","_toPropertyKey","chunk","chunkSize","chunks","objectIDs","mapToInsightsParamsApi","param","_ref2","createSearchInsightsApi","searchInsights","_split$map2","major","minor","canSendHeaders","split","Number","_arrayWithHoles","_s","_e","_x","_r","_arr","_n","_d","err","_iterableToArrayLimit","_nonIterableRest","sendToInsights","payloads","_items$0$__autocomple","__autocomplete_algoliaCredentials","init","setUserToken","userToken","clickedObjectIDsAfterSearch","clickedObjectIDs","_len2","_key2","clickedFilters","_len3","_key3","convertedObjectIDsAfterSearch","_len4","_key4","convertedObjectIDs","_len5","_key5","convertedFilters","_len6","_key6","viewedObjectIDs","_len7","_key7","reduce","acc","_ref3","_ref4","payload","_ref5","viewedFilters","_len8","_key8","createViewedEvents","itemsByIndexName","current","_acc$current$__autoco","isAlgoliaInsightsHit","hit","ALGOLIA_INSIGHTS_VERSION","ALGOLIA_INSIGHTS_SRC","sendViewedObjectIDs","onItemsChange","insights","state","insightsEvents","eventName","createAlgoliaInsightsPlugin","_getOptions","_ref8","onSelect","_ref9","onActive","getOptions","providedInsightsClient","insightsClient","onSelectEvent","onActiveEvent","pointer","AlgoliaAnalyticsObject","queue","environment","errorMessage","script","createElement","async","src","body","appendChild","cause","loadInsights","previousItems","debouncedOnStateChange","isOpen","collections","subscribe","setContext","algoliaInsightsPlugin","__algoliaSearchParameters","clickAnalytics","_ref6","onStateChange","_ref7","__autocomplete_pluginOptions","flatten","values","getItemsCount","sum","collection","autocompleteId","getDefaultProps","props","pluginSubscribers","_props$id","plugins","openOnFocus","placeholder","autoFocus","defaultActiveItemId","stallThreshold","shouldPanelOpen","reshape","sources","initialState","activeItemId","completion","context","_props$onStateChange","_x$onStateChange","onSubmit","_props$onSubmit","_x$onSubmit","onReset","_props$onReset","_x$onReset","getSources","plugin","Boolean","seenSourceIds","maybeSource","sourceId","includes","Error","defaultSource","getItemInputValue","getItemUrl","setIsOpen","onResolve","__default","normalizedSource","getNormalizedSources","nested","_x$onSelect","_x$onActive","_x$onResolve","navigator","navigate","itemUrl","location","assign","navigateNewTab","windowReference","focus","navigateNewWindow","isDescription","execute","searchClient","requesterId","find","_container$items","maybeDescription","responses","createInternalCancelablePromise","promise","onfulfilled","onrejected","createCallback","catch","finally","onfinally","onCancelList","cancel","isCanceled","callbacks","createCancelablePromise","executor","cancelable","onResult","fallback","getActiveItem","collectionIndex","collectionsCount","nextValue","getCollectionFromActiveItemId","isOffsetFound","counter","previousItemsOffset","currentCollection","getRelativeActiveItemId","itemInputValue","reason","basePromiseId","latestResolvedId","latestResolvedValue","lastStalledId","runConcurrentSafePromise","currentPromiseId","onInput","_ref$nextState","nextState","refresh","store","setters","setCollections","setQuery","setActiveItemId","setStatus","_nextState$isOpen","getState","_request","pendingRequests","getItems","itemsOrDescription","description","contextParameters","_state$context$key","queries","transformResponse","preResolve","matches","results","transform","rawResults","result","_hits","hits","facetHits","_facetHits","facetHit","label","count","_highlightResult","highlighted","mapToAlgoliaResponse","every","postResolve","originalSourcesBySourceId","sourcesBySourceId","_nextState$isOpen2","isPanelOpen","highlightedItem","regex","_excluded3","_excluded4","_excluded5","_excluded6","_excluded7","getPropGetters","getAutocompleteId","instanceId","getEnvironmentProps","providedProps","inputElement","formElement","panelElement","onMouseDownOrTouchStart","isEmpty","some","contextNode","parent","child","contains","dispatch","cancelAll","onTouchStart","onMouseDown","onTouchMove","activeElement","blur","getRootProps","rest","role","getFormProps","action","noValidate","_providedProps$inputE","_providedProps$inputE2","getLabelProps","sourceIndex","htmlFor","getInputProps","_props$environment$na","onFocus","_ref2$maxLength","maxLength","activeItem","shouldFallbackKeyHint","match","enterKeyHint","autoComplete","autoCorrect","autoCapitalize","spellCheck","type","onChange","currentTarget","onKeyDown","triggerScrollIntoView","nodeItem","getElementById","scrollIntoViewIfNeeded","scrollIntoView","triggerOnActive","nextActiveItemId","metaKey","ctrlKey","shiftKey","altKey","_onKeyDown","onBlur","onClick","getPanelProps","onMouseLeave","getListProps","getItemProps","__autocomplete_id","onMouseMove","_item","_source","userAgents","getMetadata","_","_options$__autocomple","_options$__autocomple2","_options$__autocomple3","optionsKey","__autocomplete_metadata","extraOptions","ua","getCompletion","_getActiveItem","getNextActiveItemId","moveAmount","baseIndex","itemCount","numericIndex","stateReducer","_nextState","createAutocomplete","subscribers","reducer","onStoreStateChange","list","prevState","cancelablePromise","createStore","rawValue","baseItemId","getAutocompleteSetters","propGetters","Event","insightsParams","_plugin$subscribe","_environment$navigato","_environment$navigato2","metadata","metadataContainer","headRef","injectMetadata","createAlgoliaRequester","fetcher","fetcherParams","_ref$userAgents","coreUserAgents","_getAppIdAndApiKey","_searchClient$transpo","APP_ID","API_KEY","getAppIdAndApiKey","searchParameters","hitsPerPage","highlightPreTag","highlightPostTag","_result$hits","_fetcherParams$reques","requesterParams","requestParams","createRequester","TOUCH_EVENTS_ALIASES","setStyle","eventProxy","_listeners","setProperty","dom","useCapture","nameLower","oldValue","removeEventListener","removeAttribute","setAttribute","getNormalizedName","UmbracoFormsValidation","listen","umbracoFormsCollection","formsCollection","aspnetValidation","required","allCheckboxesOfThisName","form","checked","wrapProviderWithIgnorerBehaviour","provider","offsetParent","validationService","ValidationService","addProvider","pattern","providers","bootstrap","handlePreviousClicked","elements","previousButtonElements","getElementsByClassName","jQuery","$","validator","setDefaults","ignore","unobtrusive","adapters","addBool","addMethod","attr","val","configureUmbracoFormsValidation","initCollection","formItem","decodeURI","forms","dependencyCheck","UmbracoFormsConditions","fieldSetConditions","fieldConditions","recordValues","watch","formEl","Umbraco","Sys","errorElement","className","color","backgroundColor","padding","margin","hasValidationFramework","insertBefore","childNodes","fieldsetConditions","populateFieldValues","page","formValues","dataTypes","selectFields","field","textareaFields","checkboxFields","inputFields","operators","Is","expected","dataType","toUpperCase","IsNot","unexpected","matchingUnexpected","GreaterThen","limit","LessThen","StartsWith","criteria","EndsWith","Contains","datepickerfields","hiddenDatePickerField","run","changeablefields","fsId","fieldId","cachedResults","evaluateRule","rule","dependencyIsVisible","isVisible","func","operator","evaluateRuleInstance","condition","success","show","actionType","cachedResult","any","logicType","fieldsetVisibilities","hasHiddenFieldset","rules","fieldsetId","evaluateCondition","evaluateConditionVisibility","handleCondition","shouldShow","closest","Element","msMatchesSelector","selector","el","parentElement","documentElement","doScroll","UmbracoForms","UmbracoFormsController","$window","$scope","$element","$attrs","$http","$compile","ctrl","$onInit","goBack","_goBack","submitForm","$event","isMultiStep","continueInModal","submitting","valid","validate","serializeArray","FormData","jsonData","jsonCheck","append","post","pathname","processData","contentType","continueMessage","angular","umbracoFormsData","formData","modalForm","modal","isClosed","css","formContainer","parentNode","contents","$parent","_initialized","on","removeData","foundation","pageForms","pageForm","reset","$evalAsync","submitted","postForm","verifyCaptcha","token","log","controller","$inject","UmbracoFormsUtilController","_coreInitted","_toArray","_getUnit","_first","_ticker","_time1","_getCache","_getGSAP","_lookup","_getID","_getByTarget","_onTick","pt","v1","t1","v2","t2","_next","_types","deg","rad","PI","_initCore","utils","toArray","getUnit","core","getCache","ticker","PropTracker","property","_gsap","rCap","_prev","VelocityTracker","_props","register","_proto","skipRecentTick","dif","rotationCap","warn","parseFloat","round","getAll","isTracking","prev","shallow","track","targets","properties","types","tracker","targs","untrack","getVelocity","getByTarget","registerPlugin","_parseEase","_power3","_config","PropTween","_checkPointRatio","_clamp","_processingVars","_getTracker","_isNumber","_isObject","_isFunction","_isArray","_emptyFunc","_bigNum","_extend","defaults","exclude","_deepClone","v","copy","_getClosest","max","min","radius","dist","absDif","sqrt","_parseEnd","curProp","end","adjustedEnd","endVar","isNaN","calculated","unitFactor","_getNumOrDefault","vars","defaultValue","_calculateChange","velocity","_calculateDuration","start","abs","_reservedProps","resistance","checkpoint","preventOvershoot","linkedProps","_processLinkedProps","getVal","curVelocity","curDuration","linkedPropNames","parseEase","clamp","config","unitFactors","totalTime","totalProgress","InertiaPlugin","tween","curVal","unit","change1","change2","cache","dur","durIsObj","overshoot","maxDuration","minDuration","overshootTolerance","recordEnd","curClippedDuration","clippedDuration","inertiaVars","inertia","_calculateTweenDuration","_pt","c1","c2","render","ratio","_time","_dur","ProductsByCategory","NodeList","containers","groups","group","CategoryGroup","controls","tabs","summaries","backgrounds","carouselContainers","carousels","_items","tab","switchCategory","prevButton","_shiftLeft","nextButton","_shiftRight","_findViewpointIndexes","_updateNavigationVisibility","_handleResize","children","activeItems","_getAnimationElements","targetItems","TimelineLite","background","itemsContainer","summary","carousel","button","visibleItems","zIndex","staggerTo","staggerFrom","showControls","carouselContainer","allItems","docWidth","node","rect","getBoundingClientRect","left","width","right","_shift","direction","oldShift","currentCarousel","containerEdge","leftShiftMax","leftEdge","newOffset","rightEdge","TweenLite","found","lastFound","Revealer","trigger","reveal","startHeight","Zoomer","images","image","aligner","imageSizes","_createElements","enabled","toggle","enable","zoomPanel","overlays","overlayMarkers","revealZoomedView","overlay","hideZoomedView","_positionZoom","overlayMarker","disable","pos","alignRect","queryPoint","substring","imageSize","_getImage","zoomedSize","backgroundImage","_updateOverlay","Image","dimensions","marker","_getRatio","y","requestAnimationFrame","edgeLimit","center","offsetX","offsetY","overlayRect","pageX","pageY","backgroundPosition","Brands","_rightAligned","triggers","targetContainer","tabBackgrounds","targetId","modalContainer","_triggerSwitch","_filterTargets","_setHeight","_currentTrigger","_currentTab","_switchBrand","isLarge","Foundation","MediaQuery","atLeast","delay","text","hiddens","hidden","maxHeight","notHidden","targetClass","currentHidden","Services","tiles","tile","hiddenBlock","marginBottom","_timeline","play","icon","marginTop","SearchClearer","crossButton","submitButton","scopeValue","lastPropertyName","searchclearer","clearText","pageLoad","click","attributes","parts","scope","$apply","PageBoxLinks","boxes","box","_showMore","hiddenItems","revealCount","header","shifter","searchForm","algoliasearch","suggestor","searchInput","submit","autocomplete","skuFound","skus","updateSuggestions","searchIndex","filters","currentCulture","setProperties","Header","moduleName","$locationProvider","html5Mode","requireBase","rewriteLinks","separator","JoinFilter","trustAsMarkup","$sce","trustAs","TrustAsMarkupFilter","toNumArray","ToNumArrayFilter","factory","helper","googleApiPromise","scripts","$rootScope","$q","$timeout","getMediaQueries","getMediaQuery","getLoadingIndicator","getCurrentMediaQuery","getResponsiveValue","_reInit","large","medium","small","alert","title","loadScript","loadGoogleScripts","deferred","defer","remainingScripts","_initGoogleApi","mediaQueries","pieces","size","matchMedia","nextPieces","scriptFound","HelperFactory","directive","imageSource","$parse","priority","restrict","directiveId","settings","win","cancelListener","$on","checkPosition","placeholderImage","positioned","setSource","removeClass","onloadCallback","addClass","position","top","outerHeight","$emit","is","scroller","off","bottom","after","previousSize","getUrl","retina","$observe","ImageSourceDirective","queryController","$injector","$transclude","clone","$onChanges","changes","currentValue","take","pageSize","service","servicePieces","serviceContainer","$resource","$$paramsValid","loading","requiredParams","requirements","component","bindings","transclude","template","QueryComponent","paginationController","$scroller","scrollContainer","$container","$service","rows","pageLimit","ceil","onError","$$initialized","onInit","_transcluded","_injectedItems","injectedItems","reservedIndexes","markup","_isInjected","_paramsChanged","previousValue","$$toPage","newValue","newKeys","oldKeys","$postLink","$isInfinite","scrollTarget","boundingBox","nextPage","$onDestroy","updateParam","getParam","prevPage","finished","clearParam","skip","$promise","empty","initialized","refreshing","stickPoint","stickyManager","getStickPoint","stop","scrollTop","$lastCheck","labels","totalPages","splice","newItems","disableScroll","onFound","require","PaginationComponent","LazyElementController","vm","_clearListener","_load","LazyElementComponent","CompileController","ready","CompileComponent","cropName","Url","crops","Crops","hasQueryString","crop","Name","GetCropUrlFilter","replaceAll","StripParagraphsFilter","fitText","minWidth","maxWidth","minSize","maxSize","sizeText","currentSize","fontSize","containerWidth","elementWidth","$maxSize","finalSize","widthDiff","newSize","elementHeight","FitTextDirective","attrs","AttrsDirective","Utility","ReviewsController","reviewSource","fill","controllerAs","StarsController","svgns","_id","_createStar","svg","createElementNS","defs","gradient","StarsComponent","dataOpen","modalLoader","bindToController","load","DataOpenDirective","loadedModals","_modalQueue","rootId","modalName","_requestTimer","modals","Reveal","bindUmbracoFormHandling","innerModals","innerModal","videoEnableJs","origin","VideoEnableJsFilter","videoManager","videoProviders","fitToScreen","videoId","autoplay","loop","_styleName","_clearSlideWatch","_provider","$index","pause","_win","configure","playVideo","headerSize","boundingRect","innerHeight","_loadVideo","_loaded","_loadState","clearLoader","$broadcast","VideoManagerDirective","providerPromises","YouTube","player","YT","Player","events","PlayerState","ENDED","pauseVideo","stopVideo","Vimeo","iframe","setCurrentTime","classes","exec","_wq","onEmbedded","video","prov","firstScriptTag","getElementsByTagName","tag","VideoProvidersFactory","stickies","_header","released","sticking","registerSticky","registration","prioritize","unshift","StickyManagerDirective","getBottom","scrollToTop","StickyContainerDirective","onStick","onRelease","stickyContainer","stickyController","$id","_stylesReady","_stylesReadyCheck","secondaryStylesReady","$sticker","$content","_height","$spacer","$scrollTarget","$$asyncUpdateSticky","$$updateSticky","forceUpdate","isReleased","$$isReleased","newSticky","$$isSticky","$$updateStyling","elementOffset","StickyComponent","Sticky","parentCarousel","carouselSync","paginator","slides","slideCount","auto","autoInterval","startSlide","route","routeTarget","onSlideChange","onEdge","circular","modifiers","CarouselController","ids","slideContent","spacing","slideWidth","slideStyles","indexDiff","_setSlideCount","_dragDisabled","_slideCount","registerCarousel","_nextAutoStep","goToSlide","prevDisabled","nextDisabled","_angle","slideElements","_slider","_updateWidth","_draggable","Draggable","create","_dragger","lockAxis","edgeResistance","dragResistance","throwResistance","throwProps","zIndexBoost","onThrowUpdate","_updatePositions","onThrowComplete","snap","endValue","_updateIndex","virtualIndex","_slideSpacing","onDragStart","_autoRunner","onDragEnd","onDrag","$destroyed","_slides","previousPosition","_resize","_slideScale","positionDraggable","targetIndex","half","isSlideable","indexPos","newIndex","previousIndex","slide","slideOffset","angle","_test","baseStyles","newStyles","handleChildEdgeHit","nextSlide","prevSlide","lockAnimation","updateCarousels","updateSlides","maxIndex","onUpdate","update","CarouselComponent","carouselNavController","carouselIndex","CarouselNavComponent","$carousels","CarouselSyncComponent","carouselResource","CarouselResource","blog","videos","opacity","products","reviews","caseStudies","services","RelatedProductsCarouselController","accessories","Carousel","allLabel","modelAsString","ngModel","multiCheckboxController","$viewChangeListeners","updateOptionsStatus","updateModel","selections","$viewValue","stringifiedSelections","selection","active","updateValue","model","$setViewValue","MultiCheckbox","feedResource","calibrateFilters","pageId","allowedContentTypes","deepSearch","culture","FeedResource","FeedGridController","parameters","defaultState","_filtersData","categories","hasHistory","history","preserveFilters","categoriesRaw","tags","replaceState","sortType","_calibrateFilters","openModal","$root","lockScroll","modalOpen","searchByText","closeFilters","_contentTypeAlias","closeModal","blockClose","stopPropagation","contentTypeAlias","_resetCheck","modalSlides","updateHash","hash","urlName","syncAnimations","wow","sync","updateCountry","country","updateCategories","_categoriesCalibrated","category","orLogic","checkCaps","calibrationPromises","updateSort","openFilters","filtersOpen","defaultData","resetable","searchResource","SearchResource","SearchController","productResource","labelOverides","labelOverrides","pageTypes","initCategories","includeDiscontinued","product","customerId","cludoReady","CludoSearch","initialize","engineId","_videoPopup","setIframeUrl","withProducts","_getProducts","openVideoModal","videoUrl","getVideoEmbedUrl","href","hostUrl","spanTag","initLoad","brand","isDiscontinued","updateProduct","updateDiscontinued","syncPage","queryLog","trackQuery","getTime","referer","trackClicks","updatePageTypes","sourceIds","LocationSearchController","_input","_wrapListeners","resetModel","_scriptReady","_autocomplete","google","maps","places","Autocomplete","fields","componentRestrictions","countries","addListener","place","getPlace","latitude","geometry","lat","longitude","lng","address","formatted_address","_delayedSubmit","isFirstChange","Geocoder","geocode","_addEventListener","listener","_listener","suggestionSelected","KeyboardEvent","code","keyCode","coordinates","LocationSearchComponent","checkboxDropdownController","close","_disabled","selectionItems","selectionIndex","dropdownOpen","_externalOptions","closeExternal","textParts","CheckboxDropdownComponent","GoogleMapController","_apiReady","initPromise","_initMap","_mapPromise","_mapReady","_initPosition","_updatePosition","mapStyle","_updateStyle","_createMarkers","_map","Map","zoom","mapTypeControl","streetViewControl","_addLocationControl","controlDiv","firstChild","border","outline","borderRadius","boxShadow","cursor","marginRight","secondChild","backgroundSize","backgroundRepeat","setCenter","ControlPosition","RIGHT_BOTTOM","setOptions","_convertPosition","_clearMarkers","bounds","LatLngBounds","Marker","_getValue","mappings","number","fontWeight","fontFamily","SymbolPath","CIRCLE","scale","fillColor","strokeWeight","fillOpacity","onMarkerClick","extend","getPosition","_markers","getCenter","setZoom","fitBounds","piece","setMap","GoogleMapComponent","DealerSearchController","mapMappings","_createStickyPromise","locationReady","_locationReadyPromise","notDefault","isDefault","updateFilters","geolocation","getCurrentPosition","coords","_previousParams","paginationParams","updateMap","searchResults","_location","goToLocation","_previousLocation","_stickyPromise","stickyReady","initMap","datepickerPlaceholder","dateFormat","productPickerPlaceholder","serialNumbersPlaceholder","selectionsLabel","addButtonText","clearButtonText","productSelectorController","$filter","today","updateViewModel","Pikaday","_initDatePicker","datePicker","destroy","datePickerContainer","yearRange","umbracoFormsLocale","datePickerYearRange","i18n","locales","format","date","purchaseDate","updateErrorStatus","minDate","maxDate","getFullYear","getMonth","getDate","setDefaultDate","checkErrors","isValid","errors","serialNumbers","addSelection","setDate","ProductSelectorComponent","distributorSelectorPlaceholder","customDistributorPrompt","namePlaceholder","cityPlaceholder","countryPlaceholder","nameErrorMessage","cityErrorMessage","countryErrorMessage","distributorSelectorController","changed","locked","updateData","isCustom","distributor","distributors","inputChanged","DistributorSelectorComponent","CountryPickerController","contentTypes","loadingText","CountryPickerComponent","ProductResource","App","revealer","searcher","productIntro"],"sourceRoot":""}