{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/accessories-slider.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/account.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/alert-box.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/back-to-top.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/bundles-packages.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/by-the-numbers.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/callout-background-image-props.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/cart-item-page.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/case-studies.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/catalogdatamigration.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/collections-search.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/component-application-cta.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/component-faqs.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/contactus-form-select-menu.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/date-picker.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/epi-form.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/header.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/homepage-six-tabs.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/image-gallery.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/importcatalog.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/importcsv.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/importpartsmapping.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/in-the-spotlight.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/input-labels.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/input-password-field.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/input-validation.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/leftnav-5050.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/login.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/market.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/modals.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/newbillingaddress.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/password-verification.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/paymetric-ajax.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/paymetric-iframe-poc.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/product-detail-page.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/product-recommendations.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/register.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/registration.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/related-articles.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/save-in-wishlist.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/search-list-grid-view.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/search.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/section-detail-page.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/components/validation.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/integrations/ODP/utils.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/main.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/polyfills/ieJSFix.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/templates/Complete.js","webpack:///./Source/Evoqua.Web/wwwroot/js/src/templates/TipSheets.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/defaults/index.js","webpack:///./node_modules/axios/lib/defaults/transitional.js","webpack:///./node_modules/axios/lib/env/data.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/isAxiosError.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/axios/lib/helpers/validator.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack:///./node_modules/tiny-slider/src/helpers/addClass.js","webpack:///./node_modules/tiny-slider/src/helpers/addEvents.js","webpack:///./node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack:///./node_modules/tiny-slider/src/helpers/caf.js","webpack:///./node_modules/tiny-slider/src/helpers/calc.js","webpack:///./node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack:///./node_modules/tiny-slider/src/helpers/classListSupport.js","webpack:///./node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack:///./node_modules/tiny-slider/src/helpers/docElement.js","webpack:///./node_modules/tiny-slider/src/helpers/events.js","webpack:///./node_modules/tiny-slider/src/helpers/extend.js","webpack:///./node_modules/tiny-slider/src/helpers/forEach.js","webpack:///./node_modules/tiny-slider/src/helpers/getAttr.js","webpack:///./node_modules/tiny-slider/src/helpers/getBody.js","webpack:///./node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack:///./node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack:///./node_modules/tiny-slider/src/helpers/getSlideId.js","webpack:///./node_modules/tiny-slider/src/helpers/getTouchDirection.js","webpack:///./node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack:///./node_modules/tiny-slider/src/helpers/hasAttr.js","webpack:///./node_modules/tiny-slider/src/helpers/hasClass.js","webpack:///./node_modules/tiny-slider/src/helpers/hideElement.js","webpack:///./node_modules/tiny-slider/src/helpers/isNodeList.js","webpack:///./node_modules/tiny-slider/src/helpers/isVisible.js","webpack:///./node_modules/tiny-slider/src/helpers/jsTransform.js","webpack:///./node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack:///./node_modules/tiny-slider/src/helpers/passiveOption.js","webpack:///./node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack:///./node_modules/tiny-slider/src/helpers/raf.js","webpack:///./node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack:///./node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack:///./node_modules/tiny-slider/src/helpers/removeClass.js","webpack:///./node_modules/tiny-slider/src/helpers/removeEvents.js","webpack:///./node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack:///./node_modules/tiny-slider/src/helpers/setAttrs.js","webpack:///./node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack:///./node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack:///./node_modules/tiny-slider/src/helpers/showElement.js","webpack:///./node_modules/tiny-slider/src/helpers/toDegree.js","webpack:///./node_modules/tiny-slider/src/helpers/whichProperty.js","webpack:///./node_modules/tiny-slider/src/tiny-slider.js","webpack:///./node_modules/vanillajs-datepicker/js/DateRangePicker.js","webpack:///./node_modules/vanillajs-datepicker/js/Datepicker.js","webpack:///./node_modules/vanillajs-datepicker/js/events/functions.js","webpack:///./node_modules/vanillajs-datepicker/js/events/inputFieldListeners.js","webpack:///./node_modules/vanillajs-datepicker/js/events/otherListeners.js","webpack:///./node_modules/vanillajs-datepicker/js/events/pickerListeners.js","webpack:///./node_modules/vanillajs-datepicker/js/i18n/base-locales.js","webpack:///./node_modules/vanillajs-datepicker/js/lib/date-format.js","webpack:///./node_modules/vanillajs-datepicker/js/lib/date.js","webpack:///./node_modules/vanillajs-datepicker/js/lib/dom.js","webpack:///./node_modules/vanillajs-datepicker/js/lib/event.js","webpack:///./node_modules/vanillajs-datepicker/js/lib/utils.js","webpack:///./node_modules/vanillajs-datepicker/js/main.js","webpack:///./node_modules/vanillajs-datepicker/js/options/defaultOptions.js","webpack:///./node_modules/vanillajs-datepicker/js/options/processOptions.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/Picker.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/templates/calendarWeeksTemplate.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/templates/daysTemplate.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/templates/pickerTemplate.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/views/DaysView.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/views/MonthsView.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/views/View.js","webpack:///./node_modules/vanillajs-datepicker/js/picker/views/YearsView.js"],"names":[],"mappings":";QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;AClFA;AAAA;AAAkD;AAClD;;AAEA;AACA,mCAAmC,uEAAG;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;;AAEA,SAAS;AACT,OAAO;AACP,KAAK;;AAEL;;;;;;;;;;;;;;AClDA;AAAA;AAAA,eAAe,mBAAO,CAAC,4CAAO;AACyB;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,gEAAe;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA,e;;;;;;;;;;;AC3GA,eAAe,mBAAO,CAAC,4CAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,wCAAwC;AACxE,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA,gB;;;;;;;;;;;AC5BA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,C;;;;;;;;;;;;AC/BA;AAAA;AAAA,CAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;;AAEA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,sFAAuC;AAC/C,uFAAuF,UAAU,OAAO,EAAE;AAC1G;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;;AAGL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,4EAA6B;;AAEjC,wEAAwE,UAAU,OAAO,EAAE;AAC3F;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,4EAA6B;;AAEjC,wEAAwE,UAAU,OAAO,EAAE;AAC3F;AACA;AACA,C;;;;;;;;;;;AC3LA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA,KAAK;;AAEL,CAAC;;AAED;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC1DD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA,KAAK;;AAEL,CAAC;;AAED;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC1DD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACrCA;AAAA;AAAkD;AAClD;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,uEAAG;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,C;;;;;;;;;;;AC/BA,eAAe,mBAAO,CAAC,4CAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,wCAAwC;AACxE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,gDAAgD,oDAAoD;AACpG;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;AC5JD;AAAA;AAAsD;;AAEtD;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;AACA;AACA,QAAQ,mEAAoB;AAC5B;AACA;;AAEA;AACA;AACA;AACA,QAAQ,mEAAoB;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa;;AAEb;AACA;;AAEA;;AAEA;AACA;AACA,aAAa;;AAEb;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;;AAEb;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,C;;;;;;;;;;;AC3PA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;ACzCA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,C;;;;;;;;;;;ACTA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa;;AAEb;AACA;AACA;;AAEA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT,KAAK;AACL,C;;;;;;;;;;;;ACpEA;AAAA;AAAkD;;AAElD,yD;;AAEA;AACA,yBAAyB,+DAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,E;AACH;;;;;;;;;;;;;;ACbA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,C;;;;;;;;;;;AC5CA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB;AACjB,aAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB,iBAAiB;AACjB,aAAa;AACb;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,aAAa;;AAEb;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA,iBAAiB;AACjB,aAAa;;AAEb;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,iBAAiB;AACjB,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA,SAAS;AACT;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB,iBAAiB;AACjB,aAAa;AACb;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;ACvOD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa;;AAEb;AACA,SAAS;AACT,KAAK;;AAEL;AACA;;AAEA;AACA;AACA,aAAa;;AAEb,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;;AAGL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;;ACxEA,eAAe,mBAAO,CAAC,4CAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,wCAAwC;AACxE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,gDAAgD,oDAAoD;AACpG;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;AC5JD,eAAe,mBAAO,CAAC,4CAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,wCAAwC;AACxE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,gDAAgD,oDAAoD;AACpG;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;AC5JD,eAAe,mBAAO,CAAC,4CAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,wCAAwC;AACxE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,gDAAgD,oDAAoD;AACpG;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;;AC5JD;AAAA;AAAkD;AAClD;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,uEAAG;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,uD;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,C;;;;;;;;;;;;;;;AC9Be;;AAEf;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;;AAGT;AACA,wE;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,SAAS;;AAET;AACA,uE;AACA,iF;;;AAGA,SAAS;;;;AAIT,0E;AACA;AACA;AACA;;;AAGA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;ACrED;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;ACzBD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,C;;;;;;;;;;;;;;;;;;;;;;;ACxDA;AAAA;AAAkD;AAClD;AACA;AACA;AACA,mBAAmB,uEAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;AC/CA;AAAA;AAAA,eAAe,mBAAO,CAAC,4CAAO;AACwB;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,wCAAwC;AACxE,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,kEAAmB;AACnC,gBAAgB,gFAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC,qBAAqB,WAAW,wCAAwC;AACxE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA,aAAa;AACb;;AAEA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;ACjLD,eAAe,mBAAO,CAAC,4CAAO;;AAE9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,qBAAqB;AACrB;AACA,qBAAqB;;AAErB;AACA,aAAa;AACb,SAAS;AACT;AACA;;AAEA;AACA,c;;;;;;;;;;;AClCA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;ACrCA,eAAe,mBAAO,CAAC,4CAAO;;AAE9B;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,wCAAwC;AACxE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;;;AAGA;AACA;AACA,0DAA0D,6BAA6B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;;;AAIA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;ACzND;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6D;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,iCAAiC,GAAG;AACpC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,gCAAgC,EAAE;AAClC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;;;;AC1DA;AACO;;AAEP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;;AAET,KAAK;AACL;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,EAAE;AACpF;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;ACtCD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,qBAAqB;AACrB,iBAAiB;AACjB;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;;;;AC/CD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qBAAqB;AACxD,SAAS;AACT,KAAK;AACL;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA,mBAAmB;;AAEnB;AACA,eAAe;AACf,WAAW;AACX;AACA;;;AAGA;AACA;AACA;AACA,GAAG,E;;;;;;;;;;;ACjGH;AACA;;AAEA,mBAAmB,qBAAqB;AACxC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;;AAEA,mBAAmB,oCAAoC;AACvD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA,CAAC,E;;;;;;;;;;;;AC3CD;AAAA;AAAA;AAAA,eAAe,mBAAO,CAAC,4CAAO;AACwB;AACC;AACvD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,wCAAwC;AACxE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,QAAQ,gEAAe;;AAEvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,wCAAwC;AACxE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,wCAAwC;AACxE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;AACA;AACA;AACA,qBAAqB,WAAW,wCAAwC;AACxE,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,qEAAsB;AAC9C,wBAAwB,gFAAiC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ,gEAAe;AACvB;AACA;AACA;AACA;AACA;AACA,CAAC,E;;;;;;;;;;;ACp2BD;;;;AAIA;;;AAGA,4C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iD;AACA;AACA,KAAK,E;;AAEL;;AAEA,sC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uD;AACA;AACA,KAAK;;;AAGL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yD;;AAEA,MAAM;;AAEN,CAAC;;;;;;;;;;;;;;;;;ACxDD;AAAA;AAAkD;AAClD;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,uEAAG;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,C;;;;;;;;;;;;AC/BA;AAAA;AAAA,CAAuD;;AAEvD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,0DAA0D,EAAE;AAC5D,0DAA0D,EAAE;AAC5D;AACA;AACA;AACA;AACA,gBAAgB,0EAA2B;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,0DAA0D,EAAE;AAC5D;AACA;AACA;AACA;AACA,gBAAgB,0EAA2B;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,0DAA0D,EAAE;AAC5D,0DAA0D,EAAE;AAC5D;AACA;AACA;AACA;AACA,gBAAgB,0EAA2B;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,0DAA0D,EAAE;AAC5D;AACA;AACA;AACA;AACA,gBAAgB,0EAA2B;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2BAA2B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wFAAyC;AACzD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2BAA2B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wFAAyC;AACzD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kFAAmC;AACnD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kFAAmC;AACnD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,oEAAoE;AACnF,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;;ACnmBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;;AAGL;AACA;AACA;AACA;AACA,KAAK;AACL,C;;;;;;;;;;;;ACjBA;AAAA;AAAA,cAAc,mBAAO,CAAC,4CAAO;AACyB;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,UAAU;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iCAAiC,OAAO,iBAAiB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA,UAAU;AACV;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,0EAA2B;AAC/C;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,yEAA0B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA,aAAa;AACb,SAAS;;AAET;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa;AACb,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA,gB;;;;;;;;;;;AC7QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kBAAkB;AACrD,UAAU;AACV,KAAK;AACL;;;;;;;;;;;;AC7DA,eAAe,mBAAO,CAAC,4CAAO;;AAE9B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,CAAC;;;;;;;;;;;;;ACTD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACO;AACP,wB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,wB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,wB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,wB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,wB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,wB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,wB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,wB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP,wB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;;AAEA;AACA;;AAEO;AACP,wB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP,wB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACO;AACP;;AAEA;AACA;;AAEO;AACP;;AAEA;AACA;;AAEO;AACP;;AAEA;AACA;;AAEO;AACP;;AAEA;AACA;;AAEO;AACP;;AAEA;AACA;;AAEO;AACP;;AAEA;AACA,C;;;;;;;;;;;;ACjTA;AAAA;AAAA;AAA0B;;AAE1B,mBAAO,CAAC,oFAAqB;;AAE7B;;AAEA,IAAI,mBAAO,CAAC,uFAAwB;AACpC,IAAI,mBAAO,CAAC,uFAAwB;AACpC,IAAI,mBAAO,CAAC,+GAAoC;AAChD,CAAC;;;;;;;;;;;;ACTD;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC,gDAAgD,eAAe;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6DAA6D;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,M;;;;;;;;;;;;ACnGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACiB;;AAEqB;AACE;AACiB;AACV;AACR;AACI;AACC;AACJ;AACC;AACF;AACM;AACF;AACR;AACM;AACY;AACL;AACI;AACJ;AACF;AACA;AACT;AACJ;AACD;AACG;AACC;AACQ;AACJ;AACK;AACE;AACb;AACD;AACG;AACG;AACE;AACM;AACJ;AACL;AACG;AACM;AACP;;;;;;;;;;;;;AC1CxC;AAAA;;;;;;;;;;;;ACAA,iBAAiB,mBAAO,CAAC,sDAAa,E;;;;;;;;;;;;ACAzB;;AAEb,YAAY,mBAAO,CAAC,qDAAY;AAChC,aAAa,mBAAO,CAAC,iEAAkB;AACvC,cAAc,mBAAO,CAAC,yEAAsB;AAC5C,eAAe,mBAAO,CAAC,2EAAuB;AAC9C,oBAAoB,mBAAO,CAAC,6EAAuB;AACnD,mBAAmB,mBAAO,CAAC,mFAA2B;AACtD,sBAAsB,mBAAO,CAAC,yFAA8B;AAC5D,kBAAkB,mBAAO,CAAC,yEAAqB;AAC/C,2BAA2B,mBAAO,CAAC,mFAA0B;AAC7D,aAAa,mBAAO,CAAC,mEAAkB;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,4CAA4C;AAC5C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;ACnNa;;AAEb,YAAY,mBAAO,CAAC,kDAAS;AAC7B,WAAW,mBAAO,CAAC,gEAAgB;AACnC,YAAY,mBAAO,CAAC,4DAAc;AAClC,kBAAkB,mBAAO,CAAC,wEAAoB;AAC9C,eAAe,mBAAO,CAAC,8DAAY;;AAEnC;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,mBAAO,CAAC,kEAAiB;AACxC,oBAAoB,mBAAO,CAAC,4EAAsB;AAClD,iBAAiB,mBAAO,CAAC,sEAAmB;AAC5C,gBAAgB,mBAAO,CAAC,wDAAY;;AAEpC;AACA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,oEAAkB;;AAEzC;AACA,qBAAqB,mBAAO,CAAC,gFAAwB;;AAErD;;AAEA;AACA;;;;;;;;;;;;;ACxDa;;AAEb;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;;;AClBa;;AAEb,aAAa,mBAAO,CAAC,2DAAU;;AAE/B;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe,OAAO;AACtB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACtHa;;AAEb;AACA;AACA;;;;;;;;;;;;;ACJa;;AAEb,YAAY,mBAAO,CAAC,qDAAY;AAChC,eAAe,mBAAO,CAAC,yEAAqB;AAC5C,yBAAyB,mBAAO,CAAC,iFAAsB;AACvD,sBAAsB,mBAAO,CAAC,2EAAmB;AACjD,kBAAkB,mBAAO,CAAC,mEAAe;AACzC,gBAAgB,mBAAO,CAAC,2EAAsB;;AAE9C;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA,CAAC;;AAED;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;AAED;;;;;;;;;;;;;ACnJa;;AAEb,YAAY,mBAAO,CAAC,qDAAY;;AAEhC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;;;;;;;;;;ACrDa;;AAEb,oBAAoB,mBAAO,CAAC,mFAA0B;AACtD,kBAAkB,mBAAO,CAAC,+EAAwB;;AAElD;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnBa;;AAEb,mBAAmB,mBAAO,CAAC,qEAAgB;;AAE3C;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjBa;;AAEb,YAAY,mBAAO,CAAC,qDAAY;AAChC,oBAAoB,mBAAO,CAAC,uEAAiB;AAC7C,eAAe,mBAAO,CAAC,uEAAoB;AAC3C,eAAe,mBAAO,CAAC,+DAAa;AACpC,aAAa,mBAAO,CAAC,mEAAkB;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B,uCAAuC;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;;;;;;;ACtFa;;AAEb;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1Ca;;AAEb,YAAY,mBAAO,CAAC,mDAAU;;AAE9B;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,2BAA2B;AAC3B,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;AClGa;;AAEb,kBAAkB,mBAAO,CAAC,mEAAe;;AAEzC;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACxBa;;AAEb,YAAY,mBAAO,CAAC,qDAAY;AAChC,eAAe,mBAAO,CAAC,+DAAa;;AAEpC;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;ACrBA,+CAAa;;AAEb,YAAY,mBAAO,CAAC,mDAAU;AAC9B,0BAA0B,mBAAO,CAAC,+FAAgC;AAClE,mBAAmB,mBAAO,CAAC,2EAAsB;AACjD,2BAA2B,mBAAO,CAAC,yEAAgB;;AAEnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,iEAAiB;AACvC,GAAG;AACH;AACA,cAAc,mBAAO,CAAC,kEAAkB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;;;AClIa;;AAEb;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA;AACA,E;;;;;;;;;;;;ACFa;;AAEb;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACVa;;AAEb,YAAY,mBAAO,CAAC,qDAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACrEa;;AAEb;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACba;;AAEb,YAAY,mBAAO,CAAC,qDAAY;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0CAA0C;AAC1C,SAAS;;AAET;AACA,4DAA4D,wBAAwB;AACpF;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,kCAAkC;AAClC,+BAA+B,aAAa,EAAE;AAC9C;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;ACpDa;;AAEb;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACba;;AAEb,YAAY,mBAAO,CAAC,qDAAY;;AAEhC;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;;;;;;;;;;;;ACZa;;AAEb,YAAY,mBAAO,CAAC,qDAAY;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;ACnEa;;AAEb,YAAY,mBAAO,CAAC,mDAAU;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;ACXa;;AAEb,YAAY,mBAAO,CAAC,qDAAY;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,eAAe;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;ACpDa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1Ba;;AAEb,cAAc,mBAAO,CAAC,yDAAa;;AAEnC;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACjFa;;AAEb,WAAW,mBAAO,CAAC,gEAAgB;;AAEnC;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C,2BAA2B;AAC3B;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,4BAA4B;AAC5B,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5VA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;;;;;;;ACvLtC;AAAA;AAAA;AAAA;AAC+B;AACxB;AACP;AACA;AACA,oCAAoC,cAAc;AAClD;AACA,MAAM;AACN,C;;;;;;;;;;;;ACRA;AAAA;AAAA;AAA2D;AAC3D,eAAe,6DAAgB;AAC/B;AACA,WAAW,6DAAQ,aAAa,uBAAuB;AACvD,KAAK;AACL;AACA,WAAW,6DAAQ,aAAa,2BAA2B;AAC3D;;;;;;;;;;;;;;ACPA;AAAA;AAAA;AAAmD;;AAE5C;AACP;AACA,uFAAuF,+DAAa;AACpG;AACA;AACA,C;;;;;;;;;;;;ACPA;AAAA;AAAO;AACP;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA,C;;;;;;;;;;;;ACNA;AAAA;AAAA;;AAEO;AACP;AACA,kBAAkB,kBAAkB;;;;;;;;;;;;;ACJpC;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA,iC;AACuC;AACQ;AACI;;AAE5C;AACP;AACA,aAAa,2DAAO;AACpB,oBAAoB,mEAAW;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA,oC;AACA,sC;AACA;AACA;AACA;AACA,GAAG;;AAEH,cAAc,uEAAa;;AAE3B;AACA,C;;;;;;;;;;;;AChCA;AAAA;AAAO;AACP;AACA,C;;;;;;;;;;;;ACFA;AAAA;AAAO,kE;;;;;;;;;;;;ACAP;AAAA;AAAA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,oCAAoC;;AAElD;AACA,cAAc,oCAAoC;;AAElD;AACA;;AAEA;AACA;;AAEA;AACA,E;;;;;;;;;;;;ACrBA;AAAA;AAAO,0C;;;;;;;;;;;;ACAP;AAAA;AAAO;AACP;AACA,cAAc;AACd;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,uBAAuB,mCAAmC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,E;;;;;;;;;;;;AC1BA;AAAA;AAAO;AACP;AACA,iCAAiC;AACjC;AACA;;AAEA,QAAQ,YAAY;AACpB;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;ACpBA;AAAA;AAAA;AACO;AACP,iCAAiC,OAAO;AACxC;AACA;AACA,C;;;;;;;;;;;;ACLA;AAAA;AAAO;AACP;AACA,C;;;;;;;;;;;;ACFA;AAAA;AAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,C;;;;;;;;;;;;ACVA;AAAA;AAAO;AACP;AACA;AACA,C;;;;;;;;;;;;ACHA;AAAA;AAAA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,C;;;;;;;;;;;;ACdA;AAAA;AAAO;AACP;AACA;;AAEA;AACA,C;;;;;;;;;;;;ACLA;AAAA;AAAO;AACP;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,C;;;;;;;;;;;;ACXA;AAAA;AAAA;AAAA;AAAA;AAAuC;AACQ;AACI;;AAE5C;AACP,YAAY,cAAc;AAC1B,iCAAiC,cAAc;;AAE/C;AACA,aAAa,2DAAO;AACpB,oBAAoB,mEAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA,cAAc,uEAAa;;AAE3B;AACA;;;;;;;;;;;;;AC1BA;AAAA;AAAO;AACP;AACA,C;;;;;;;;;;;;ACFA;AAAA;AAAA;AAAA;AAAA;AAAyD;;AAEzD,eAAe,qEAAgB;AAC/B,wBAAwB,mCAAmC,EAAE;AAC7D,wBAAwB,uCAAuC;;;;;;;;;;;;;;ACJ/D;AAAA;AAAO;AACP,oCAAoC,2BAA2B;AAC/D,C;;;;;;;;;;;;ACFA;AAAA;AAAO;AACP;AACA,wC;AACA,C;;;;;;;;;;;;ACHA;AAAA;AAAO;AACP;AACA,C;;;;;;;;;;;;ACFA;AAAA;AAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uB;AACA,oC;AACA,KAAK;AACL;AACA;AACA;AACA,C;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAuC;AACQ;AACI;;AAE5C;AACP;AACA;AACA;;AAEA;AACA,aAAa,2DAAO;AACpB,oBAAoB,mEAAW;AAC/B;AACA;AACA,6CAA6C,aAAa,mBAAmB;AAC7E;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA,cAAc,uEAAa;;AAE3B;AACA;;;;;;;;;;;;;AClCA;AAAA;AAAA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;AACM,uCAAuC,gBAAgB,S;;;;;;;;;;;;ACV9D;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACuC;AACQ;AACI;;AAE5C;AACP;AACA;AACA,aAAa,2DAAO;AACpB,oBAAoB,mEAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,WAAW;AAC5B;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,cAAc,uEAAa;;AAE3B;AACA,C;;;;;;;;;;;;AClCA;AAAA;AAAA;;AAEO;AACP;AACA;AACA;AACA,mBAAmB,2BAA2B;;;;;;;;;;;;;ACN9C;AAAA;AAAA;AAA6C;;AAEtC;AACP,SAAS,iEAAU;AACnB;;AAEA;AACA,0BAA0B,KAAK;AAC/B,4BAA4B,KAAK;AACjC;AACA;AACA;AACA,C;;;;;;;;;;;;ACZA;AAAA;AAAA;AAAA;AAC+B;AACxB;AACP;AACA;AACA;AACA;AACA,MAAM;AACN,C;;;;;;;;;;;;ACRA;AAAA;AAAA;AAA2D;AAC3D,kBAAkB,6DAAgB;AAClC;AACA,UAAU,6DAAQ,aAAa,0BAA0B;AACzD,KAAK;AACL;AACA,UAAU,6DAAQ,YAAY,8CAA8C;AAC5E;;;;;;;;;;;;;;ACPA;AAAA;AAAA;AAAmD;;AAE5C;AACP;AACA,kEAAkE,+DAAa;AAC/E;AACA;AACA,C;;;;;;;;;;;;ACPA;AAAA;AAAA;AAA6C;;AAEtC;AACP;AACA;AACA,IAAI,yDAAU;AACd;AACA;AACA,IAAI,yDAAU;AACd;AACA,C;;;;;;;;;;;;ACVA;AAAA;AAAA;AAA6C;;AAEtC;AACP,SAAS,iEAAU;AACnB,oEAAoE,QAAQ;;AAE5E,0BAA0B,KAAK;AAC/B;AACA;AACA;AACA;AACA,C;;;;;;;;;;;;ACXA;AAAA;AAAA;AAA6C;;AAEtC;AACP;AACA;AACA,kBAAkB,yDAAU;AAC5B;AACA;AACA;AACA,0BAA0B,yDAAU;AACpC,IAAI,yDAAU;AACd;;AAEA;AACA,C;;;;;;;;;;;;ACdA;AAAA;AAAO;AACP;AACA,SAAS,6BAA6B,EAAE;AACxC;AACA;AACA,C;;;;;;;;;;;;ACLA;AAAA;AAAO;AACP,oCAAoC,uBAAuB;AAC3D,C;;;;;;;;;;;;ACFA;AAAA;AAAO;AACP;AACA,C;;;;;;;;;;;;ACFA;AAAA;AAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA,uCAAuC,aAAa;AACpD;;AAEA,eAAe;AACf;;;;;;;;;;;;;ACvBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEuC;AACA;AACM;AACsB;AACJ;AACV;AACZ;AACwB;AACE;AACF;AACZ;AACM;AACQ;AAClB;AACkB;AACpB;AACE;AACA;AACM;AACR;AACA;AACE;AACM;AACY;AACZ;AACA;AACJ;AACQ;AACI;AACF;AACV;AACM;AACZ;AACU;;AAEhD;AACP,YAAY,iEAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,eAAe;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,gCAAgC,iBAAiB;AACjD,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,iHAAiH,6BAA6B,EAAE;AAChJ;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,uFAAiB,qBAAqB,mFAAe,mBAAmB,6DAAI;AAC5G,6CAA6C,uFAAiB,sBAAsB,mFAAe,oBAAoB,qFAAgB;AACvI,kCAAkC,uFAAiB,sBAAsB,mFAAe,oBAAoB,uFAAiB;AAC7H,sCAAsC,uFAAiB,sBAAsB,mFAAe,oBAAoB,gFAAa;AAC7H,4CAA4C,uFAAiB,sBAAsB,mFAAe,oBAAoB,oFAAe;AACrI,gDAAgD,uFAAiB,uBAAuB,mFAAe,qBAAqB,gFAAa;AACzI,6CAA6C,uFAAiB,uBAAuB,mFAAe,qBAAqB,gFAAa;AACtI,+CAA+C,uFAAiB,uBAAuB,mFAAe,qBAAqB,gFAAa;AACxI,4CAA4C,uFAAiB,uBAAuB,mFAAe,qBAAqB,gFAAa;AACrI,0CAA0C,uFAAiB,sBAAsB,mFAAe,oBAAoB,kFAAc;AAClI,yCAAyC,uFAAiB,sBAAsB,mFAAe,oBAAoB,kFAAc;;AAEjI;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP,iCAAiC,4CAA4C;AAC7E;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,6BAA6B,uDAAuD;AACpF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,iEAAM;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,WAAW;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD,oCAAoC,kBAAkB;AACtD,mCAAmC,kBAAkB;AACrD;;AAEA;AACA,iCAAiC,yBAAyB;AAC1D;AACA;AACA,kBAAkB,wBAAwB;;;AAG1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC,iBAAiB,qCAAqC;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,qFAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,8FAA8F;AAC3H,SAAS;AACT;AACA,2BAA2B,mBAAmB;AAC9C,yDAAyD,UAAU;AACnE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0DAAM;AACzB;AACA;AACA,gCAAgC,yEAAU;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP,yBAAyB,uCAAuC;AAChE,6BAA6B,6BAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,kBAAkB,EAAE;AAC9C,0BAA0B,kBAAkB;AAC5C;;AAEA;AACA,mBAAmB,6CAA6C;;AAEhE;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA,iBAAiB,oEAAoE;AACrF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,mBAAmB;AACxC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,WAAW;;AAE/B,mBAAmB,iBAAiB;AACpC,mBAAmB,iBAAiB;;AAEpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAkD,oBAAoB;;AAEtE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,oDAAoD,wBAAwB;;AAE5E;AACA;AACA;AACA,wDAAwD,eAAe;AACvE;AACA;;AAEA,wBAAwB,aAAa;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,qCAAqC,aAAa;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kBAAkB;;AAEvC;AACA;;AAEA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,yCAAyC,+BAA+B;AACxE;AACA;AACA;;AAEA,oDAAoD,6BAA6B;AACjF,kEAAkE,6BAA6B;;AAE/F;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA,4DAA4D;AAC5D,4DAA4D;AAC5D,KAAK;AACL;AACA;AACA,mCAAmC;AACnC;;AAEA,sEAAsE,6CAA6C;AACnH;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL,sBAAsB,iCAAiC;AACvD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,0CAA0C,yBAAyB;AACnE;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,6BAA6B;;AAE9C;AACA;;AAEA;AACA,6FAA6F;AAC7F;;AAEA;AACA,2FAA2F;AAC3F;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,wBAAwB;AACtD;AACA;AACA,oBAAoB,yCAAyC;AAC7D;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI,oEAAO;AACX,MAAM,sEAAQ;AACd,qBAAqB,iCAAiC;AACtD,uCAAuC,CAAC,sEAAQ,sBAAsB;AACtE,MAAM,sEAAQ;AACd;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B,KAAK;AACnC;AACA;AACA,QAAQ,sEAAQ;AAChB,QAAQ,4EAAW;AACnB;;AAEA;AACA;AACA,UAAU,sEAAQ;AAClB,UAAU,4EAAW;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,MAAM,oEAAO;AACb;;AAEA;AACA;AACA;AACA;AACA,YAAY,wEAAS;AACrB,YAAY,sEAAQ;;AAEpB;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;;AAEP;AACA,MAAM,2DAAG,YAAY,iBAAiB,wFAAiB,oBAAoB,qBAAqB,EAAE,EAAE,EAAE;;AAEtG;AACA,oCAAoC,6EAA6E;;AAEjH,mDAAmD,2DAAG,YAAY,iBAAiB,wFAAiB,uCAAuC,EAAE;;AAE7I,KAAK;AACL;AACA,qBAAqB,8BAA8B;;AAEnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,2BAA2B;AAC3D,OAAO;;AAEP,KAAK;AACL;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,sBAAsB;AAC9C,iCAAiC;AACjC;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,mBAAmB,8BAA8B;;AAEjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kEAAkE,OAAO;AACzE;AACA;AACA,QAAQ,sEAAQ;AAChB,QAAQ,4EAAW;AACnB;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,0EAAU,wGAAwG,GAAG,wFAAiB;AAC9I,QAAQ,0EAAU,oCAAoC,GAAG,wFAAiB;AAC1E,OAAO;AACP,QAAQ,oEAAO;AACf;AACA,SAAS;AACT;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,QAAQ,0EAAU,oCAAoC,wFAAiB;AACvE;;AAEA;AACA;AACA,MAAM,0EAAU,oCAAoC,wFAAiB;;AAErE;AACA;AACA,6HAA6H;AAC7H,iCAAiC,0CAA0C;AAC3E,QAAQ,0EAAU,4BAA4B,wFAAiB;AAC/D;;AAEA;AACA;AACA,2BAA2B,4CAA4C;AACvE;AACA;AACA,iCAAiC,0CAA0C;AAC3E,gCAAgC,yCAAyC;AACzE;AACA,gBAAgB,CAAC,0EAAU,6CAA6C,wFAAiB,SAAS;;AAElG;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,oCAAoC;;AAEvD;AACA,gBAAgB,CAAC,0EAAU,6CAA6C,wFAAiB,SAAS;AAClG;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,4CAA4C;AAC9F;;AAEA;AACA;AACA,iDAAiD,4FAA4F;AAC7I;;AAEA;AACA;AACA,2FAA2F;AAC3F;AACA;AACA;AACA;AACA;AACA,2CAA2C,qBAAqB;AAChE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iDAAiD;AACpF,kCAAkC,gDAAgD;AAClF;AACA,uBAAuB,0CAA0C,iBAAiB,EAAE;;AAEpF;AACA;;AAEA;AACA,mEAAmE,YAAY;AAC/E;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ,sEAAQ,kBAAkB,mBAAmB;AACrD,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,QAAQ,wEAAS,kBAAkB,wBAAwB;AAC3D;;AAEA;AACA;AACA,iCAAiC,CAAC,wEAAS,yBAAyB;AACpE,wCAAwC,CAAC,wEAAS,6BAA6B;AAC/E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sEAAQ,gBAAgB,oCAAoC;AACpE;AACA,QAAQ,oEAAO;AACf,UAAU,sEAAQ;AAClB;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;;AAET;AACA,OAAO;AACP;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,QAAQ,0EAAU,sDAAsD,wFAAiB;AACzF;;AAEA,MAAM,sEAAQ,6BAA6B,6DAA6D;AACxG,MAAM,4EAAW;AACjB,MAAM,sEAAQ;;AAEd;AACA,MAAM,wEAAS;AACf;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,sEAAQ;AAChB;AACA;AACA,SAAS;AACT;;AAEA;AACA,QAAQ,sEAAQ;AAChB;AACA;AACA,SAAS;AACT;;AAEA;AACA,QAAQ,sEAAQ,cAAc,yBAAyB;AACvD,QAAQ,sEAAQ,cAAc,yBAAyB;AACvD;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ,wEAAS;AACjB,OAAO;AACP,QAAQ,wEAAS;AACjB,QAAQ,wEAAS;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM,wEAAS;AACf;;AAEA,gBAAgB,CAAC,wEAAS,uDAAuD;AACjF,oBAAoB,CAAC,wEAAS,wBAAwB;AACtD,oBAAoB,CAAC,wEAAS,2BAA2B;;AAEzD;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,MAAM,wEAAS,OAAO,mBAAmB;AACzC;;AAEA;AACA;AACA;AACA,OAAO,qBAAqB,gBAAgB;AAC5C;;AAEA;AACA,kBAAkB,iBAAiB,EAAE,mBAAmB,gBAAgB;;AAExE;AACA,6BAA6B,oCAAoC;AACjE,uCAAuC,gBAAgB;AACvD;AACA;;AAEA;AACA;AACA;AACA,0BAA0B,0BAA0B;;AAEpD;AACA,IAAI,8EAAY,OAAO,mBAAmB;;AAE1C;AACA,oBAAoB,CAAC,8EAAY,2BAA2B;AAC5D,4BAA4B,CAAC,8EAAY,oCAAoC;AAC7E,uBAAuB,CAAC,8EAAY,0BAA0B;;AAE9D;AACA,IAAI,8EAAY;AAChB,IAAI,8EAAY;AAChB,yBAAyB,CAAC,8EAAY,kBAAkB,wBAAwB,EAAE;AAClF,mBAAmB,8BAA8B;;AAEjD;AACA;AACA;AACA;AACA,MAAM,8EAAY;AAClB;AACA,gBAAgB,CAAC,8EAAY,yBAAyB;AACtD,oBAAoB,CAAC,8EAAY,wBAAwB;;AAEzD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;;AAGL;AACA;AACA;AACA,0kDAA0kD,qBAAqB,mBAAmB,EAAE,EAAE;;AAEtnD;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,2DAAG,YAAY,0BAA0B,EAAE;AAC/C;;AAEA;AACA,gBAAgB,QAAQ;AACxB,6BAA6B,sCAAsC;AACnE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,+BAA+B,EAAE;AACjE,sBAAsB,4CAA4C;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;AAClC;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,+BAA+B;AAC/B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,0BAA0B,EAAE;AACpE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA,gDAAgD;AAChD,oBAAoB,wDAAwD;;AAE5E;AACA;AACA,QAAQ,wEAAS;AACjB,QAAQ,8EAAY;AACpB;AACA;AACA;AACA;AACA,UAAU,4EAAW;AACrB,SAAS;AACT,2BAA2B,CAAC,4EAAW,aAAa;AACpD,2BAA2B,CAAC,4EAAW,aAAa;AACpD;AACA,OAAO;AACP;AACA,UAAU,4EAAW;AACrB,SAAS;AACT,2BAA2B,CAAC,4EAAW,aAAa;AACpD,2BAA2B,CAAC,4EAAW,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA,QAAQ,4EAAW;AACnB;AACA,OAAO;AACP,QAAQ,4EAAW;AACnB;AACA;AACA;AACA;AACA,QAAQ,wEAAS;AACjB,QAAQ,8EAAY;AACpB;AACA;AACA;AACA,QAAQ,wEAAS;AACjB,QAAQ,8EAAY;AACpB;AACA;AACA;AACA,6BAA6B,CAAC,4EAAW,iBAAiB;AAC1D,gDAAgD,iBAAiB;AACjE,OAAO;AACP,6BAA6B,CAAC,4EAAW,iBAAiB;AAC1D,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA,QAAQ,wEAAS;AACjB,QAAQ,8EAAY;AACpB;AACA;AACA;AACA,QAAQ,wEAAS;AACjB,QAAQ,8EAAY;AACpB;;AAEA;AACA,iEAAiE,+BAA+B;;AAEhG;AACA,0BAA0B,gCAAgC;AAC1D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,gDAAgD,+BAA+B;AAC/E;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,qBAAqB;AAC7C,KAAK;AACL;AACA;AACA;AACA;;AAEA,oCAAoC,+BAA+B;;AAEnE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU,gFAAa,QAAQ,wFAAiB;AAChD,UAAU,0EAAU,6CAA6C,wFAAiB;AAClF;AACA;;AAEA;AACA,uBAAuB,gBAAgB;;AAEvC;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,0CAA0C;AAC9D;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB;AACxB,8BAA8B,qBAAqB;AACnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,4DAA4D,gBAAgB;AAC5E;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,oDAAoD,qBAAqB;AACzE,WAAW;AACX,oDAAoD,qBAAqB;AACzE;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,sCAAsC,CAAC,4EAAW,iBAAiB;AACnE,+BAA+B,CAAC,4EAAW,eAAe;AAC1D;AACA;AACA,QAAQ,4EAAW;AACnB,OAAO;AACP,yBAAyB,CAAC,4EAAW,aAAa;AAClD,yBAAyB,CAAC,4EAAW,aAAa;AAClD;AACA;AACA;;AAEA;AACA,qCAAqC,CAAC,4EAAW,iBAAiB;AAClE,8BAA8B,CAAC,4EAAW,eAAe;AACzD;AACA;AACA,QAAQ,4EAAW;AACnB,OAAO;AACP,yBAAyB,CAAC,4EAAW,aAAa;AAClD,yBAAyB,CAAC,4EAAW,aAAa;AAClD;AACA;AACA;;AAEA;AACA,iBAAiB,QAAQ;;AAEzB;AACA,sBAAsB,mCAAmC;;AAEzD;AACA;AACA;AACA,8BAA8B,KAAK;AACnC,uBAAuB,CAAC,sEAAQ,qBAAqB;AACrD,QAAQ,sEAAQ;AAChB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,QAAQ;;AAE1B;AACA;AACA,+BAA+B,gCAAgC;;AAE/D;AACA;AACA;AACA,8BAA8B,KAAK;AACnC,uBAAuB,CAAC,4EAAW,qBAAqB;AACxD,QAAQ,4EAAW;AACnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB,QAAQ;;AAE3B;AACA;AACA,IAAI,4EAAW;AACf;AACA,8BAA8B,KAAK;AACnC,uBAAuB,CAAC,4EAAW,gBAAgB;AACnD,QAAQ,4EAAW;AACnB;AACA;;AAEA;AACA,mCAAmC,CAAC,4EAAW,0BAA0B;;AAEzE;AACA;AACA,iDAAiD,OAAO;AACxD;AACA,QAAQ,4EAAW;AACnB,QAAQ,4EAAW;AACnB,QAAQ,4EAAW;AACnB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,QAAQ;;AAE5B;AACA;AACA;;AAEA;AACA,8BAA8B,KAAK;AACnC,uBAAuB,CAAC,4EAAW,gBAAgB;AACnD,QAAQ,4EAAW;AACnB;AACA;;AAEA;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA,QAAQ,sEAAQ;AAChB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,8CAA8C,mCAAmC;AACjF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,oCAAoC;AAC1D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qEAAqE,WAAW;AAChF,wCAAwC,SAAS;AACjD;AACA,OAAO;;AAEP;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,sEAAQ;AACrB;AACA;AACA,6CAA6C,qBAAqB;AAClE,UAAU,wEAAS;;AAEnB,UAAU,wEAAS;;AAEnB;AACA,oBAAoB,oEAAO;;AAE3B;AACA,uBAAuB,oEAAO;AAC9B,uBAAuB,qBAAqB;;AAE5C,UAAU,sEAAQ;AAClB;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI,sEAAQ;AACZ;AACA;;AAEA;AACA,IAAI,sEAAQ;AACZ;AACA;;AAEA;AACA,IAAI,sEAAQ;AACZ,IAAI,4EAAW;AACf,IAAI,8EAAY;AAChB;;AAEA;AACA;AACA,uBAAuB,qBAAqB;;AAE5C;AACA,MAAM,oEAAO,kEAAkE,gBAAgB,EAAE;AACjG;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI,2DAAG,YAAY,iDAAiD,EAAE;AACtE;;AAEA;AACA;AACA,uBAAuB,aAAa;;AAEpC;AACA;AACA,sCAAsC,mBAAmB,EAAE;AAC3D,UAAU,sEAAQ,0BAA0B,uBAAuB;AACnE,KAAK;;AAEL;AACA,uBAAuB,aAAa;;AAEpC;AACA,IAAI,2DAAG,YAAY,2BAA2B,EAAE;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kFAAkF,OAAO;AACzF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wCAAwC,oCAAoC;AAC5E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAI,oEAAO;AACX;AACA,cAAc,gEAAgE;AAC9E;AACA,oCAAoC,iEAAiE;AACrG,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,oEAAO;AACX;AACA;AACA,YAAY,oEAAO;AACnB,UAAU,4EAAW;AACrB,UAAU,sEAAQ;AAClB;AACA;AACA,OAAO;AACP,aAAa,oEAAO;AACpB,UAAU,sEAAQ;AAClB;AACA;AACA,WAAW;AACX,UAAU,4EAAW;AACrB;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,+BAA+B,KAAK;AACpC;;AAEA;AACA;AACA,QAAQ,sEAAQ;;AAEhB;AACA,QAAQ,sEAAQ;AAChB,QAAQ,4EAAW;AACnB,OAAO;AACP;AACA,QAAQ,sEAAQ;AAChB,QAAQ,4EAAW;AACnB;;AAEA;AACA,MAAM,4EAAW;AACjB;;AAEA;AACA;AACA,MAAM,oEAAO;AACb,QAAQ,4EAAW;AACnB,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,QAAQ,sEAAQ;AAChB;AACA;AACA,SAAS;AACT,QAAQ,4EAAW;;AAEnB,QAAQ,sEAAQ,cAAc,6DAA6D;AAC3F,QAAQ,4EAAW;AACnB,QAAQ,sEAAQ;;AAEhB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,QAAQ;;AAE9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,oCAAoC;AACjE;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,aAAa;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,YAAY;;AAEjC;AACA;;AAEA;AACA,sBAAsB,aAAa;;AAEnC;AACA;AACA;AACA;AACA,qBAAqB,uBAAuB;AAC5C,OAAO;AACP;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,oCAAoC;;AAE/D;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,oCAAoC;AAC1D;AACA;;AAEA;AACA;AACA,gBAAgB,gCAAgC;;AAEhD,wBAAwB,OAAO;AAC/B;;AAEA;AACA,mBAAmB,mDAAmD;;AAEtE;AACA;AACA;AACA,MAAM,4EAAW;AACjB,MAAM,sEAAQ;;AAEd,kBAAkB,0BAA0B;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,wEAAS,cAAc,mBAAmB;;AAEnE,SAAS;AACT;AACA,UAAU,4EAAW;AACrB;;AAEA,0BAA0B,8BAA8B;AACxD,OAAO;AACP;AACA;;AAEA;AACA;AACA,QAAQ,8EAAY;AACpB,QAAQ,wEAAS;;AAEjB;AACA;;AAEA;AACA;AACA,0DAA0D,wEAAS,cAAc,mBAAmB;AACpG;AACA,GAAG;;AAEH;AACA,qCAAqC,eAAe;;AAEpD;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;;AAEvC;AACA,wEAAwE,gBAAgB;;AAExF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU,4EAAW;AACrB,UAAU,sEAAQ;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iCAAiC,oCAAoC;AACrE;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,iBAAiB,QAAQ;;AAEzB;AACA;AACA;;AAEA;AACA,KAAK;AACL;;AAEA;AACA,KAAK;AACL;AACA,uCAAuC,QAAQ,EAAE,OAAO,mBAAmB;AAC3E;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,8CAA8C,qCAAqC;;AAEnF;AACA;AACA,mBAAmB,kEAAkE;;AAErF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,+BAA+B,qBAAqB;AACpD,+BAA+B,qBAAqB;AACpD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC,QAAQ,EAAE,OAAO,mBAAmB;AACzE;AACA;;AAEA;AACA;AACA;;AAEA,4FAA4F,4BAA4B;;AAExH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,2BAA2B;AACjD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC,QAAQ,EAAE,OAAO,mBAAmB;AACzE;;AAEA;AACA;;AAEA;AACA,uCAAuC,oEAAO,uBAAuB,4BAA4B;AACjG,QAAQ,oEAAO;AACf,yCAAyC,oEAAO;AAChD;AACA;AACA;;AAEA;AACA,wBAAwB,gBAAgB;AACxC,wBAAwB;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI,sEAAQ,kBAAkB,sBAAsB;AACpD;AACA;;AAEA;AACA;AACA,yBAAyB,+CAA+C;AACxE;;AAEA;AACA;AACA,yBAAyB,gDAAgD;AACzE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC,wBAAwB;AAC3D,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS,oEAAO,2BAA2B,QAAQ;;AAEnD;AACA;AACA,0BAA0B,oEAAO;;AAEjC;AACA;AACA,2BAA2B,kCAAkC;AAC7D,OAAO;AACP,mCAAmC,kCAAkC;AACrE,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAW,wFAAiB,CAAC,sEAAQ;AACrC;;AAEA;AACA;AACA,qCAAqC,QAAQ,EAAE,OAAO,mBAAmB;AACzE;;AAEA,gCAAgC,qBAAqB;;AAErD;AACA;AACA,MAAM,2DAAG;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,YAAY,2DAAG,YAAY,cAAc,EAAE,EAAE;AACrE,OAAO;AACP,4CAA4C,oDAAoD;AAChG,oCAAoC,sBAAsB;AAC1D;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,2DAAG;AACP,mBAAmB,YAAY,2DAAG,YAAY,cAAc,EAAE,EAAE;;AAEhE,wCAAwC,oDAAoD;AAC5F;AACA,8CAA8C,sBAAsB;;AAEpE;AACA,qBAAqB,kEAAkE;AACvF,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,2DAAG;AACX;AACA;AACA,qBAAqB,8BAA8B;AACnD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU,wEAAS,UAAU;AAC7B;AACA,YAAY,8EAAY,UAAU,sBAAsB;AACxD,YAAY;AACZ;;AAEA;AACA,qBAAqB,2DAAG;AACxB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,eAAe;AACf;AACA,eAAe;AACf;AACA;AACA;AACA,8DAA8D,YAAY;AAC1E;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,uBAAuB;AACzE,qBAAqB,6BAA6B;AAClD,iCAAiC,oBAAoB;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;;AAE1C;AACA;AACA;AACA,eAAe,oEAAW;;AAE1B;AACA;AACA;AACA,aAAa,oEAAW;AACxB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iEAAM;AACvB;AACA;AACA;;;;;;;;;;;;;AC7sFA;AAAA;AAAA;AAAA;AAAA;AAAsE;AACtB;AACP;;AAEzC;AACA;AACA,kCAAkC;;AAElC;AACA;AACA,kCAAkC;;AAElC;AACA;;AAEA;AACA,EAAE,uEAAiB;AACnB;AACA;AACA,MAAM,sDAAU;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACe;AACf;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,0BAA0B,uBAAuB;AACjD,KAAK;AACL,0BAA0B,uBAAuB;AACjD;AACA;;AAEA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA,IAAI,yEAAmB;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,MAAM;AACpB;AACA;AACA;AACA,gBAAgB,sEAAU;AAC1B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,0BAA0B;AACvC,SAAS,YAAY;AACrB,aAAa,0BAA0B;AACvC,SAAS,YAAY;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,uBAAuB;AACjD,KAAK;AACL,0BAA0B,uBAAuB;AACjD;AACA;AACA;;;;;;;;;;;;;ACjNA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoE;AAChB;AACO;AACd;AACyB;AACvB;AACU;AACA;AACjB;AACqB;AAC0C;AAC7C;;AAE1D;AACA;AACA,eAAe,sEAAU;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,sCAAsC;AAClD,SAAS,yCAAyC;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,qEAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mEAAc;AACzB;AACA,MAAM,+DAAS;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS,2BAA2B;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,gCAAgC;AACvC;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mFAAsB;AAC1B,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACe;AACf;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA,mCAAmC;AACnC;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,0DAAK;AAC5B;AACA;AACA,KAAK,EAAE,0EAAc,CAAC,kEAAc;AACpC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA,0BAA0B,0EAAc;;AAExC;AACA;AACA;AACA,qBAAqB,mEAAa;AAClC;AACA,KAAK;AACL,qBAAqB,mEAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC,yDAAM;;AAE3C;AACA;AACA,KAAK;AACL;AACA,kCAAkC,yEAAc;AAChD;AACA,gCAAgC,yEAAS;AACzC,8BAA8B,uEAAO;AACrC,kCAAkC,2EAAW;AAC7C,8BAA8B,4EAAY;AAC1C,8BAA8B,uEAAO;AACrC;AACA;AACA;AACA;AACA,MAAM,uEAAiB;AACvB;AACA;;AAEA;AACA;AACA,cAAc,YAAY;AAC1B,cAAc,cAAc;AAC5B;AACA;AACA,gBAAgB,KAAK;AACrB,kBAAkB,OAAO;AACzB,kBAAkB,OAAO;AACzB;AACA,UAAU,OAAO;AACjB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;AACA,WAAW,sEAAU,uBAAuB,6DAAO,UAAU,6DAAO;AACpE;;AAEA;AACA;AACA,cAAc,mBAAmB;AACjC;AACA,cAAc,cAAc;AAC5B;AACA;AACA,mBAAmB,mBAAmB;AACtC,kBAAkB,OAAO;AACzB,kBAAkB,OAAO;AACzB;AACA,UAAU,YAAY;AACtB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;AACA;AACA,WAAW,qEAAS,0BAA0B,6DAAO,UAAU,6DAAO;AACtE;;AAEA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA,WAAW,6DAAO;AAClB;;AAEA;AACA,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,uBAAuB,0EAAc;AACrC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mEAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,WAAW;AACzB;AACA;AACA;AACA,IAAI,yEAAmB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,4BAA4B;AAC1C;AACA;AACA;AACA;AACA,gBAAgB,sEAAU;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,8BAA8B;AAC3C;AACA,aAAa,OAAO;AACpB,eAAe,QAAQ;AACvB;AACA,gBAAgB,QAAQ;AACxB;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gEAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,kBAAkB,QAAQ;AAC1B;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,GAAG,0BAA0B;AACzE,uBAAuB,mEAAa;AACpC;AACA;;AAEA;AACA;AACA,aAAa,OAAO;AACpB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,cAAc;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrfA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6C;AACM;;AAE5C;AACP;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,OAAO;AACjE;;AAEA;AACO;AACP,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB;AAC/B;AACA;AACA;AACA,oBAAoB,8DAAS;AAC7B;AACA;AACA,oBAAoB,6DAAQ;AAC5B;AACA;AACA,oBAAoB,6DAAQ;AAC5B;AACA,gBAAgB,kEAAY;AAC5B;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,uBAAuB,aAAa;AACpC,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;;;AC/CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0C;AACI;AACiC;AACZ;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,OAAO,+DAAS;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4DAAO;AAC1B,OAAO;AACP,mBAAmB,6DAAQ;AAC3B,OAAO;AACP,mBAAmB,4DAAO;AAC1B;AACA,cAAc,oDAAO;AACrB;AACA;AACA;AACA,iBAAiB,8DAAS;AAC1B,cAAc,sDAAS;AACvB;AACA;AACA,eAAe,eAAe;AAC9B;AACA;AACA;AACA;AACA,iBAAiB,6DAAQ;AACzB,cAAc,qDAAQ;AACtB,qDAAqD,sEAAiB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,IAAI,6DAAO;AACX;AACA;;AAEA;AACA,SAAS,cAAc;AACvB;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,+BAA+B,mDAAmD;AAClF,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,QAAQ,oEAAc;AACtB,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,QAAQ,oEAAc;AACtB,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,QAAQ,gEAAU;AAClB,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA,iBAAiB,mEAAe;AAChC;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;AClMA;AAAA;AAAA;AAAA;AAAA;AAA8C;AACS;AAChB;;AAEvC;AACO;AACP,SAAS,gBAAgB;AACzB;AACA;AACA;AACA;AACA,yBAAyB,mEAAe;AACxC;AACA;AACA;AACA,MAAM,4EAAsB;AAC5B;AACA;AACA,EAAE,6DAAO;AACT;;;;;;;;;;;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0D;AACH;AACG;;AAE1D;AACA;AACA;AACA;AACA;AACA,MAAM,8DAAS;AACf,MAAM,6DAAQ;;AAEd;AACA;;AAEO;AACP;AACA,sBAAsB,0DAAK;AAC3B;AACA;AACA;AACA;AACA;AACA,qCAAqC,cAAc;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,sBAAsB,YAAY;AAClC;;AAEO;AACP,EAAE,gEAAU;AACZ;;AAEO;AACP,EAAE,oEAAc;AAChB;;AAEO;AACP,EAAE,oEAAc;AAChB;;AAEA;AACO;AACP,iBAAiB,4EAAsB;AACvC;AACA;AACA;;AAEA,SAAS,cAAc;AACvB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEO;AACP;AACA;;;;;;;;;;;;;ACnEA;AAAA;AAAA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACZA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2C;AACL;;AAEtC;AACO;AACP;AACO,qCAAqC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO,IAAI;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,EAAE,sDAAK;AACd,KAAK;AACL;AACA;AACA,yBAAyB,kBAAkB,EAAE,iBAAiB;AAC9D,OAAO;AACP;AACA,wBAAwB,4DAAU;AAClC,KAAK;AACL;AACA;;AAEO;AACP;AACA,iBAAiB,0DAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sDAAK;AAChB;;AAEA;AACA;AACA,qCAAqC,0DAAS;AAC9C;;AAEA;AACA;;AAEO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACxLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACP;AACA;;AAEO;AACP;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;;AAEA;AACO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;;AC9DA;AAAA;AAAA;AAAA;AAAA;AACA,OAAO,sCAAsC;;AAE7C;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK,sBAAsB;AAC3B;AACA,KAAK,6BAA6B;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACtEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO;AACP;AACA;;AAEO;AACP;AACA;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,yDAAyD;AAChE;AACA;AACA;AACA;AACA;AACA,cAAc,IAAI,GAAG,KAAK,IAAI,IAAI;AAClC,GAAG;AACH,cAAc,WAAW,KAAK,QAAQ;;AAEtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACO;AACP;AACA;;;;;;;;;;;;;AC5DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAyC;AACU;;AAEd;;;;;;;;;;;;;ACHrC;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,6EAAc,EAAC;;;;;;;;;;;;;ACrC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwD;AACC;AACO;AACxB;AACS;;AAEjD;AACA;AACA;AACA;AACA,CAAC,GAAG,0DAAc;;AAElB;AACA;AACA;AACA,MAAM,gEAAU;AAChB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,eAAe,qEAAS;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACe;AACf,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,kEAAc;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAS;AAClC;AACA;AACA;AACA;AACA,cAAc,mEAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mEAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,qEAAS;AAC5B;AACA,UAAU,gEAAU,QAAQ,mEAAc;AAC1C;AACA,KAAK;AACL;AACA;AACA;AACA,qBAAqB,qEAAS;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,6DAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6DAAS;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC,iEAAW,CAAC,0DAAc;AAC/D;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;;;;;;;AC/RA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiF;AAC5C;AACyD;AAC5C;AACS;AAChB;AACI;AACF;AACiB;AASxB;;AAEtC;AACA,kCAAkC,IAAI;AACtC;AACA,CAAC,IAAI;AACL,6BAA6B,IAAI;;AAEjC;AACA;AACA;AACA;AACA,MAAM,+DAAW;AACjB,KAAK;AACL;AACA,MAAM,+DAAW;AACjB;AACA;AACA;AACA;AACA,IAAI,mEAAe;AACnB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,IAAI,mEAAe;AACnB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,+DAAW;AACjB,KAAK;AACL,MAAM,+DAAW;AACjB;AACA;AACA,MAAM,iEAAW,wBAAwB,iEAAW;AACpD,WAAW,iBAAiB;AAC5B,yCAAyC,+DAAS,CAAC,0DAAK;AACxD;AACA;AACA;AACA,MAAM,+DAAW;AACjB,KAAK;AACL,MAAM,+DAAW;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS,cAAc;AACvB,sCAAsC,gEAAU;AAChD,SAAS,kEAAY;AACrB;;AAEA;AACA;AACA;AACA;AACA,SAAS,sBAAsB;AAC/B;;AAEA;AACA;AACA,IAAI,mFAAsB;AAC1B;AACA;AACA,IAAI,mFAAsB;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,6DAAS;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACe;AACf;AACA,WAAW,OAAO;;AAElB,qBAAqB,oEAAc;AACnC,mCAAmC,6DAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,aAAa;;AAErD;AACA;;AAEA;AACA,IAAI,uEAAiB;AACrB,6BAA6B,4EAAiB;AAC9C,sBAAsB,sEAAW;AACjC,qCAAqC,4EAAiB;AACtD,kCAAkC,yEAAc;AAChD,kCAAkC,yEAAc;AAChD,mCAAmC,0EAAe;AAClD,mCAAmC,0EAAe;AAClD;;AAEA;AACA;AACA,UAAU,0DAAQ;AAClB,UAAU,4DAAU;AACpB,UAAU,2DAAS,QAAQ,iDAAiD;AAC5E,UAAU,2DAAS,QAAQ,sDAAsD;AACjF;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,WAAW,oBAAoB;AAC/B;AACA;AACA,KAAK;AACL;AACA;AACA,8CAA8C,6DAAS;AACvD;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,mFAAsB;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mFAAsB;AAC1B;;AAEA;AACA,WAAW,+BAA+B;AAC1C,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,SAAS,uBAAuB;AAChC;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mFAAsB;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;ACpYA;AAAA;AAAyE;;AAEzE,8BAA8B,0EAAoB;AAClD;AACA,uBAAuB,qEAAe,aAAa,cAAc,EAAE;AACnE;;AAEe,oFAAqB,EAAC;;;;;;;;;;;;;ACPrC;AAAA;AAAyE;;AAEzE,qBAAqB,0EAAoB;AACzC,8BAA8B,qEAAe,aAAa,aAAa,EAAE;AACzE,iCAAiC,qEAAe,aAAa;AAC7D;;AAEe,2EAAY,EAAC;;;;;;;;;;;;;ACP5B;AAAA;AAAwD;;AAExD,uBAAuB,0EAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,6EAAc,EAAC;;;;;;;;;;;;;ACtB9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2D;AACoC;AAC3C;AACiB;AACb;AACkB;AAC7C;;AAEd,uBAAuB,gDAAI;AAC1C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,oBAAoB,6DAAS,CAAC,kEAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,QAAQ,iEAAW;AACnB;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,6DAAS,CAAC,2EAAqB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,+DAAW;AACnB;AACA,UAAU,+DAAW;AACrB;AACA,OAAO;AACP,QAAQ,+DAAW;AACnB;AACA,UAAU,+DAAW;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAS;AAClC,kBAAkB,mEAAc;;AAEhC;AACA,gBAAgB,8DAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uCAAuC,0DAAK;AAC5C;AACA;AACA;;AAEA,wBAAwB,sEAAU;AAClC;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,mEAAc;AACxC;AACA,yBAAyB,4DAAO,CAAC,6DAAQ;AACzC,OAAO;AACP;AACA;AACA;AACA,sBAAsB,4DAAO;AAC7B;AACA;;AAEA,wCAAwC,eAAe;AACvD;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gEAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;;;;;;;;;;;;AC7OA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4E;AAChC;AACD;AACd;;AAE7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,yBAAyB,gDAAI;AAC5C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,4BAA4B,6DAAS,CAAC,qEAAe,cAAc,uBAAuB;AAC1F;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,uBAAuB,8DAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,QAAQ,gEAAU;AAClB;AACA;AACA,KAAK,IAAI;AACT;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,8DAAS;;AAE5B,wCAAwC,eAAe;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,C;;;;;;;;;;;;ACjNA;AAAA;AAAA;AAAA;AAA8C;AACgB;;AAE9D;AACe;AACf;AACA;AACA;AACA,eAAe,6DAAS;AACxB;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA,QAAQ,gEAAU;AAClB;AACA;AACA;AACA;AACA;AACA,UAAU,gEAAU;AACpB;AACA;AACA;AACA,QAAQ,qEAAiB;AACzB;AACA;AACA;AACA;;;;;;;;;;;;;ACtDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA4E;AACb;AACpB;AACd;;AAE7B;AACA;AACA;;AAEA;AACe,wBAAwB,gDAAI;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,4BAA4B;AACvE;AACA;AACA,4BAA4B,6DAAS,CAAC,qEAAe;AACrD;AACA;AACA;;AAEA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA,OAAO;AACP,uBAAuB,sEAAiB;AACxC,uBAAuB,8DAAS;AAChC;AACA;AACA,QAAQ,iEAAW;AACnB;AACA;AACA,OAAO;AACP,uBAAuB,sEAAiB;AACxC,uBAAuB,8DAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,sEAAiB;AACnC;;AAEA;AACA;AACA;AACA,mBAAmB,sEAAiB;AACpC;;AAEA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA,aAAa,gEAAU,QAAQ,sEAAiB;AAChD,KAAK;AACL;AACA;AACA;AACA,iBAAiB,sEAAiB;AAClC;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,WAAW,GAAG,UAAU;AAC9D;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,8DAAS;;AAE5B,wCAAwC,eAAe;AACvD;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA","file":"TipSheets.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./Source/Evoqua.Web/wwwroot/js/src/templates/TipSheets.js\");\n","import { tns } from 'tiny-slider/src/tiny-slider';\r\nconst relatedAccessories = document.querySelectorAll('.component-related-accessories');\r\n\r\nif (relatedAccessories.length > 0) {\r\n let sliderRelatedAccessories = tns({\r\n container: '.component-related-accessories__slider',\r\n items: 1,\r\n center: true,\r\n controls: true,\r\n gutter: 10,\r\n controlsPosition: 'bottom',\r\n loop: false,\r\n swipeAngle: false,\r\n speed: 400,\r\n preventScrollOnTouch: 'auto',\r\n autoplay: false,\r\n responsive: {\r\n 425: {\r\n items: 1,\r\n center: true,\r\n \r\n },\r\n 500: {\r\n items: 2,\r\n center: false,\r\n \r\n },\r\n 750: {\r\n items: 3,\r\n center: false,\r\n \r\n },\r\n 1000: {\r\n items: 4,\r\n center: false,\r\n \r\n },\r\n 1100: {\r\n items: 5,\r\n center: false,\r\n \r\n },\r\n 1400: {\r\n items: 6,\r\n center: false,\r\n \r\n },\r\n },\r\n });\r\n\r\n}\r\n\r\n","const axios = require('axios');\r\nimport InputFloatLabel from '@components/input-labels';\r\n\r\nclass Account {\r\n Init() {\r\n var me = this;\r\n $(\"#account-edit-profile\").css(\"display\", \"none\");\r\n $(\"#account-edit\").click(function (event) {\r\n event.preventDefault();\r\n $(\"#account-view-profile\").css(\"display\", \"none\");\r\n $(\"#account-edit-profile\").css(\"display\", \"block\");\r\n });\r\n\r\n var $error = $(\"#account-edit-profile\").find(\"form\").find(\".field-validation-error\").first()[0];\r\n if ($error) {\r\n var validationError = $error.innerHTML;\r\n if (validationError !== undefined) {\r\n $(\"#account-view-profile\").css(\"display\", \"none\");\r\n $(\"#account-edit-profile\").css(\"display\", \"block\");\r\n }\r\n }\r\n\r\n $('#account-edit-profile').on('click', '.btn-save-account-info', function (event) {\r\n event.preventDefault();\r\n me.UpdateAccountInfo($(this));\r\n });\r\n\r\n }\r\n\r\n UpdateAccountInfo(e) {\r\n let form = $(e).closest(\"form\");\r\n let bodyFormData = new FormData();\r\n bodyFormData.set('FirstName', $(\"#FirstName\", form).val());\r\n bodyFormData.set('LastName', $(\"#LastName\", form).val());\r\n bodyFormData.set('PhoneNumber', $(\"#PhoneNumber\", form).val());\r\n bodyFormData.set('PreferredLanguage', $(\"#PreferredLanguage\", form).val());\r\n bodyFormData.set('__RequestVerificationToken', $(\"input[name=__RequestVerificationToken]\", form).val());\r\n const headers = { 'Content-Type': 'application/json' }\r\n\r\n axios.post(form[0].action, bodyFormData, {\r\n headers: headers\r\n })\r\n .then(function (response) {\r\n var firstName = $('#FirstName-error');\r\n var lastName = $('#LastName-error');\r\n\r\n if (response.data.success == false) {\r\n var errorMessage = $(\".account-page-forms__top-error-message\");\r\n\r\n if (errorMessage) {\r\n errorMessage.innerText = '';\r\n for (var error in response.data.errors) {\r\n\r\n if (response.data.errors[error].key === \"FirstName\") {\r\n firstName.text(response.data.errors[error].value);\r\n firstName.parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"LastName\") {\r\n lastName.text(response.data.errors[error].value);\r\n lastName.parent().addClass('form-error');\r\n }\r\n\r\n if (response.data.errors[error].key === \"ProfilePageViewModel.Error\") {\r\n errorMessage.style.display = \"block\";\r\n $(\".account-page-forms__top-error-message\").append(response.data.errors[error].value);\r\n }\r\n\r\n if (response.data.errors[error].key === undefined ||\r\n response.data.errors[error].key === '') {\r\n errorMessage.style.display = \"block\";\r\n $(\".account-page-forms__top-error-message\")\r\n .append(response.data.errors[error] + '<br />');\r\n }\r\n\r\n }\r\n }\r\n\r\n } else {\r\n $(\".form-error-information\").text(\"\");\r\n $(\"#lbl-first-name\").text($(\"#FirstName\", form).val());\r\n $(\"#lbl-last-name\").text($(\"#LastName\", form).val());\r\n $(\"#lbl-phone\").text($(\"#PhoneNumber\", form).val());\r\n $(\"#lbl-preferred-language\").text($(\"#PreferredLanguage\", form).val().toUpperCase());\r\n $(\"#account-view-profile\").css(\"display\", \"block\");\r\n $(\"#account-edit-profile\").css(\"display\", \"none\");\r\n\r\n var welcomeTag = $(\"#welcome-text\");\r\n welcomeTag.text(welcomeTag.data(\"text\") + \" \" + $(\"#FirstName\", form).val() + \"!\");\r\n \r\n InputFloatLabel.Rebind();\r\n }\r\n\r\n //RESET\r\n if (firstName.text() === '') {\r\n firstName.parent().removeClass('form-error');\r\n }\r\n if (lastName.text() === '') {\r\n lastName.parent().removeClass('form-error');\r\n }\r\n })\r\n .catch(function (response) {\r\n $(\".account-page-forms__top-error-message\").text(response);\r\n });\r\n }\r\n}\r\n\r\nvar account = new Account();\r\naccount.Init();","const axios = require('axios');\r\n\r\nclass AlertBox {\r\n Init() {\r\n var inst = this;\r\n $('.alert-box__close').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.hideAlert($(this));\r\n });\r\n });\r\n }\r\n\r\n hideAlert(e) {\r\n let bodyFormData = \"\";\r\n axios({\r\n method: 'post',\r\n url: \"/HeaderBlock/HideAlert\",\r\n data: bodyFormData,\r\n config: { headers: { 'Content-Type': 'multipart/form-data' } }\r\n })\r\n .finally(function () {\r\n $(\"#alertBox\").hide(500);\r\n });\r\n }\r\n}\r\n\r\nvar alertBox = new AlertBox();\r\nalertBox.Init();","const scrollTopBtn = document.querySelector('.btn--back-to-top');\r\n\r\nlet viewportWidth;\r\n\r\nlet setViewportWidth = function () {\r\n viewportWidth = window.innerWidth || document.documentElement.clientWidth;\r\n};\r\n\r\nwindow.onscroll = function() {\r\n scrollFunction();\r\n};\r\n\r\nfunction scrollFunction() {\r\n if (scrollTopBtn) {\r\n if (viewportWidth > 992 && document.body.scrollTop > 3200 || document.documentElement.scrollTop > 3200) {\r\n scrollTopBtn.classList.add('active');\r\n } else if (viewportWidth < 992 && document.body.scrollTop > 2700 || document.documentElement.scrollTop > 2700) {\r\n scrollTopBtn.classList.add('active');\r\n } else {\r\n scrollTopBtn.classList.remove('active');\r\n }\r\n }\r\n}\r\n\r\nif (scrollTopBtn) {\r\n scrollTopBtn.addEventListener('click', function () {\r\n window.scrollTo ({\r\n top: 0,\r\n behavior: 'smooth',\r\n });\r\n });\r\n}","import * as odpUtils from '../integrations/ODP/utils';\r\nif ($(\".configured-bundle\").length > 0) {\r\n var bundleOrPackageJson = $(\"#bundleOrPackageJson\").val();\r\n var configuredBundleId = $(\"#bundleOrPackageJson\").attr(\"data-code\");\r\n var bundleOrPackagesDetailsObject = JSON.parse(bundleOrPackageJson);\r\n var selectedMaterials = [];\r\n var selectedBundle = \"\";\r\n var nextCategoryIndex = 0;\r\n var totalPrice = 0;\r\n\r\n $(document).on(\"change\", \".custom-select\", function () {\r\n var index = $(this).parent().parent().index();\r\n console.log(\"Index value\", index);\r\n\r\n var selectedValue = $(this).val();\r\n console.log('Selected Value', selectedValue);\r\n console.log('Bundle Or Packages Details Object', bundleOrPackagesDetailsObject);\r\n\r\n if (selectedValue && selectedValue != \"Select\") {\r\n if (index == 0) {\r\n if (selectedBundle !== \"\"){\r\n $(\".bp-detail-page__categories .row .col-4\").slice(1).remove();\r\n selectedMaterials = [];\r\n totalPrice = 0;\r\n }\r\n\r\n nextCategoryIndex = 0;\r\n selectedBundle = selectedValue;\r\n }\r\n\r\n selectedMaterials.push($(this).find(':selected').attr('data-materialid'));\r\n totalPrice = parseFloat(totalPrice) + parseFloat($(this).find(':selected').attr('data-price'));\r\n totalPrice = totalPrice.toFixed(2);\r\n\r\n console.log('Total Price', totalPrice)\r\n console.log(\"Selected Materials\", selectedMaterials);\r\n\r\n showPricing();\r\n var required = \"\";\r\n\r\n \r\n let nextCategory = [];\r\n let dropdownElements = [];\r\n\r\n $.each(bundleOrPackagesDetailsObject, function (i) {\r\n if (bundleOrPackagesDetailsObject[i].CategoryDropdowns.length != nextCategoryIndex) {\r\n required = \"\";\r\n nextCategory.push(bundleOrPackagesDetailsObject[i].CategoryDropdowns[nextCategoryIndex]);\r\n if (nextCategory) {\r\n if (nextCategory.Required) {\r\n required = \"required\";\r\n $(\".bp-detail-page__top-cta-container .add-to-cart-configured\").prop(\"disabled\", true);\r\n }\r\n $.each(nextCategory[0].Details, function (j) {\r\n dropdownElements.push(bundleOrPackagesDetailsObject[i].CategoryDropdowns[nextCategoryIndex]);\r\n })\r\n }\r\n nextCategoryIndex++;\r\n }\r\n \r\n })\r\n if (nextCategory === undefined) {\r\n return;\r\n }\r\n \r\n console.log('Next Category', nextCategory);\r\n $.grep(nextCategory, function (element) {\r\n var optionsHtml = \"\";\r\n $.grep(element.Details, function (element) {\r\n optionsHtml += '<option data-materialid=\"' + element.MaterialId + '\" data-price=\"' + element.Price + '\">' + element.Value + '</option>';\r\n });\r\n $(\".bp-detail-page__categories .row\").append('<div class=\"col-4 drop-down\"><div class=\"form-group--float-label float-active\"><label for=\"' + element.Category + '\" id=\"' + element.Category + '\">' + element.Category + '<span class=\"dropdown-name\">*</span></label> <select ' + required + ' name=\"' + element.Category + '\" id=\"' + element.Category + '\" class=\"mb-2 custom-select\"><option value=\"\">Select</option> ' + optionsHtml + '</select></div></div>');\r\n })\r\n if (validateDropdowns()) {\r\n $(\".bp-detail-page__top-cta-container .add-to-cart-configured\").prop(\"disabled\", false);\r\n }\r\n }\r\n else{\r\n $(\".bp-detail-page__categories .row .col-4\").slice(1).remove();\r\n $(\".bp-detail-page__categories .row .col-4 .custom-select\").val('Select')\r\n $(\".bp-detail-page__top-cta-container .add-to-cart-configured\").prop(\"disabled\", true);\r\n selectedBundle = '';\r\n selectedMaterials = [];\r\n nextCategoryIndex = 0;\r\n totalPrice = 0;\r\n showPricing();\r\n }\r\n });\r\n\r\n function showPricing() {\r\n $(\".bp-detail-page__price-container\").removeClass(\"d-none\");\r\n $(\".bp-detail-page__price-container #bp-custom-price\").html(\"$\" + totalPrice);\r\n \r\n }\r\n\r\n $(\".add-to-cart-configured\").click(function () {\r\n addToCartConfigured();\r\n })\r\n\r\n function addToCartConfigured() {\r\n var qty = $(\".bp-detail-page__top-cta-container #quantity\").val();\r\n \r\n var data = {\r\n materialList: selectedMaterials,\r\n configuredBundleOrPackageId: configuredBundleId,\r\n quantity: qty,\r\n };\r\n odpUtils.TrackAddConfiguredBundleToCart(configuredBundleId);\r\n const addBundleToCartEvent = new CustomEvent('add-configured-bundle-to-cart', { detail: { data } });\r\n window.dispatchEvent(addBundleToCartEvent);\r\n $(\"#mini-cart\").css('display', 'block');\r\n }\r\n}\r\n\r\n\r\n$(\".bp-detail-page__qty-decrement\").click(function () {\r\n var quantity = $(\".bp-detail-page__top-cta-container #quantity\").val();\r\n $(\".bp-detail-page__top-cta-container #quantity\").val(parseInt(quantity) - 1);\r\n})\r\n\r\n$(\".bp-detail-page__qty-increment\").click(function () {\r\n var quantity = $(\".bp-detail-page__top-cta-container #quantity\").val();\r\n $(\".bp-detail-page__top-cta-container #quantity\").val(parseInt(quantity) + 1);\r\n})\r\n\r\n$(\".bp-detail-page .add-to-cart\").click(function () {\r\n addToCart();\r\n})\r\n\r\n$(\".bundles-packages .add-to-cart,.bundles-packages.add-to-cart\").click(function () {\r\n addToCartPFP(this);\r\n})\r\n\r\nfunction validateDropdowns() {\r\n var isValid = true;\r\n\r\n $.each(bundleOrPackagesDetailsObject, function (i) {\r\n var anyCategoryIsRequired = $.grep(bundleOrPackagesDetailsObject[i].CategoryDropdowns, function (element) {\r\n return element.Required == true;\r\n }).length > 0;\r\n if (anyCategoryIsRequired) {\r\n $.grep(bundleOrPackagesDetailsObject[i].CategoryDropdowns, function (element) {\r\n if (element.Required) {\r\n console.log($('.bp-detail-page__categories select[name=\"Primary Module\"]').val());\r\n if ($('.bp-detail-page__categories select[name=\"' + element.Category + '\"]').val() == '') {\r\n isValid = false;\r\n }\r\n }\r\n });\r\n }\r\n });\r\n \r\n\r\n return isValid;\r\n}\r\nfunction addToCart() {\r\n var qty = $(\".bp-detail-page__top-cta-container #quantity\").val();\r\n\r\n var data = {\r\n materialList: null,\r\n configuredBundleOrPackageId: $(\"#bundle-code\").val(),\r\n quantity: qty,\r\n };\r\n\r\n //ODP event\r\n odpUtils.TrackAddBundleToCart(data.configuredBundleOrPackageId);\r\n\r\n const addBundleToCartEvent = new CustomEvent('add-bundle-to-cart', { detail: { data } });\r\n window.dispatchEvent(addBundleToCartEvent);\r\n $(\"#mini-cart\").css('display', 'block');\r\n}\r\n\r\nfunction addToCartPFP(event) {\r\n var qty = $(event).parent().parent().find(\"input[name='qty']\").val();\r\n\r\n var data = {\r\n materialList: null,\r\n configuredBundleOrPackageId: $(event).attr(\"data-materialid\"),\r\n quantity: qty,\r\n };\r\n\r\n //ODP event\r\n odpUtils.TrackAddBundleToCart(data.configuredBundleOrPackageId);\r\n\r\n const addBundleToCartEvent = new CustomEvent('add-bundle-to-cart', { detail: { data } });\r\n window.dispatchEvent(addBundleToCartEvent);\r\n $(\"#mini-cart\").css('display', 'block');\r\n}","const numberContainer = document.querySelectorAll('.component-by-the-numbers');\r\n\r\n//Detect if component is in view\r\n\r\nvar numbersInView = new IntersectionObserver(function(entries, numbersInView) {\r\n \r\n entries.forEach(function(entry) {\r\n if(entry.intersectionRatio > 0) {\r\n if (numberContainer.length > 0) {\r\n //Get the value container \r\n const numberValue = document.querySelectorAll('.component-by-the-numbers__prop-value');\r\n //For each container\r\n numberValue.forEach(function(value) {\r\n //Get the actual data value in the attriute\r\n const valueNumber = value.getAttribute('data-count');\r\n function animateValue(start, duration) {\r\n //create the range of numbers\r\n let range = 0 + valueNumber;\r\n let current = start;\r\n let increment = 1;\r\n //If the data value is bigger than 1000, 3000, increment by larger number\r\n if(valueNumber > 3000) {\r\n increment = 10;\r\n } else if (valueNumber > 1000) {\r\n increment = 5;\r\n } else {\r\n increment = 1;\r\n }\r\n //Add the timer\r\n var stepTime = Math.abs(Math.floor(duration / range));\r\n var timer = setInterval(function() {\r\n current += increment;\r\n const numberText = value.querySelector('.value-text');\r\n //Make the text show as the current number\r\n numberText.innerHTML = current;\r\n //If current value is bigger or equal to the actual data value, set the text to the data value, otherwise number will keep climbing\r\n if (current >= valueNumber) {\r\n numberText.innerHTML = valueNumber;\r\n clearInterval(timer);\r\n }\r\n }, stepTime);\r\n \r\n }\r\n //Pass in the start value, and the duration\r\n animateValue(0, 2000);\r\n });\r\n }\r\n //Stop the component from being observed so the values only run on initial view\r\n numbersInView.unobserve(entry.target);\r\n }\r\n \r\n });\r\n \r\n});\r\n\r\n//Pass the component container into Intersection Observer so it knows what to look for in view\r\nnumberContainer.forEach(function(viewNumber) {\r\n numbersInView.observe(viewNumber);\r\n});\r\n","const counterContainer = document.querySelectorAll('.callout-background-image-props');\r\n\r\n//Detect if component is in view\r\n\r\nvar counterInView = new IntersectionObserver(function(entries, counterInView) {\r\n \r\n entries.forEach(function(entry) {\r\n if(entry.intersectionRatio > 0) {\r\n if (counterContainer.length > 0) {\r\n //Get the value container \r\n const counterValue = document.querySelectorAll('.callout-background-image-props__prop-value');\r\n //For each container\r\n counterValue.forEach(function(value) {\r\n //Get the actual data value in the attriute\r\n const valueCount = value.getAttribute('data-count');\r\n function animateValue(start, duration) {\r\n //create the range of numbers\r\n let range = 0 + valueCount;\r\n let current = start;\r\n let increment = 1;\r\n //If the data value is bigger than 1000, 3000, increment by larger number\r\n if(valueCount > 3000) {\r\n increment = 10;\r\n } else if (valueCount > 1000) {\r\n increment = 5;\r\n } else {\r\n increment = 1;\r\n }\r\n //Add the timer\r\n var stepTime = Math.abs(Math.floor(duration / range));\r\n var timer = setInterval(function() {\r\n current += increment;\r\n const valueText = value.querySelector('.value-text');\r\n //Make the text show as the current number\r\n valueText.innerHTML = current;\r\n //If current value is bigger or equal to the actual data value, set the text to the data value, otherwise number will keep climbing\r\n if (current >= valueCount) {\r\n valueText.innerHTML = valueCount;\r\n clearInterval(timer);\r\n }\r\n }, stepTime);\r\n \r\n }\r\n //Pass in the start value, and the duration\r\n animateValue(0, 2000);\r\n });\r\n }\r\n //Stop the component from being observed so the values only run on initial view\r\n counterInView.unobserve(entry.target);\r\n }\r\n \r\n });\r\n \r\n});\r\n\r\n//Pass the component container into Intersection Observer so it knows what to look for in view\r\ncounterContainer.forEach(function(view) {\r\n counterInView.observe(view);\r\n});\r\n","const cartCTA = document.querySelector('.cart-items-page__section-select');\r\n//Fixed position bar\r\nif (cartCTA) {\r\n const offset = cartCTA.offsetTop;\r\n const rect = cartCTA.getBoundingClientRect();\r\n const scrollUp = 'scroll-up';\r\n const scrollDown = 'scroll-down';\r\n let lastScroll = 0;\r\n // Create the function to be called on scroll\r\n const stick = function() {\r\n // Get the scroll\r\n let scroll = window.scrollY;\r\n if (scroll >= 90) {\r\n cartCTA.classList.add('stick');\r\n } else if (scroll <= 90) {\r\n cartCTA.classList.remove('stick');\r\n }\r\n \r\n if (scroll <= 90) {\r\n cartCTA.classList.remove(scrollUp);\r\n cartCTA.classList.remove(scrollDown);\r\n return;\r\n }\r\n\r\n if (scroll > lastScroll && !cartCTA.classList.contains(scrollDown)) {\r\n // down\r\n cartCTA.classList.remove(scrollUp);\r\n cartCTA.classList.add(scrollDown);\r\n } else if (scroll < lastScroll && cartCTA.classList.contains(scrollDown)) {\r\n // up\r\n cartCTA.classList.remove(scrollDown);\r\n cartCTA.classList.add(scrollUp);\r\n }\r\n lastScroll = scroll;\r\n };\r\n // listen to the scroll\r\n window.addEventListener('scroll', stick);\r\n}\r\n\r\n\r\n","import { tns } from 'tiny-slider/src/tiny-slider';\r\nconst caseStudies = document.querySelectorAll('.component-case-studies');\r\nconst caseStudiesSlider = document.querySelectorAll('.component-case-studies__slider');\r\n\r\n//Initiate slider for for mobile for each instance in case of multiples\r\nif(caseStudies.length > 0) {\r\n caseStudiesSlider.forEach(slider => {\r\n let sliderCaseStudies = tns({\r\n container: slider,\r\n items: 1,\r\n edgePadding: 25,\r\n controls: false,\r\n nav: true,\r\n navPosition: 'bottom',\r\n center: true,\r\n loop: false,\r\n swipeAngle: false,\r\n speed: 400,\r\n autoplay: false,\r\n preventScrollOnTouch: 'auto',\r\n responsive: {\r\n 768: {\r\n disable: true\r\n }\r\n }\r\n });\r\n window.addEventListener(\"resize\", function () {\r\n sliderCaseStudies.destroy();\r\n sliderCaseStudies = sliderCaseStudies.rebuild();\r\n });\r\n });\r\n}","const axios = require('axios');\r\n\r\nclass CatalogDataMigration {\r\n Init() {\r\n var inst = this;\r\n $('.jsCatalogDataMigrationSignupBtn').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.jsCatalogDataMigrationSignupBtn($(this));\r\n });\r\n });\r\n }\r\n\r\n convertToJsonObject(arrayData) {\r\n var indexed_array = {};\r\n\r\n $.map(arrayData, function (n, i) {\r\n indexed_array[n['name']] = n['value'];\r\n });\r\n\r\n return indexed_array;\r\n }\r\n\r\n jsCatalogDataMigrationSignupBtn(e) {\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"visible\";\r\n $('#divCatalogDataMigration').children().attr(\"disabled\", \"disabled\");\r\n let form = $(e).closest(\"form\")[0];\r\n let bodyFormData1 = new FormData();\r\n\r\n if ($(\"#files\").prop('files')[0] == null) {\r\n var errorMessage = document.getElementById('catalogDataMigration-error-message');\r\n if (errorMessage) {\r\n errorMessage.innerText = 'Please Select CSV File To Import Catalogs';\r\n errorMessage.style.display = \"block\";\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divCatalogDataMigration').children().attr(\"disabled\", false);\r\n }\r\n return false;\r\n }\r\n \r\n bodyFormData1.set('Files', $(\"#files\").prop('files')[0]);\r\n bodyFormData1.set('__RequestVerificationToken', $(\"input[name=__RequestVerificationToken]\", form).val());\r\n \r\n $('.loading-box').show();\r\n axios({\r\n method: 'post',\r\n url: form.action,\r\n data: bodyFormData1,\r\n config: { headers: { 'Content-Type': 'multipart/form-data' } }\r\n })\r\n .then(function (response1) {\r\n if (response1.data) {\r\n if (response1.data.success) {\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divCatalogDataMigration').children().attr(\"disabled\", false);\r\n $('#catalogDataMigration-success-message').css(\"display\", \"block\");\r\n $('#catalogDataMigration-error-message').css(\"display\", \"none\");\r\n \r\n var accountCount;\r\n var emailCount;\r\n var accountErrorCount;\r\n var parentOrgErrorCount;\r\n \r\n if (response1.data.errors[\"Account\"] === undefined || response1.data.errors[\"Account\"] === '') {\r\n } else {\r\n for (accountCount = 0;\r\n accountCount < response1.data.errors[\"Account\"].length;\r\n accountCount++) {\r\n $('#addedAccounts')\r\n .append(response1.data.errors[\"Account\"][accountCount] + '<br />');\r\n }\r\n }\r\n if (response1.data.errors[\"Email\"] === undefined || response1.data.errors[\"Email\"] === '') {\r\n } else {\r\n for (emailCount = 0; emailCount < response1.data.errors[\"Email\"].length; emailCount++) {\r\n $('#updatedAccounts').append(response1.data.errors[\"Email\"][emailCount] + '<br />');\r\n }\r\n }\r\n if (response1.data.errors[\"AccountError\"] === undefined ||\r\n response1.data.errors[\"AccountError\"] === '') {\r\n } else {\r\n for (accountErrorCount = 0;\r\n accountErrorCount < response1.data.errors[\"AccountError\"].length;\r\n accountErrorCount++) {\r\n $('#catalogDataMigration-success-message')\r\n .append(response1.data.errors[\"AccountError\"][accountErrorCount] + '<br />');\r\n }\r\n }\r\n if (response1.data.errors[\"ParentOrg\"] === undefined ||\r\n response1.data.errors[\"ParentOrg\"] === '') {\r\n } else {\r\n for (parentOrgErrorCount = 0;\r\n parentOrgErrorCount < response1.data.errors[\"ParentOrg\"].length;\r\n parentOrgErrorCount++) {\r\n $('#catalogDataMigration-success-message')\r\n .append(response1.data.errors[\"ParentOrg\"][parentOrgErrorCount] + '<br />');\r\n }\r\n }\r\n } else {\r\n var extensionCount;\r\n if (response1.data.errors[\"FileErrorType\"] === undefined || response1.data.errors[\"FileErrorType\"] === '') {\r\n var errorMessage = document.getElementById('catalogDataMigration-error-message');\r\n if (errorMessage) {\r\n errorMessage.innerText = '';\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divCatalogDataMigration').children().attr(\"disabled\", false);\r\n $('#catalogDataMigration-success-message').css(\"display\", \"none\");\r\n $('#catalogDataMigration-error-message').css(\"display\", \"block\");\r\n for (var error in response1.data.errors) {\r\n if (response1.data.errors[error].key === undefined ||\r\n response1.data.errors[error].key === '') {\r\n $('#catalogDataMigration-success-message').css(\"display\", \"none\");\r\n $('#catalogDataMigration-error-message').css(\"display\", \"block\");\r\n $('#catalogDataMigration-error-message')\r\n .append(response1.data.errors[error].value + '<br />');\r\n }\r\n }\r\n }\r\n } else {\r\n for (extensionCount = 0;\r\n extensionCount < response1.data.errors[\"FileErrorType\"].length;\r\n extensionCount++) {\r\n $('#catalogDataMigration-error-message')\r\n .append(response1.data.errors[\"FileErrorType\"][extensionCount] + '<br />');\r\n }\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divCatalogDataMigration').children().attr(\"disabled\", false);\r\n $('#catalogDataMigration-success-message').css(\"display\", \"none\");\r\n $('#catalogDataMigration-error-message').css(\"display\", \"block\");\r\n }\r\n }\r\n } else {\r\n\r\n window.location.href = '/';\r\n }\r\n })\r\n .catch(function (response) {\r\n var errorPanel = document.getElementById('catalogDataMigration-error-message');\r\n errorPanel.innerText = response;\r\n errorPanel.style.display = \"block\";\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n })\r\n .finally(function () {\r\n $('.loading-box').hide();\r\n });\r\n }\r\n}\r\n$(document).ready(function () {\r\n var catalogDataMigration = new CatalogDataMigration();\r\n catalogDataMigration.Init();\r\n});","import * as odpUtils from '../integrations/ODP/utils';\r\n\r\nconst inputCollections = document.getElementById('collections-search');\r\n\r\n//Show Reset Button for Search Form\r\nif (inputCollections) {\r\n\r\n const clearSearch = document.getElementById('clear-search');\r\n const searchIcon = document.getElementById('searchIcon');\r\n\r\n clearSearch.addEventListener('click', function () {\r\n clearSearch.classList.remove('active');\r\n searchIcon.classList.add('active');\r\n inputCollections.value = '';\r\n document.getElementById('search-value').innerHTML = '';\r\n });\r\n\r\n inputCollections.onkeyup = function (e) {\r\n const key = e.keyCode || e.charCode;\r\n const clear = document.getElementById('clear-search');\r\n\r\n clearSearch.classList.add('active');\r\n searchIcon.classList.remove('active');\r\n\r\n if ((key == 8 || key == 46) && inputCollections.value.length == 0) {\r\n clear.classList.remove('active');\r\n searchIcon.classList.add('active');\r\n }\r\n //document.getElementById('search-value').innerHTML = inputCollections.value;\r\n };\r\n}\r\n\r\nclass Search {\r\n Init() {\r\n var inst = this;\r\n $('.jsNavSearch').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.navSearch($(this));\r\n });\r\n });\r\n\r\n $('.jsCollectionSearch').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.collectionSearch($(this));\r\n });\r\n });\r\n }\r\n\r\n navSearch(e) {\r\n let form = $(e).closest(\"form\")[0];\r\n let query = $(\"#nav-site-search\").val();\r\n odpUtils.TrackSearch(query,\"\");\r\n window.location.href = encodeURI(form.action + '?q=' + query);\r\n }\r\n\r\n collectionSearch(e) {\r\n let form = $(e).closest(\"form\")[0];\r\n let query = $(\"#collections-search\", form).val();\r\n odpUtils.TrackSearch(query,\"\");\r\n window.location.href = encodeURI(form.action + '?q=' + query);\r\n }\r\n}\r\n\r\nvar search = new Search();\r\nsearch.Init();\r\n\r\nlet collectionsAccordions = document.querySelectorAll('.collections-accordion__accordion-trigger');\r\n// Collections Accordions\r\nif (collectionsAccordions !== null && collectionsAccordions !== undefined) {\r\n\r\n collectionsAccordions.forEach(function (accordions) {\r\n accordions.addEventListener(\"click\", function () {\r\n let accordionContainer = this.closest('.collections-accordion__accordion-container');\r\n accordionContainer.classList.toggle('active');\r\n });\r\n });\r\n}\r\n\r\nconst accordionContainerMobile = document.querySelectorAll('.collections-accordion__accordion-container');\r\n// Removes active on mobile to close Accordions\r\nif (accordionContainerMobile !== null && accordionContainerMobile !== undefined) {\r\n accordionContainerMobile.forEach(function (panel) {\r\n let viewportWidth = window.innerWidth || document.documentElement.clientWidth;\r\n\r\n if (viewportWidth < 768) {\r\n panel.classList.remove('active');\r\n }\r\n });\r\n}\r\n\r\n// Collections Tabs\r\nconst tabCollectionsCards = document.querySelectorAll('.collections-tabs__items');\r\nif (tabCollectionsCards.length > 0) {\r\n const tabCollectionsContent = document.querySelectorAll('.collections-tabs__tab-panel-item');\r\n\r\n //Set the Results number below tabs\r\n\r\n tabCollectionsCards.forEach(function (card, index) {\r\n card.addEventListener('click', function (e) {\r\n e.preventDefault();\r\n\r\n let tabs = document.querySelectorAll('.collections-tabs__items');\r\n\r\n //Change the results number below tabs on click of tab\r\n //The below variables has to have a 2 so it can be found after click\r\n\r\n tabs.forEach(function (tab) {\r\n tab.classList.remove('active');\r\n });\r\n\r\n // add active to clicked element\r\n this.classList.add('active');\r\n\r\n let cardIndex = Array.from(card.parentNode.children).indexOf(card);\r\n\r\n tabCollectionsContent.forEach(function (content, index) {\r\n content.classList.remove('active');\r\n });\r\n\r\n tabCollectionsContent[cardIndex].classList.add('active');\r\n\r\n //clearPills.click();\r\n const accordionSet = document.querySelectorAll('.collections-accordion');\r\n accordionSet.forEach(function (set, index) {\r\n set.classList.remove('active');\r\n });\r\n accordionSet[index].classList.add('active');\r\n });\r\n });\r\n\r\n if (localStorage.getItem(\"SelectedTab\") != null) {\r\n var selectedContent = localStorage.getItem(\"SelectedTab\");\r\n var tabElement = $('li[data-id=\"' + selectedContent + '\"]');\r\n if ($(tabElement).hasClass(\"active\") == false) {\r\n $(\".collections-tabs .collections-tabs__items[data-id='content-items']\").click();\r\n }\r\n localStorage.removeItem(\"SelectedTab\");\r\n }\r\n}\r\n\r\nconst selectOptions = document.querySelectorAll('.product-sort');\r\nconst specTables = document.querySelectorAll('.product-detail-page__spec-table');\r\n\r\nif (selectOptions.length > 0) {\r\n\r\n selectOptions.forEach(function (selectOption) {\r\n // Sort filter drop-down for search items\r\n if (selectOption !== null && selectOption !== undefined) {\r\n const optionBox = selectOption.querySelector('.product-sort__options');\r\n const options = selectOption.querySelectorAll('.product-sort__option-item');\r\n const selectedOption = selectOption.querySelector('.product-sort__selected-option');\r\n const defaultOption = selectOption.querySelector('.choose');\r\n selectedOption.innerText = defaultOption.innerText;\r\n\r\n options.forEach(option => {\r\n option.addEventListener('click', () => {\r\n selectedOption.innerText = option.innerText;\r\n optionBox.classList.toggle('active');\r\n selectOption.classList.toggle('active');\r\n showSpecification(option.dataset.code);\r\n });\r\n });\r\n\r\n selectOption.addEventListener('click', () => {\r\n optionBox.classList.toggle('active');\r\n selectOption.classList.toggle('active');\r\n });\r\n\r\n optionBox.addEventListener('mouseleave', function () {\r\n optionBox.classList.remove('active');\r\n selectOption.classList.remove('active');\r\n });\r\n }\r\n });\r\n}\r\n\r\nconst filterBtnMobile = document.getElementById('filter-menu-mobile');\r\nconst filterMenu = document.querySelector('.collections-search-main-content__left');\r\nconst fixedClearMenu = document.querySelector('.clear-results-container');\r\n// Opens filter menu on mobile\r\nif (filterBtnMobile !== null && filterBtnMobile !== undefined) {\r\n\r\n filterBtnMobile.addEventListener('click', () => {\r\n filterMenu.classList.add('active');\r\n fixedClearMenu.classList.add('active');\r\n });\r\n}\r\n\r\nconst clearCheckbox = document.getElementById('clear-results-mobile');\r\n//const allCounts = document.querySelectorAll('.collections-accordion__items-checked');\r\nconst totalFilterCount = document.getElementById('total-filter-count');\r\nlet inputItem = document.querySelectorAll('.check:checked').length;\r\n\r\nfunction showSpecification(code) {\r\n if (code !== null) {\r\n hideAllSpecificaitons();\r\n specTables.forEach(function (specTable) {\r\n let specCode = specTable.dataset.code;\r\n if (specCode === code) {\r\n specTable.classList.add('active');\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction hideAllSpecificaitons() {\r\n if (specTables.length > 0) {\r\n specTables.forEach(function (specTable) {\r\n specTable.classList.remove('active');\r\n });\r\n }\r\n}\r\n\r\nconst mobileFilterMenuClose = document.querySelectorAll('.mobile-filter-menu-trigger');\r\n// Closes filter menu on mobile\r\nif (mobileFilterMenuClose !== null && mobileFilterMenuClose !== undefined) {\r\n mobileFilterMenuClose.forEach(function (closeItem) {\r\n closeItem.addEventListener('click', function (e) {\r\n e.preventDefault();\r\n filterMenu.classList.remove('active');\r\n fixedClearMenu.classList.remove('active');\r\n let test = document.querySelector('.total-filter-count');\r\n let test2 = document.querySelector('.filter-count-number');\r\n if (test2 != null) {\r\n test2.innerHTML = test.innerHTML;\r\n }\r\n });\r\n });\r\n}\r\n\r\n// Show Hide more Resource Category Options\r\nconst resourceCategoryItems = document.querySelectorAll('.resource-category__item');\r\nconst showResources = document.getElementById('show-resource-category');\r\nconst inactiveClass = 'inactive';\r\nlet maxResourceItems = 8;\r\n\r\n[].forEach.call(resourceCategoryItems, function (resourceCategoryItems, index) {\r\n if (index > maxResourceItems - 1) {\r\n resourceCategoryItems.classList.add(inactiveClass);\r\n }\r\n});\r\n\r\nif (showResources) {\r\n showResources.addEventListener('click', function () {\r\n [].forEach.call(document.querySelectorAll('.' + inactiveClass), function (resourceItems, index) {\r\n resourceItems.classList.remove(inactiveClass);\r\n showResources.classList.add('inactive');\r\n });\r\n });\r\n}","//Adding class to fixed header after scroll \r\nconst appCTA = document.querySelector(\".component-application-cta\");\r\n\r\n\r\nif(appCTA) {\r\n const offset = appCTA.offsetTop;\r\n const rect = appCTA.getBoundingClientRect();\r\n const scrollUp = \"scroll-up\";\r\n const scrollDown = \"scroll-down\";\r\n let lastScroll = 0;\r\n // Create the function to be called on scroll\r\n const stick = function () {\r\n\r\n // Get the scroll\r\n let scroll = window.scrollY;\r\n \r\n if ( scroll >= offset) {\r\n appCTA.classList.add('stick');\r\n } else if (scroll <= offset){\r\n appCTA.classList.remove('stick');\r\n }\r\n \r\n if (scroll <= offset) {\r\n appCTA.classList.remove(scrollUp);\r\n appCTA.classList.remove(scrollDown);\r\n return;\r\n }\r\n \r\n if (scroll > lastScroll && !appCTA.classList.contains(scrollDown)) {\r\n // down\r\n appCTA.classList.remove(scrollUp);\r\n appCTA.classList.add(scrollDown);\r\n } else if (scroll < lastScroll && appCTA.classList.contains(scrollDown)) {\r\n // up\r\n appCTA.classList.remove(scrollDown);\r\n appCTA.classList.add(scrollUp);\r\n }\r\n lastScroll = scroll;\r\n };\r\n // listen to the scroll\r\n window.addEventListener('scroll', stick);\r\n}","let accordions = document.querySelectorAll(\".component-faqs__accordion-trigger\");\r\n\r\nif (accordions !== null && accordions !== undefined) {\r\n accordions.forEach(function(accordion){\r\n accordion.addEventListener(\"click\", function () {\r\n let container = this.closest('.component-faqs__accordion-container');\r\n container.classList.toggle('active');\r\n });\r\n });\r\n}","function init() {\r\n const floatContainers = document.querySelectorAll('.FormTextbox');\r\n\r\n if (floatContainers !== null && floatContainers !== undefined) {\r\n floatContainers.forEach(function (float) {\r\n\r\n let floatInput = float.querySelector('.FormTextbox__Input');\r\n\r\n float.addEventListener('click', function () {\r\n this.classList.add('active');\r\n });\r\n\r\n floatInput.addEventListener('blur', function (e) {\r\n if (!floatInput.value) {\r\n e.target.parentNode.classList.remove('active');\r\n }\r\n });\r\n });\r\n }\r\n\r\n const inputFocus = document.querySelectorAll('.FormTextbox__Input');\r\n\r\n if (inputFocus !== null && inputFocus !== undefined) {\r\n inputFocus.forEach(function (inputs) {\r\n\r\n inputs.addEventListener('focus', function (e) {\r\n e.target.parentNode.classList.add('active');\r\n });\r\n\r\n if (inputs.value.length !== 0) {\r\n inputs.parentNode.classList.add('active');\r\n }\r\n\r\n });\r\n }\r\n\r\n const selectOption = document.querySelectorAll('select');\r\n // Change color of select value\r\n if (selectOption !== null && selectOption !== undefined) {\r\n\r\n selectOption.forEach(function (select) {\r\n select.addEventListener('change', function () {\r\n this.style.color = '#333333';\r\n });\r\n });\r\n }\r\n}\r\nconst formSelectContainer = document.getElementById(\"interests\");\r\n\r\nif (formSelectContainer !== null && formSelectContainer !== undefined) {\r\n formSelectContainer.addEventListener(\"change\", (event) => {\r\n var targetId = event.target.value;\r\n\r\n var routeUrl = window.location.href.substr(0, window.location.href.indexOf('?'));\r\n var params = \"?formId=\" + targetId;\r\n $.ajax({\r\n url: routeUrl + params,\r\n type: 'GET',\r\n\r\n success: function (result) {\r\n window.history.replaceState(null, null, params == \"\" ? \"?\" : params);\r\n $(\"#formItem\").replaceWith($(result).find('#formItem'));\r\n init();\r\n }, error: function (e) {\r\n console.log(\"error: \", e);\r\n }\r\n });\r\n });\r\n}","import { Datepicker } from 'vanillajs-datepicker';\r\n\r\nconst elem = document.querySelector('input[name=\"foo\"]'); \r\n\r\nif (elem !== null) {\r\n const datepicker = new Datepicker(elem, {\r\n format: 'MM dd, yyyy',\r\n orientation: 'bottom auto',\r\n nextArrow: '>',\r\n prevArrow: '<',\r\n minDate: 'Date',\r\n autohide: 'true',\r\n }); \r\n}\r\n\r\n\r\n","const floatContainers = document.querySelectorAll('.FormTextbox');\r\n\r\nif (floatContainers !== null && floatContainers !== undefined) {\r\n floatContainers.forEach(function(float) {\r\n\r\n let floatInput = float.querySelector('.FormTextbox__Input');\r\n\r\n float.addEventListener('click', function () {\r\n this.classList.add('active');\r\n });\r\n\r\n floatInput.addEventListener('blur', function (e) {\r\n if (!floatInput.value) {\r\n e.target.parentNode.classList.remove('active');\r\n }\r\n });\r\n });\r\n}\r\n\r\nconst inputFocus = document.querySelectorAll('.FormTextbox__Input');\r\n\r\nif (inputFocus !== null && inputFocus !== undefined) {\r\n inputFocus.forEach(function(inputs) {\r\n\r\n inputs.addEventListener('focus', function (e) {\r\n e.target.parentNode.classList.add('active');\r\n });\r\n \r\n if (inputs.value.length !== 0) {\r\n inputs.parentNode.classList.add('active');\r\n }\r\n \r\n });\r\n}\r\n\r\nconst selectOption = document.querySelectorAll('select');\r\n// Change color of select value\r\nif (selectOption !== null && selectOption !== undefined) {\r\n\r\n selectOption.forEach(function(select) {\r\n select.addEventListener('change', function () {\r\n this.style.color = '#333333';\r\n });\r\n });\r\n}","const languageSelect = document.getElementById('language-choice');\r\n\r\nconst myAccount = document.getElementById('my-account');\r\n\r\n// toggle language options nav\r\nif(languageSelect) {\r\n let languageContent = languageSelect.nextElementSibling;\r\n languageSelect.addEventListener('click', function(e) {\r\n //e.preventDefault();\r\n this.classList.toggle('active');\r\n languageContent.classList.toggle('active');\r\n if (languageContent.style.display === \"none\") {\r\n languageContent.style.display = \"block\";\r\n } else {\r\n languageContent.style.display = \"none\";\r\n }\r\n\r\n });\r\n}\r\n\r\n// toggle account options nav\r\nif(myAccount) {\r\n let accountContent = myAccount.nextElementSibling;\r\n myAccount.addEventListener('click', function(e) {\r\n e.preventDefault();\r\n this.classList.toggle('active');\r\n accountContent.classList.toggle('active');\r\n });\r\n}\r\n\r\nconst mobileMenuBtn = document.querySelector('.btn--mobile-menu');\r\n// toggle mobile nav\r\nif (mobileMenuBtn) {\r\n mobileMenuBtn.addEventListener(\"click\", toggleMenu);\r\n}\r\n\r\nfunction toggleMenu() {\r\n toggleBars();\r\n const mobileMainMenu = document.querySelector('.header__main-nav-content');\r\n mobileMainMenu.classList.toggle('active');\r\n const body = document.getElementsByTagName(\"body\")[0];\r\n body.classList.toggle('active');\r\n // body.addEventListener('touchmove', function(e) {\r\n // e.preventDefault();\r\n // }, false);\r\n}\r\n\r\nfunction toggleBars() {\r\n const barOne = document.getElementById(\"bar\");\r\n barOne.classList.toggle(\"active\");\r\n const barTwo = document.getElementById(\"bar2\");\r\n barTwo.classList.toggle(\"active\");\r\n const barThree = document.getElementById(\"bar3\");\r\n barThree.classList.toggle(\"active\");\r\n}\r\n\r\nconst secondaryFlyoutMenu = document.querySelectorAll('.header__primary-nav-item');\r\nconst flyoutMenuContent = document.querySelectorAll('.header__dropdown-menu');\r\nconst closeFlyoutMenus = document.querySelectorAll('.return-btn');\r\nconst menuOverlay = document.querySelector('.nav-overlay');\r\n\r\nlet viewportWidth;\r\n\r\nlet setViewportWidth = function () {\r\n viewportWidth = window.innerWidth || document.documentElement.clientWidth;\r\n};\r\n\r\n\r\nconst clickHandler = function(event) {\r\n event.preventDefault();\r\n};\r\nconst anotherHandler = function(e) {\r\n event.returnValue = true;\r\n window.location = e.target.href;\r\n};\r\nlet logWidth = function () {\r\n\r\n if (viewportWidth < 992) {\r\n // Show secondary level flyouts\r\n if(secondaryFlyoutMenu.length > 0) {\r\n secondaryFlyoutMenu.forEach(function(menu, index) {\r\n \r\n const aTag = menu.firstElementChild;\r\n\r\n aTag.removeEventListener('click', anotherHandler, false);\r\n aTag.addEventListener('click', function(event) {\r\n clickHandler(event);\r\n let menuIndex = Array.from(menu.parentNode.children).indexOf(menu);\r\n flyoutMenuContent[menuIndex].classList.add('active');\r\n \r\n }) ;\r\n });\r\n }\r\n\r\n // Close secondary level flyouts\r\n if(closeFlyoutMenus.length > 0) {\r\n closeFlyoutMenus.forEach(function(panel, index) {\r\n panel.addEventListener('click', function(e) {\r\n e.stopPropagation();\r\n flyoutMenuContent.forEach(function (item) {\r\n item.classList.remove('active');\r\n });\r\n\r\n });\r\n });\r\n }\r\n }\r\n\r\n if (viewportWidth > 992) {\r\n \r\n const mobileMainMenu = document.querySelector('.header__main-nav-content');\r\n const barOne = document.getElementById(\"bar\");\r\n const barTwo = document.getElementById(\"bar2\");\r\n const barThree = document.getElementById(\"bar3\");\r\n const mobileSearchClose = document.querySelector('.header__search');\r\n if(mobileMainMenu) {\r\n mobileMainMenu.classList.remove('active');\r\n barOne.classList.remove(\"active\");\r\n barTwo.classList.remove(\"active\");\r\n barThree.classList.remove(\"active\");\r\n //mobileSearchClose.classList.remove('active');\r\n \r\n secondaryFlyoutMenu.forEach(function(activateLink, index) {\r\n const aTag = activateLink.firstElementChild;\r\n \r\n aTag.removeEventListener('click', clickHandler, false);\r\n aTag.addEventListener('click', anotherHandler, false);\r\n \r\n });\r\n\r\n secondaryFlyoutMenu.forEach(function(dropDown, index) {\r\n \r\n dropDown.addEventListener('mouseover', function() {\r\n\r\n let menuIndex = Array.from(dropDown.parentNode.children).indexOf(dropDown);\r\n\r\n flyoutMenuContent[menuIndex].classList.add('active-dropdown');\r\n\r\n if (flyoutMenuContent[menuIndex].classList.contains('active-dropdown')) {\r\n menuOverlay.classList.add('active');\r\n }\r\n \r\n });\r\n });\r\n\r\n secondaryFlyoutMenu.forEach(function(dropDown, index) {\r\n \r\n dropDown.addEventListener('mouseleave', function() {\r\n\r\n let menuIndex = Array.from(dropDown.parentNode.children).indexOf(dropDown);\r\n\r\n flyoutMenuContent[menuIndex].classList.remove('active-dropdown');\r\n\r\n menuOverlay.classList.remove('active');\r\n \r\n });\r\n });\r\n }\r\n }\r\n\r\n const mobileFlyoutTriggerLink = document.querySelectorAll('.flyout-trigger-link');\r\n const mobileFlyoutTrigger = document.querySelectorAll('.mobile-secondary-nav_item');\r\n const mobileFlyoutMenu = document.querySelectorAll('.mobile-secondary-nav__dropdown-menu');\r\n const mobileSearchBtn = document.querySelector('.btn--mobile-search');\r\n const mobileSearchContent = document.querySelector('.header__search');\r\n const closeMobileSearchBtn = document.querySelector('.header__search-mobile-btn');\r\n\r\n if(mobileSearchBtn) {\r\n mobileSearchBtn.addEventListener('click', function(e) {\r\n e.preventDefault();\r\n mobileSearchContent.classList.toggle('active');\r\n });\r\n }\r\n\r\n if(closeMobileSearchBtn) {\r\n closeMobileSearchBtn.addEventListener('click', function(e) {\r\n mobileSearchContent.classList.remove('active');\r\n });\r\n }\r\n \r\n \r\n if (viewportWidth < 992) {\r\n\r\n if (mobileFlyoutTrigger.length > 0) {\r\n \r\n mobileFlyoutTriggerLink.forEach(function (navLink, index) {\r\n navLink.addEventListener('click', function (e) {\r\n //e.preventDefault();\r\n });\r\n });\r\n // Get index of nav list items with a specific class\r\n mobileFlyoutTrigger.forEach(function (navTrigger, index) {\r\n navTrigger.addEventListener('click', function (e) {\r\n const clickedTrigger = this;\r\n let triggerIndex = Array.from(mobileFlyoutTrigger).indexOf(clickedTrigger);\r\n const activeFlyoutMenu = mobileFlyoutMenu[triggerIndex];\r\n\r\n if (!activeFlyoutMenu.classList.contains('active')) {\r\n mobileFlyoutMenu.forEach(function (menuItem) {\r\n menuItem.classList.remove('active');\r\n activeFlyoutMenu.classList.add('active');\r\n });\r\n }\r\n });\r\n });\r\n }\r\n // Close secondary mobile level flyouts\r\n const closeFlyoutMenus = document.querySelectorAll('.return-btn');\r\n if(closeFlyoutMenus.length > 0) {\r\n closeFlyoutMenus.forEach(function (returnBtn) {\r\n returnBtn.addEventListener('click', function () {\r\n const allFlyoutMenus = document.querySelectorAll('.mobile-secondary-nav__dropdown-menu');\r\n allFlyoutMenus.forEach(function (singleFlyout, index) {\r\n singleFlyout.classList.remove('active');\r\n });\r\n\r\n });\r\n });\r\n }\r\n \r\n }\r\n};\r\n\r\n// Set our initial width and log it\r\nsetViewportWidth();\r\nlogWidth();\r\n\r\n// // On resize events, recalculate and log\r\nwindow.addEventListener('resize', function () {\r\n setViewportWidth();\r\n logWidth();\r\n}, false);\r\n","const tabCards = document.querySelectorAll('.tabCard__Item');\r\nconst tabContent = document.querySelectorAll('.homepage-six-tabs__tabs-panel-item');\r\nconst closePanel = document.querySelectorAll('.previous');\r\n\r\nif (tabCards !== null && tabCards !== undefined) {\r\n\r\n tabCards.forEach(function(card, index) {\r\n card.addEventListener('click', function(e) {\r\n e.preventDefault();\r\n\r\n let cardIndex = Array.from(card.parentNode.children).indexOf(card);\r\n\r\n tabContent.forEach(function (content, index) {\r\n content.classList.remove('active');\r\n });\r\n\r\n tabContent[cardIndex].classList.add('active');\r\n });\r\n });\r\n\r\n closePanel.forEach(function(panel, index) {\r\n panel.addEventListener('click', function(e) {\r\n\r\n tabContent.forEach(function (item, index) {\r\n item.classList.remove('active');\r\n });\r\n\r\n });\r\n });\r\n}\r\n\r\n\r\n\r\n","const imgGallery = document.querySelectorAll('.image-gallery');\r\nconst galleryNext = document.querySelector('.gallery-next');\r\nconst galleryPrevious = document.querySelector('.gallery-previous');\r\nif(imgGallery.length > 0) {\r\n\r\n let imageThumbnail = document.querySelectorAll(\".gallery-th img\");\r\n //on click of thumbnail run the imageChanger function\r\n imageThumbnail.forEach(function(image) {\r\n image.addEventListener(\"click\", imageChanger);\r\n });\r\n \r\n\r\n //set the next/prev variables\r\n \r\n //Click event on next button\r\n galleryNext.addEventListener('click', function() {\r\n //get the active thumb\r\n let activeThumb = document.querySelector('.active-th');\r\n //If the active thumb is the last child, disable the next button\r\n if(activeThumb == imageThumbnail.lastElementChild) {\r\n galleryNext.setAttribute('disabled', true);\r\n //If not last child, add/remove classes, add/remove dsiabled\r\n } else {\r\n activeThumb.nextElementSibling.classList.add('active-th');\r\n activeThumb.classList.remove('active-th');\r\n galleryNext.removeAttribute('disabled');\r\n galleryPrevious.removeAttribute('disabled');\r\n //Set the image src of the large image to the active thumb image src\r\n let imagePreview = document.querySelector(\"#gallery-preview img\");\r\n imagePreview.src = activeThumb.nextElementSibling.children[0].src;\r\n }\r\n });\r\n\r\n //Same as above but for the previous button\r\n galleryPrevious.addEventListener('click', function() {\r\n let activeThumb = document.querySelector('.active-th');\r\n if(activeThumb == imageThumbnail.firstElementChild) {\r\n galleryPrevious.setAttribute('disabled', true);\r\n } else {\r\n activeThumb.previousElementSibling.classList.add('active-th');\r\n activeThumb.classList.remove('active-th');\r\n galleryPrevious.removeAttribute('disabled');\r\n galleryNext.removeAttribute('disabled');\r\n let imagePreview = document.querySelector(\"#gallery-preview img\");\r\n imagePreview.src = activeThumb.previousElementSibling.children[0].src;\r\n }\r\n });\r\n}\r\n\r\n//Image changer if clicking directly on the thumbnail\r\nfunction imageChanger(e) {\r\n //Set the src of large image to the thumbnail clicked\r\n let imagePreview = document.querySelector(\"#gallery-preview img\");\r\n imagePreview.src = e.target.src;\r\n //Remove active class\r\n const allThumbs = document.querySelectorAll('.gallery-th');\r\n allThumbs.forEach(function(thumb) {\r\n thumb.classList.remove('active-th');\r\n });\r\n //Add active class to the thumbnail parent\r\n e.target.parentNode.classList.add('active-th');\r\n let imageThumbnail = document.querySelector(\".thumbnails\");\r\n if(e.target.parentNode == imageThumbnail.firstElementChild) {\r\n galleryPrevious.setAttribute('disabled', true);\r\n galleryNext.removeAttribute('disabled');\r\n } else if(e.target.parentNode == imageThumbnail.lastElementChild) {\r\n galleryNext.setAttribute('disabled', true);\r\n galleryPrevious.removeAttribute('disabled');\r\n } else {\r\n galleryPrevious.removeAttribute('disabled');\r\n galleryNext.removeAttribute('disabled');\r\n }\r\n}\r\n ","const axios = require('axios');\r\n\r\nclass Importcatalog {\r\n Init() {\r\n var inst = this;\r\n $('.jsImportCatalogSignupBtn').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.jsImportCatalogSignupBtn($(this));\r\n });\r\n });\r\n }\r\n\r\n convertToJsonObject(arrayData) {\r\n var indexed_array = {};\r\n\r\n $.map(arrayData, function (n, i) {\r\n indexed_array[n['name']] = n['value'];\r\n });\r\n\r\n return indexed_array;\r\n }\r\n\r\n jsImportCatalogSignupBtn(e) {\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"visible\";\r\n $('#divImportCatalog').children().attr(\"disabled\", \"disabled\");\r\n let form = $(e).closest(\"form\")[0];\r\n let bodyFormData1 = new FormData();\r\n\r\n if ($(\"#files\").prop('files')[0] == null) {\r\n var errorMessage = document.getElementById('importCatalog-error-message');\r\n if (errorMessage) {\r\n errorMessage.innerText = 'Please Select CSV File To Import Catalogs';\r\n errorMessage.style.display = \"block\";\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divImportCatalog').children().attr(\"disabled\", false);\r\n }\r\n return false;\r\n }\r\n \r\n bodyFormData1.set('Files', $(\"#files\").prop('files')[0]);\r\n bodyFormData1.set('__RequestVerificationToken', $(\"input[name=__RequestVerificationToken]\", form).val());\r\n \r\n $('.loading-box').show();\r\n axios({\r\n method: 'post',\r\n url: form.action,\r\n data: bodyFormData1,\r\n config: { headers: { 'Content-Type': 'multipart/form-data' } }\r\n })\r\n .then(function (response1) {\r\n if (response1.data) {\r\n if (response1.data.success) {\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divImportCatalog').children().attr(\"disabled\", false);\r\n $('#importCatalog-success-message').css(\"display\", \"block\");\r\n $('#importCatalog-error-message').css(\"display\", \"none\");\r\n \r\n var accountCount;\r\n var emailCount;\r\n var accountErrorCount;\r\n var parentOrgErrorCount;\r\n \r\n if (response1.data.errors[\"Account\"] === undefined || response1.data.errors[\"Account\"] === '') {\r\n } else {\r\n for (accountCount = 0;\r\n accountCount < response1.data.errors[\"Account\"].length;\r\n accountCount++) {\r\n $('#addedAccounts')\r\n .append(response1.data.errors[\"Account\"][accountCount] + '<br />');\r\n }\r\n }\r\n if (response1.data.errors[\"Email\"] === undefined || response1.data.errors[\"Email\"] === '') {\r\n } else {\r\n for (emailCount = 0; emailCount < response1.data.errors[\"Email\"].length; emailCount++) {\r\n $('#updatedAccounts').append(response1.data.errors[\"Email\"][emailCount] + '<br />');\r\n }\r\n }\r\n if (response1.data.errors[\"AccountError\"] === undefined ||\r\n response1.data.errors[\"AccountError\"] === '') {\r\n } else {\r\n for (accountErrorCount = 0;\r\n accountErrorCount < response1.data.errors[\"AccountError\"].length;\r\n accountErrorCount++) {\r\n $('#importCatalog-success-message')\r\n .append(response1.data.errors[\"AccountError\"][accountErrorCount] + '<br />');\r\n }\r\n }\r\n if (response1.data.errors[\"ParentOrg\"] === undefined ||\r\n response1.data.errors[\"ParentOrg\"] === '') {\r\n } else {\r\n for (parentOrgErrorCount = 0;\r\n parentOrgErrorCount < response1.data.errors[\"ParentOrg\"].length;\r\n parentOrgErrorCount++) {\r\n $('#importCatalog-success-message')\r\n .append(response1.data.errors[\"ParentOrg\"][parentOrgErrorCount] + '<br />');\r\n }\r\n }\r\n } else {\r\n var extensionCount;\r\n if (response1.data.errors[\"FileErrorType\"] === undefined || response1.data.errors[\"FileErrorType\"] === '') {\r\n var errorMessage = document.getElementById('importCatalog-error-message');\r\n if (errorMessage) {\r\n errorMessage.innerText = '';\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divImportCatalog').children().attr(\"disabled\", false);\r\n $('#importCatalog-success-message').css(\"display\", \"none\");\r\n $('#importCatalog-error-message').css(\"display\", \"block\");\r\n for (var error in response1.data.errors) {\r\n if (response1.data.errors[error].key === undefined ||\r\n response1.data.errors[error].key === '') {\r\n $('#importCatalog-success-message').css(\"display\", \"none\");\r\n $('#importCatalog-error-message').css(\"display\", \"block\");\r\n $('#importCatalog-error-message')\r\n .append(response1.data.errors[error].value + '<br />');\r\n }\r\n }\r\n }\r\n } else {\r\n for (extensionCount = 0;\r\n extensionCount < response1.data.errors[\"FileErrorType\"].length;\r\n extensionCount++) {\r\n $('#importCatalog-error-message')\r\n .append(response1.data.errors[\"FileErrorType\"][extensionCount] + '<br />');\r\n }\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divImportCatalog').children().attr(\"disabled\", false);\r\n $('#importCatalog-success-message').css(\"display\", \"none\");\r\n $('#importCatalog-error-message').css(\"display\", \"block\");\r\n }\r\n }\r\n } else {\r\n\r\n window.location.href = '/';\r\n }\r\n })\r\n .catch(function (response) {\r\n var errorPanel = document.getElementById('importCatalog-error-message');\r\n errorPanel.innerText = response;\r\n errorPanel.style.display = \"block\";\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n })\r\n .finally(function () {\r\n $('.loading-box').hide();\r\n });\r\n }\r\n}\r\n$(document).ready(function () {\r\n var importcatalog = new Importcatalog();\r\n importcatalog.Init();\r\n});","const axios = require('axios');\r\n\r\nclass Importcsv {\r\n Init() {\r\n var inst = this;\r\n $('.jsImportCSVSignupBtn').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.jsImportCSVSignupBtn($(this));\r\n });\r\n });\r\n }\r\n\r\n convertToJsonObject(arrayData) {\r\n var indexed_array = {};\r\n\r\n $.map(arrayData, function (n, i) {\r\n indexed_array[n['name']] = n['value'];\r\n });\r\n\r\n return indexed_array;\r\n }\r\n\r\n jsImportCSVSignupBtn(e) {\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"visible\";\r\n $('#divImportCSV').children().attr(\"disabled\", \"disabled\");\r\n let form = $(e).closest(\"form\")[0];\r\n let bodyFormData1 = new FormData();\r\n\r\n if ($(\"#files\").prop('files')[0] == null) {\r\n var errorMessage = document.getElementById('importcsv-error-message');\r\n if (errorMessage) {\r\n errorMessage.innerText = 'Please Select CSV File To Import Accounts';\r\n errorMessage.style.display = \"block\";\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divImportCSV').children().attr(\"disabled\", false);\r\n }\r\n return false;\r\n }\r\n \r\n bodyFormData1.set('Files', $(\"#files\").prop('files')[0]);\r\n bodyFormData1.set('__RequestVerificationToken', $(\"input[name=__RequestVerificationToken]\", form).val());\r\n \r\n $('.loading-box').show();\r\n axios({\r\n method: 'post',\r\n url: form.action,\r\n data: bodyFormData1,\r\n config: { headers: { 'Content-Type': 'multipart/form-data' } }\r\n })\r\n .then(function (response1) {\r\n if (response1.data) {\r\n if (response1.data.success) {\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divImportCSV').children().attr(\"disabled\", false);\r\n $('#importcsv-success-message').css(\"display\", \"block\");\r\n $('#importcsv-error-message').css(\"display\", \"none\");\r\n \r\n var accountCount;\r\n var emailCount;\r\n var accountErrorCount;\r\n var parentOrgErrorCount;\r\n \r\n if (response1.data.errors[\"Account\"] === undefined || response1.data.errors[\"Account\"] === '') {\r\n } else {\r\n for (accountCount = 0;\r\n accountCount < response1.data.errors[\"Account\"].length;\r\n accountCount++) {\r\n $('#addedAccounts')\r\n .append(response1.data.errors[\"Account\"][accountCount] + '<br />');\r\n }\r\n }\r\n if (response1.data.errors[\"Email\"] === undefined || response1.data.errors[\"Email\"] === '') {\r\n } else {\r\n for (emailCount = 0; emailCount < response1.data.errors[\"Email\"].length; emailCount++) {\r\n $('#updatedAccounts').append(response1.data.errors[\"Email\"][emailCount] + '<br />');\r\n }\r\n }\r\n if (response1.data.errors[\"AccountError\"] === undefined ||\r\n response1.data.errors[\"AccountError\"] === '') {\r\n } else {\r\n for (accountErrorCount = 0;\r\n accountErrorCount < response1.data.errors[\"AccountError\"].length;\r\n accountErrorCount++) {\r\n $('#importcsv-success-message')\r\n .append(response1.data.errors[\"AccountError\"][accountErrorCount] + '<br />');\r\n }\r\n }\r\n if (response1.data.errors[\"ParentOrg\"] === undefined ||\r\n response1.data.errors[\"ParentOrg\"] === '') {\r\n } else {\r\n for (parentOrgErrorCount = 0;\r\n parentOrgErrorCount < response1.data.errors[\"ParentOrg\"].length;\r\n parentOrgErrorCount++) {\r\n $('#importcsv-success-message')\r\n .append(response1.data.errors[\"ParentOrg\"][parentOrgErrorCount] + '<br />');\r\n }\r\n }\r\n } else {\r\n var extensionCount;\r\n if (response1.data.errors[\"FileErrorType\"] === undefined || response1.data.errors[\"FileErrorType\"] === '') {\r\n var errorMessage = document.getElementById('importcsv-error-message');\r\n if (errorMessage) {\r\n errorMessage.innerText = '';\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divImportCSV').children().attr(\"disabled\", false);\r\n $('#importcsv-success-message').css(\"display\", \"none\");\r\n $('#importcsv-error-message').css(\"display\", \"block\");\r\n for (var error in response1.data.errors) {\r\n if (response1.data.errors[error].key === undefined ||\r\n response1.data.errors[error].key === '') {\r\n $('#importcsv-success-message').css(\"display\", \"none\");\r\n $('#importcsv-error-message').css(\"display\", \"block\");\r\n $('#importcsv-error-message')\r\n .append(response1.data.errors[error].value + '<br />');\r\n }\r\n }\r\n }\r\n } else {\r\n for (extensionCount = 0;\r\n extensionCount < response1.data.errors[\"FileErrorType\"].length;\r\n extensionCount++) {\r\n $('#importcsv-error-message')\r\n .append(response1.data.errors[\"FileErrorType\"][extensionCount] + '<br />');\r\n }\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divImportCSV').children().attr(\"disabled\", false);\r\n $('#importcsv-success-message').css(\"display\", \"none\");\r\n $('#importcsv-error-message').css(\"display\", \"block\");\r\n }\r\n }\r\n } else {\r\n\r\n window.location.href = '/';\r\n }\r\n })\r\n .catch(function (response) {\r\n var errorPanel = document.getElementById('importcsv-error-message');\r\n errorPanel.innerText = response;\r\n errorPanel.style.display = \"block\";\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n })\r\n .finally(function () {\r\n $('.loading-box').hide();\r\n });\r\n }\r\n}\r\n$(document).ready(function () {\r\n var importcsv = new Importcsv();\r\n importcsv.Init();\r\n});","const axios = require('axios');\r\n\r\nclass ImportPartsMapping {\r\n Init() {\r\n var inst = this;\r\n $('.jsImportPartsMappingSignupBtn').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.jsImportPartsMappingSignupBtn($(this));\r\n });\r\n });\r\n }\r\n\r\n convertToJsonObject(arrayData) {\r\n var indexed_array = {};\r\n\r\n $.map(arrayData, function (n, i) {\r\n indexed_array[n['name']] = n['value'];\r\n });\r\n\r\n return indexed_array;\r\n }\r\n\r\n jsImportPartsMappingSignupBtn(e) {\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"visible\";\r\n $('#divImportPartsMapping').children().attr(\"disabled\", \"disabled\");\r\n let form = $(e).closest(\"form\")[0];\r\n let bodyFormData1 = new FormData();\r\n\r\n if ($(\"#files\").prop('files')[0] == null) {\r\n var errorMessage = document.getElementById('importPartsMapping-error-message');\r\n if (errorMessage) {\r\n errorMessage.innerText = 'Please Select CSV File To Import Catalogs';\r\n errorMessage.style.display = \"block\";\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divImportPartsMapping').children().attr(\"disabled\", false);\r\n }\r\n return false;\r\n }\r\n \r\n bodyFormData1.set('Files', $(\"#files\").prop('files')[0]);\r\n bodyFormData1.set('__RequestVerificationToken', $(\"input[name=__RequestVerificationToken]\", form).val());\r\n \r\n $('.loading-box').show();\r\n axios({\r\n method: 'post',\r\n url: form.action,\r\n data: bodyFormData1,\r\n config: { headers: { 'Content-Type': 'multipart/form-data' } }\r\n })\r\n .then(function (response1) {\r\n if (response1.data) {\r\n if (response1.data.success) {\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divImportPartsMapping').children().attr(\"disabled\", false);\r\n $('#importPartsMapping-success-message').css(\"display\", \"block\");\r\n $('#importPartsMapping-error-message').css(\"display\", \"none\");\r\n \r\n var accountCount;\r\n var emailCount;\r\n var accountErrorCount;\r\n var parentOrgErrorCount;\r\n \r\n if (response1.data.errors[\"Account\"] === undefined || response1.data.errors[\"Account\"] === '') {\r\n } else {\r\n for (accountCount = 0;\r\n accountCount < response1.data.errors[\"Account\"].length;\r\n accountCount++) {\r\n $('#addedAccounts')\r\n .append(response1.data.errors[\"Account\"][accountCount] + '<br />');\r\n }\r\n }\r\n if (response1.data.errors[\"Email\"] === undefined || response1.data.errors[\"Email\"] === '') {\r\n } else {\r\n for (emailCount = 0; emailCount < response1.data.errors[\"Email\"].length; emailCount++) {\r\n $('#updatedAccounts').append(response1.data.errors[\"Email\"][emailCount] + '<br />');\r\n }\r\n }\r\n if (response1.data.errors[\"AccountError\"] === undefined ||\r\n response1.data.errors[\"AccountError\"] === '') {\r\n } else {\r\n for (accountErrorCount = 0;\r\n accountErrorCount < response1.data.errors[\"AccountError\"].length;\r\n accountErrorCount++) {\r\n $('#importPartsMapping-success-message')\r\n .append(response1.data.errors[\"AccountError\"][accountErrorCount] + '<br />');\r\n }\r\n }\r\n if (response1.data.errors[\"ParentOrg\"] === undefined ||\r\n response1.data.errors[\"ParentOrg\"] === '') {\r\n } else {\r\n for (parentOrgErrorCount = 0;\r\n parentOrgErrorCount < response1.data.errors[\"ParentOrg\"].length;\r\n parentOrgErrorCount++) {\r\n $('#importPartsMapping-success-message')\r\n .append(response1.data.errors[\"ParentOrg\"][parentOrgErrorCount] + '<br />');\r\n }\r\n }\r\n } else {\r\n var extensionCount;\r\n if (response1.data.errors[\"FileErrorType\"] === undefined || response1.data.errors[\"FileErrorType\"] === '') {\r\n var errorMessage = document.getElementById('importPartsMapping-error-message');\r\n if (errorMessage) {\r\n errorMessage.innerText = '';\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divImportPartsMapping').children().attr(\"disabled\", false);\r\n $('#importPartsMapping-success-message').css(\"display\", \"none\");\r\n $('#importPartsMapping-error-message').css(\"display\", \"block\");\r\n for (var error in response1.data.errors) {\r\n if (response1.data.errors[error].key === undefined ||\r\n response1.data.errors[error].key === '') {\r\n $('#importPartsMapping-success-message').css(\"display\", \"none\");\r\n $('#importPartsMapping-error-message').css(\"display\", \"block\");\r\n $('#importPartsMapping-error-message')\r\n .append(response1.data.errors[error].value + '<br />');\r\n }\r\n }\r\n }\r\n } else {\r\n for (extensionCount = 0;\r\n extensionCount < response1.data.errors[\"FileErrorType\"].length;\r\n extensionCount++) {\r\n $('#importPartsMapping-error-message')\r\n .append(response1.data.errors[\"FileErrorType\"][extensionCount] + '<br />');\r\n }\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n $('#divImportPartsMapping').children().attr(\"disabled\", false);\r\n $('#importPartsMapping-success-message').css(\"display\", \"none\");\r\n $('#importPartsMapping-error-message').css(\"display\", \"block\");\r\n }\r\n }\r\n } else {\r\n\r\n window.location.href = '/';\r\n }\r\n })\r\n .catch(function (response) {\r\n var errorPanel = document.getElementById('importPartsMapping-error-message');\r\n errorPanel.innerText = response;\r\n errorPanel.style.display = \"block\";\r\n var imgLoading = document.getElementById(\"imgLoading\");\r\n imgLoading.style.visibility = \"hidden\";\r\n })\r\n .finally(function () {\r\n $('.loading-box').hide();\r\n });\r\n }\r\n}\r\n$(document).ready(function () {\r\n var importpartsmapping = new ImportPartsMapping();\r\n importpartsmapping.Init();\r\n});","import { tns } from 'tiny-slider/src/tiny-slider';\r\nconst inTheSpotLight = document.querySelectorAll('.component-in-the-spotlight');\r\nconst inTheSpotLightSlider = document.querySelectorAll('.component-in-the-spotlight__slider');\r\n\r\n//Initiate slider for for mobile for each instance in case of multiples\r\nif(inTheSpotLight.length > 0) {\r\n inTheSpotLightSlider.forEach(slider => {\r\n let sliderSpotlight = tns({\r\n container: slider,\r\n items: 1,\r\n edgePadding: 25,\r\n controls: false,\r\n nav: true,\r\n navPosition: 'bottom',\r\n center: true,\r\n loop: false,\r\n swipeAngle: false,\r\n speed: 400,\r\n preventScrollOnTouch: 'auto',\r\n autoplay: false,\r\n responsive: {\r\n 768: {\r\n disable: true\r\n }\r\n }\r\n });\r\n window.addEventListener(\"resize\", function () { \r\n sliderSpotlight.destroy();\r\n sliderSpotlight = sliderSpotlight.rebuild();\r\n });\r\n });\r\n}","\r\nexport default class InputFloatLabel {\r\n\r\n constructor() {\r\n this.inputSelector = '.vti__input, .input--float-label';\r\n this.parentSelector = '.form-group--float-label';\r\n this.floatClass = 'float-active';\r\n\r\n }\r\n\r\n Init() {\r\n var model = this;\r\n\r\n $(model.inputSelector).each(function (index) {\r\n if ($(this).val()) {\r\n $(this).closest(model.parentSelector).addClass(model.floatClass);\r\n }\r\n });\r\n\r\n\r\n // handle late load of value or programatic value change\r\n $(document).on('change', model.inputSelector, function (event) { \r\n if (!$(this).val()) {\r\n $(this).closest(model.parentSelector).removeClass(model.floatClass);\r\n }\r\n else {\r\n $(this).closest(model.parentSelector).addClass(model.floatClass);\r\n }\r\n\r\n \r\n });\r\n\r\n //handle focus\r\n $(document).on('focus', model.inputSelector, function (event) { \r\n $(this).closest(model.parentSelector).addClass(model.floatClass); \r\n\r\n \r\n });\r\n \r\n \r\n\r\n $(document).on('focusout', model.inputSelector, function (event) { \r\n if (!$(this).val()) {\r\n $(this).closest(model.parentSelector).removeClass(model.floatClass);\r\n }\r\n\r\n \r\n });\r\n }\r\n\r\n static Rebind() {\r\n var inputSelector = '.vti__input, .input--float-label';\r\n var parentSelector = '.form-group--float-label';\r\n var floatClass = 'float-active';\r\n\r\n $(inputSelector).each(function (index) {\r\n if ($(this).val()) {\r\n $(this).closest(parentSelector).addClass(floatClass);\r\n }\r\n else {\r\n $(this).closest(parentSelector).removeClass(floatClass);\r\n }\r\n });\r\n }\r\n}\r\n\r\n$(document).ready(function () {\r\n var inputFloatLabel = new InputFloatLabel();\r\n inputFloatLabel.Init();\r\n});\r\n","class PasswordVisibility {\r\n Init() {\r\n var inst = this;\r\n $('.input-icon').click(function (event) {\r\n event.preventDefault();\r\n inst.SetPasswordVisibility($(this));\r\n });\r\n }\r\n\r\n\r\n SetPasswordVisibility(e) {\r\n var toggleIcon = $(e).children('img');\r\n const input = $(e).parent().find('input[type=\"password\"],input[type=\"text\"]');\r\n if (input.attr(\"type\") === \"password\") {\r\n input.attr(\"type\", \"text\");\r\n toggleIcon.attr(\"src\", \"/../../../Images/pw-hide-icon.svg\");\r\n } else {\r\n input.attr(\"type\", \"password\");\r\n toggleIcon.attr(\"src\", \"/../../../Images/pw-show-icon.svg\");\r\n }\r\n }\r\n}\r\n$(document).ready(function () {\r\n var passwordVisibility = new PasswordVisibility();\r\n passwordVisibility.Init();\r\n});","const quantityInput = document.querySelector('.product-detail-page__qty-container input');\r\nif (quantityInput) {\r\n\r\n quantityInput.onkeyup = function (event) {\r\n event.preventDefault();\r\n validation(quantityInput);\r\n }\r\n}\r\n\r\nconst mobile_quantityInput = document.querySelector('.product-detail-page__top-cta-container .fx-row input');\r\nif (mobile_quantityInput) {\r\n\r\n mobile_quantityInput.onkeyup = function (event) {\r\n event.preventDefault();\r\n validation(mobile_quantityInput);\r\n }\r\n}\r\n\r\nconst searchQuantityInputs = document.querySelectorAll('.search-results-card__qty-container input');\r\nif (searchQuantityInputs) {\r\n\r\n searchQuantityInputs.forEach(function (searchQuantityInput) {\r\n searchQuantityInput.onkeyup = function (event) {\r\n event.preventDefault();\r\n validation(searchQuantityInput);\r\n }\r\n });\r\n}\r\n\r\nconst cartQtyInputs = document.querySelectorAll('.cart-items-page__cart-col-container input');\r\nif (cartQtyInputs) {\r\n cartQtyInputs.forEach(function (cartQtyInput) {\r\n cartQtyInput.onkeyup = function (event) {\r\n event.preventDefault();\r\n validation(cartQtyInput);\r\n }\r\n });\r\n}\r\n\r\nfunction validation(input) {\r\n var quantity = parseInt(input.value);\r\n \r\n if (isNaN(quantity)) {\r\n input.style.border = \"1px solid red\";\r\n return;\r\n } else {\r\n input.style.border = \"\";\r\n }\r\n\r\n if (input.value <= 0) {\r\n input.value = 1;\r\n }\r\n\r\n if (!Number.isInteger(input.value)) {\r\n input.value = input.value.replace(/\\D/g, '');\r\n }\r\n}","import { tns } from 'tiny-slider/src/tiny-slider';\r\nconst leftNavSlider = document.querySelectorAll('.component-leftnav-5050__tabs');\r\n//Initiate slider for nav\r\nif (leftNavSlider.length > 0) {\r\n const slider = tns({\r\n container: '.component-leftnav-5050__tabs',\r\n items: 1,\r\n controls: false,\r\n nav: false,\r\n center: false,\r\n loop: false,\r\n swipeAngle: false,\r\n speed: 400,\r\n autoplay: false,\r\n autoWidth: true,\r\n //fixedWidth: 150,\r\n preventScrollOnTouch: 'auto',\r\n responsive: {\r\n 768: {\r\n disable: true\r\n }\r\n }\r\n });\r\n const sliderNavItems = document.querySelectorAll('.component-leftnav-5050__tabs li');\r\n const contentContainers = document.querySelectorAll('.component-leftnav-5050__content');\r\n //Add event listener to each nav item\r\n sliderNavItems.forEach(function (navItem) {\r\n navItem.addEventListener('click', function () {\r\n //Get the index value of the clicked nav item \r\n let navItemIndex = Array.from(navItem.parentNode.children).indexOf(navItem);\r\n //Remove the active class on the content div\r\n contentContainers.forEach(function (content, index) {\r\n content.classList.remove('component-leftnav-5050__content--active');\r\n });\r\n //Add the active class to the content div equal to the index value of the clicked nav item\r\n if (contentContainers[navItemIndex]) {\r\n contentContainers[navItemIndex].classList.add('component-leftnav-5050__content--active');\r\n }\r\n\r\n //Remove active class from all nav items \r\n sliderNavItems.forEach(function (item, index) {\r\n item.classList.remove('active');\r\n });\r\n //Add active to clicked nav item\r\n this.classList.add('active');\r\n });\r\n });\r\n}\r\n","const axios = require('axios');\r\nimport * as odpUtils from '../integrations/ODP/utils';\r\n\r\nclass Login {\r\n Init() {\r\n var inst = this;\r\n $('.jsUsersSigninBtn').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.signin($(this));\r\n });\r\n });\r\n\r\n $('.jsUsersSigninBtnCheckout').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.checkoutSignIn($(this));\r\n });\r\n });\r\n\r\n $('.account-page-forms__top-error-message').on('click', '.resend-email-link', function (event) {\r\n event.preventDefault();\r\n inst.resend($(this));\r\n });\r\n\r\n $('.jsLoginGtmClick').each(function (i, e) {\r\n $(e).click(function (event) {\r\n var gtmData = $(this).data('gtmclick');\r\n if (gtmData !== null && window.dataLayer !== null) {\r\n window.dataLayer.push(gtmData);\r\n }\r\n });\r\n });\r\n }\r\n\r\n signin(e) {\r\n let form = $(e).closest(\"form\");\r\n let bodyFormData = new FormData();\r\n bodyFormData.set('Email', $(\"#LoginViewModel_Email\", form).val());\r\n bodyFormData.set('Password', $(\"#LoginViewModel_Password\", form).val());\r\n bodyFormData.set('RememberMe', $(\"#LoginViewModel_RememberMe\", form).is(':checked'));\r\n bodyFormData.set('ReturnUrl', $(\"#ReturnUrl\", form).val());\r\n bodyFormData.set('__RequestVerificationToken', $(\"input[name=__RequestVerificationToken]\", form).val());\r\n $('.loading-box').show();\r\n this.signinRequest(form, bodyFormData);\r\n }\r\n\r\n checkoutSignIn(e) {\r\n let form = $(e).closest(\"form\");\r\n let bodyFormData = new FormData();\r\n bodyFormData.set('RememberMe', $(\"#RememberMe\", form).is(':checked'));\r\n bodyFormData.set('Email', $(\"#Email\", form).val());\r\n bodyFormData.set('Password', $(\"#Password\", form).val());\r\n bodyFormData.set('ReturnUrl', $(\"#ReturnUrl\", form).val());\r\n bodyFormData.set('__RequestVerificationToken', $(\"input[name=__RequestVerificationToken]\", form).val());\r\n $('.loading-box').show();\r\n this.signinRequest(form, bodyFormData);\r\n }\r\n\r\n signinRequest(form, bodyFormData) {\r\n axios({\r\n method: 'post',\r\n url: form[0].action,\r\n data: bodyFormData,\r\n config: { headers: { 'Content-Type': 'multipart/form-data' } }\r\n }).then(function (response) {\r\n if (response.data.success == false) {\r\n var errorMessage = document.getElementById('login-signin-errormessage');\r\n errorMessage.style.display = \"none\";\r\n\r\n var email = document.getElementById('EmailError');\r\n var password = document.getElementById('PasswordError');\r\n if (errorMessage) {\r\n errorMessage.innerText = '';\r\n for (var error in response.data.errors) {\r\n\r\n if (response.data.errors[error].key === \"Email\") {\r\n email.innerText = response.data.errors[error].value;\r\n $('#EmailError').parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"Password\") {\r\n password.innerText = response.data.errors[error].value;\r\n $('#PasswordError').parent().addClass('form-error');\r\n }\r\n\r\n //RESET\r\n if (password.innerText === '') {\r\n $('#PasswordError').parent().removeClass('form-error');\r\n }\r\n if (email.innerText === '') {\r\n $('#EmailError').parent().removeClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"LoginViewModel.Error\" || response.data.errors[error].key === \"LoginViewModel.Password\") {\r\n errorMessage.style.display = \"flex\";\r\n $('#login-signin-errormessage').append(response.data.errors[error].value);\r\n }\r\n if (response.data.errors[error].key === undefined || response.data.errors[error].key === '') {\r\n errorMessage.style.display = \"flex\";\r\n $('#login-signup-errormessage').append(response.data.errors[error] + '<br />');\r\n }\r\n\r\n }\r\n }\r\n }\r\n else {\r\n odpUtils.TrackLogin(response.data.email, response.data.siteUserId, response.data.customerContactId);\r\n odpUtils.TrackCustomerInformation(\r\n response.data.email, \r\n response.data.siteUserId, \r\n response.data.customerContactId,\r\n response.data.salesOrg,\r\n response.data.distChannel,\r\n response.data.market)\r\n\r\n if (response.data.returnUrl) {\r\n window.location.href = response.data.returnUrl;\r\n } else {\r\n window.location.href = \"/\";\r\n }\r\n }\r\n })\r\n .catch(function (response) {\r\n document.getElementById('login-signin-errormessage').innerText = response;\r\n })\r\n .finally(function () {\r\n $('.loading-box').hide();\r\n });\r\n $('.resend-email-content').html('');\r\n $('.resend-email-content').hide();\r\n }\r\n\r\n\r\n convertToJsonObject(arrayData) {\r\n var indexed_array = {};\r\n\r\n $.map(arrayData, function (n, i) {\r\n indexed_array[n['name']] = n['value'];\r\n });\r\n\r\n return indexed_array;\r\n }\r\n\r\n resend(e) {\r\n\r\n let form = $('.login-form')[0];\r\n let bodyFormData = $(\"#LoginViewModel_Email\", form).val();\r\n\r\n axios({\r\n method: 'post',\r\n url: '/PublicApi/ResendConfirmation',\r\n data: { email: bodyFormData },\r\n config: { headers: { 'Content-Type': 'multipart/form-data' } }\r\n })\r\n .then(function (response) {\r\n if (response.data) {\r\n if (response.data.success) {\r\n $('.resend-email-content').show();\r\n $('.resend-email-content').html(response.data.message);\r\n }\r\n else {\r\n $('.resend-email-content').html('');\r\n $('.resend-email-content').hide();\r\n $('#login-signin-errormessage').innerText = response.data.errors[0];\r\n }\r\n }\r\n })\r\n .catch(function (response) {\r\n\r\n })\r\n .finally(function () {\r\n\r\n });\r\n }\r\n}\r\n$(document).ready(function () {\r\n var login = new Login();\r\n login.Init();\r\n});","const axios = require('axios');\r\n\r\nclass Market {\r\n Init() {\r\n this.setMarket();\r\n }\r\n\r\n setMarket() {\r\n $('.jsSelectMarket').each(function (i, e) {\r\n $(e).click(function () {\r\n var form = $(this).closest('form');\r\n var url = form.attr('action');\r\n var method = form.attr('method');\r\n let bodyFormData = new FormData();\r\n bodyFormData.set('__RequestVerificationToken', $(\"input[name=__RequestVerificationToken]\", form).val());\r\n\r\n axios({\r\n url: url,\r\n method: method,\r\n data: bodyFormData\r\n })\r\n .then(function (result) {\r\n window.location.href = result.data.returnUrl;\r\n }).catch(function (e) {\r\n console.log(e);\r\n });\r\n\r\n return false;\r\n });\r\n });\r\n }\r\n}\r\n\r\nvar market = new Market();\r\nmarket.Init();","const modal = document.querySelectorAll('.modal');\r\nconst modalBtn = document.querySelectorAll('.modal-open');\r\nconst modalClose = document.querySelectorAll('.modal-close');\r\nconst iframe = document.querySelector('iframe');\r\n\r\nif(modal.length > 0) {\r\n modalBtn.forEach(function (btn) {\r\n btn.addEventListener('click', function() {\r\n modal.forEach(function(mod) {\r\n if(mod.getAttribute('data-modal') == btn.getAttribute('data-target')) {\r\n mod.style.display = 'block';\r\n }\r\n });\r\n });\r\n });\r\n modalClose.forEach(function(closeBtn) {\r\n closeBtn.addEventListener('click', function() {\r\n modal.forEach(function(mod) {\r\n mod.style.display = 'none';\r\n });\r\n if ( iframe !== null ) {\r\n let iframeSrc = iframe.src;\r\n iframe.src = iframeSrc;\r\n }\r\n });\r\n });\r\n window.addEventListener('click', function(event) {\r\n modal.forEach(function(mod) {\r\n if (event.target == mod) {\r\n mod.style.display = 'none';\r\n }\r\n if ( iframe !== null ) {\r\n let iframeSrc = iframe.src;\r\n iframe.src = iframeSrc;\r\n }\r\n });\r\n });\r\n}\r\n\r\n","const axios = require('axios');\r\n\r\nclass NewBillingAddress {\r\n\r\n Init() {\r\n var vm = this;\r\n if ($(\"#MarketsWithStates\").length > 0) {\r\n vm.countriesWithStates = $(\"#MarketsWithStates\").val().split(',');\r\n vm.countriesWithStatesRequired = $(\"#MarketsWithStatesRequired\").val().split(',');\r\n }\r\n \r\n vm.$stateDropdown = $(\"#BillingAddress_StateProvinceCode\");\r\n vm.$stateNameTxt = $(\"#BillingAddress_StateProvinceName\");\r\n vm.$stateError = $(\"#BillingStateProvinceError\");\r\n vm.$countryCodeOption = null;\r\n\r\n vm.$billingLine1Error = $('#BillingLine1Error');\r\n vm.$billingCityError = $('#BillingCityError');\r\n vm.$billingStateProvinceError = $('#BillingStateProvinceError');\r\n vm.$billingPostalCodeError = $('#BillingPostalCodeError');\r\n vm.$billingCountryError = $('#BillingCountryError');\r\n\r\n $('.jsUsersNewBillingAddressBtn').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n vm.addNewBillingAddress($(this));\r\n });\r\n });\r\n $('.NewBillingCountryChanged').each(function (i, e) {\r\n $(e).change(function (event) {\r\n //event.preventDefault();\r\n vm.CountryChangedIndex($(this));\r\n });\r\n });\r\n }\r\n\r\n convertToJsonObject(arrayData) {\r\n var indexed_array = {};\r\n\r\n $.map(arrayData, function (n, i) {\r\n indexed_array[n['name']] = n['value'];\r\n });\r\n\r\n return indexed_array;\r\n }\r\n\r\n getCountryCode(){\r\n var val = $(\"#BillingAddress_CountryCode option:selected\").val();\r\n return val;\r\n }\r\n\r\n getCountryName() {\r\n var text = $(\"#BillingAddress_CountryCode option:selected\").text();\r\n return text;\r\n }\r\n\r\n getStateProvinceName() {\r\n var text = $(\"#BillingAddress_StateProvinceCode option:selected\").text();\r\n return text;\r\n }\r\n\r\n CountryChangedIndex(e) {\r\n\r\n var vm = this;\r\n var countryCode = vm.getCountryCode();\r\n var found = vm.countriesWithStates.includes(countryCode);\r\n\r\n if (found) {\r\n vm.getStateProvince(vm.$stateDropdown, vm.$stateNameTxt, countryCode);\r\n }\r\n else {\r\n vm.$stateDropdown.find('option').remove().end();\r\n vm.$stateNameTxt.show();\r\n vm.$stateDropdown.hide();;\r\n vm.$stateError.innerText = \"\";\r\n }\r\n }\r\n\r\n addNewBillingAddress(e) {\r\n var vm = this;\r\n let form = $(e).closest(\"form\")[0];\r\n let bodyFormData = new FormData(form);\r\n\r\n bodyFormData.set('BillingAddress.CountryName', vm.getCountryName());\r\n bodyFormData.set('BillingAddress.StateProvinceName', vm.getStateProvinceName());\r\n \r\n \r\n $('.loading-box').show();\r\n axios({\r\n method: 'post',\r\n url: form.action,\r\n data: bodyFormData,\r\n config: { headers: { 'Content-Type': 'multipart/form-data' } }\r\n })\r\n .then(function (response) {\r\n if (response.data) {\r\n if (response.data.success) {\r\n $(\".register\").toggle();\r\n $(\".register-confirmation\").toggle();\r\n }\r\n else {\r\n var errorMessage = document.getElementById('login-signup-errormessage');\r\n \r\n if (errorMessage) {\r\n errorMessage.innerText = '';\r\n for (var error in response.data.errors) {\r\n if (response.data.errors[error].key === \"BillingAddress.Line1\") {\r\n vm.$billingLine1Error.text(response.data.errors[error].value);\r\n vm.$billingLine1Error.parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"BillingAddress.City\") {\r\n\r\n vm.$billingCityError.text(response.data.errors[error].value);\r\n vm.$billingCityError.parent().addClass('form-error');\r\n }\r\n\r\n if (response.data.errors[error].key === \"BillingAddress.StateProvinceCode\") {\r\n var countryCode = vm.getCountryCode();\r\n var found = vm.countriesWithStatesRequired.includes(countryCode);\r\n if (found) {\r\n vm.$billingStateProvinceError.text(response.data.errors[error].value);\r\n vm.$billingStateProvinceError.parent().addClass('form-error');\r\n }\r\n else {\r\n vm.$billingStateProvinceError.text('');\r\n vm.$billingStateProvinceError.parent().removeClass('form-error');\r\n }\r\n }\r\n \r\n if (response.data.errors[error].key === \"BillingAddress.PostalCode\") {\r\n\r\n vm.$billingPostalCodeError.text(response.data.errors[error].value);\r\n vm.$billingPostalCodeError.parent().addClass('form-error');\r\n }\r\n\r\n if (response.data.errors[error].key === \"BillingAddress.CountryCode\") {\r\n vm.$billingCountryError.text(response.data.errors[error].value);\r\n vm.$billingCountryError.parent().addClass('form-error');\r\n }\r\n\r\n if (vm.$billingLine1Error.text() === '') {\r\n vm.$billingLine1Error.parent().removeClass('form-error');\r\n }\r\n\r\n if (vm.$billingCityError.text() === '') {\r\n vm.$billingCityError.parent().removeClass('form-error');\r\n }\r\n\r\n if (vm.$billingStateProvinceError.text() === '') {\r\n vm.$billingStateProvinceError.parent().removeClass('form-error');\r\n }\r\n\r\n if (vm.$billingPostalCodeError.text() === '') {\r\n vm.$billingPostalCodeError.parent().removeClass('form-error');\r\n }\r\n\r\n \r\n if (vm.$billingCountryError.text() === '') {\r\n vm.$billingCountryError.parent().removeClass('form-error');\r\n }\r\n\r\n if (response.data.errors[error].key === 'Register.ContactExist') {\r\n errorMessage.style.display = \"block\";\r\n $('#login-signup-errormessage').append(response.data.errors[error].value + '<br />');\r\n }\r\n\r\n if (response.data.errors[error].key === undefined || response.data.errors[error].key === '') {\r\n errorMessage.style.display = \"block\";\r\n $('#login-signup-errormessage').append(response.data.errors[error] + '<br />');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n \r\n window.location.href = '/';\r\n }\r\n })\r\n .catch(function (response) {\r\n \r\n var errorPanel = document.getElementById('login-signup-errormessage');\r\n errorPanel.innerText = response;\r\n errorPanel.style.display = \"block\";\r\n })\r\n .finally(function () {\r\n $('.loading-box').hide();\r\n });\r\n }\r\n\r\n\r\n getStateProvince($stateDropdown, $stateNameTxt, countryCode) {\r\n var vm = this;\r\n axios.post('/api/edit-addresses/stateprovinces', { 'countryCode': countryCode }).then(response => {\r\n $stateDropdown.find('option').remove().end();\r\n $stateDropdown.append($('<option text=\"\" value=\"\"></option>'));\r\n $.each(response.data.items, function (i, item) {\r\n $stateDropdown.append($('<option>', {\r\n value: item.value,\r\n text: item.text\r\n }));\r\n });\r\n $stateDropdown.show();\r\n $stateNameTxt.hide();\r\n }, error => {\r\n if (error.response.status === 422) {\r\n vm.$store.commit('setEndpointErrors', error.response.data.errors);\r\n }\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n$(document).ready(function () {\r\n var newBillingAddress = new NewBillingAddress();\r\n newBillingAddress.Init();\r\n});","const newPassword = document.getElementById('new-password');\r\n\r\n\r\nif (newPassword) {\r\n newPassword.onkeyup = function (event) {\r\n event.preventDefault();\r\n\r\n var password = newPassword.value;\r\n var activeCls = 'password-success';\r\n var inActiveCls = 'password-error';\r\n \r\n var specialCharPattern = /[`!%$#@&^*()]+/;\r\n var specialChar = $('#MinimumSpecialCharacter');\r\n if (password.match(specialCharPattern)) {\r\n specialChar.removeClass(inActiveCls);\r\n specialChar.addClass(activeCls);\r\n specialChar.find('svg').css('display', 'inline'); \r\n } else {\r\n specialChar.addClass(inActiveCls);\r\n specialChar.removeClass(activeCls);\r\n specialChar.find('svg').css('display', 'none');\r\n }\r\n\r\n var minCharPattern = /^.{8,}$/;\r\n var minChar = $('#MinimumCharacter');\r\n if (password.match(minCharPattern)) {\r\n minChar.removeClass(inActiveCls);\r\n minChar.addClass(activeCls);\r\n minChar.find('svg').css('display', 'inline');\r\n } else {\r\n minChar.addClass(inActiveCls);\r\n minChar.removeClass(activeCls);\r\n minChar.find('svg').css('display', 'none');\r\n }\r\n\r\n var capitalLetterPattern = /[A-Z]/g;\r\n var capitalLetter = $('#MinimumCapitalLetter');\r\n if (password.match(capitalLetterPattern)) {\r\n capitalLetter.removeClass(inActiveCls);\r\n capitalLetter.addClass(activeCls);\r\n capitalLetter.find('svg').css('display', 'inline');\r\n } else {\r\n capitalLetter.addClass(inActiveCls);\r\n capitalLetter.removeClass(activeCls);\r\n capitalLetter.find('svg').css('display', 'none');\r\n }\r\n\r\n var numberPattern = /\\d{1}/g;\r\n var number = $('#MinimumNumber');\r\n if (password.match(numberPattern)) {\r\n number.removeClass(inActiveCls);\r\n number.addClass(activeCls);\r\n number.find('svg').css('display', 'inline');\r\n } else {\r\n number.removeClass(activeCls);\r\n number.addClass(inActiveCls);\r\n number.find('svg').css('display', 'none');\r\n }\r\n };\r\n}","\r\n//Ajax Integration on payment page\r\nexport function authorizeCreditCard(baseUrl, authorizePayload) {\r\n\r\n var cc = authorizePayload.cardNumber;\r\n var name = authorizePayload.name;\r\n var myData = $XIPlugin.createJSRequestPacket(authorizePayload.merchantGuid, authorizePayload.accessToken);\r\n\r\n myData.addField($XIPlugin.createField('PaymentCreditCard', true, cc));\r\n myData.addField($XIPlugin.createField('name', false, name));\r\n\r\n return new Promise((resolve, reject) => {\r\n $XIPlugin.ajax({\r\n url: baseUrl + '/ajax',\r\n type: \"POST\",\r\n data: myData,\r\n success: function (response) {\r\n resolve(response);\r\n },\r\n error: function (error) {\r\n reject(error);\r\n }\r\n });\r\n\r\n });\r\n}\r\n\r\n\r\n$(document).ready(function () {\r\n var input = document.querySelector('#CreditCardDate');\r\n if (input) {\r\n input.onkeypress = handleChange;\r\n function handleChange(e) {\r\n if (e.target.value.length == 2) {\r\n e.target.value = e.target.value.replace(/[\\D]/g, '').replace(/(\\d{2})/, \"$1/\");\r\n }\r\n }\r\n }\r\n});","var iframe = document.getElementById('paymetricIFrame');\r\nclass PaymentIframePoc {\r\n\r\n Init() {\r\n var inst = this;\r\n $('#submit-payment').click(function (event) {\r\n event.preventDefault();\r\n inst.paynow();\r\n });\r\n }\r\n\r\n paynow() {\r\n $XIFrame.validate({\r\n iFrameId: 'paymetricIFrame',\r\n targetUrl: iframe.getAttribute(\"src\"),\r\n autosizeheight: true,\r\n autosizewidth: true,\r\n onValidate: function (e) {\r\n if (e) {\r\n $XIFrame.submit({\r\n iFrameId: 'paymetricIFrame',\r\n targetUrl: iframe.getAttribute(\"src\"),\r\n onSuccess: function (msg) {\r\n var message = JSON.parse(msg);\r\n if (message && message.data.HasPassed) {\r\n var accessToken = document.getElementById('hdnAccessToken');\r\n var signedToken = document.getElementById('hdnSignedToken');\r\n window.location = \"success?id=\" + accessToken.value + \"&s=\" + signedToken.value;\r\n } else {\r\n alert(message.data.Message);\r\n }\r\n },\r\n onError: function (msg) {\r\n alert(\"Error function : \" + msg);\r\n }\r\n });\r\n } else {\r\n console.log(e);\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\n$(document).ready(function () {\r\n var payment = new PaymentIframePoc();\r\n payment.Init();\r\n\r\n});\r\n\r\n","\r\nconst pdpCTA = document.querySelector(\".product-detail-page__section-select\");\r\n//Fixed position bar\r\nif (pdpCTA) {\r\n const offset = pdpCTA.offsetTop;\r\n const rect = pdpCTA.getBoundingClientRect();\r\n const scrollUp = \"scroll-up\";\r\n const scrollDown = \"scroll-down\";\r\n let lastScroll = 0;\r\n // Create the function to be called on scroll\r\n const stick = function () {\r\n\r\n // Get the scroll\r\n let scroll = window.scrollY;\r\n if (scroll >= offset) {\r\n pdpCTA.classList.add('stick');\r\n } else if (scroll <= offset) {\r\n pdpCTA.classList.remove('stick');\r\n }\r\n\r\n if (scroll <= offset) {\r\n pdpCTA.classList.remove(scrollUp);\r\n pdpCTA.classList.remove(scrollDown);\r\n return;\r\n }\r\n\r\n if (scroll > lastScroll && !pdpCTA.classList.contains(scrollDown)) {\r\n // down\r\n pdpCTA.classList.remove(scrollUp);\r\n pdpCTA.classList.add(scrollDown);\r\n } else if (scroll < lastScroll && pdpCTA.classList.contains(scrollDown)) {\r\n // up\r\n pdpCTA.classList.remove(scrollDown);\r\n pdpCTA.classList.add(scrollUp);\r\n }\r\n lastScroll = scroll;\r\n };\r\n // listen to the scroll\r\n window.addEventListener('scroll', stick);\r\n}\r\n\r\n//Scroll the section into view with the same id as link href\r\nconst sectionAnchorsContainer = document.querySelector('.product-detail-page__section-anchors');\r\nif (sectionAnchorsContainer) {\r\n const sectionAnchors = sectionAnchorsContainer.querySelectorAll('a');\r\n sectionAnchors.forEach(function (anchor) {\r\n anchor.addEventListener('click', function (e) {\r\n e.preventDefault();\r\n //Remove the active class from all li's\r\n const sectionAnchorItems = sectionAnchorsContainer.querySelectorAll('li');\r\n sectionAnchorItems.forEach(function (item) {\r\n item.classList.remove('active');\r\n });\r\n //Add active class to the clicked a tag parent li\r\n anchor.parentNode.classList.add('active');\r\n //Get the href of the click a tag minus the hash character\r\n const link = anchor.getAttribute('href').substr(1);\r\n const section = document.getElementById(link);\r\n const header = section.querySelector('h2');\r\n header.scrollIntoView({ behavior: 'smooth' });\r\n });\r\n });\r\n}\r\n\r\n//class ConfigureProducts {\r\n\r\n// Init() {\r\n\r\n// $('.btnOpenConfiguration').each(function (i, e) {\r\n// $(e).click(function () {\r\n// console.log('here');\r\n// let target = $(this).data('target');\r\n// let iFrameUrl = $(this).data('iframeurl');\r\n// let $modalTarget = $(\"div[data-modal='\" + target + \"']\");\r\n// let $iframeContainer = $modalTarget.find('.iframe-container');\r\n// let $iframe = $iframeContainer.find('iframe');\r\n\r\n// $modalTarget.on('show.bs.modal', function (e) {\r\n// $iframe.detach();\r\n// $iframe.attr('src', iFrameUrl);\r\n// $iframeContainer.append($iframe);\r\n// })\r\n\r\n// $modalTarget.on('hidden.bs.modal', function (e) {\r\n// $iframe.attr('src','');\r\n// })\r\n\r\n// let $modalWin = $modalTarget.modal('show');\r\n// });\r\n// });\r\n// }\r\n//}\r\n\r\n\r\n//$(document).ready(function () {\r\n// var cp = new ConfigureProducts();\r\n// cp.Init();\r\n//});","document.addEventListener(\"DOMContentLoaded\", function () {\r\n var products = document.querySelectorAll('.recommended-product');\r\n\r\n for (let i = 0; i < products.length; i++) {\r\n let button = products[i].querySelector('.learn-more');\r\n\r\n button.addEventListener(\"click\", function() {\r\n\r\n console.log('Learn More Clicked')\r\n var refCode = products[i].dataset.refCode;\r\n var productName = products[i].dataset.name;\r\n var productTrackingData = TrackingDataFactory.createProductTrackingData(refCode, productName);\r\n productTrackingData[\"SkipRecommendations\"] = true;\r\n var recommendationId = products[i].dataset.recommendation;\r\n\r\n if (recommendationId > 0)\r\n {\r\n productTrackingData[\"recommendationId\"] = recommendationId;\r\n }\r\n\r\n epiRecommendations.track(productTrackingData);\r\n });\r\n }\r\n var recentlyOrderedProducts = document.querySelectorAll('.recently-ordered-product');\r\n\r\n for (let i = 0; i < recentlyOrderedProducts.length; i++) {\r\n let button = recentlyOrderedProducts[i].querySelector('.add-to-cart');\r\n\r\n button.addEventListener(\"click\", function () {\r\n\r\n var refCode = recentlyOrderedProducts[i].dataset.refCode;\r\n var productName = recentlyOrderedProducts[i].dataset.name;\r\n var productTrackingData = TrackingDataFactory.createProductTrackingData(refCode, productName);\r\n productTrackingData[\"SkipRecommendations\"] = true;\r\n var recommendationId = recentlyOrderedProducts[i].dataset.recommendation;\r\n\r\n if (recommendationId > 0) {\r\n productTrackingData[\"recommendationId\"] = recommendationId;\r\n }\r\n\r\n epiRecommendations.track(productTrackingData);\r\n });\r\n }\r\n});","const axios = require('axios');\r\nimport * as odpUtils from '../integrations/ODP/utils';\r\nimport InputFloatLabel from '@components/input-labels';\r\nclass Register {\r\n Init() {\r\n var inst = this;\r\n\r\n $('.jsUsersStep1SignupBtn').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.signupStep1($(this));\r\n });\r\n $('jsUsersStep1SignupBtn').scrollTop(0);\r\n\r\n });\r\n\r\n $('.jsUsersStep2SignupBtn').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.signupStep2($(this));\r\n });\r\n });\r\n\r\n $('.jsUsersSignupBtn').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.signup($(this));\r\n });\r\n });\r\n\r\n $('.jsUsersSignupMarketingBtn').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n inst.signupmarketingaccount($(this));\r\n });\r\n });\r\n\r\n $('.BillingCountryChanged').each(function (i, e) {\r\n $(e).change(function (event) {\r\n //event.preventDefault();\r\n inst.BillingCountryChangedIndex($(this));\r\n });\r\n });\r\n\r\n $('.ShippingCountryChanged').each(function (i, e) {\r\n $(e).change(function (event) {\r\n //event.preventDefault();\r\n inst.ShippingCountryChangedIndex($(this));\r\n });\r\n });\r\n $('#RegisterAccountViewModel_DuplicateBilling').each(function (i, e) {\r\n $(e).change(function (event) {\r\n inst.sameAsBillingAddress();\r\n });\r\n });\r\n }\r\n\r\n convertToJsonObject(arrayData) {\r\n var indexed_array = {};\r\n\r\n $.map(arrayData, function (n, i) {\r\n indexed_array[n['name']] = n['value'];\r\n });\r\n\r\n return indexed_array;\r\n }\r\n\r\n signupStep1(e) {\r\n let form = $(e).closest(\"form\")[0];\r\n let bodyFormData1 = new FormData();\r\n\r\n bodyFormData1.set('FirstName', $(\"#RegisterAccountViewModel_FirstName\", form).val());\r\n bodyFormData1.set('LastName', $(\"#RegisterAccountViewModel_LastName\", form).val());\r\n bodyFormData1.set('Email', $(\"#RegisterAccountViewModel_Email\", form).val());\r\n bodyFormData1.set('Company', $(\"#RegisterAccountViewModel_Company\", form).val());\r\n bodyFormData1.set('PhoneNumber', $(\"#RegisterAccountViewModel_PhoneNumber\", form).val());\r\n bodyFormData1.set('Country', $('select[name=\"RegisterAccountViewModel.Country\"]', form).val());\r\n bodyFormData1.set('CustomerNumber', $('#RegisterAccountViewModel_CustomerNumber', form).val());\r\n bodyFormData1.set('PrimaryProductCatalog', $('select[name=\"RegisterAccountViewModel.PrimaryProductCatalog\"]', form).val());\r\n bodyFormData1.set('PreferredLanguage', $('select[name=\"RegisterAccountViewModel.PreferredLanguage\"]', form).val());\r\n bodyFormData1.set('__RequestVerificationToken', $(\"input[name=__RequestVerificationToken]\", form).val());\r\n\r\n if ($('#RegisterAccountViewModel_DistributionChannel').length > 0) {\r\n bodyFormData1.set('DistributionChannel', $('#RegisterAccountViewModel_DistributionChannel').val());\r\n }\r\n\r\n if ($('#RegisterAccountViewModel_DistributionChannelRequired').length > 0) {\r\n bodyFormData1.set('DistributionChannelRequired', $('#RegisterAccountViewModel_DistributionChannelRequired').val());\r\n }\r\n\r\n if ($('#RegisterAccountViewModel_SalesRepresentative').length > 0) {\r\n bodyFormData1.set('SalesRepresentative', $('#RegisterAccountViewModel_SalesRepresentative').val());\r\n }\r\n\r\n if ($('#RegisterAccountViewModel_SalesRepresentativeRequired').length > 0) {\r\n bodyFormData1.set('SalesRepresentativeRequired', $('#RegisterAccountViewModel_SalesRepresentativeRequired').val());\r\n }\r\n\r\n $('.loading-box').show();\r\n axios({\r\n method: 'post',\r\n url: form.action,\r\n data: bodyFormData1,\r\n config: { headers: { 'Content-Type': 'multipart/form-data' } }\r\n })\r\n .then(function (response1) {\r\n if (response1.data) {\r\n if (response1.data.success) {\r\n $(\".register\").toggle();\r\n $(\".register-confirmation\").toggle();\r\n }\r\n else {\r\n var errorMessage = document.getElementById('login-signup-errormessage');\r\n\r\n //For step - 1\r\n var firstNameError = document.getElementById('FirstNameError');\r\n var lastNameError = document.getElementById('LastNameError');\r\n var emailError = document.getElementById('EmailError');\r\n var countryError = document.getElementById('CountryError');\r\n var companyError = document.getElementById('CompanyError');\r\n var phoneNumberError = document.getElementById('PhoneNumberError');\r\n\r\n var distributionChannelError = document.getElementById('DistributionChannelError');\r\n var salesRepresentativeError = document.getElementById('SalesRepresentativeError');\r\n\r\n if (errorMessage) {\r\n errorMessage.innerText = '';\r\n\r\n for (var error in response1.data.errors) {\r\n //for step - 1 basic information \r\n if (response1.data.errors[error].key === \"FirstName\") {\r\n firstNameError.innerText = response1.data.errors[error].value;\r\n $('#FirstNameError').parent().addClass('form-error');\r\n }\r\n if (response1.data.errors[error].key === \"LastName\") {\r\n lastNameError.innerText = response1.data.errors[error].value;\r\n $('#LastNameError').parent().addClass('form-error');\r\n }\r\n if (response1.data.errors[error].key === \"Email\") {\r\n emailError.innerText = response1.data.errors[error].value;\r\n $('#EmailError').parent().addClass('form-error');\r\n }\r\n if (response1.data.errors[error].key === \"Country\") {\r\n countryError.innerText = response1.data.errors[error].value;\r\n $('#CountryError').parent().addClass('form-error');\r\n }\r\n if (response1.data.errors[error].key === \"Company\") {\r\n companyError.innerText = response1.data.errors[error].value;\r\n $('#CompanyError').parent().addClass('form-error');\r\n }\r\n if (response1.data.errors[error].key === \"PhoneNumber\") {\r\n phoneNumberError.innerText = response1.data.errors[error].value;\r\n $('#PhoneNumberError').parent().addClass('form-error');\r\n }\r\n\r\n //RESET for step -1 \r\n if (firstNameError.innerText === '') {\r\n $('#FirstNameError').parent().removeClass('form-error');\r\n }\r\n if (lastNameError.innerText === '') {\r\n $('#LastNameError').parent().removeClass('form-error');\r\n }\r\n\r\n if (emailError.innerText === '') {\r\n $('#EmailError').parent().removeClass('form-error');\r\n }\r\n\r\n if (countryError.innerText === '') {\r\n $('#CountryError').parent().removeClass('form-error');\r\n }\r\n\r\n if (companyError.innerText === '') {\r\n $('#CompanyError').parent().removeClass('form-error');\r\n }\r\n\r\n if (phoneNumberError.innerText === '') {\r\n $('#PhoneNumberError').parent().removeClass('form-error');\r\n }\r\n\r\n //\r\n if (distributionChannelError && distributionChannelError.innerText === '') {\r\n $('#DistributionChannelError').parent().removeClass('form-error');\r\n }\r\n\r\n if (salesRepresentativeError && salesRepresentativeError.innerText === '') {\r\n $('#SalesRepresentativeError').parent().removeClass('form-error');\r\n }\r\n \r\n if (response1.data.errors[error].key === undefined ||\r\n response1.data.errors[error].key === '') {\r\n errorMessage.style.display = \"block\";\r\n $('#login-signup-errormessage').append(response1.data.errors[error] + '<br />');\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n window.location.href = '/';\r\n }\r\n })\r\n .catch(function (response1) {\r\n var errorPanel = document.getElementById('login-signup-errormessage');\r\n errorPanel.innerText = response1;\r\n errorPanel.style.display = \"block\";\r\n })\r\n .finally(function () {\r\n $('.loading-box').hide();\r\n if ($('.form-error-information').text() === \"\" && $.trim($('#RegisterAccountViewModel_FirstName').val()) != '') {\r\n $('#stepOne').hide();\r\n $(\"#stepTwo\").show();\r\n $(\".stepNumber\").html(\"2\");\r\n $('#BasicInfo').removeClass(\"design-tool__step-info active\");\r\n $('#BasicInfo').addClass(\"design-tool__step-info hidden\");\r\n $('#BillingInfo').addClass(\"design-tool__step-info active\");\r\n $(\"#step1\").removeClass(\"design-tool__step active\");\r\n $(\"#step1\").addClass(\"design-tool__step complete\");\r\n $(\"#step1\").addClass(\"design-tool__step check\");\r\n $(\"#step2\").removeClass(\"design-tool__step complete\");\r\n $(\"#step2\").addClass(\"design-tool__step active\");\r\n }\r\n });\r\n }\r\n\r\n signupStep2(e) {\r\n let form = $(e).closest(\"form\")[0];\r\n let bodyFormData2 = new FormData();\r\n\r\n bodyFormData2.set('FirstName', $(\"#RegisterAccountViewModel_FirstName\", form).val());\r\n bodyFormData2.set('LastName', $(\"#RegisterAccountViewModel_LastName\", form).val());\r\n bodyFormData2.set('Email', $(\"#RegisterAccountViewModel_Email\", form).val());\r\n bodyFormData2.set('Company', $(\"#RegisterAccountViewModel_Company\", form).val());\r\n bodyFormData2.set('PhoneNumber', $(\"#RegisterAccountViewModel_PhoneNumber\", form).val());\r\n bodyFormData2.set('Country', $('select[name=\"RegisterAccountViewModel.Country\"]', form).val());\r\n bodyFormData2.set('CustomerNumber', $('#RegisterAccountViewModel_CustomerNumber', form).val());\r\n bodyFormData2.set('PrimaryProductCatalog', $('select[name=\"RegisterAccountViewModel.PrimaryProductCatalog\"]', form).val());\r\n bodyFormData2.set('PreferredLanguage', $('select[name=\"RegisterAccountViewModel.PreferredLanguage\"]', form).val());\r\n\r\n\r\n if ($('#RegisterAccountViewModel_SalesRepresentative').length > 0) {\r\n bodyFormData2.set('SalesRepresentative', $('#RegisterAccountViewModel_SalesRepresentative').val());\r\n }\r\n\r\n if ($('#RegisterAccountViewModel_DistributionChannel').length > 0) {\r\n bodyFormData2.set('DistributionChannel', $('#RegisterAccountViewModel_DistributionChannel').val());\r\n }\r\n\r\n if ($('#RegisterAccountViewModel_SalesRepresentativeRequired').length > 0) {\r\n bodyFormData2.set('SalesRepresentativeRequired', $('#RegisterAccountViewModel_SalesRepresentativeRequired').val());\r\n }\r\n\r\n if ($('#RegisterAccountViewModel_DistributionChannelRequired').length > 0) {\r\n bodyFormData2.set('DistributionChannelRequired', $('#RegisterAccountViewModel_DistributionChannelRequired').val());\r\n }\r\n\r\n InputFloatLabel.Rebind();\r\n\r\n bodyFormData2.set('BillingAddress.Line1', $(\"#RegisterAccountViewModel_BillingAddress_Line1\", form).val());\r\n bodyFormData2.set('BillingAddress.Line2', $(\"#RegisterAccountViewModel_BillingAddress_Line2\", form).val());\r\n bodyFormData2.set('BillingAddress.City', $(\"#RegisterAccountViewModel_BillingAddress_City\", form).val());\r\n\r\n //passing correct state code to back end\r\n if ($(\"#RegisterAccountViewModel_BillingAddress_CountryName option:selected\").val() === 'USA') {\r\n bodyFormData2.set('BillingAddress.StateProvinceCode', $('select[name=\"RegisterAccountViewModel.BillingAddress.StateProvinceCode\"]', form).val());\r\n bodyFormData2.set('BillingAddress.ProvinceCode', $('select[name=\"RegisterAccountViewModel.BillingAddress.StateProvinceCode\"]', form).val());\r\n }\r\n else if ($(\"#RegisterAccountViewModel_BillingAddress_CountryName option:selected\").val() === 'CAN') {\r\n bodyFormData2.set('BillingAddress.StateProvinceCode', $('select[name=\"RegisterAccountViewModel.BillingAddress.ProvinceCode\"]', form).val());\r\n bodyFormData2.set('BillingAddress.ProvinceCode', $('select[name=\"RegisterAccountViewModel.BillingAddress.ProvinceCode\"]', form).val());\r\n }\r\n else {\r\n bodyFormData2.set('BillingAddress.StateProvinceCode', $(\"#RegisterAccountViewModel_BillingAddress_StateProvinceName\", form).val());\r\n bodyFormData2.set('BillingAddress.ProvinceCode', $(\"#RegisterAccountViewModel_BillingAddress_StateProvinceName\", form).val());\r\n if ($(\"#RegisterAccountViewModel_BillingAddress_StateProvinceName\", form).val() === \"\") {\r\n bodyFormData2.set('BillingAddress.StateProvinceCode', \"NA-Not Applicable\");\r\n bodyFormData2.set('BillingAddress.ProvinceCode', \"NA-Not Applicable\");\r\n }\r\n }\r\n\r\n\r\n bodyFormData2.set('BillingAddress.PostalCode', $(\"#RegisterAccountViewModel_BillingAddress_PostalCode\", form).val());\r\n bodyFormData2.set('BillingAddress.CountryName', $('select[name=\"RegisterAccountViewModel.BillingAddress.CountryName\"]', form).val());\r\n bodyFormData2.set('BillingAddress.PhoneNumber', $(\"#RegisterAccountViewModel_BillingAddress_PhoneNumber\", form).val());\r\n\r\n bodyFormData2.set('__RequestVerificationToken', $(\"input[name=__RequestVerificationToken]\", form).val());\r\n\r\n $('.loading-box').show();\r\n axios({\r\n method: 'post',\r\n url: form.action,\r\n data: bodyFormData2,\r\n config: { headers: { 'Content-Type': 'multipart/form-data' } }\r\n })\r\n .then(function (response2) {\r\n if (response2.data) {\r\n if (response2.data.success) {\r\n $(\".register\").toggle();\r\n $(\".register-confirmation\").toggle();\r\n }\r\n else {\r\n var errorMessage = document.getElementById('login-signup-errormessage');\r\n\r\n //For step - 2\r\n var billingLine1Error = document.getElementById('BillingLine1Error');\r\n var billingCityError = document.getElementById('BillingCityError');\r\n var billingStateProvinceError = document.getElementById('BillingStateProvinceError');\r\n var billingPostalCodeError = document.getElementById('BillingPostalCodeError');\r\n var billingCountryError = document.getElementById('BillingCountryError');\r\n var billingPhoneNumberError = document.getElementById('BillingPhoneNumberError');\r\n\r\n if (errorMessage) {\r\n errorMessage.innerText = '';\r\n for (var error in response2.data.errors) {\r\n //for step-2 bill address\r\n\r\n if (response2.data.errors[error].key === \"BillingAddress.Line1\") {\r\n billingLine1Error.innerText = response2.data.errors[error].value;\r\n $('#BillingLine1Error').parent().addClass('form-error');\r\n }\r\n if (response2.data.errors[error].key === \"BillingAddress.City\") {\r\n billingCityError.innerText = response2.data.errors[error].value;\r\n $('#BillingCityError').parent().addClass('form-error');\r\n }\r\n if (response2.data.errors[error].key === \"BillingAddress.StateProvinceCode\") {\r\n billingStateProvinceError.innerText = response2.data.errors[error].value;\r\n $('#BillingStateProvinceError').parent().addClass('form-error');\r\n }\r\n if (response2.data.errors[error].key === \"BillingAddress.PostalCode\") {\r\n billingPostalCodeError.innerText = response2.data.errors[error].value;\r\n $('#BillingPostalCodeError').parent().addClass('form-error');\r\n }\r\n if (response2.data.errors[error].key === \"BillingAddress.CountryName\") {\r\n billingCountryError.innerText = response2.data.errors[error].value;\r\n $('#BillingCountryError').parent().addClass('form-error');\r\n }\r\n if (response2.data.errors[error].key === \"BillingAddress.PhoneNumber\") {\r\n billingPhoneNumberError.innerText = response2.data.errors[error].value;\r\n $('#BillingPhoneNumberError').parent().addClass('form-error');\r\n }\r\n\r\n //RESET for step -2 \r\n if (billingLine1Error.innerText === '') {\r\n $('#BillingLine1Error').parent().removeClass('form-error');\r\n }\r\n if (billingCityError.innerText === '') {\r\n $('#BillingCityError').parent().removeClass('form-error');\r\n }\r\n\r\n if (billingStateProvinceError.innerText === '') {\r\n $('#BillingStateProvinceError').parent().removeClass('form-error');\r\n }\r\n\r\n if (billingPostalCodeError.innerText === '') {\r\n $('#BillingPostalCodeError').parent().removeClass('form-error');\r\n }\r\n\r\n if (billingCountryError.innerText === '') {\r\n $('#BillingCountryError').parent().removeClass('form-error');\r\n }\r\n\r\n if (billingPhoneNumberError.innerText === '') {\r\n $('#BillingPhoneNumberError').parent().removeClass('form-error');\r\n }\r\n\r\n if (response2.data.errors[error].key === undefined ||\r\n response2.data.errors[error].key === '') {\r\n errorMessage.style.display = \"block\";\r\n $('#login-signup-errormessage').append(response2.data.errors[error] + '<br />');\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n window.location.href = '/';\r\n signup(e);\r\n }\r\n })\r\n .catch(function (response2) {\r\n\r\n var errorPanel = document.getElementById('login-signup-errormessage');\r\n errorPanel.innerText = response2;\r\n errorPanel.style.display = \"block\";\r\n })\r\n .finally(function () {\r\n $('.loading-box').hide();\r\n if ($('.form-error-information').text() === \"\" && $.trim($('#RegisterAccountViewModel_BillingAddress_Line1').val()) != '') {\r\n $('#stepTwo').hide();\r\n $(\"#stepThree\").show();\r\n $(\".stepNumber\").html(\"3\");\r\n $('#BillingInfo').removeClass(\"design-tool__step-info active\");\r\n $('#BillingInfo').addClass(\"design-tool__step-info hidden\");\r\n $('#ShippingInfo').addClass(\"design-tool__step-info active\");\r\n $(\"#step2\").removeClass(\"design-tool__step active\");\r\n $(\"#step2\").addClass(\"design-tool__step complete\");\r\n $(\"#step2\").addClass(\"design-tool__step check\");\r\n $(\"#step3\").addClass(\"design-tool__step active\");\r\n }\r\n });\r\n }\r\n\r\n signupmarketingaccount(e) {\r\n\r\n let form = $(e).closest(\"form\")[0];\r\n let bodyFormData = new FormData();\r\n\r\n //For Step - 3\r\n bodyFormData.set('FirstName', $(\"#RegisterAccountViewModel_FirstName\", form).val());\r\n bodyFormData.set('LastName', $(\"#RegisterAccountViewModel_LastName\", form).val());\r\n bodyFormData.set('Email', $(\"#RegisterAccountViewModel_Email\", form).val());\r\n bodyFormData.set('Company', $(\"#RegisterAccountViewModel_Company\", form).val());\r\n bodyFormData.set('PhoneNumber', $(\"#RegisterAccountViewModel_PhoneNumber\", form).val());\r\n bodyFormData.set('Country', $('select[name=\"RegisterAccountViewModel.Country\"]', form).val());\r\n bodyFormData.set('ProductAccessLine', $('select[name=\"RegisterAccountViewModel.ProductAccessLine\"]', form).val());\r\n bodyFormData.set('PreferredLanguage', $('select[name=\"RegisterAccountViewModel.PreferredLanguage\"]', form).val());\r\n bodyFormData.set('__RequestVerificationToken', $(\"input[name=__RequestVerificationToken]\", form).val());\r\n\r\n\r\n $('.loading-box').show();\r\n axios({\r\n method: 'post',\r\n url: form.action,\r\n data: bodyFormData,\r\n config: { headers: { 'Content-Type': 'multipart/form-data' } }\r\n })\r\n .then(function (response) {\r\n if (response.data) {\r\n if (response.data.success) {\r\n $(\".register\").toggle();\r\n $(\".register-confirmation\").toggle();\r\n }\r\n else {\r\n var errorMessage = document.getElementById('login-signup-errormessage');\r\n\r\n //For step - 1\r\n var firstNameError = document.getElementById('FirstNameError');\r\n var lastNameError = document.getElementById('LastNameError');\r\n var emailError = document.getElementById('EmailError');\r\n var countryError = document.getElementById('CountryError');\r\n var companyError = document.getElementById('CompanyError');\r\n var phoneNumberError = document.getElementById('PhoneNumberError');\r\n var productAccessLineError = document.getElementById('ProductAccessLineError');\r\n\r\n if (errorMessage) {\r\n errorMessage.innerText = '';\r\n\r\n for (var error in response.data.errors) {\r\n //for step - 1 basic information \r\n if (response.data.errors[error].key === \"FirstName\") {\r\n firstNameError.innerText = response.data.errors[error].value;\r\n $('#FirstNameError').parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"LastName\") {\r\n lastNameError.innerText = response.data.errors[error].value;\r\n $('#LastNameError').parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"Email\") {\r\n emailError.innerText = response.data.errors[error].value;\r\n $('#EmailError').parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"Country\") {\r\n countryError.innerText = response.data.errors[error].value;\r\n $('#CountryError').parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"Company\") {\r\n companyError.innerText = response.data.errors[error].value;\r\n $('#CompanyError').parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"ProductAccessLine\") {\r\n productAccessLineError.innerText = response.data.errors[error].value;\r\n $('#ProductAccessLineError').parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"PhoneNumber\") {\r\n phoneNumberError.innerText = response.data.errors[error].value;\r\n $('#PhoneNumberError').parent().addClass('form-error');\r\n }\r\n\r\n\r\n //RESET for step -1 \r\n if (firstNameError.innerText === '') {\r\n $('#FirstNameError').parent().removeClass('form-error');\r\n }\r\n if (lastNameError.innerText === '') {\r\n $('#LastNameError').parent().removeClass('form-error');\r\n }\r\n\r\n if (emailError.innerText === '') {\r\n $('#EmailError').parent().removeClass('form-error');\r\n }\r\n\r\n if (countryError.innerText === '') {\r\n $('#CountryError').parent().removeClass('form-error');\r\n }\r\n\r\n if (companyError.innerText === '') {\r\n $('#CompanyError').parent().removeClass('form-error');\r\n }\r\n\r\n if (productAccessLineError.innerText === '') {\r\n $('#ProductAccessLineError').parent().removeClass('form-error');\r\n }\r\n\r\n if (phoneNumberError.innerText === '') {\r\n $('#PhoneNumberError').parent().removeClass('form-error');\r\n }\r\n\r\n\r\n if (response.data.errors[error].key === undefined ||\r\n response.data.errors[error].key === '') {\r\n errorMessage.style.display = \"block\";\r\n $('#login-signup-errormessage').append(response.data.errors[error] + '<br />');\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n\r\n window.location.href = '/';\r\n }\r\n })\r\n .catch(function (response) {\r\n var errorPanel = document.getElementById('login-signup-errormessage');\r\n errorPanel.innerText = response;\r\n errorPanel.style.display = \"block\";\r\n })\r\n .finally(function () {\r\n $('.loading-box').hide();\r\n });\r\n }\r\n\r\n signup(e) {\r\n\r\n let form = $(e).closest(\"form\")[0];\r\n let bodyFormData = new FormData();\r\n\r\n //For Step - 3\r\n bodyFormData.set('FirstName', $(\"#RegisterAccountViewModel_FirstName\", form).val());\r\n bodyFormData.set('LastName', $(\"#RegisterAccountViewModel_LastName\", form).val());\r\n bodyFormData.set('Email', $(\"#RegisterAccountViewModel_Email\", form).val());\r\n bodyFormData.set('Company', $(\"#RegisterAccountViewModel_Company\", form).val());\r\n bodyFormData.set('PhoneNumber', $(\"#RegisterAccountViewModel_PhoneNumber\", form).val());\r\n bodyFormData.set('Country', $('select[name=\"RegisterAccountViewModel.Country\"]', form).val());\r\n bodyFormData.set('ProductAccessLine', $('select[name=\"RegisterAccountViewModel.ProductAccessLine\"]', form).val());\r\n bodyFormData.set('PreferredLanguage', $('select[name=\"RegisterAccountViewModel.PreferredLanguage\"]', form).val());\r\n\r\n if ($('#RegisterAccountViewModel_SalesRepresentative').length > 0) {\r\n bodyFormData.set('SalesRepresentative', $('#RegisterAccountViewModel_SalesRepresentative').val());\r\n }\r\n\r\n if ($('#RegisterAccountViewModel_DistributionChannel').length > 0) {\r\n bodyFormData.set('DistributionChannel', $('#RegisterAccountViewModel_DistributionChannel').val());\r\n }\r\n\r\n if ($('#RegisterAccountViewModel_SalesRepresentativeRequired').length > 0) {\r\n bodyFormData.set('SalesRepresentativeRequired', $('#RegisterAccountViewModel_SalesRepresentativeRequired').val());\r\n }\r\n\r\n if ($('#RegisterAccountViewModel_DistributionChannelRequired').length > 0) {\r\n bodyFormData.set('DistributionChannelRequired', $('#RegisterAccountViewModel_DistributionChannelRequired').val());\r\n }\r\n\r\n if ($(\"#RegisterAccountViewModel_CustomerNumber\").length > 0) {\r\n bodyFormData.set('CustomerNumber', $('#RegisterAccountViewModel_CustomerNumber', form).val());\r\n }\r\n if ($('select[name=\"RegisterAccountViewModel.PrimaryProductCatalog\"]').length > 0) {\r\n bodyFormData.set('PrimaryProductCatalog', $('select[name=\"RegisterAccountViewModel.PrimaryProductCatalog\"]', form).val());\r\n }\r\n\r\n bodyFormData.set('BillingAddress.Line1', $(\"#RegisterAccountViewModel_BillingAddress_Line1\", form).val());\r\n bodyFormData.set('BillingAddress.Line2', $(\"#RegisterAccountViewModel_BillingAddress_Line2\", form).val());\r\n bodyFormData.set('BillingAddress.City', $(\"#RegisterAccountViewModel_BillingAddress_City\", form).val());\r\n\r\n //passing correct state code to back end\r\n if ($(\"#RegisterAccountViewModel_BillingAddress_CountryName option:selected\").val() === 'USA') {\r\n bodyFormData.set('BillingAddress.StateProvinceCode', $('select[name=\"RegisterAccountViewModel.BillingAddress.StateProvinceCode\"]', form).val());\r\n bodyFormData.set('BillingAddress.ProvinceCode', $('select[name=\"RegisterAccountViewModel.BillingAddress.StateProvinceCode\"]', form).val());\r\n }\r\n else if ($(\"#RegisterAccountViewModel_BillingAddress_CountryName option:selected\").val() === 'CAN') {\r\n bodyFormData.set('BillingAddress.StateProvinceCode', $('select[name=\"RegisterAccountViewModel.BillingAddress.ProvinceCode\"]', form).val());\r\n bodyFormData.set('BillingAddress.ProvinceCode', $('select[name=\"RegisterAccountViewModel.BillingAddress.ProvinceCode\"]', form).val());\r\n }\r\n else {\r\n bodyFormData.set('BillingAddress.StateProvinceCode', $(\"#RegisterAccountViewModel_BillingAddress_StateProvinceName\", form).val());\r\n bodyFormData.set('BillingAddress.ProvinceCode', $(\"#RegisterAccountViewModel_BillingAddress_StateProvinceName\", form).val());\r\n if ($(\"#RegisterAccountViewModel_BillingAddress_StateProvinceName\", form).val() === \"\") {\r\n bodyFormData.set('BillingAddress.StateProvinceCode', \"NA-Not Applicable\");\r\n bodyFormData.set('BillingAddress.ProvinceCode', \"NA-Not Applicable\");\r\n }\r\n }\r\n\r\n bodyFormData.set('BillingAddress.PostalCode', $(\"#RegisterAccountViewModel_BillingAddress_PostalCode\", form).val());\r\n bodyFormData.set('BillingAddress.CountryName', $('select[name=\"RegisterAccountViewModel.BillingAddress.CountryName\"]', form).val());\r\n bodyFormData.set('BillingAddress.PhoneNumber', $(\"#RegisterAccountViewModel_BillingAddress_PhoneNumber\", form).val());\r\n\r\n bodyFormData.set('DuplicateBilling', $('#RegisterAccountViewModel_DuplicateBilling', form).val());\r\n\r\n bodyFormData.set('ShippingAddress.Line1', $(\"#RegisterAccountViewModel_ShippingAddress_Line1\", form).val());\r\n bodyFormData.set('ShippingAddress.Line2', $(\"#RegisterAccountViewModel_ShippingAddress_Line2\", form).val());\r\n bodyFormData.set('ShippingAddress.City', $(\"#RegisterAccountViewModel_ShippingAddress_City\", form).val());\r\n\r\n //passing correct state code to back end\r\n if ($(\"#RegisterAccountViewModel_ShippingAddress_CountryName option:selected\").val() === 'USA') {\r\n bodyFormData.set('ShippingAddress.StateProvinceCode', $('select[name=\"RegisterAccountViewModel.ShippingAddress.StateProvinceCode\"]', form).val());\r\n bodyFormData.set('ShippingAddress.ProvinceCode', $('select[name=\"RegisterAccountViewModel.ShippingAddress.StateProvinceCode\"]', form).val());\r\n }\r\n else if ($(\"#RegisterAccountViewModel_ShippingAddress_CountryName option:selected\").val() === 'CAN') {\r\n bodyFormData.set('ShippingAddress.StateProvinceCode', $('select[name=\"RegisterAccountViewModel.ShippingAddress.ProvinceCode\"]', form).val());\r\n bodyFormData.set('ShippingAddress.ProvinceCode', $('select[name=\"RegisterAccountViewModel.ShippingAddress.ProvinceCode\"]', form).val());\r\n }\r\n else {\r\n bodyFormData.set('ShippingAddress.StateProvinceCode', $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\", form).val());\r\n bodyFormData.set('ShippingAddress.ProvinceCode', $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\", form).val());\r\n if ($(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\", form).val() === \"\") {\r\n bodyFormData.set('ShippingAddress.StateProvinceCode', \"NA-Not Applicable\");\r\n bodyFormData.set('ShippingAddress.ProvinceCode', \"NA-Not Applicable\");\r\n }\r\n }\r\n\r\n bodyFormData.set('ShippingAddress.PostalCode', $(\"#RegisterAccountViewModel_ShippingAddress_PostalCode\", form).val());\r\n bodyFormData.set('ShippingAddress.CountryName', $('select[name=\"RegisterAccountViewModel.ShippingAddress.CountryName\"]', form).val());\r\n bodyFormData.set('ShippingAddress.PhoneNumber', $(\"#RegisterAccountViewModel_ShippingAddress_PhoneNumber\", form).val());\r\n\r\n bodyFormData.set('__RequestVerificationToken', $(\"input[name=__RequestVerificationToken]\", form).val());\r\n\r\n\r\n $('.loading-box').show();\r\n axios({\r\n method: 'post',\r\n url: form.action,\r\n data: bodyFormData,\r\n config: { headers: { 'Content-Type': 'multipart/form-data' } }\r\n })\r\n .then(function (response) {\r\n if (response.data) {\r\n if (response.data.success) {\r\n $(\".register\").toggle();\r\n $(\".register-confirmation\").toggle();\r\n\r\n odpUtils.TrackRegister(response.data.email, response.data.siteUserId, response.data.customerContactId);\r\n odpUtils.TrackCustomerInformation(\r\n response.data.email, \r\n response.data.siteUserId, \r\n response.data.customerContactId,\r\n response.data.salesOrg,\r\n response.data.distChannel,\r\n response.data.market)\r\n }\r\n else {\r\n var errorMessage = document.getElementById('login-signup-errormessage');\r\n\r\n //For step - 3\r\n var shippingLine1Error = document.getElementById('ShippingLine1Error');\r\n var shippingCityError = document.getElementById('ShippingCityError');\r\n var shippingStateProvinceError = document.getElementById('ShippingStateProvinceError');\r\n var shippingPostalCodeError = document.getElementById('ShippingPostalCodeError');\r\n var shippingCountryError = document.getElementById('ShippingCountryError');\r\n var shippingPhoneNumberError = document.getElementById('ShippingPhoneNumberError');\r\n\r\n if (errorMessage) {\r\n errorMessage.innerText = '';\r\n for (var error in response.data.errors) {\r\n //for step-3 ship address\r\n\r\n if (response.data.errors[error].key === \"ShippingAddress.Line1\") {\r\n shippingLine1Error.innerText = response.data.errors[error].value;\r\n $('#ShippingLine1Error').parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"ShippingAddress.City\") {\r\n shippingCityError.innerText = response.data.errors[error].value;\r\n $('#ShippingCityError').parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"ShippingAddress.StateProvinceCode\") {\r\n shippingStateProvinceError.innerText = response.data.errors[error].value;\r\n $('#ShippingStateProvinceError').parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"ShippingAddress.PostalCode\") {\r\n shippingPostalCodeError.innerText = response.data.errors[error].value;\r\n $('#ShippingPostalCodeError').parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"ShippingAddress.CountryName\") {\r\n shippingCountryError.innerText = response.data.errors[error].value;\r\n $('#ShippingCountryError').parent().addClass('form-error');\r\n }\r\n if (response.data.errors[error].key === \"ShippingAddress.PhoneNumber\") {\r\n shippingPhoneNumberError.innerText = response.data.errors[error].value;\r\n $('#ShippingPhoneNumberError').parent().addClass('form-error');\r\n }\r\n\r\n //RESET for step -3\r\n if (shippingLine1Error.innerText === '') {\r\n $('#ShippingLine1Error').parent().removeClass('form-error');\r\n }\r\n if (shippingCityError.innerText === '') {\r\n $('#ShippingCityError').parent().removeClass('form-error');\r\n }\r\n\r\n if (shippingStateProvinceError.innerText === '') {\r\n $('#ShippingStateProvinceError').parent().removeClass('form-error');\r\n }\r\n\r\n if (shippingPostalCodeError.innerText === '') {\r\n $('#ShippingPostalCodeError').parent().removeClass('form-error');\r\n }\r\n\r\n if (shippingCountryError.innerText === '') {\r\n $('#ShippingCountryError').parent().removeClass('form-error');\r\n }\r\n\r\n if (shippingPhoneNumberError.innerText === '') {\r\n $('#ShippingPhoneNumberError').parent().removeClass('form-error');\r\n }\r\n\r\n if (response.data.errors[error].key === 'Register.ContactExist') {\r\n errorMessage.style.display = \"block\";\r\n $('#login-signup-errormessage').append(response.data.errors[error].value + '<br />');\r\n }\r\n\r\n if (response.data.errors[error].key === undefined || response.data.errors[error].key === '') {\r\n errorMessage.style.display = \"block\";\r\n $('#login-signup-errormessage').append(response.data.errors[error] + '<br />');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n\r\n window.location.href = '/';\r\n }\r\n })\r\n .catch(function (response) {\r\n\r\n var errorPanel = document.getElementById('login-signup-errormessage');\r\n errorPanel.innerText = response;\r\n errorPanel.style.display = \"block\";\r\n })\r\n .finally(function () {\r\n $('.loading-box').hide();\r\n });\r\n }\r\n\r\n ShippingCountryChangedIndex(e) {\r\n\r\n var vm = this;\r\n vm.RegisterAccountViewModel_ShippingAddress_StateProvinceCode = null;\r\n vm.RegisterAccountViewModel_ShippingAddress_ProvinceCode = null;\r\n vm.RegisterAccountViewModel_ShippingAddress_StateProvinceName = null;\r\n\r\n //CLEAR OTHER VALUES\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceCode\").val('');\r\n $(\"#RegisterAccountViewModel_ShippingAddress_ProvinceCode\").val('');\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\").val(''); \r\n\r\n if ($(\"#RegisterAccountViewModel_ShippingAddress_CountryName option:selected\").val() === 'USA') {\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceCode\").show();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_ProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\").hide();\r\n }\r\n else if ($(\"#RegisterAccountViewModel_ShippingAddress_CountryName option:selected\").val() === 'CAN') {\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_ProvinceCode\").show();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\").hide();\r\n }\r\n else {\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_ProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\").show();\r\n $('#RegisterAccountViewModel_ShippingAddress_StateProvinceCode').parent().removeClass('form-error');\r\n $('#RegisterAccountViewModel_ShippingAddress_ProvinceCode').parent().removeClass('form-error');\r\n document.getElementById('ShippingStateProvinceError').innerText = \"\";\r\n }\r\n }\r\n\r\n BillingCountryChangedIndex(e) {\r\n\r\n var vm = this;\r\n vm.RegisterAccountViewModel_BillingAddress_StateProvinceCode = null;\r\n vm.RegisterAccountViewModel_BillingAddress_ProvinceCode = null;\r\n vm.RegisterAccountViewModel_BillingAddress_StateProvinceName = null;\r\n\r\n //CLEAR OTHER VALUES\r\n $(\"#RegisterAccountViewModel_BillingAddress_StateProvinceCode\").val('');\r\n $(\"#RegisterAccountViewModel_BillingAddress_ProvinceCode\").val('');\r\n $(\"#RegisterAccountViewModel_BillingAddress_StateProvinceName\").val('');\r\n\r\n if ($(\"#RegisterAccountViewModel_BillingAddress_CountryName option:selected\").val() === 'USA') {\r\n $(\"#RegisterAccountViewModel_BillingAddress_StateProvinceCode\").show();\r\n $(\"#RegisterAccountViewModel_BillingAddress_ProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_BillingAddress_StateProvinceName\").hide();\r\n }\r\n else if ($(\"#RegisterAccountViewModel_BillingAddress_CountryName option:selected\").val() === 'CAN') {\r\n $(\"#RegisterAccountViewModel_BillingAddress_StateProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_BillingAddress_ProvinceCode\").show();\r\n $(\"#RegisterAccountViewModel_BillingAddress_StateProvinceName\").hide();\r\n }\r\n else {\r\n $(\"#RegisterAccountViewModel_BillingAddress_StateProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_BillingAddress_ProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_BillingAddress_StateProvinceName\").show();\r\n $('#RegisterAccountViewModel_BillingAddress_StateProvinceCode').parent().removeClass('form-error');\r\n $('#RegisterAccountViewModel_BillingAddress_ProvinceCode').parent().removeClass('form-error');\r\n document.getElementById('BillingStateProvinceError').innerText = \"\";\r\n }\r\n }\r\n\r\n sameAsBillingAddress() {\r\n if ($('#RegisterAccountViewModel_DuplicateBilling').is(\":checked\")) {\r\n // it is checked\r\n $('#RegisterAccountViewModel_ShippingAddress_Line1')\r\n .val($(\"#RegisterAccountViewModel_BillingAddress_Line1\").val());\r\n $('#RegisterAccountViewModel_ShippingAddress_Line2')\r\n .val($(\"#RegisterAccountViewModel_BillingAddress_Line2\").val());\r\n $('#RegisterAccountViewModel_ShippingAddress_City')\r\n .val($(\"#RegisterAccountViewModel_BillingAddress_City\").val());\r\n $('#RegisterAccountViewModel_ShippingAddress_PostalCode')\r\n .val($(\"#RegisterAccountViewModel_BillingAddress_PostalCode\").val());\r\n $('#RegisterAccountViewModel_ShippingAddress_PhoneNumber')\r\n .val($(\"#RegisterAccountViewModel_BillingAddress_PhoneNumber\").val());\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceCode\")\r\n .val($(\"#RegisterAccountViewModel_BillingAddress_StateProvinceCode\").val());\r\n $(\"#RegisterAccountViewModel_ShippingAddress_ProvinceCode\")\r\n .val($(\"#RegisterAccountViewModel_BillingAddress_ProvinceCode\").val());\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\")\r\n .val($(\"#RegisterAccountViewModel_BillingAddress_StateProvinceName\").val());\r\n $(\"#RegisterAccountViewModel_ShippingAddress_CountryName\")\r\n .val($(\"#RegisterAccountViewModel_BillingAddress_CountryName\").val());\r\n\r\n //to show hide correct state field\r\n if ($(\"#RegisterAccountViewModel_BillingAddress_CountryName option:selected\").val() === 'USA') {\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceCode\").show();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_ProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\").hide();\r\n } else if ($(\"#RegisterAccountViewModel_BillingAddress_CountryName option:selected\").val() === 'CAN') {\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_ProvinceCode\").show();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\").hide();\r\n } else {\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_ProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\").show();\r\n }\r\n } else {\r\n //to clear as its unchecked\r\n $('#RegisterAccountViewModel_ShippingAddress_Line1').val('');\r\n $('#RegisterAccountViewModel_ShippingAddress_Line2').val('');\r\n $('#RegisterAccountViewModel_ShippingAddress_City').val('');\r\n $('#RegisterAccountViewModel_ShippingAddress_PostalCode').val('');\r\n $('#RegisterAccountViewModel_ShippingAddress_PhoneNumber').val('');\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceCode\").val('');\r\n $(\"#RegisterAccountViewModel_ShippingAddress_ProvinceCode\").val('');\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\").val('');\r\n $(\"#RegisterAccountViewModel_ShippingAddress_CountryName\").val('');\r\n\r\n //to make sure they see default state/province state\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_ProvinceCode\").hide();\r\n $(\"#RegisterAccountViewModel_ShippingAddress_StateProvinceName\").show();\r\n }\r\n InputFloatLabel.Rebind();\r\n }\r\n}\r\n$(document).ready(function () {\r\n var register = new Register();\r\n register.Init();\r\n});","const registrationStepper = document.querySelectorAll('.section account-page-forms-registration');\r\n\r\n\r\n\r\n$(document).ready(function(){\r\n\r\n\r\n $(\"#previous-1\").on('click', function(){\t\t\r\n\t\t$('.form-error-information').html(\"\");\r\n $('#stepTwo').hide();\r\n $(\"#stepOne\").show();\r\n $(\".stepNumber\").html(\"1\");\r\n $('#BillingInfo').removeClass(\"design-tool__step-info active\");\r\n $('#BasicInfo').addClass(\"design-tool__step-info hidden\");\r\n $('#BasicInfo').addClass(\"design-tool__step-info active\")\r\n $(\"#step1\").removeClass(\"design-tool__step complete\");\r\n $(\"#step1\").addClass(\"design-tool__step active\");\r\n $(\"#step2\").removeClass(\"design-tool__step active\");\r\n $(\"#step2\").addClass(\"design-tool__step\"); \r\n\t $('.form-error-information').html(\"\");\r\n }); \r\n\r\n//Step Two Sytles \r\n\r\n $(\"#previous-3\").click(function(){\t\t\r\n\t $('.form-error-information').html(\"\");\r\n $(\"#stepThree\").hide();\r\n $('#stepTwo').show();\r\n $(\".stepNumber\").html(\"2\");\r\n $('#ShippingInfo').removeClass(\"design-tool__step-info active\");\r\n $('#ShippingInfo').addClass(\"design-tool__step-info hidden\");\r\n $('#BillingInfo').addClass(\"design-tool__step-info active\");\r\n $(\"#step3\").removeClass(\"design-tool__step active\");\r\n $(\"#step3\").addClass(\"design-tool__step\");\r\n $(\"#step2\").removeClass(\"design-tool__step complete\");\r\n $(\"#step2\").addClass(\"design-tool__step active\"); \r\n\t $('.form-error-information').html(\"\");\r\n });\r\n\r\n\r\n//Skip styles on second step\r\n // $('#skipStep').on('click', function(e){\r\n // $('#stepTwo').hide();\r\n // $(\"#stepThree\").show();\r\n // $(\".stepNumber\").html(\"3\");\r\n\t // $('#duplicateBilling').val('TRUE');\r\n // $('#BillingInfo').removeClass(\"design-tool__step-info active\");\r\n // $('#BillingInfo').addClass(\"design-tool__step-info hidden\");\r\n // $('#ShippingInfo').addClass(\"design-tool__step-info active\") \r\n // $(\"#step2\").removeClass(\"design-tool__step active\");\r\n // $(\"#step2\").addClass(\"design-tool__step complete\");\r\n // $(\"#step2\").addClass(\"design-tool__step check\");\r\n // $(\"#step3\").addClass(\"design-tool__step active\"); \r\n\r\n // })\r\n\r\n});\r\n\r\n\r\n\r\n\r\n","import { tns } from 'tiny-slider/src/tiny-slider';\r\nconst relatedArticles = document.querySelectorAll('.component-related-articles');\r\nconst relatedArticlesSlider = document.querySelectorAll('.component-related-articles__slider');\r\n\r\n//Initiate slider for for mobile for each instance in case of multiples\r\nif(relatedArticles.length > 0) {\r\n relatedArticlesSlider.forEach(slider => {\r\n let sliderRelatedArticles = tns({\r\n container: slider,\r\n items: 1,\r\n edgePadding: 25,\r\n controls: false,\r\n nav: true,\r\n navPosition: 'bottom',\r\n center: true,\r\n loop: false,\r\n swipeAngle: false,\r\n speed: 400,\r\n preventScrollOnTouch: 'auto',\r\n autoplay: false,\r\n responsive: {\r\n 768: {\r\n disable: true\r\n }\r\n }\r\n });\r\n window.addEventListener(\"resize\", function () {\r\n sliderRelatedArticles.destroy();\r\n sliderRelatedArticles = sliderRelatedArticles.rebuild();\r\n });\r\n });\r\n}","import * as odpUtils from '../integrations/ODP/utils';\r\n\r\n//SaveInAs Wishlist modal\r\nconst selectBtn = document.querySelector('#saveInWishlistModal .select-btn'),\r\n items = document.querySelectorAll('#saveInWishlistModal .item input');\r\n\r\nvar createNew = false;\r\nvar saveCartToWishlist = false;\r\nvar cartItemMaterialId;\r\nvar cartItemQuantity;\r\nvar cartItemOrderingCode;\r\n\r\nlet code = '';\r\n\r\nif (selectBtn) {\r\n selectBtn.addEventListener(\"click\", () => {\r\n selectBtn.classList.toggle(\"open\");\r\n event.stopPropagation();\r\n });\r\n}\r\n\r\nlet wishlistSelected = [];\r\nitems.forEach(item => {\r\n item.addEventListener(\"click\", () => {\r\n var selectAll = false;\r\n if ($(item).attr('id') == 'id_wishlist_select_all') {\r\n items.forEach(function (node, index) {\r\n if (index == 0) {\r\n selectAll = $(node).is(\":checked\");\r\n }\r\n else {\r\n node.classList.toggle('checked');\r\n $(node).prop('checked', selectAll);\r\n if (selectAll) {\r\n $(node).addClass('checked');\r\n }\r\n wishlistSelected = [];\r\n }\r\n })\r\n }\r\n else {\r\n item.classList.toggle(\"checked\");\r\n }\r\n var parent = item.closest('.list-items');\r\n const checked = $(parent).find(\".item .checked\"),\r\n btnText = $(parent).prev().find(\".btn-text\");\r\n if (checked && checked.length > 0) {\r\n wishlistSelected = [];\r\n let selectedText = [];\r\n for (const child of checked) {\r\n var wish = \"\";\r\n if ($(child).attr('id') == 'id_wishlist_MyDefaultWishList')\r\n {\r\n wish = \"My Default Wish List\";\r\n selectedText.push($(child).next('label').text());\r\n }\r\n else\r\n {\r\n wish = $(child).next('label').text();\r\n selectedText.push(wish);\r\n }\r\n wishlistSelected.push(wish);\r\n \r\n }\r\n $(btnText).text(selectedText);\r\n }\r\n else {\r\n $(btnText).text(\"select\");\r\n }\r\n \r\n })\r\n})\r\n$(\".multiple-select-container .list-items\").click(function () {\r\n event.stopPropagation();\r\n});\r\n$('#chbCreateNew').click(function () {\r\n $(\"#lbl_Wislist_validation\").hide();\r\n $(\"#lbl_Wislist_Length_Validation\").hide();\r\n $(\"#lbl_DWislist_validation\").addClass('d-none').removeClass('d-block');\r\n if ($(this).is(':checked')) {\r\n $(\"#saveWishListName\").addClass('d-block').removeClass('d-none');\r\n $('#lbl_wishListName').removeClass('d-block').addClass('d-block');\r\n $(\".multiple-select-container\").hide();\r\n createNew = true\r\n }\r\n else {\r\n $(\"#saveWishListName\").addClass('d-none').removeClass('d-block');\r\n $('#lbl_wishListName').removeClass('d-block').addClass('d-none');\r\n $(\".multiple-select-container\").show();\r\n createNew = false\r\n }\r\n});\r\n\r\n$(\"#btnSaveWishlist\").click(function () {\r\n if (validateForm())\r\n {\r\n if (createNew) {\r\n if (saveCartToWishlist) {\r\n addCartItemToNewWishList();\r\n return;\r\n }\r\n addToNewWishList();\r\n }\r\n else {\r\n if (saveCartToWishlist) {\r\n addCartItemToExisting();\r\n return;\r\n }\r\n addToExisting();\r\n }\r\n }\r\n});\r\n$(\".cart-items-page__summary-save-to-wishlist #btn_SaveWishlist\").click(function () {\r\n $(\"#save_in_wishlist_title\").addClass(\"d-none\").removeClass(\"d-block\");\r\n $(\"#btnSaveWishlist\").addClass(\"d-none\").removeClass(\"d-block\");\r\n $(\"#lbl_DWislist_validation\").addClass(\"d-none\").removeClass(\"d-block\");\r\n $(\"#lbl_Wislist_validation\").hide();\r\n $(\"#lbl_Wislist_Length_Validation\").hide();\r\n $(\"#lbl_Existing_validation\").addClass(\"d-none\").removeClass(\"d-block\");\r\n});\r\n\r\n$(document).on('click', '.cart-items-page__save-in-wishlist .btn_SaveWishlist', function () {\r\n $(\"#save_as_wishlist_title\").addClass(\"d-none\").removeClass(\"d-block\");\r\n $(\"#btnSaveAsWishlist\").addClass(\"d-none\").removeClass(\"d-block\");\r\n $(\"#lbl_DWislist_validation\").addClass(\"d-none\").removeClass(\"d-block\");\r\n $(\"#lbl_Wislist_validation\").hide();\r\n $(\"#lbl_Wislist_Length_Validation\").hide();\r\n $(\"#lbl_Existing_validation\").addClass(\"d-none\").removeClass(\"d-block\");\r\n});\r\n$(\"#btnSaveAsWishlist\").click(function () {\r\n \r\n if (validateForm()) {\r\n if (createNew) {\r\n if (saveCartToWishlist) {\r\n addCartToNewWishList();\r\n return;\r\n }\r\n addQuickCartToNewWishList();\r\n }\r\n else {\r\n if (saveCartToWishlist) {\r\n addCartToExistingWishList();\r\n return;\r\n }\r\n addQuickCartToExistingWishList();\r\n }\r\n }\r\n})\r\nfunction validateForm() {\r\n var isValid = true;\r\n var wishlistName = $('#saveInWishlistModal #saveWishListName').val();\r\n $(\"#lbl_Wislist_Length_Validation\").hide();\r\n $(\"#lbl_Wislist_validation\").hide();\r\n $(\"#lbl_Existing_validation\").hide();\r\n $(\"#lbl_DWislist_validation\").addClass('d-none').removeClass('d-block');\r\n\r\n if (createNew) {\r\n if (wishlistName == '') {\r\n $(\"#lbl_Wislist_validation\").show();\r\n isValid = false;\r\n }\r\n else if (wishlistName.length > 35)\r\n {\r\n $(\"#lbl_Wislist_Length_Validation\").show();\r\n isValid = false;\r\n }\r\n else if (checkWishListIsAvailable() == true)\r\n {\r\n $(\"#lbl_Existing_validation\").show();\r\n isValid = false;\r\n }\r\n else {\r\n $(\"#lbl_Wislist_validation\").hide();\r\n $(\"#lbl_Existing_validation\").hide();\r\n $(\"#lbl_Wislist_Length_Validation\").hide();\r\n }\r\n }\r\n else {\r\n if (wishlistSelected && wishlistSelected.length == 0) {\r\n $(\"#lbl_DWislist_validation\").addClass('d-block').removeClass('d-none');\r\n isValid = false;\r\n }\r\n else {\r\n $(\"#lbl_DWislist_validation\").addClass('d-none').removeClass('d-block');\r\n }\r\n }\r\n\r\n return isValid;\r\n}\r\nasync function addToNewWishList() {\r\n var wishListName = $('#saveInWishlistModal #saveWishListName').val();\r\n var oc = $('#product-detail-page-odp input[name=oc]').val();\r\n var qty = $('#quantity_' + code).val();\r\n var data = {\r\n Code: code,\r\n Quantity: qty,\r\n OrderingCode: oc,\r\n WishLists: [wishListName]\r\n };\r\n let wishlistCsv = wishListName\r\n if (Array.isArray(wishListName)){\r\n wishlistCsv = wishlistCsv.toString();\r\n }\r\n await $.ajax({\r\n type: \"POST\",\r\n url: \"/WishListsPage/AddItemToNewWishlist\",\r\n data: JSON.stringify(data),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (response) {\r\n if (response.success) {\r\n $('#saveInWishlistModal').modal('hide');\r\n var successMessage = $('#saveAsSuccess').data('msg');\r\n successMessage = successMessage.replace(\"{0}\", '<b>' + response.code + '</b>');\r\n successMessage = successMessage.replace(\"{1}\", '<b>' + response.wishListName + '</b>');\r\n $('#saveAsSuccess').html(successMessage);\r\n $('#saveAsSuccess').addClass('d-block');\r\n $('#wishListNameHidden').val(response.wishListName);\r\n $('#successWishlistModal').modal('show');\r\n odpUtils.TrackAddToWishlist(code, wishlistCsv);\r\n return;\r\n }\r\n else {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n },\r\n failure: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n },\r\n error: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n });\r\n}\r\nasync function addToExisting() {\r\n var qty = $('#quantity_' + code).val();\r\n var oc = $('#product-detail-page-odp input[name=oc]').val();\r\n var data = {\r\n Code: code,\r\n Quantity: qty,\r\n OrderingCode: oc,\r\n WishLists: wishlistSelected\r\n };\r\n let wishlistCsv = wishlistSelected\r\n if (Array.isArray(wishlistSelected)){\r\n wishlistCsv = wishlistCsv.toString();\r\n }\r\n await $.ajax({\r\n type: \"POST\",\r\n url: \"/WishListsPage/AddItemToWishlists\",\r\n data: JSON.stringify(data),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (response) {\r\n if (response.success) {\r\n $('#saveInWishlistModal').modal('hide');\r\n var successMessage = $('#saveToSuccess').data('msg');\r\n successMessage = successMessage.replace(\"{0}\", '<b>' + response.code + '</b>');\r\n $('#saveToSuccess').html(successMessage);\r\n $('#saveToSuccess').addClass('d-block');\r\n $('#wishListNameHidden').val(response.wishListName);\r\n $('#successWishlistModal').modal('show');\r\n odpUtils.TrackAddToWishlist(code, wishlistCsv);\r\n return;\r\n }\r\n else {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n },\r\n failure: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n },\r\n error: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n });\r\n}\r\n\r\nasync function addCartItemToNewWishList() {\r\n var wishListName = $('#saveInWishlistModal #saveWishListName').val();\r\n var data = {\r\n Code: cartItemMaterialId,\r\n Quantity: cartItemQuantity,\r\n OrderingCode: cartItemOrderingCode,\r\n WishLists: [wishListName]\r\n };\r\n let wishlistCsv = wishListName\r\n if (Array.isArray(wishListName)){\r\n wishlistCsv = wishlistCsv.toString();\r\n }\r\n await $.ajax({\r\n type: \"POST\",\r\n url: \"/WishList/SaveCartItemToWishlist\",\r\n data: JSON.stringify(data),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (response) {\r\n if (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n var successMessage = $('#saveAsSuccess').data('msg');\r\n successMessage = successMessage.replace(\"{0}\", '<b>' + cartItemMaterialId + '</b>');\r\n successMessage = successMessage.replace(\"{1}\", '<b>' + wishListName + '</b>');\r\n $('#saveAsSuccess').html(successMessage);\r\n $('#saveAsSuccess').addClass('d-block');\r\n $('#wishListNameHidden').val(wishListName);\r\n $('#successWishlistModal').modal('show');\r\n odpUtils.TrackAddToWishlist(cartItemMaterialId, wishlistCsv);\r\n return;\r\n }\r\n else {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n },\r\n failure: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n },\r\n error: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n });\r\n}\r\n\r\nasync function addCartItemToExisting() {\r\n var data = {\r\n Code: cartItemMaterialId,\r\n Quantity: cartItemQuantity,\r\n OrderingCode: cartItemOrderingCode,\r\n WishLists: wishlistSelected\r\n };\r\n let wishlistCsv = wishlistSelected\r\n if (Array.isArray(wishlistSelected)){\r\n wishlistCsv = wishlistCsv.toString();\r\n }\r\n await $.ajax({\r\n type: \"POST\",\r\n url: \"/WishList/SaveCartItemToWishlist\",\r\n data: JSON.stringify(data),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (response) {\r\n if (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n var successMessage = $('#saveToSuccess').data('msg');\r\n successMessage = successMessage.replace(\"{0}\", '<b>' + cartItemMaterialId + '</b>');\r\n $('#saveToSuccess').html(successMessage);\r\n $('#saveToSuccess').addClass('d-block');\r\n $('#wishListNameHidden').val(response.wishListName);\r\n $('#successWishlistModal').modal('show');\r\n odpUtils.TrackAddToWishlist(cartItemMaterialId, wishlistCsv);\r\n return;\r\n }\r\n else {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n },\r\n failure: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n },\r\n error: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n });\r\n}\r\n\r\nasync function addQuickCartToNewWishList() {\r\n var wishListName = $('#saveInWishlistModal #saveWishListName').val();\r\n var data = {\r\n WishLists: [wishListName]\r\n };\r\n let $materials = $('.material-id');\r\n let materials = []\r\n if ($materials.length > 0){\r\n for (var i = 0; i < $materials.length - 1; i++){\r\n materials.push($($materials[i]).val());\r\n }\r\n }\r\n let wishlistCsv = wishListName\r\n if (Array.isArray(wishListName)){\r\n wishlistCsv = wishlistCsv.toString();\r\n }\r\n if (Array.isArray(materials)){\r\n materials = materials.toString();\r\n }\r\n await $.ajax({\r\n type: \"POST\",\r\n url: \"/WishList/SaveQuickCartItemsToWishlist\",\r\n data: JSON.stringify(data),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (response) {\r\n if (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n $('#saveAsSuccessQuickCart').addClass(\"d-block\").removeClass(\"d-none\");\r\n $('#wishListNameHidden').val(wishListName);\r\n $('#successWishlistModal').modal('show');\r\n odpUtils.TrackCreateWishListFromQuickCart(materials, wishlistCsv);\r\n return;\r\n }\r\n else {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n },\r\n failure: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n },\r\n error: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n });\r\n}\r\n\r\nasync function addQuickCartToExistingWishList() {\r\n var data = {\r\n WishLists: wishlistSelected\r\n };\r\n let $materials = $('.material-id');\r\n let materials = []\r\n if ($materials.length > 0){\r\n for (var i = 0; i < $materials.length - 1; i++){\r\n materials.push($($materials[i]).val());\r\n }\r\n }\r\n let wishlistCsv = wishlistSelected\r\n if (Array.isArray(wishlistSelected)){\r\n wishlistCsv = wishlistCsv.toString();\r\n }\r\n if (Array.isArray(materials)){\r\n materials = materials.toString();\r\n }\r\n await $.ajax({\r\n type: \"POST\",\r\n url: \"/WishList/SaveCartItemsToWishlist\",\r\n data: JSON.stringify(data),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (response) {\r\n if (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n $('#saveToSuccessQuickCart').addClass(\"d-block\").removeClass(\"d-none\");\r\n $('#successWishlistModal').modal('show');\r\n odpUtils.TrackCreateWishListFromQuickCart(materials, wishlistCsv);\r\n return;\r\n }\r\n else {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n },\r\n failure: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n },\r\n error: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n });\r\n}\r\n\r\nasync function addCartToNewWishList() {\r\n var wishListName = $('#saveInWishlistModal #saveWishListName').val();\r\n var data = {\r\n WishLists: [wishListName]\r\n };\r\n let wishlistCsv = wishListName\r\n if (Array.isArray(wishListName)){\r\n wishlistCsv = wishlistCsv.toString();\r\n }\r\n await $.ajax({\r\n type: \"POST\",\r\n url: \"/WishList/SaveCartItemsToWishlist\",\r\n data: JSON.stringify(data),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (response) {\r\n if (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n $('#saveAsSuccessQuickCart').addClass(\"d-block\").removeClass(\"d-none\");\r\n $('#wishListNameHidden').val(wishListName);\r\n $('#successWishlistModal').modal('show');\r\n odpUtils.TrackAddFromCartToWishlist(wishlistCsv);\r\n return;\r\n }\r\n else {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n },\r\n failure: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n },\r\n error: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n });\r\n}\r\n\r\nasync function addCartToExistingWishList() {\r\n var data = {\r\n WishLists: wishlistSelected\r\n };\r\n let wishlistCsv = wishlistSelected\r\n if (Array.isArray(wishlistSelected)){\r\n wishlistCsv = wishlistCsv.toString();\r\n }\r\n await $.ajax({\r\n type: \"POST\",\r\n url: \"/WishList/SaveCartItemsToWishlist\",\r\n data: JSON.stringify(data),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (response) {\r\n if (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n $('#saveToSuccessQuickCart').addClass(\"d-block\").removeClass(\"d-none\");\r\n $('#successWishlistModal').modal('show');\r\n odpUtils.TrackAddFromCartToWishlist(wishlistCsv);\r\n return;\r\n }\r\n else {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n },\r\n failure: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n },\r\n error: function (response) {\r\n $('#saveInWishlistModal').modal('hide');\r\n }\r\n });\r\n}\r\n$('#saveInWishlistModal').on('show.bs.modal', function (event) {\r\n createNew = false;\r\n var parentElement = $(event.relatedTarget).parentsUntil(\".cart-items-page__cart-content\").get(-1);\r\n cartItemMaterialId = $(parentElement).prev().find(\".cart-sku-value\").text();\r\n var productUrl = $(parentElement).prev().prev().find(\".h7\").parent().attr(\"href\");\r\n if (productUrl)\r\n {\r\n cartItemOrderingCode = getQueryParameterValue(productUrl, \"ORDER_CODE\");\r\n }\r\n cartItemQuantity = $(parentElement).prev().prev().find(\".cart-items-page__qty-row input[name=Qty]\").val();\r\n\r\n code = $(event.relatedTarget).data('materialid');\r\n saveCartToWishlist = $(event.relatedTarget).data('cart');\r\n if (code || cartItemMaterialId) {\r\n $(\"#save_in_wishlist_title\").addClass(\"d-block\").removeClass(\"d-none\");\r\n $(\"#btnSaveWishlist\").addClass(\"d-block\").removeClass(\"d-none\");\r\n }\r\n else {\r\n $(\"#save_as_wishlist_title\").addClass(\"d-block\").removeClass(\"d-none\");\r\n $(\"#btnSaveAsWishlist\").addClass(\"d-block\").removeClass(\"d-none\");\r\n }\r\n $(selectBtn).removeClass(\"open\");\r\n items.forEach(function (node) {\r\n $(node).removeClass('checked');\r\n $(node).prop('checked', false);\r\n wishlistSelected = [];\r\n })\r\n $(this).find(\"#chbCreateNew\").prop('checked', false);\r\n $('.multiple-select-container .btn-text').text(\"select\");\r\n $(this).find('#saveWishListName').addClass('d-none').removeClass('d-block');\r\n $(this).find('#lbl_wishListName').addClass('d-none').removeClass('d-block');\r\n $(this).find('#drpWishlist').addClass('d-block').removeClass('d-none');\r\n $(this).find('#lbl_drpWishlist').addClass('d-block').removeClass('d-none');\r\n $(this).find(\".multiple-select-container\").show();\r\n});\r\n\r\n$(\"#saveInWishlistModal\").click(function () {\r\n $(selectBtn).removeClass(\"open\");\r\n});\r\n$('#successWishlistModal').on('hidden.bs.modal', function () {\r\n $('#successWishlistModal #saveAsSuccess').addClass('d-none').removeClass('d-block');\r\n $('#successWishlistModal #saveToSuccess').addClass('d-none').removeClass('d-block');\r\n $('#successWishlistModal #saveToSuccessQuickCart').addClass('d-none').removeClass('d-block');\r\n $('#successWishlistModal #saveAsSuccessQuickCart').addClass('d-none').removeClass('d-block');\r\n $('#saveInWishlistModal #saveWishListName').val('');\r\n})\r\nfunction getQueryParameterValue(url, param) {\r\n var paramValue = \"\";\r\n var queryStart = url.indexOf(\"?\") + 1;\r\n var queryEnd = url.indexOf(\"#\") !== -1 ? url.indexOf(\"#\") : url.length;\r\n var query = url.slice(queryStart, queryEnd);\r\n var queryArr = query.split(\"&\");\r\n\r\n for (var i = 0; i < queryArr.length; i++) {\r\n var pair = queryArr[i].split(\"=\");\r\n if (decodeURIComponent(pair[0]) === param) {\r\n paramValue = decodeURIComponent(pair[1]);\r\n break;\r\n }\r\n }\r\n\r\n return paramValue;\r\n}\r\nasync function checkWishListIsAvailable() {\r\n var wishListExisted = false;\r\n await $.ajax({\r\n type: \"GET\",\r\n async: false,\r\n url: \"/WishListsPage/CheckWishListIsAvailable\",\r\n data: { 'wishListName': $('#saveInWishlistModal #saveWishListName').val() },\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (response) {\r\n if (response == true)\r\n {\r\n wishListExisted = true;\r\n }\r\n },\r\n failure: function (response) {\r\n },\r\n error: function (response) {\r\n }\r\n });\r\n return wishListExisted;\r\n}\r\n\r\n","const listViewButton = document.querySelector('.list-view-btn');\r\nconst gridViewButton = document.querySelector('.grid-view-btn');\r\nconst viewContainer = document.querySelector('.collections-resources-results_items');\r\n\r\nif (viewContainer !== null && viewContainer !== undefined) {\r\n listViewButton.addEventListener('click', function() {\r\n viewContainer.classList.remove('collections-resources-results_items--grid-view');\r\n listViewButton.classList.add('active');\r\n gridViewButton.classList.remove('active');\r\n });\r\n\r\n\r\n gridViewButton.addEventListener('click', function() {\r\n viewContainer.classList.add('collections-resources-results_items--grid-view');\r\n listViewButton.classList.remove('active');\r\n gridViewButton.classList.add('active');\r\n });\r\n}","const axios = require('axios');\r\nimport * as odpUtils from '../integrations/ODP/utils';\r\n\r\nclass FilterOption {\r\n constructor() {\r\n this.PageValue = 1;\r\n this.PageSize = 20;\r\n this.Sort = \"Relevance\";\r\n }\r\n}\r\n\r\nfunction searchTrigger() {\r\n // for filtering\r\n let PageClass = \"jsPaginate\";\r\n let SortClass = \"jsSort\";\r\n let PageSizeClass = \"jsPageSize\";\r\n let FacetClass = \"jsFacet\";\r\n let Params = \"\";\r\n let RootUrl = window.location.href.substr(0, window.location.href.indexOf('?'));\r\n // to get information page\r\n let Page = \".jsPageInfo\";\r\n let PageSize = \".jsPageSizeInfo\";\r\n let Sort = \".jsSortInfo\";\r\n let SortText = \".jsSortText\";\r\n let ViewMode = \".jsViewModeInfo\";\r\n\r\n //// Search, Filter handler\r\n function paginate(page) {\r\n $(Page).val(page);\r\n search();\r\n }\r\n\r\n function removeTag(inputName) {\r\n $(`input[name='${inputName}']`).prop('checked', false);\r\n search();\r\n }\r\n\r\n function removeAllTag() {\r\n $('.jsSearchFacet').each(function () {\r\n if ($(this).prop(\"checked\") === true) {\r\n $(this).prop(\"checked\", false);\r\n }\r\n });\r\n\r\n search();\r\n }\r\n\r\n function sort(sortBy) {\r\n $(Sort).val(sortBy);\r\n search();\r\n }\r\n\r\n function getFilter() {\r\n var q = new FilterOption();\r\n q.PageValue = $(Page).val();\r\n q.PageSize = $(PageSize).val();\r\n q.Sort = $(Sort).val();\r\n\r\n Params = getUrlWithFacets();\r\n\r\n return q;\r\n }\r\n\r\n function search() {\r\n var data = getFilter();\r\n $('.loading-box').show();\r\n axios({ url: RootUrl + Params, params: { data }, method: 'get' })\r\n .then(function (result) {\r\n window.history.replaceState(null, null, Params == \"\" ? \"?\" : Params);\r\n $(\".resources-count\").replaceWith($(result.data).find('.resources-count'));\r\n $(\".product-count\").replaceWith($(result.data).find('.product-count'));\r\n $('.loadmore-content').replaceWith($(result.data).find('.loadmore-content'));\r\n $('.loadmore-products').replaceWith($(result.data).find('.loadmore-products'));\r\n $('.jsContentResults').replaceWith($(result.data).find('.jsContentResults'));\r\n $('.jsProducts').replaceWith($(result.data).find('.jsProducts'));\r\n $('.selected-facets').replaceWith($(result.data).find('.selected-facets'));\r\n\r\n $('#total-filter-count').replaceWith($(result.data).find('#total-filter-count'));\r\n $('.filter-count').replaceWith($(result.data).find('.filter-count'));\r\n $('.mobile-filter-menu-trigger .total-results').html($(result.data).find('.mobile-filter-menu-trigger .total-results').html());\r\n $('.mobile-filter-menu-trigger .total-results-products').html($(result.data).find('.mobile-filter-menu-trigger .total-results-products').html());\r\n $('.collections-accordion__items-checked').each(function (idx, item) {\r\n $(item).html($(result.data).find('.collections-accordion__items-checked').eq(idx).html());\r\n });\r\n $('.result-count .content-count-value').html($(result.data).find('.result-count .content-count-value').html());\r\n $('.result-count .product-count-value').html($(result.data).find('.result-count .product-count-value').html());\r\n\r\n //product results GTM datalayer push\r\n var gtmDataLayerProductResults = $(result.data).filter('script.impressions-productresults');\r\n if (gtmDataLayerProductResults != null && gtmDataLayerProductResults.length > 0) {\r\n $('head').append('<script>' + gtmDataLayerProductResults.html() + '<\\/script>');\r\n }\r\n\r\n //resources GTM datalayer push\r\n var gtmDataLayerResources = $(result.data).filter('script.impressions-resources');\r\n if (gtmDataLayerResources != null && gtmDataLayerResources.length > 0) {\r\n $('head').append('<script>' + gtmDataLayerResources.html() + '<\\/script>');\r\n }\r\n\r\n // save the current tab(prodcut-items or content-items)\r\n localStorage.setItem(\"SelectedTab\", $(\".collections-tabs .collections-tabs__items.active\").attr('data-id'));\r\n location.reload();\r\n Init();\r\n })\r\n .catch(function (error) {\r\n \r\n })\r\n .finally(function () {\r\n $('.loading-box').hide();\r\n });\r\n }\r\n\r\n function getUrlWithFacets() {\r\n var facets = [];\r\n $('.jsSearchFacet').each(function () {\r\n if ($(this).prop(\"checked\") === true) {\r\n var selectedFacet = encodeURIComponent($(this).data('facetkey'));\r\n if ($.inArray(selectedFacet, facets) < 0) {\r\n facets.push(selectedFacet);\r\n }\r\n }\r\n });\r\n var sort = $(Sort).val();\r\n var pageValue = $(Page).val();\r\n var pageSize = $(PageSize).val();\r\n\r\n return getUrl(facets, sort, pageValue, pageSize);\r\n }\r\n\r\n function getUrl(t, sort, pageValue, pageSize) {\r\n var urlParams = getUrlParams();\r\n urlParams.t = t ? t.join('|') : null;\r\n urlParams.sort = sort;\r\n urlParams.pageValue = pageValue;\r\n urlParams.pageSize = pageSize;\r\n var url = \"?\";\r\n for (var key in urlParams) {\r\n var value = urlParams[key];\r\n if (value) {\r\n url += key + '=' + value + '&';\r\n }\r\n }\r\n return url.slice(0, -1); //remove last char\r\n }\r\n\r\n function getUrlParams() {\r\n var match,\r\n search = /([^&=]+)=?([^&]*)/g, //regex to find key value pairs in querystring\r\n query = window.location.search.substring(1);\r\n\r\n var urlParams = {};\r\n match = search.exec(query);\r\n while (match) {\r\n urlParams[match[1]] = match[2];\r\n match = search.exec(query);\r\n }\r\n\r\n return urlParams;\r\n }\r\n \r\n function facetEventBind() {\r\n $('.jsSearchFacetMobileRemoveAll').click(function () {\r\n removeAllTag();\r\n });\r\n\r\n $('.jsUpdatePage').each(function (i, e) {\r\n $(e).click(function (event) {\r\n var data = $(this).attr('data');\r\n\r\n if ($(this).hasClass(SortClass)) {\r\n console.log(\"inside sorting\");\r\n odpUtils.TrackSearchSorting();\r\n sort(data);\r\n }\r\n\r\n if ($(this).hasClass(FacetClass)) {\r\n event.preventDefault();\r\n console.log(\"inside filter\");\r\n odpUtils.TrackSearchFilter();\r\n var forName = $(this).attr('for');\r\n $('.jsSearchFacet:checkbox').each(function (i, el) {\r\n if ($(el).attr('id') === forName) {\r\n if ($(el).prop(\"checked\") === false) {\r\n $(el).prop(\"checked\", true);\r\n }\r\n else {\r\n $(el).prop(\"checked\", false);\r\n }\r\n }\r\n });\r\n search();\r\n }\r\n\r\n });\r\n });\r\n\r\n }\r\n\r\n function Init() {\r\n $('.collections-tabs__items').click(function () {\r\n var dataId = $(this).attr('data-id');\r\n $('.mobile-filter-menu-trigger .total-results-products').addClass('d-none');\r\n $('.mobile-filter-menu-trigger .total-results').addClass('d-none');\r\n $('#' + dataId).removeClass('d-none');\r\n\r\n $('.content-count-value').addClass('d-none');\r\n $('.product-count-value').addClass('d-none');\r\n $(\".result-count span[data-count=\" + dataId + \"]\").removeClass('d-none');\r\n });\r\n\r\n $('.jsSearchFacetRemoveAll').click(function () {\r\n removeAllTag();\r\n });\r\n\r\n $('.jsRemoveTag').each(function (i, e) {\r\n $(e).click(function () {\r\n var name = $(this).attr('data-refinementvalue');\r\n removeTag(name);\r\n });\r\n });\r\n\r\n $('.jsUpdatePage').each(function (i, e) {\r\n $(e).click(function () {\r\n var data = $(this).attr('data');\r\n if ($(this).hasClass(PageClass)) {\r\n paginate(data);\r\n }\r\n });\r\n });\r\n\r\n $('.jsGtmClick').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n var gtmData = $(this).data('gtmclick');\r\n if (gtmData !== null && typeof (window.dataLayer) != 'undefined' && window.dataLayer !== null) {\r\n window.dataLayer.push(gtmData);\r\n }\r\n\r\n window.location.href = $(this).attr('href');\r\n });\r\n });\r\n\r\n\r\n $('.jsConfigureProduct').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n var gtmData = $(this).data('gtmclick');\r\n if (gtmData !== null && typeof (window.dataLayer) != 'undefined' && window.dataLayer !== null) {\r\n window.dataLayer.push(gtmData);\r\n }\r\n\r\n window.location.href = $(this).data('url');\r\n });\r\n });\r\n\r\n $('.jsConfigureBundle').each(function (i, e) {\r\n $(e).click(function (event) {\r\n event.preventDefault();\r\n window.location.href = $(this).data('url');\r\n });\r\n });\r\n \r\n ////-- end\r\n }\r\n\r\n Init();\r\n facetEventBind();\r\n}\r\n\r\nsearchTrigger();","const pdpCTA = document.querySelector(\".product-detail-page__section-select\");\r\n//Fixed position bar\r\nif(pdpCTA) {\r\n const offset = pdpCTA.offsetTop;\r\n const rect = pdpCTA.getBoundingClientRect();\r\n const scrollUp = \"scroll-up\";\r\n const scrollDown = \"scroll-down\";\r\n let lastScroll = 0;\r\n // Create the function to be called on scroll\r\n const stick = function () {\r\n\r\n // Get the scroll\r\n let scroll = window.scrollY;\r\n if ( scroll >= offset) {\r\n pdpCTA.classList.add('stick');\r\n } else if (scroll <= offset){\r\n pdpCTA.classList.remove('stick');\r\n }\r\n \r\n if (scroll <= offset) {\r\n pdpCTA.classList.remove(scrollUp);\r\n pdpCTA.classList.remove(scrollDown);\r\n return;\r\n }\r\n \r\n if (scroll > lastScroll && !pdpCTA.classList.contains(scrollDown)) {\r\n // down\r\n pdpCTA.classList.remove(scrollUp);\r\n pdpCTA.classList.add(scrollDown);\r\n } else if (scroll < lastScroll && pdpCTA.classList.contains(scrollDown)) {\r\n // up\r\n pdpCTA.classList.remove(scrollDown);\r\n pdpCTA.classList.add(scrollUp);\r\n }\r\n lastScroll = scroll;\r\n };\r\n // listen to the scroll\r\n window.addEventListener('scroll', stick);\r\n}\r\n\r\n//Scroll the section into view with the same id as link href\r\nconst sectionAnchorsContainer = document.querySelector('.product-detail-page__section-anchors');\r\nif(sectionAnchorsContainer) {\r\n const sectionAnchors = sectionAnchorsContainer.querySelectorAll('a');\r\n sectionAnchors.forEach(function(anchor) {\r\n anchor.addEventListener('click', function(e) {\r\n e.preventDefault();\r\n //Remove the active class from all li's\r\n const sectionAnchorItems = sectionAnchorsContainer.querySelectorAll('li');\r\n sectionAnchorItems.forEach(function(item) {\r\n item.classList.remove('active');\r\n });\r\n //Add active class to the clicked a tag parent li\r\n anchor.parentNode.classList.add('active');\r\n //Get the href of the click a tag minus the hash character\r\n const link = anchor.getAttribute('href').substr(1);\r\n const section = document.getElementById(link);\r\n const header = section.querySelector('h2');\r\n header.scrollIntoView({behavior:'smooth'});\r\n });\r\n });\r\n}\r\n","const axios = require('axios');\r\n\r\n$('.Validate').click(function () {\r\n setTimeout(function () {\r\n $('.input-validation-error').each(function (i, e) {\r\n $(this).parent().addClass('form-error');\r\n });\r\n },\r\n 200);\r\n});\r\n","// ==================================================================\r\n// Tracking Utils\r\n// ==================================================================\r\nexport function TrackAddToWishlist(materialCode, wishlist) {\r\n let eventPayload = { \r\n action: 'add_to_wishlist',\r\n wishlist_name: wishlist,\r\n product_id: materialCode,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackRemoveFromWishlist(materialCode, wishlist) {\r\n let eventPayload = { \r\n action: 'remove_from_wishlist', \r\n product_id: materialCode,\r\n wishlist_name: wishlist,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackCreateWishListFromQuickCart(materialCode, wishlist) {\r\n let eventPayload = { \r\n action: 'create_wishlist_from_quick_cart',\r\n product_id: materialCode,\r\n wishlist_name: wishlist,\r\n create_wishlist_from_quick_cart_name: wishlist,\r\n create_wishlist_from_quick_cart_material: materialCode,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackAddFromCartToWishlist(wishlist) {\r\n let eventPayload = { \r\n action: 'add_from_cart_to_wishlist', \r\n wishlist_name: wishlist,\r\n product_id: wishlist,\r\n create_wishlist_from_cart_name: wishlist,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackAddFromWishlistToCart(wishlist) {\r\n let eventPayload = { \r\n action: 'add_from_wishlist_to_cart', \r\n wishlist_name: wishlist,\r\n product_id: wishlist,\r\n add_to_cart_from_wishlist_name: wishlist,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackAddMaterialFromWishlistToCart(wishlist, materialCode) {\r\n let eventPayload = { \r\n action: 'add_material_from_wishlist_to_cart', \r\n wishlist_name: wishlist,\r\n product_id: materialCode,\r\n add_to_cart_from_wishlist_name: wishlist,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackAddToCartFromWishlist(materialCode, wishlist) {\r\n let eventPayload = { \r\n action: 'add_to_cart_from_wishlist',\r\n product_id: materialCode,\r\n wishlist_name: wishlist,\r\n create_wishlist_from_quick_cart_name: wishlist,\r\n create_wishlist_from_quick_cart_material: materialCode,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackAddToCart(materialCode) {\r\n let eventPayload = { \r\n action: 'add_to_cart', \r\n product_id: materialCode,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackRemoveFromCart(materialCode) {\r\n let eventPayload = { \r\n action: 'remove_from_cart', \r\n product_id: materialCode,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackAddConfiguredBundleToCart(code) {\r\n let eventPayload = {\r\n action: 'add_configured_bundle_to_cart',\r\n product_id: code,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackRemoveConfiguredBundleFromCart(code) {\r\n let eventPayload = {\r\n action: 'delete_configured_bundle_from_cart',\r\n product_id: code,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackAddBundleToCart(code) {\r\n let eventPayload = {\r\n action: 'add_bundle_to_cart',\r\n product_id: code,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackRemoveBundleFromCart(code) {\r\n let eventPayload = {\r\n action: 'delete_bundle_from_cart',\r\n product_id: code,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackAddPackageToCart(code) {\r\n let eventPayload = {\r\n action: 'add_package_to_cart',\r\n product_id: code,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n\r\n zaius.event('product', eventPayload);\r\n}\r\n\r\nexport function TrackRemovePackageFromCart(code) {\r\n let eventPayload = {\r\n action: 'delete_package_from_cart',\r\n product_id: code,\r\n event_customer_id: GetSiteUserId(),\r\n event_commerce_cloud_id: GetCustomerContactId(),\r\n event_email: GetSiteUserEmail()\r\n }\r\n\r\n zaius.event('product', eventPayload);\r\n}\r\nexport function TrackSearch(searchTerm,category) {\r\n let eventPayload = {\r\n action: 'search',\r\n search_term: searchTerm,\r\n category: category\r\n }\r\n\r\n zaius.event('navigation', eventPayload);\r\n}\r\n\r\nexport function TrackSearchSorting() {\r\n let eventPayload = {\r\n action: 'sort'\r\n }\r\n\r\n zaius.event('navigation', eventPayload);\r\n}\r\n\r\nexport function TrackSearchFilter() {\r\n let eventPayload = {\r\n action: 'filter'\r\n }\r\n\r\n zaius.event('navigation', eventPayload);\r\n}\r\n\r\nexport function TrackLogin(email, siteUserId, customerContactId) {\r\n let eventPayload = { \r\n action: \"login\",\r\n event_customer_id: siteUserId,\r\n event_commerce_cloud_id: customerContactId,\r\n event_email: email\r\n }\r\n \r\n zaius.event('customer', eventPayload);\r\n zaius.customer(\"update customer info\");\r\n}\r\n\r\nexport function TrackRegister(email, siteUserId, customerContactId) {\r\n let eventPayload = { \r\n action: \"register\",\r\n event_customer_id: siteUserId,\r\n event_commerce_cloud_id: customerContactId,\r\n event_email: email\r\n }\r\n \r\n zaius.event('customer', eventPayload);\r\n}\r\n\r\nexport function TrackCustomerInformation(email, siteUserId, customerContactId, salesOrg, distChannel, market){\r\n let existingUserInformation = {\r\n customer_id: siteUserId ? siteUserId : GetSiteUserId(),\r\n commerce_cloud_id: customerContactId ? customerContactId : customerContactId(),\r\n email: email ? email : GetSiteUserEmail()\r\n };\r\n let customUserInformation = {\r\n sales_organization: salesOrg ? salesOrg : GetSalesOrganization(),\r\n distribution_channel: distChannel ? distChannel : GetDistChannel(),\r\n market: market ? market : GetMarket()\r\n }\r\n\r\n zaius.customer(existingUserInformation, customUserInformation);\r\n}\r\n\r\nexport function TrackCustomerChangeMarketInformation(marketId){\r\n let existingUserInformation = {\r\n customer_id: GetSiteUserId(),\r\n commerce_cloud_id: GetCustomerContactId(),\r\n email: GetSiteUserEmail()\r\n };\r\n let customUserInformation = {\r\n sales_organization: GetSalesOrganization(),\r\n distribution_channel: GetDistChannel(),\r\n market: marketId\r\n }\r\n\r\n zaius.customer(existingUserInformation, customUserInformation);\r\n}\r\n\r\n// ==================================================================\r\n// DOM Utils\r\n// ==================================================================\r\nexport function GetCustomerContactId(){\r\n let userIdElem = document.getElementById('user-info');\r\n\r\n return userIdElem.dataset.customerContactId;\r\n}\r\n\r\nexport function GetSiteUserId(){\r\n let userIdElem = document.getElementById('user-info');\r\n\r\n return userIdElem.dataset.siteUserId;\r\n}\r\n\r\nexport function GetSiteUserEmail(){\r\n let userIdElem = document.getElementById('user-info');\r\n\r\n return userIdElem.dataset.email;\r\n}\r\n\r\nexport function GetSalesOrganization(){\r\n let userIdElem = document.getElementById('user-info');\r\n\r\n return userIdElem.dataset.salesOrg;\r\n}\r\n\r\nexport function GetDistChannel(){\r\n let userIdElem = document.getElementById('user-info');\r\n\r\n return userIdElem.dataset.distChannel;\r\n}\r\n\r\nexport function GetMarket(){\r\n let userIdElem = document.getElementById('user-info');\r\n\r\n return userIdElem.dataset.market;\r\n}","import axios from 'axios';\r\n\r\nrequire('./polyfills/ieJSFix');\r\n\r\nwindow.addEventListener('DOMContentLoaded', () => {\r\n \r\n require('./components/modals.js');\r\n require('./components/header.js');\r\n require('./components/collections-search.js');\r\n});\r\n","//To make forEach and from methods work in IE\r\n(function () {\r\n if (typeof NodeList.prototype.forEach === \"function\") return false;\r\n NodeList.prototype.forEach = Array.prototype.forEach;\r\n })();\r\n \r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\r\n }\r\n \r\n if (!Element.prototype.closest) {\r\n Element.prototype.closest = function (s) {\r\n var el = this;\r\n \r\n do {\r\n if (el.matches(s)) return el;\r\n el = el.parentElement || el.parentNode;\r\n } while (el !== null && el.nodeType === 1);\r\n \r\n return null;\r\n };\r\n }\r\n if (!Array.from) {\r\n Array.from = (function () {\r\n var toStr = Object.prototype.toString;\r\n var isCallable = function (fn) {\r\n return typeof fn === 'function' || toStr.call(fn) === '[object Function]';\r\n };\r\n var toInteger = function (value) {\r\n var number = Number(value);\r\n if (isNaN(number)) { return 0; }\r\n if (number === 0 || !isFinite(number)) { return number; }\r\n return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));\r\n };\r\n var maxSafeInteger = Math.pow(2, 53) - 1;\r\n var toLength = function (value) {\r\n var len = toInteger(value);\r\n return Math.min(Math.max(len, 0), maxSafeInteger);\r\n };\r\n \r\n // The length property of the from method is 1.\r\n return function from(arrayLike/*, mapFn, thisArg */) {\r\n // 1. Let C be the this value.\r\n var C = this;\r\n \r\n // 2. Let items be ToObject(arrayLike).\r\n var items = Object(arrayLike);\r\n \r\n // 3. ReturnIfAbrupt(items).\r\n if (arrayLike == null) {\r\n throw new TypeError('Array.from requires an array-like object - not null or undefined');\r\n }\r\n \r\n // 4. If mapfn is undefined, then let mapping be false.\r\n var mapFn = arguments.length > 1 ? arguments[1] : void undefined;\r\n var T;\r\n if (typeof mapFn !== 'undefined') {\r\n // 5. else\r\n // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.\r\n if (!isCallable(mapFn)) {\r\n throw new TypeError('Array.from: when provided, the second argument must be a function');\r\n }\r\n \r\n // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n if (arguments.length > 2) {\r\n T = arguments[2];\r\n }\r\n }\r\n \r\n // 10. Let lenValue be Get(items, \"length\").\r\n // 11. Let len be ToLength(lenValue).\r\n var len = toLength(items.length);\r\n \r\n // 13. If IsConstructor(C) is true, then\r\n // 13. a. Let A be the result of calling the [[Construct]] internal method \r\n // of C with an argument list containing the single item len.\r\n // 14. a. Else, Let A be ArrayCreate(len).\r\n var A = isCallable(C) ? Object(new C(len)) : new Array(len);\r\n \r\n // 16. Let k be 0.\r\n var k = 0;\r\n // 17. Repeat, while k < len… (also steps a - h)\r\n var kValue;\r\n while (k < len) {\r\n kValue = items[k];\r\n if (mapFn) {\r\n A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);\r\n } else {\r\n A[k] = kValue;\r\n }\r\n k += 1;\r\n }\r\n // 18. Let putStatus be Put(A, \"length\", len, true).\r\n A.length = len;\r\n // 20. Return A.\r\n return A;\r\n };\r\n }());\r\n }\r\n// End","//Complete CSS\r\nimport '../main';\r\n\r\nimport '../components/back-to-top.js';\r\nimport '../components/image-gallery.js';\r\nimport '../components/callout-background-image-props.js';\r\nimport '../components/input-password-field.js';\r\nimport '../components/leftnav-5050.js';\r\nimport '../components/in-the-spotlight.js';\r\nimport '../components/homepage-six-tabs.js';\r\nimport '../components/interior-hero.js';\r\nimport '../components/component-faqs.js';\r\nimport '../components/case-studies.js';\r\nimport '../components/accessories-slider.js';\r\nimport '../components/related-articles.js';\r\nimport '../components/epi-form.js';\r\nimport '../components/by-the-numbers.js';\r\nimport '../components/contactus-form-select-menu.js';\r\nimport '../components/password-verification.js';\r\nimport '../components/component-application-cta.js';\r\nimport '../components/search-list-grid-view.js';\r\nimport '../components/product-detail-page.js';\r\nimport '../components/section-detail-page.js';\r\nimport '../components/validation.js';\r\nimport '../components/search.js';\r\nimport '../components/login.js';\r\nimport '../components/register.js';\r\nimport '../components/importcsv.js';\r\nimport '../components/newbillingaddress.js';\r\nimport '../components/importcatalog.js';\r\nimport '../components/importpartsmapping.js';\r\nimport '../components/catalogdatamigration.js';\r\nimport '../components/account.js';\r\nimport '../components/market.js';\r\nimport '../components/alert-box.js';\r\nimport '../components/registration.js';\r\nimport '../components/paymetric-ajax.js';\r\nimport '../components/paymetric-iframe-poc.js';\r\nimport '../components/input-validation.js';\r\nimport '../components/date-picker.js';\r\nimport '../components/cart-item-page.js';\r\nimport '../components/product-recommendations';\r\nimport '../components/save-in-wishlist';\r\nimport '../components/bundles-packages';","import './Complete';","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar transitionalDefaults = require('../defaults/transitional');\nvar Cancel = require('../cancel/Cancel');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new Cancel('canceled');\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar enhanceError = require('../core/enhanceError');\nvar transitionalDefaults = require('./transitional');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw enhanceError(e, this, 'E_JSON_PARSE');\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","module.exports = {\n \"version\": \"0.26.1\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar VERSION = require('../env/data').version;\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return toString.call(val) === '[object URLSearchParams]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function addCSSRule(sheet, selector, rules, index) {\n // return raf(function() {\n 'insertRule' in sheet ?\n sheet.insertRule(selector + '{' + rules + '}', index) :\n sheet.addRule(selector, rules, index);\n // });\n}","import { classListSupport, hasClass } from './hasClass.js';\nvar addClass = classListSupport ?\n function (el, str) {\n if (!hasClass(el, str)) { el.classList.add(str); }\n } :\n function (el, str) {\n if (!hasClass(el, str)) { el.className += ' ' + str; }\n };\n\nexport { addClass };","import { passiveOption } from './passiveOption.js';\n\nexport function addEvents(el, obj, preventScrolling) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\n el.addEventListener(prop, obj[prop], option);\n }\n}","export function arrayFromNodeList (nl) {\n var arr = [];\n for (var i = 0, l = nl.length; i < l; i++) {\n arr.push(nl[i]);\n }\n return arr;\n}","var win = window;\n\nexport var caf = win.cancelAnimationFrame\n || win.mozCancelAnimationFrame\n || function(id){ clearTimeout(id); };\n","// get css-calc \n// @return - false | calc | -webkit-calc | -moz-calc\n// @usage - var calc = getCalc(); \nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function calc() {\n var doc = document, \n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'), \n result = false;\n\n body.appendChild(div);\n try {\n var str = '(10px * 10)',\n vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\n val;\n for (var i = 0; i < 3; i++) {\n val = vals[i];\n div.style.width = val;\n if (div.offsetWidth === 100) { \n result = val.replace(str, ''); \n break;\n }\n }\n } catch (e) {}\n \n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return result;\n}","export function checkStorageValue (value) {\n return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\n}","export var classListSupport = 'classList' in document.createElement('_');","// create and append style sheet\nexport function createStyleSheet (media, nonce) {\n // Create the <style> tag\n var style = document.createElement(\"style\");\n // style.setAttribute(\"type\", \"text/css\");\n\n // Add a media (and/or media query) here if you'd like!\n // style.setAttribute(\"media\", \"screen\")\n // style.setAttribute(\"media\", \"only screen and (max-width : 1024px)\")\n if (media) { style.setAttribute(\"media\", media); }\n\n // Add nonce attribute for Content Security Policy\n if (nonce) { style.setAttribute(\"nonce\", nonce); }\n\n // WebKit hack :(\n // style.appendChild(document.createTextNode(\"\"));\n\n // Add the <style> element to the page\n document.querySelector('head').appendChild(style);\n\n return style.sheet ? style.sheet : style.styleSheet;\n};","export var docElement = document.documentElement;","export function Events() {\n return {\n topics: {},\n on: function (eventName, fn) {\n this.topics[eventName] = this.topics[eventName] || [];\n this.topics[eventName].push(fn);\n },\n off: function(eventName, fn) {\n if (this.topics[eventName]) {\n for (var i = 0; i < this.topics[eventName].length; i++) {\n if (this.topics[eventName][i] === fn) {\n this.topics[eventName].splice(i, 1);\n break;\n }\n }\n }\n },\n emit: function (eventName, data) {\n data.type = eventName;\n if (this.topics[eventName]) {\n this.topics[eventName].forEach(function(fn) {\n fn(data, eventName);\n });\n }\n }\n };\n};","export function extend() {\n var obj, name, copy,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length;\n\n for (; i < length; i++) {\n if ((obj = arguments[i]) !== null) {\n for (name in obj) {\n copy = obj[name];\n\n if (target === copy) {\n continue;\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n}","// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\nexport function forEach (arr, callback, scope) {\n for (var i = 0, l = arr.length; i < l; i++) {\n callback.call(scope, arr[i], i);\n }\n}","export function getAttr(el, attr) {\n return el.getAttribute(attr);\n}","export function getBody () {\n var doc = document,\n body = doc.body;\n\n if (!body) {\n body = doc.createElement('body');\n body.fake = true;\n }\n\n return body;\n}","export function getCssRulesLength(sheet) {\n var rule = ('insertRule' in sheet) ? sheet.cssRules : sheet.rules;\n return rule.length;\n}","// get transitionend, animationend based on transitionDuration\n// @propin: string\n// @propOut: string, first-letter uppercase\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\nexport function getEndProperty(propIn, propOut) {\n var endProp = false;\n if (/^Webkit/.test(propIn)) {\n endProp = 'webkit' + propOut + 'End';\n } else if (/^O/.test(propIn)) {\n endProp = 'o' + propOut + 'End';\n } else if (propIn) {\n endProp = propOut.toLowerCase() + 'end';\n }\n return endProp;\n}","export function getSlideId() {\n var id = window.tnsId;\n window.tnsId = !id ? 1 : id + 1;\n \n return 'tns' + window.tnsId;\n}","export function getTouchDirection(angle, range) {\n var direction = false,\n gap = Math.abs(90 - Math.abs(angle));\n \n if (gap >= 90 - range) {\n direction = 'horizontal';\n } else if (gap <= range) {\n direction = 'vertical';\n }\n\n return direction;\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function has3DTransforms(tf){\n if (!tf) { return false; }\n if (!window.getComputedStyle) { return false; }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n el = doc.createElement('p'),\n has3d,\n cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\n\n cssTF += 'transform';\n\n // Add it to the body to get the computed style\n body.insertBefore(el, null);\n\n el.style[tf] = 'translate3d(1px,1px,1px)';\n has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\n\n body.fake ? resetFakeBody(body, docOverflow) : el.remove();\n\n return (has3d !== undefined && has3d.length > 0 && has3d !== \"none\");\n}\n","export function hasAttr(el, attr) {\n return el.hasAttribute(attr);\n}","import { classListSupport } from './classListSupport.js';\n\nvar hasClass = classListSupport ?\n function (el, str) { return el.classList.contains(str); } :\n function (el, str) { return el.className.indexOf(str) >= 0; };\n\nexport { classListSupport, hasClass };","export function hideElement(el, forceHide) {\n if (el.style.display !== 'none') { el.style.display = 'none'; }\n}","export function isNodeList(el) {\n // Only NodeList has the \"item()\" function\n return typeof el.item !== \"undefined\"; \n}","export function isVisible(el) {\n return window.getComputedStyle(el).display !== 'none';\n}","export function jsTransform(element, attr, prefix, postfix, to, duration, callback) {\n var tick = Math.min(duration, 10),\n unit = (to.indexOf('%') >= 0) ? '%' : 'px',\n to = to.replace(unit, ''),\n from = Number(element.style[attr].replace(prefix, '').replace(postfix, '').replace(unit, '')),\n positionTick = (to - from) / duration * tick,\n running;\n\n setTimeout(moveElement, tick);\n function moveElement() {\n duration -= tick;\n from += positionTick;\n element.style[attr] = prefix + from + unit + postfix;\n if (duration > 0) { \n setTimeout(moveElement, tick); \n } else {\n callback();\n }\n }\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function mediaquerySupport () {\n if (window.matchMedia || window.msMatchMedia) {\n return true;\n }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'),\n style = doc.createElement('style'),\n rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\n position;\n\n style.type = 'text/css';\n div.className = 'tns-mq-test';\n\n body.appendChild(style);\n body.appendChild(div);\n\n if (style.styleSheet) {\n style.styleSheet.cssText = rule;\n } else {\n style.appendChild(doc.createTextNode(rule));\n }\n\n position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\n\n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return position === \"absolute\";\n}\n","// Test via a getter in the options object to see if the passive property is accessed\nvar supportsPassive = false;\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n} catch (e) {}\nexport var passiveOption = supportsPassive ? { passive: true } : false;","// get subpixel support value\n// @return - boolean\nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function percentageLayout() {\n // check subpixel layout supporting\n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n wrapper = doc.createElement('div'),\n outer = doc.createElement('div'),\n str = '',\n count = 70,\n perPage = 3,\n supported = false;\n\n wrapper.className = \"tns-t-subp2\";\n outer.className = \"tns-t-ct\";\n\n for (var i = 0; i < count; i++) {\n str += '<div></div>';\n }\n\n outer.innerHTML = str;\n wrapper.appendChild(outer);\n body.appendChild(wrapper);\n\n supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\n\n body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\n\n return supported;\n}","var win = window;\n\nexport var raf = win.requestAnimationFrame\n || win.webkitRequestAnimationFrame\n || win.mozRequestAnimationFrame\n || win.msRequestAnimationFrame\n || function(cb) { return setTimeout(cb, 16); };\n","import { isNodeList } from \"./isNodeList.js\";\n\nexport function removeAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n attrs = (attrs instanceof Array) ? attrs : [attrs];\n\n var attrLength = attrs.length;\n for (var i = els.length; i--;) {\n for (var j = attrLength; j--;) {\n els[i].removeAttribute(attrs[j]);\n }\n }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function removeCSSRule(sheet, index) {\n // return raf(function() {\n 'deleteRule' in sheet ?\n sheet.deleteRule(index) :\n sheet.removeRule(index);\n // });\n}","import { classListSupport, hasClass } from './hasClass.js';\nvar removeClass = classListSupport ?\n function (el, str) {\n if (hasClass(el, str)) { el.classList.remove(str); }\n } :\n function (el, str) {\n if (hasClass(el, str)) { el.className = el.className.replace(str, ''); }\n };\n\nexport { removeClass };","import { passiveOption } from './passiveOption.js';\n\nexport function removeEvents(el, obj) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\n el.removeEventListener(prop, obj[prop], option);\n }\n}","import { docElement } from './docElement.js';\n\nexport function resetFakeBody (body, docOverflow) {\n if (body.fake) {\n body.remove();\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n // eslint-disable-next-line\n docElement.offsetHeight;\n }\n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function setAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n if (Object.prototype.toString.call(attrs) !== '[object Object]') { return; }\n\n for (var i = els.length; i--;) {\n for(var key in attrs) {\n els[i].setAttribute(key, attrs[key]);\n }\n }\n}","import { docElement } from './docElement.js';\n\nexport function setFakeBody (body) {\n var docOverflow = '';\n if (body.fake) {\n docOverflow = docElement.style.overflow;\n //avoid crashing IE8, if background image is used\n body.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n body.style.overflow = docElement.style.overflow = 'hidden';\n docElement.appendChild(body);\n }\n\n return docOverflow;\n}","export function setLocalStorage(storage, key, value, access) {\n if (access) {\n try { storage.setItem(key, value); } catch (e) {}\n }\n return value;\n}","export function showElement(el, forceHide) {\n if (el.style.display === 'none') { el.style.display = ''; }\n}","export function toDegree (y, x) {\n return Math.atan2(y, x) * (180 / Math.PI);\n}","export function whichProperty(props){\n if (typeof props === 'string') {\n var arr = [props],\n Props = props.charAt(0).toUpperCase() + props.substr(1),\n prefixes = ['Webkit', 'Moz', 'ms', 'O'];\n \n prefixes.forEach(function(prefix) {\n if (prefix !== 'ms' || props === 'transform') {\n arr.push(prefix + Props);\n }\n });\n\n props = arr;\n }\n\n var el = document.createElement('fakeelement'),\n len = props.length;\n for(var i = 0; i < props.length; i++){\n var prop = props[i];\n if( el.style[prop] !== undefined ){ return prop; }\n }\n\n return false; // explicit for ie9-\n}\n","// Object.keys\nif (!Object.keys) {\n Object.keys = function(object) {\n var keys = [];\n for (var name in object) {\n if (Object.prototype.hasOwnProperty.call(object, name)) {\n keys.push(name);\n }\n }\n return keys;\n };\n}\n\n// ChildNode.remove\nif(!(\"remove\" in Element.prototype)){\n Element.prototype.remove = function(){\n if(this.parentNode) {\n this.parentNode.removeChild(this);\n }\n };\n}\n\nimport { raf } from './helpers/raf.js';\nimport { caf } from './helpers/caf.js';\nimport { extend } from './helpers/extend.js';\nimport { checkStorageValue } from './helpers/checkStorageValue.js';\nimport { setLocalStorage } from './helpers/setLocalStorage.js';\nimport { getSlideId } from './helpers/getSlideId.js';\nimport { calc } from './helpers/calc.js';\nimport { percentageLayout } from './helpers/percentageLayout.js';\nimport { mediaquerySupport } from './helpers/mediaquerySupport.js';\nimport { createStyleSheet } from './helpers/createStyleSheet.js';\nimport { addCSSRule } from './helpers/addCSSRule.js';\nimport { removeCSSRule } from './helpers/removeCSSRule.js';\nimport { getCssRulesLength } from './helpers/getCssRulesLength.js';\nimport { toDegree } from './helpers/toDegree.js';\nimport { getTouchDirection } from './helpers/getTouchDirection.js';\nimport { forEach } from './helpers/forEach.js';\nimport { hasClass } from './helpers/hasClass.js';\nimport { addClass } from './helpers/addClass.js';\nimport { removeClass } from './helpers/removeClass.js';\nimport { hasAttr } from './helpers/hasAttr.js';\nimport { getAttr } from './helpers/getAttr.js';\nimport { setAttrs } from './helpers/setAttrs.js';\nimport { removeAttrs } from './helpers/removeAttrs.js';\nimport { arrayFromNodeList } from './helpers/arrayFromNodeList.js';\nimport { hideElement } from './helpers/hideElement.js';\nimport { showElement } from './helpers/showElement.js';\nimport { isVisible } from './helpers/isVisible.js';\nimport { whichProperty } from './helpers/whichProperty.js';\nimport { has3DTransforms } from './helpers/has3DTransforms.js';\nimport { getEndProperty } from './helpers/getEndProperty.js';\nimport { addEvents } from './helpers/addEvents.js';\nimport { removeEvents } from './helpers/removeEvents.js';\nimport { Events } from './helpers/events.js';\nimport { jsTransform } from './helpers/jsTransform.js';\n\nexport var tns = function(options) {\n options = extend({\n container: '.slider',\n mode: 'carousel',\n axis: 'horizontal',\n items: 1,\n gutter: 0,\n edgePadding: 0,\n fixedWidth: false,\n autoWidth: false,\n viewportMax: false,\n slideBy: 1,\n center: false,\n controls: true,\n controlsPosition: 'top',\n controlsText: ['prev', 'next'],\n controlsContainer: false,\n prevButton: false,\n nextButton: false,\n nav: true,\n navPosition: 'top',\n navContainer: false,\n navAsThumbnails: false,\n arrowKeys: false,\n speed: 300,\n autoplay: false,\n autoplayPosition: 'top',\n autoplayTimeout: 5000,\n autoplayDirection: 'forward',\n autoplayText: ['start', 'stop'],\n autoplayHoverPause: false,\n autoplayButton: false,\n autoplayButtonOutput: true,\n autoplayResetOnVisibility: true,\n animateIn: 'tns-fadeIn',\n animateOut: 'tns-fadeOut',\n animateNormal: 'tns-normal',\n animateDelay: false,\n loop: true,\n rewind: false,\n autoHeight: false,\n responsive: false,\n lazyload: false,\n lazyloadSelector: '.tns-lazy-img',\n touch: true,\n mouseDrag: false,\n swipeAngle: 15,\n nested: false,\n preventActionWhenRunning: false,\n preventScrollOnTouch: false,\n freezable: true,\n onInit: false,\n useLocalStorage: true,\n nonce: false\n }, options || {});\n\n var doc = document,\n win = window,\n KEYS = {\n ENTER: 13,\n SPACE: 32,\n LEFT: 37,\n RIGHT: 39\n },\n tnsStorage = {},\n localStorageAccess = options.useLocalStorage;\n\n if (localStorageAccess) {\n // check browser version and local storage access\n var browserInfo = navigator.userAgent;\n var uid = new Date;\n\n try {\n tnsStorage = win.localStorage;\n if (tnsStorage) {\n tnsStorage.setItem(uid, uid);\n localStorageAccess = tnsStorage.getItem(uid) == uid;\n tnsStorage.removeItem(uid);\n } else {\n localStorageAccess = false;\n }\n if (!localStorageAccess) { tnsStorage = {}; }\n } catch(e) {\n localStorageAccess = false;\n }\n\n if (localStorageAccess) {\n // remove storage when browser version changes\n if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\n ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function(item) { tnsStorage.removeItem(item); });\n }\n // update browserInfo\n localStorage['tnsApp'] = browserInfo;\n }\n }\n\n var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\n PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\n CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\n TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\n HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\n TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\n TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\n ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\n ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\n TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\n ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess);\n\n // get element nodes from selectors\n var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\n tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'],\n optionsElements = {};\n\n tnsList.forEach(function(item) {\n if (typeof options[item] === 'string') {\n var str = options[item],\n el = doc.querySelector(str);\n optionsElements[item] = str;\n\n if (el && el.nodeName) {\n options[item] = el;\n } else {\n if (supportConsoleWarn) { console.warn('Can\\'t find', options[item]); }\n return;\n }\n }\n });\n\n // make sure at least 1 slide\n if (options.container.children.length < 1) {\n if (supportConsoleWarn) { console.warn('No slides found in', options.container); }\n return;\n }\n\n // update options\n var responsive = options.responsive,\n nested = options.nested,\n carousel = options.mode === 'carousel' ? true : false;\n\n if (responsive) {\n // apply responsive[0] to options and remove it\n if (0 in responsive) {\n options = extend(options, responsive[0]);\n delete responsive[0];\n }\n\n var responsiveTem = {};\n for (var key in responsive) {\n var val = responsive[key];\n // update responsive\n // from: 300: 2\n // to:\n // 300: {\n // items: 2\n // }\n val = typeof val === 'number' ? {items: val} : val;\n responsiveTem[key] = val;\n }\n responsive = responsiveTem;\n responsiveTem = null;\n }\n\n // update options\n function updateOptions (obj) {\n for (var key in obj) {\n if (!carousel) {\n if (key === 'slideBy') { obj[key] = 'page'; }\n if (key === 'edgePadding') { obj[key] = false; }\n if (key === 'autoHeight') { obj[key] = false; }\n }\n\n // update responsive options\n if (key === 'responsive') { updateOptions(obj[key]); }\n }\n }\n if (!carousel) { updateOptions(options); }\n\n\n // === define and set variables ===\n if (!carousel) {\n options.axis = 'horizontal';\n options.slideBy = 'page';\n options.edgePadding = false;\n\n var animateIn = options.animateIn,\n animateOut = options.animateOut,\n animateDelay = options.animateDelay,\n animateNormal = options.animateNormal;\n }\n\n var horizontal = options.axis === 'horizontal' ? true : false,\n outerWrapper = doc.createElement('div'),\n innerWrapper = doc.createElement('div'),\n middleWrapper,\n container = options.container,\n containerParent = container.parentNode,\n containerHTML = container.outerHTML,\n slideItems = container.children,\n slideCount = slideItems.length,\n breakpointZone,\n windowWidth = getWindowWidth(),\n isOn = false;\n if (responsive) { setBreakpointZone(); }\n if (carousel) { container.className += ' tns-vpfix'; }\n\n // fixedWidth: viewport > rightBoundary > indexMax\n var autoWidth = options.autoWidth,\n fixedWidth = getOption('fixedWidth'),\n edgePadding = getOption('edgePadding'),\n gutter = getOption('gutter'),\n viewport = getViewportWidth(),\n center = getOption('center'),\n items = !autoWidth ? Math.floor(getOption('items')) : 1,\n slideBy = getOption('slideBy'),\n viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\n arrowKeys = getOption('arrowKeys'),\n speed = getOption('speed'),\n rewind = options.rewind,\n loop = rewind ? false : options.loop,\n autoHeight = getOption('autoHeight'),\n controls = getOption('controls'),\n controlsText = getOption('controlsText'),\n nav = getOption('nav'),\n touch = getOption('touch'),\n mouseDrag = getOption('mouseDrag'),\n autoplay = getOption('autoplay'),\n autoplayTimeout = getOption('autoplayTimeout'),\n autoplayText = getOption('autoplayText'),\n autoplayHoverPause = getOption('autoplayHoverPause'),\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\n sheet = createStyleSheet(null, getOption('nonce')),\n lazyload = options.lazyload,\n lazyloadSelector = options.lazyloadSelector,\n slidePositions, // collection of slide positions\n slideItemsOut = [],\n cloneCount = loop ? getCloneCountForLoop() : 0,\n slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\n hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\n rightBoundary = fixedWidth ? getRightBoundary() : null,\n updateIndexBeforeTransform = (!carousel || !loop) ? true : false,\n // transform\n transformAttr = horizontal ? 'left' : 'top',\n transformPrefix = '',\n transformPostfix = '',\n // index\n getIndexMax = (function () {\n if (fixedWidth) {\n return function() { return center && !loop ? slideCount - 1 : Math.ceil(- rightBoundary / (fixedWidth + gutter)); };\n } else if (autoWidth) {\n return function() {\n for (var i = 0; i < slideCountNew; i++) {\n if (slidePositions[i] >= - rightBoundary) { return i; }\n }\n };\n } else {\n return function() {\n if (center && carousel && !loop) {\n return slideCount - 1;\n } else {\n return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\n }\n };\n }\n })(),\n index = getStartIndex(getOption('startIndex')),\n indexCached = index,\n displayIndex = getCurrentSlide(),\n indexMin = 0,\n indexMax = !autoWidth ? getIndexMax() : null,\n // resize\n resizeTimer,\n preventActionWhenRunning = options.preventActionWhenRunning,\n swipeAngle = options.swipeAngle,\n moveDirectionExpected = swipeAngle ? '?' : true,\n running = false,\n onInit = options.onInit,\n events = new Events(),\n // id, class\n newContainerClasses = ' tns-slider tns-' + options.mode,\n slideId = container.id || getSlideId(),\n disable = getOption('disable'),\n disabled = false,\n freezable = options.freezable,\n freeze = freezable && !autoWidth ? getFreeze() : false,\n frozen = false,\n controlsEvents = {\n 'click': onControlsClick,\n 'keydown': onControlsKeydown\n },\n navEvents = {\n 'click': onNavClick,\n 'keydown': onNavKeydown\n },\n hoverEvents = {\n 'mouseover': mouseoverPause,\n 'mouseout': mouseoutRestart\n },\n visibilityEvent = {'visibilitychange': onVisibilityChange},\n docmentKeydownEvent = {'keydown': onDocumentKeydown},\n touchEvents = {\n 'touchstart': onPanStart,\n 'touchmove': onPanMove,\n 'touchend': onPanEnd,\n 'touchcancel': onPanEnd\n }, dragEvents = {\n 'mousedown': onPanStart,\n 'mousemove': onPanMove,\n 'mouseup': onPanEnd,\n 'mouseleave': onPanEnd\n },\n hasControls = hasOption('controls'),\n hasNav = hasOption('nav'),\n navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\n hasAutoplay = hasOption('autoplay'),\n hasTouch = hasOption('touch'),\n hasMouseDrag = hasOption('mouseDrag'),\n slideActiveClass = 'tns-slide-active',\n slideClonedClass = 'tns-slide-cloned',\n imgCompleteClass = 'tns-complete',\n imgEvents = {\n 'load': onImgLoaded,\n 'error': onImgFailed\n },\n imgsComplete,\n liveregionCurrent,\n preventScroll = options.preventScrollOnTouch === 'force' ? true : false;\n\n // controls\n if (hasControls) {\n var controlsContainer = options.controlsContainer,\n controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\n prevButton = options.prevButton,\n nextButton = options.nextButton,\n prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\n nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\n prevIsButton,\n nextIsButton;\n }\n\n // nav\n if (hasNav) {\n var navContainer = options.navContainer,\n navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\n navItems,\n pages = autoWidth ? slideCount : getPages(),\n pagesCached = 0,\n navClicked = -1,\n navCurrentIndex = getCurrentNavIndex(),\n navCurrentIndexCached = navCurrentIndex,\n navActiveClass = 'tns-nav-active',\n navStr = 'Carousel Page ',\n navStrCurrent = ' (Current Slide)';\n }\n\n // autoplay\n if (hasAutoplay) {\n var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\n autoplayButton = options.autoplayButton,\n autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\n autoplayHtmlStrings = ['<span class=\\'tns-visually-hidden\\'>', ' animation</span>'],\n autoplayTimer,\n animating,\n autoplayHoverPaused,\n autoplayUserPaused,\n autoplayVisibilityPaused;\n }\n\n if (hasTouch || hasMouseDrag) {\n var initPosition = {},\n lastPosition = {},\n translateInit,\n disX,\n disY,\n panStart = false,\n rafIndex,\n getDist = horizontal ?\n function(a, b) { return a.x - b.x; } :\n function(a, b) { return a.y - b.y; };\n }\n\n // disable slider when slidecount <= items\n if (!autoWidth) { resetVariblesWhenDisable(disable || freeze); }\n\n if (TRANSFORM) {\n transformAttr = TRANSFORM;\n transformPrefix = 'translate';\n\n if (HAS3DTRANSFORMS) {\n transformPrefix += horizontal ? '3d(' : '3d(0px, ';\n transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\n } else {\n transformPrefix += horizontal ? 'X(' : 'Y(';\n transformPostfix = ')';\n }\n\n }\n\n if (carousel) { container.className = container.className.replace('tns-vpfix', ''); }\n initStructure();\n initSheet();\n initSliderTransform();\n\n // === COMMON FUNCTIONS === //\n function resetVariblesWhenDisable (condition) {\n if (condition) {\n controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\n }\n }\n\n function getCurrentSlide () {\n var tem = carousel ? index - cloneCount : index;\n while (tem < 0) { tem += slideCount; }\n return tem%slideCount + 1;\n }\n\n function getStartIndex (ind) {\n ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\n return carousel ? ind + cloneCount : ind;\n }\n\n function getAbsIndex (i) {\n if (i == null) { i = index; }\n\n if (carousel) { i -= cloneCount; }\n while (i < 0) { i += slideCount; }\n\n return Math.floor(i%slideCount);\n }\n\n function getCurrentNavIndex () {\n var absIndex = getAbsIndex(),\n result;\n\n result = navAsThumbnails ? absIndex :\n fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) :\n Math.floor(absIndex / items);\n\n // set active nav to the last one when reaches the right edge\n if (!loop && carousel && index === indexMax) { result = pages - 1; }\n\n return result;\n }\n\n function getItemsMax () {\n // fixedWidth or autoWidth while viewportMax is not available\n if (autoWidth || (fixedWidth && !viewportMax)) {\n return slideCount - 1;\n // most cases\n } else {\n var str = fixedWidth ? 'fixedWidth' : 'items',\n arr = [];\n\n if (fixedWidth || options[str] < slideCount) { arr.push(options[str]); }\n\n if (responsive) {\n for (var bp in responsive) {\n var tem = responsive[bp][str];\n if (tem && (fixedWidth || tem < slideCount)) { arr.push(tem); }\n }\n }\n\n if (!arr.length) { arr.push(0); }\n\n return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\n }\n }\n\n function getCloneCountForLoop () {\n var itemsMax = getItemsMax(),\n result = carousel ? Math.ceil((itemsMax * 5 - slideCount)/2) : (itemsMax * 4 - slideCount);\n result = Math.max(itemsMax, result);\n\n return hasOption('edgePadding') ? result + 1 : result;\n }\n\n function getWindowWidth () {\n return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\n }\n\n function getInsertPosition (pos) {\n return pos === 'top' ? 'afterbegin' : 'beforeend';\n }\n\n function getClientWidth (el) {\n if (el == null) { return; }\n var div = doc.createElement('div'), rect, width;\n el.appendChild(div);\n rect = div.getBoundingClientRect();\n width = rect.right - rect.left;\n div.remove();\n return width || getClientWidth(el.parentNode);\n }\n\n function getViewportWidth () {\n var gap = edgePadding ? edgePadding * 2 - gutter : 0;\n return getClientWidth(containerParent) - gap;\n }\n\n function hasOption (item) {\n if (options[item]) {\n return true;\n } else {\n if (responsive) {\n for (var bp in responsive) {\n if (responsive[bp][item]) { return true; }\n }\n }\n return false;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n function getOption (item, ww) {\n if (ww == null) { ww = windowWidth; }\n\n if (item === 'items' && fixedWidth) {\n return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\n\n } else {\n var result = options[item];\n\n if (responsive) {\n for (var bp in responsive) {\n // bp: convert string to number\n if (ww >= parseInt(bp)) {\n if (item in responsive[bp]) { result = responsive[bp][item]; }\n }\n }\n }\n\n if (item === 'slideBy' && result === 'page') { result = getOption('items'); }\n if (!carousel && (item === 'slideBy' || item === 'items')) { result = Math.floor(result); }\n\n return result;\n }\n }\n\n function getSlideMarginLeft (i) {\n return CALC ?\n CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' :\n i * 100 / slideCountNew + '%';\n }\n\n function getInnerWrapperStyles (edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\n var str = '';\n\n if (edgePaddingTem !== undefined) {\n var gap = edgePaddingTem;\n if (gutterTem) { gap -= gutterTem; }\n str = horizontal ?\n 'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' :\n 'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\n } else if (gutterTem && !fixedWidthTem) {\n var gutterTemUnit = '-' + gutterTem + 'px',\n dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\n str = 'margin: 0 ' + dir + ';'\n }\n\n if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) { str += getTransitionDurationStyle(speedTem); }\n return str;\n }\n\n function getContainerWidth (fixedWidthTem, gutterTem, itemsTem) {\n if (fixedWidthTem) {\n return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\n } else {\n return CALC ?\n CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' :\n slideCountNew * 100 / itemsTem + '%';\n }\n }\n\n function getSlideWidthStyle (fixedWidthTem, gutterTem, itemsTem) {\n var width;\n\n if (fixedWidthTem) {\n width = (fixedWidthTem + gutterTem) + 'px';\n } else {\n if (!carousel) { itemsTem = Math.floor(itemsTem); }\n var dividend = carousel ? slideCountNew : itemsTem;\n width = CALC ?\n CALC + '(100% / ' + dividend + ')' :\n 100 / dividend + '%';\n }\n\n width = 'width:' + width;\n\n // inner slider: overwrite outer slider styles\n return nested !== 'inner' ? width + ';' : width + ' !important;';\n }\n\n function getSlideGutterStyle (gutterTem) {\n var str = '';\n\n // gutter maybe interger || 0\n // so can't use 'if (gutter)'\n if (gutterTem !== false) {\n var prop = horizontal ? 'padding-' : 'margin-',\n dir = horizontal ? 'right' : 'bottom';\n str = prop + dir + ': ' + gutterTem + 'px;';\n }\n\n return str;\n }\n\n function getCSSPrefix (name, num) {\n var prefix = name.substring(0, name.length - num).toLowerCase();\n if (prefix) { prefix = '-' + prefix + '-'; }\n\n return prefix;\n }\n\n function getTransitionDurationStyle (speed) {\n return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\n }\n\n function getAnimationDurationStyle (speed) {\n return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\n }\n\n function initStructure () {\n var classOuter = 'tns-outer',\n classInner = 'tns-inner',\n hasGutter = hasOption('gutter');\n\n outerWrapper.className = classOuter;\n innerWrapper.className = classInner;\n outerWrapper.id = slideId + '-ow';\n innerWrapper.id = slideId + '-iw';\n\n // set container properties\n if (container.id === '') { container.id = slideId; }\n newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\n newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\n if (autoWidth) { newContainerClasses += ' tns-autowidth'; }\n newContainerClasses += ' tns-' + options.axis;\n container.className += newContainerClasses;\n\n // add constrain layer for carousel\n if (carousel) {\n middleWrapper = doc.createElement('div');\n middleWrapper.id = slideId + '-mw';\n middleWrapper.className = 'tns-ovh';\n\n outerWrapper.appendChild(middleWrapper);\n middleWrapper.appendChild(innerWrapper);\n } else {\n outerWrapper.appendChild(innerWrapper);\n }\n\n if (autoHeight) {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.className += ' tns-ah';\n }\n\n containerParent.insertBefore(outerWrapper, container);\n innerWrapper.appendChild(container);\n\n // add id, class, aria attributes\n // before clone slides\n forEach(slideItems, function(item, i) {\n addClass(item, 'tns-item');\n if (!item.id) { item.id = slideId + '-item' + i; }\n if (!carousel && animateNormal) { addClass(item, animateNormal); }\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n });\n\n // ## clone slides\n // carousel: n + slides + n\n // gallery: slides + n\n if (cloneCount) {\n var fragmentBefore = doc.createDocumentFragment(),\n fragmentAfter = doc.createDocumentFragment();\n\n for (var j = cloneCount; j--;) {\n var num = j%slideCount,\n cloneFirst = slideItems[num].cloneNode(true);\n addClass(cloneFirst, slideClonedClass);\n removeAttrs(cloneFirst, 'id');\n fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\n\n if (carousel) {\n var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\n addClass(cloneLast, slideClonedClass);\n removeAttrs(cloneLast, 'id');\n fragmentBefore.appendChild(cloneLast);\n }\n }\n\n container.insertBefore(fragmentBefore, container.firstChild);\n container.appendChild(fragmentAfter);\n slideItems = container.children;\n }\n\n }\n\n function initSliderTransform () {\n // ## images loaded/failed\n if (hasOption('autoHeight') || autoWidth || !horizontal) {\n var imgs = container.querySelectorAll('img');\n\n // add img load event listener\n forEach(imgs, function(img) {\n var src = img.src;\n\n if (!lazyload) {\n // not data img\n if (src && src.indexOf('data:image') < 0) {\n img.src = '';\n addEvents(img, imgEvents);\n addClass(img, 'loading');\n\n img.src = src;\n // data img\n } else {\n imgLoaded(img);\n }\n }\n });\n\n // set imgsComplete\n raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), function() { imgsComplete = true; }); });\n\n // reset imgs for auto height: check visible imgs only\n if (hasOption('autoHeight')) { imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1)); }\n\n lazyload ? initSliderTransformStyleCheck() : raf(function(){ imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck); });\n\n } else {\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n }\n\n function initSliderTransformStyleCheck () {\n if (autoWidth && slideCount > 1) {\n // check styles application\n var num = loop ? index : slideCount - 1;\n\n (function stylesApplicationCheck() {\n var left = slideItems[num].getBoundingClientRect().left;\n var right = slideItems[num - 1].getBoundingClientRect().right;\n\n (Math.abs(left - right) <= 1) ?\n initSliderTransformCore() :\n setTimeout(function(){ stylesApplicationCheck() }, 16);\n })();\n\n } else {\n initSliderTransformCore();\n }\n }\n\n\n function initSliderTransformCore () {\n // run Fn()s which are rely on image loading\n if (!horizontal || autoWidth) {\n setSlidePositions();\n\n if (autoWidth) {\n rightBoundary = getRightBoundary();\n if (freezable) { freeze = getFreeze(); }\n indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\n resetVariblesWhenDisable(disable || freeze);\n } else {\n updateContentWrapperHeight();\n }\n }\n\n // set container transform property\n if (carousel) { doContainerTransformSilent(); }\n\n // update slider tools and events\n initTools();\n initEvents();\n }\n\n function initSheet () {\n // gallery:\n // set animation classes and left value for gallery slider\n if (!carousel) {\n for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\n var item = slideItems[i];\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // #### LAYOUT\n\n // ## INLINE-BLOCK VS FLOAT\n\n // ## PercentageLayout:\n // slides: inline-block\n // remove blank space between slides by set font-size: 0\n\n // ## Non PercentageLayout:\n // slides: float\n // margin-right: -100%\n // margin-left: ~\n\n // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\n if (horizontal) {\n if (PERCENTAGELAYOUT || autoWidth) {\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\n addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\n } else if (carousel) {\n forEach(slideItems, function (slide, i) {\n slide.style.marginLeft = getSlideMarginLeft(i);\n });\n }\n }\n\n\n // ## BASIC STYLES\n if (CSSMQ) {\n // middle wrapper style\n if (TRANSITIONDURATION) {\n var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\n addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\n }\n\n // inner wrapper styles\n str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\n addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet));\n\n // container styles\n if (carousel) {\n str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\n }\n\n // slide styles\n str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\n if (options.gutter) { str += getSlideGutterStyle(options.gutter); }\n // set gallery items transition-duration\n if (!carousel) {\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\n if (ANIMATIONDURATION) { str += getAnimationDurationStyle(speed); }\n }\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n\n // non CSS mediaqueries: IE8\n // ## update inner wrapper, container, slides if needed\n // set inline styles for inner wrapper & container\n // insert stylesheet (one line) for slides only (since slides are many)\n } else {\n // middle wrapper styles\n update_carousel_transition_duration();\n\n // inner wrapper styles\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight);\n\n // container styles\n if (carousel && horizontal && !autoWidth) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\n if (gutter) { str += getSlideGutterStyle(gutter); }\n\n // append to the last line\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\n }\n\n // ## MEDIAQUERIES\n if (responsive && CSSMQ) {\n for (var bp in responsive) {\n // bp: convert string to number\n bp = parseInt(bp);\n\n var opts = responsive[bp],\n str = '',\n middleWrapperStr = '',\n innerWrapperStr = '',\n containerStr = '',\n slideStr = '',\n itemsBP = !autoWidth ? getOption('items', bp) : null,\n fixedWidthBP = getOption('fixedWidth', bp),\n speedBP = getOption('speed', bp),\n edgePaddingBP = getOption('edgePadding', bp),\n autoHeightBP = getOption('autoHeight', bp),\n gutterBP = getOption('gutter', bp);\n\n // middle wrapper string\n if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\n middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\n }\n\n // inner wrapper string\n if ('edgePadding' in opts || 'gutter' in opts) {\n innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\n }\n\n // container string\n if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || (fixedWidth && 'gutter' in opts))) {\n containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\n }\n if (TRANSITIONDURATION && 'speed' in opts) {\n containerStr += getTransitionDurationStyle(speedBP);\n }\n if (containerStr) {\n containerStr = '#' + slideId + '{' + containerStr + '}';\n }\n\n // slide string\n if ('fixedWidth' in opts || (fixedWidth && 'gutter' in opts) || !carousel && 'items' in opts) {\n slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\n }\n if ('gutter' in opts) {\n slideStr += getSlideGutterStyle(gutterBP);\n }\n // set gallery items transition-duration\n if (!carousel && 'speed' in opts) {\n if (TRANSITIONDURATION) { slideStr += getTransitionDurationStyle(speedBP); }\n if (ANIMATIONDURATION) { slideStr += getAnimationDurationStyle(speedBP); }\n }\n if (slideStr) { slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}'; }\n\n // add up\n str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\n\n if (str) {\n sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\n }\n }\n }\n }\n\n function initTools () {\n // == slides ==\n updateSlideStatus();\n\n // == live region ==\n outerWrapper.insertAdjacentHTML('afterbegin', '<div class=\"tns-liveregion tns-visually-hidden\" aria-live=\"polite\" aria-atomic=\"true\">slide <span class=\"current\">' + getLiveRegionStr() + '</span> of ' + slideCount + '</div>');\n liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current');\n\n // == autoplayInit ==\n if (hasAutoplay) {\n var txt = autoplay ? 'stop' : 'start';\n if (autoplayButton) {\n setAttrs(autoplayButton, {'data-action': txt});\n } else if (options.autoplayButtonOutput) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '<button type=\"button\" data-action=\"' + txt + '\">' + autoplayHtmlStrings[0] + txt + autoplayHtmlStrings[1] + autoplayText[0] + '</button>');\n autoplayButton = outerWrapper.querySelector('[data-action]');\n }\n\n // add event\n if (autoplayButton) {\n addEvents(autoplayButton, {'click': toggleAutoplay});\n }\n\n if (autoplay) {\n startAutoplay();\n if (autoplayHoverPause) { addEvents(container, hoverEvents); }\n if (autoplayResetOnVisibility) { addEvents(container, visibilityEvent); }\n }\n }\n\n // == navInit ==\n if (hasNav) {\n var initIndex = !carousel ? 0 : cloneCount;\n // customized nav\n // will not hide the navs in case they're thumbnails\n if (navContainer) {\n setAttrs(navContainer, {'aria-label': 'Carousel Pagination'});\n navItems = navContainer.children;\n forEach(navItems, function(item, i) {\n setAttrs(item, {\n 'data-nav': i,\n 'tabindex': '-1',\n 'aria-label': navStr + (i + 1),\n 'aria-controls': slideId,\n });\n });\n\n // generated nav\n } else {\n var navHtml = '',\n hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\n for (var i = 0; i < slideCount; i++) {\n // hide nav items by default\n navHtml += '<button type=\"button\" data-nav=\"' + i +'\" tabindex=\"-1\" aria-controls=\"' + slideId + '\" ' + hiddenStr + ' aria-label=\"' + navStr + (i + 1) +'\"></button>';\n }\n navHtml = '<div class=\"tns-nav\" aria-label=\"Carousel Pagination\">' + navHtml + '</div>';\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\n\n navContainer = outerWrapper.querySelector('.tns-nav');\n navItems = navContainer.children;\n }\n\n updateNavVisibility();\n\n // add transition\n if (TRANSITIONDURATION) {\n var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\n str = 'transition: all ' + speed / 1000 + 's';\n\n if (prefix) {\n str = '-' + prefix + '-' + str;\n }\n\n addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\n }\n\n setAttrs(navItems[navCurrentIndex], {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navItems[navCurrentIndex], 'tabindex');\n addClass(navItems[navCurrentIndex], navActiveClass);\n\n // add events\n addEvents(navContainer, navEvents);\n }\n\n\n\n // == controlsInit ==\n if (hasControls) {\n if (!controlsContainer && (!prevButton || !nextButton)) {\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '<div class=\"tns-controls\" aria-label=\"Carousel Navigation\" tabindex=\"0\"><button type=\"button\" data-controls=\"prev\" tabindex=\"-1\" aria-controls=\"' + slideId +'\">' + controlsText[0] + '</button><button type=\"button\" data-controls=\"next\" tabindex=\"-1\" aria-controls=\"' + slideId +'\">' + controlsText[1] + '</button></div>');\n\n controlsContainer = outerWrapper.querySelector('.tns-controls');\n }\n\n if (!prevButton || !nextButton) {\n prevButton = controlsContainer.children[0];\n nextButton = controlsContainer.children[1];\n }\n\n if (options.controlsContainer) {\n setAttrs(controlsContainer, {\n 'aria-label': 'Carousel Navigation',\n 'tabindex': '0'\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs([prevButton, nextButton], {\n 'aria-controls': slideId,\n 'tabindex': '-1',\n });\n }\n\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\n setAttrs(prevButton, {'data-controls' : 'prev'});\n setAttrs(nextButton, {'data-controls' : 'next'});\n }\n\n prevIsButton = isButton(prevButton);\n nextIsButton = isButton(nextButton);\n\n updateControlsStatus();\n\n // add events\n if (controlsContainer) {\n addEvents(controlsContainer, controlsEvents);\n } else {\n addEvents(prevButton, controlsEvents);\n addEvents(nextButton, controlsEvents);\n }\n }\n\n // hide tools if needed\n disableUI();\n }\n\n function initEvents () {\n // add events\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n addEvents(container, eve);\n }\n\n if (touch) { addEvents(container, touchEvents, options.preventScrollOnTouch); }\n if (mouseDrag) { addEvents(container, dragEvents); }\n if (arrowKeys) { addEvents(doc, docmentKeydownEvent); }\n\n if (nested === 'inner') {\n events.on('outerResized', function () {\n resizeTasks();\n events.emit('innerLoaded', info());\n });\n } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\n addEvents(win, {'resize': onResize});\n }\n\n if (autoHeight) {\n if (nested === 'outer') {\n events.on('innerLoaded', doAutoHeight);\n } else if (!disable) { doAutoHeight(); }\n }\n\n doLazyLoad();\n if (disable) { disableSlider(); } else if (freeze) { freezeSlider(); }\n\n events.on('indexChanged', additionalUpdates);\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n if (typeof onInit === 'function') { onInit(info()); }\n isOn = true;\n }\n\n function destroy () {\n // sheet\n sheet.disabled = true;\n if (sheet.ownerNode) { sheet.ownerNode.remove(); }\n\n // remove win event listeners\n removeEvents(win, {'resize': onResize});\n\n // arrowKeys, controls, nav\n if (arrowKeys) { removeEvents(doc, docmentKeydownEvent); }\n if (controlsContainer) { removeEvents(controlsContainer, controlsEvents); }\n if (navContainer) { removeEvents(navContainer, navEvents); }\n\n // autoplay\n removeEvents(container, hoverEvents);\n removeEvents(container, visibilityEvent);\n if (autoplayButton) { removeEvents(autoplayButton, {'click': toggleAutoplay}); }\n if (autoplay) { clearInterval(autoplayTimer); }\n\n // container\n if (carousel && TRANSITIONEND) {\n var eve = {};\n eve[TRANSITIONEND] = onTransitionEnd;\n removeEvents(container, eve);\n }\n if (touch) { removeEvents(container, touchEvents); }\n if (mouseDrag) { removeEvents(container, dragEvents); }\n\n // cache Object values in options && reset HTML\n var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\n\n tnsList.forEach(function(item, i) {\n var el = item === 'container' ? outerWrapper : options[item];\n\n if (typeof el === 'object' && el) {\n var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\n parentEl = el.parentNode;\n el.outerHTML = htmlList[i];\n options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\n }\n });\n\n\n // reset variables\n tnsList = animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = resizeTimer = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = pages = pagesCached = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initPosition = lastPosition = translateInit = disX = disY = panStart = rafIndex = getDist = touch = mouseDrag = null;\n // check variables\n // [animateIn, animateOut, animateDelay, animateNormal, horizontal, outerWrapper, innerWrapper, container, containerParent, containerHTML, slideItems, slideCount, breakpointZone, windowWidth, autoWidth, fixedWidth, edgePadding, gutter, viewport, items, slideBy, viewportMax, arrowKeys, speed, rewind, loop, autoHeight, sheet, lazyload, slidePositions, slideItemsOut, cloneCount, slideCountNew, hasRightDeadZone, rightBoundary, updateIndexBeforeTransform, transformAttr, transformPrefix, transformPostfix, getIndexMax, index, indexCached, indexMin, indexMax, resizeTimer, swipeAngle, moveDirectionExpected, running, onInit, events, newContainerClasses, slideId, disable, disabled, freezable, freeze, frozen, controlsEvents, navEvents, hoverEvents, visibilityEvent, docmentKeydownEvent, touchEvents, dragEvents, hasControls, hasNav, navAsThumbnails, hasAutoplay, hasTouch, hasMouseDrag, slideActiveClass, imgCompleteClass, imgEvents, imgsComplete, controls, controlsText, controlsContainer, controlsContainerHTML, prevButton, nextButton, prevIsButton, nextIsButton, nav, navContainer, navContainerHTML, navItems, pages, pagesCached, navClicked, navCurrentIndex, navCurrentIndexCached, navActiveClass, navStr, navStrCurrent, autoplay, autoplayTimeout, autoplayDirection, autoplayText, autoplayHoverPause, autoplayButton, autoplayButtonHTML, autoplayResetOnVisibility, autoplayHtmlStrings, autoplayTimer, animating, autoplayHoverPaused, autoplayUserPaused, autoplayVisibilityPaused, initPosition, lastPosition, translateInit, disX, disY, panStart, rafIndex, getDist, touch, mouseDrag ].forEach(function(item) { if (item !== null) { console.log(item); } });\n\n for (var a in this) {\n if (a !== 'rebuild') { this[a] = null; }\n }\n isOn = false;\n }\n\n// === ON RESIZE ===\n // responsive || fixedWidth || autoWidth || !horizontal\n function onResize (e) {\n raf(function(){ resizeTasks(getEvent(e)); });\n }\n\n function resizeTasks (e) {\n if (!isOn) { return; }\n if (nested === 'outer') { events.emit('outerResized', info(e)); }\n windowWidth = getWindowWidth();\n var bpChanged,\n breakpointZoneTem = breakpointZone,\n needContainerTransform = false;\n\n if (responsive) {\n setBreakpointZone();\n bpChanged = breakpointZoneTem !== breakpointZone;\n // if (hasRightDeadZone) { needContainerTransform = true; } // *?\n if (bpChanged) { events.emit('newBreakpointStart', info(e)); }\n }\n\n var indChanged,\n itemsChanged,\n itemsTem = items,\n disableTem = disable,\n freezeTem = freeze,\n arrowKeysTem = arrowKeys,\n controlsTem = controls,\n navTem = nav,\n touchTem = touch,\n mouseDragTem = mouseDrag,\n autoplayTem = autoplay,\n autoplayHoverPauseTem = autoplayHoverPause,\n autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\n indexTem = index;\n\n if (bpChanged) {\n var fixedWidthTem = fixedWidth,\n autoHeightTem = autoHeight,\n controlsTextTem = controlsText,\n centerTem = center,\n autoplayTextTem = autoplayText;\n\n if (!CSSMQ) {\n var gutterTem = gutter,\n edgePaddingTem = edgePadding;\n }\n }\n\n // get option:\n // fixed width: viewport, fixedWidth, gutter => items\n // others: window width => all variables\n // all: items => slideBy\n arrowKeys = getOption('arrowKeys');\n controls = getOption('controls');\n nav = getOption('nav');\n touch = getOption('touch');\n center = getOption('center');\n mouseDrag = getOption('mouseDrag');\n autoplay = getOption('autoplay');\n autoplayHoverPause = getOption('autoplayHoverPause');\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\n\n if (bpChanged) {\n disable = getOption('disable');\n fixedWidth = getOption('fixedWidth');\n speed = getOption('speed');\n autoHeight = getOption('autoHeight');\n controlsText = getOption('controlsText');\n autoplayText = getOption('autoplayText');\n autoplayTimeout = getOption('autoplayTimeout');\n\n if (!CSSMQ) {\n edgePadding = getOption('edgePadding');\n gutter = getOption('gutter');\n }\n }\n // update options\n resetVariblesWhenDisable(disable);\n\n viewport = getViewportWidth(); // <= edgePadding, gutter\n if ((!horizontal || autoWidth) && !disable) {\n setSlidePositions();\n if (!horizontal) {\n updateContentWrapperHeight(); // <= setSlidePositions\n needContainerTransform = true;\n }\n }\n if (fixedWidth || autoWidth) {\n rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\n // fixedWidth: <= viewport, fixedWidth, gutter\n indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\n // fixedWidth: <= rightBoundary, fixedWidth, gutter\n }\n\n if (bpChanged || fixedWidth) {\n items = getOption('items');\n slideBy = getOption('slideBy');\n itemsChanged = items !== itemsTem;\n\n if (itemsChanged) {\n if (!fixedWidth && !autoWidth) { indexMax = getIndexMax(); } // <= items\n // check index before transform in case\n // slider reach the right edge then items become bigger\n updateIndex();\n }\n }\n\n if (bpChanged) {\n if (disable !== disableTem) {\n if (disable) {\n disableSlider();\n } else {\n enableSlider(); // <= slidePositions, rightBoundary, indexMax\n }\n }\n }\n\n if (freezable && (bpChanged || fixedWidth || autoWidth)) {\n freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\n // <= fixedWidth: fixedWidth, gutter, rightBoundary\n // <= others: items\n\n if (freeze !== freezeTem) {\n if (freeze) {\n doContainerTransform(getContainerTransformValue(getStartIndex(0)));\n freezeSlider();\n } else {\n unfreezeSlider();\n needContainerTransform = true;\n }\n }\n }\n\n resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\n if (!autoplay) { autoplayHoverPause = autoplayResetOnVisibility = false; }\n\n if (arrowKeys !== arrowKeysTem) {\n arrowKeys ?\n addEvents(doc, docmentKeydownEvent) :\n removeEvents(doc, docmentKeydownEvent);\n }\n if (controls !== controlsTem) {\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n } else {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n if (nav !== navTem) {\n if (nav) {\n showElement(navContainer);\n updateNavVisibility();\n } else {\n hideElement(navContainer)\n }\n }\n if (touch !== touchTem) {\n touch ?\n addEvents(container, touchEvents, options.preventScrollOnTouch) :\n removeEvents(container, touchEvents);\n }\n if (mouseDrag !== mouseDragTem) {\n mouseDrag ?\n addEvents(container, dragEvents) :\n removeEvents(container, dragEvents);\n }\n if (autoplay !== autoplayTem) {\n if (autoplay) {\n if (autoplayButton) { showElement(autoplayButton); }\n if (!animating && !autoplayUserPaused) { startAutoplay(); }\n } else {\n if (autoplayButton) { hideElement(autoplayButton); }\n if (animating) { stopAutoplay(); }\n }\n }\n if (autoplayHoverPause !== autoplayHoverPauseTem) {\n autoplayHoverPause ?\n addEvents(container, hoverEvents) :\n removeEvents(container, hoverEvents);\n }\n if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\n autoplayResetOnVisibility ?\n addEvents(doc, visibilityEvent) :\n removeEvents(doc, visibilityEvent);\n }\n\n if (bpChanged) {\n if (fixedWidth !== fixedWidthTem || center !== centerTem) { needContainerTransform = true; }\n\n if (autoHeight !== autoHeightTem) {\n if (!autoHeight) { innerWrapper.style.height = ''; }\n }\n\n if (controls && controlsText !== controlsTextTem) {\n prevButton.innerHTML = controlsText[0];\n nextButton.innerHTML = controlsText[1];\n }\n\n if (autoplayButton && autoplayText !== autoplayTextTem) {\n var i = autoplay ? 1 : 0,\n html = autoplayButton.innerHTML,\n len = html.length - autoplayTextTem[i].length;\n if (html.substring(len) === autoplayTextTem[i]) {\n autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\n }\n }\n } else {\n if (center && (fixedWidth || autoWidth)) { needContainerTransform = true; }\n }\n\n if (itemsChanged || fixedWidth && !autoWidth) {\n pages = getPages();\n updateNavVisibility();\n }\n\n indChanged = index !== indexTem;\n if (indChanged) {\n events.emit('indexChanged', info());\n needContainerTransform = true;\n } else if (itemsChanged) {\n if (!indChanged) { additionalUpdates(); }\n } else if (fixedWidth || autoWidth) {\n doLazyLoad();\n updateSlideStatus();\n updateLiveRegion();\n }\n\n if (itemsChanged && !carousel) { updateGallerySlidePositions(); }\n\n if (!disable && !freeze) {\n // non-mediaqueries: IE8\n if (bpChanged && !CSSMQ) {\n // middle wrapper styles\n\n // inner wrapper styles\n if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\n }\n\n if (horizontal) {\n // container styles\n if (carousel) {\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\n }\n\n // slide styles\n var str = getSlideWidthStyle(fixedWidth, gutter, items) +\n getSlideGutterStyle(gutter);\n\n // remove the last line and\n // add new styles\n removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\n }\n }\n\n // auto height\n if (autoHeight) { doAutoHeight(); }\n\n if (needContainerTransform) {\n doContainerTransformSilent();\n indexCached = index;\n }\n }\n\n if (bpChanged) { events.emit('newBreakpointEnd', info(e)); }\n }\n\n\n\n\n\n // === INITIALIZATION FUNCTIONS === //\n function getFreeze () {\n if (!fixedWidth && !autoWidth) {\n var a = center ? items - (items - 1) / 2 : items;\n return slideCount <= a;\n }\n\n var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\n vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\n\n if (center) {\n vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\n }\n\n return width <= vp;\n }\n\n function setBreakpointZone () {\n breakpointZone = 0;\n for (var bp in responsive) {\n bp = parseInt(bp); // convert string to number\n if (windowWidth >= bp) { breakpointZone = bp; }\n }\n }\n\n // (slideBy, indexMin, indexMax) => index\n var updateIndex = (function () {\n return loop ?\n carousel ?\n // loop + carousel\n function () {\n var leftEdge = indexMin,\n rightEdge = indexMax;\n\n leftEdge += slideBy;\n rightEdge -= slideBy;\n\n // adjust edges when has edge paddings\n // or fixed-width slider with extra space on the right side\n if (edgePadding) {\n leftEdge += 1;\n rightEdge -= 1;\n } else if (fixedWidth) {\n if ((viewport + gutter)%(fixedWidth + gutter)) { rightEdge -= 1; }\n }\n\n if (cloneCount) {\n if (index > rightEdge) {\n index -= slideCount;\n } else if (index < leftEdge) {\n index += slideCount;\n }\n }\n } :\n // loop + gallery\n function() {\n if (index > indexMax) {\n while (index >= indexMin + slideCount) { index -= slideCount; }\n } else if (index < indexMin) {\n while (index <= indexMax - slideCount) { index += slideCount; }\n }\n } :\n // non-loop\n function() {\n index = Math.max(indexMin, Math.min(indexMax, index));\n };\n })();\n\n function disableUI () {\n if (!autoplay && autoplayButton) { hideElement(autoplayButton); }\n if (!nav && navContainer) { hideElement(navContainer); }\n if (!controls) {\n if (controlsContainer) {\n hideElement(controlsContainer);\n } else {\n if (prevButton) { hideElement(prevButton); }\n if (nextButton) { hideElement(nextButton); }\n }\n }\n }\n\n function enableUI () {\n if (autoplay && autoplayButton) { showElement(autoplayButton); }\n if (nav && navContainer) { showElement(navContainer); }\n if (controls) {\n if (controlsContainer) {\n showElement(controlsContainer);\n } else {\n if (prevButton) { showElement(prevButton); }\n if (nextButton) { showElement(nextButton); }\n }\n }\n }\n\n function freezeSlider () {\n if (frozen) { return; }\n\n // remove edge padding from inner wrapper\n if (edgePadding) { innerWrapper.style.margin = '0px'; }\n\n // add class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { addClass(slideItems[i], str); }\n addClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n disableUI();\n\n frozen = true;\n }\n\n function unfreezeSlider () {\n if (!frozen) { return; }\n\n // restore edge padding for inner wrapper\n // for mordern browsers\n if (edgePadding && CSSMQ) { innerWrapper.style.margin = ''; }\n\n // remove class tns-transparent to cloned slides\n if (cloneCount) {\n var str = 'tns-transparent';\n for (var i = cloneCount; i--;) {\n if (carousel) { removeClass(slideItems[i], str); }\n removeClass(slideItems[slideCountNew - i - 1], str);\n }\n }\n\n // update tools\n enableUI();\n\n frozen = false;\n }\n\n function disableSlider () {\n if (disabled) { return; }\n\n sheet.disabled = true;\n container.className = container.className.replace(newContainerClasses.substring(1), '');\n removeAttrs(container, ['style']);\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { hideElement(slideItems[j]); }\n hideElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // vertical slider\n if (!horizontal || !carousel) { removeAttrs(innerWrapper, ['style']); }\n\n // gallery\n if (!carousel) {\n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i];\n removeAttrs(item, ['style']);\n removeClass(item, animateIn);\n removeClass(item, animateNormal);\n }\n }\n\n // update tools\n disableUI();\n\n disabled = true;\n }\n\n function enableSlider () {\n if (!disabled) { return; }\n\n sheet.disabled = false;\n container.className += newContainerClasses;\n doContainerTransformSilent();\n\n if (loop) {\n for (var j = cloneCount; j--;) {\n if (carousel) { showElement(slideItems[j]); }\n showElement(slideItems[slideCountNew - j - 1]);\n }\n }\n\n // gallery\n if (!carousel) {\n for (var i = index, l = index + slideCount; i < l; i++) {\n var item = slideItems[i],\n classN = i < index + items ? animateIn : animateNormal;\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, classN);\n }\n }\n\n // update tools\n enableUI();\n\n disabled = false;\n }\n\n function updateLiveRegion () {\n var str = getLiveRegionStr();\n if (liveregionCurrent.innerHTML !== str) { liveregionCurrent.innerHTML = str; }\n }\n\n function getLiveRegionStr () {\n var arr = getVisibleSlideRange(),\n start = arr[0] + 1,\n end = arr[1] + 1;\n return start === end ? start + '' : start + ' to ' + end;\n }\n\n function getVisibleSlideRange (val) {\n if (val == null) { val = getContainerTransformValue(); }\n var start = index, end, rangestart, rangeend;\n\n // get range start, range end for autoWidth and fixedWidth\n if (center || edgePadding) {\n if (autoWidth || fixedWidth) {\n rangestart = - (parseFloat(val) + edgePadding);\n rangeend = rangestart + viewport + edgePadding * 2;\n }\n } else {\n if (autoWidth) {\n rangestart = slidePositions[index];\n rangeend = rangestart + viewport;\n }\n }\n\n // get start, end\n // - check auto width\n if (autoWidth) {\n slidePositions.forEach(function(point, i) {\n if (i < slideCountNew) {\n if ((center || edgePadding) && point <= rangestart + 0.5) { start = i; }\n if (rangeend - point >= 0.5) { end = i; }\n }\n });\n\n // - check percentage width, fixed width\n } else {\n\n if (fixedWidth) {\n var cell = fixedWidth + gutter;\n if (center || edgePadding) {\n start = Math.floor(rangestart/cell);\n end = Math.ceil(rangeend/cell - 1);\n } else {\n end = start + Math.ceil(viewport/cell) - 1;\n }\n\n } else {\n if (center || edgePadding) {\n var a = items - 1;\n if (center) {\n start -= a / 2;\n end = index + a / 2;\n } else {\n end = index + a;\n }\n\n if (edgePadding) {\n var b = edgePadding * items / viewport;\n start -= b;\n end += b;\n }\n\n start = Math.floor(start);\n end = Math.ceil(end);\n } else {\n end = start + items - 1;\n }\n }\n\n start = Math.max(start, 0);\n end = Math.min(end, slideCountNew - 1);\n }\n\n return [start, end];\n }\n\n function doLazyLoad () {\n if (lazyload && !disable) {\n var arg = getVisibleSlideRange();\n arg.push(lazyloadSelector);\n\n getImageArray.apply(null, arg).forEach(function (img) {\n if (!hasClass(img, imgCompleteClass)) {\n // stop propagation transitionend event to container\n var eve = {};\n eve[TRANSITIONEND] = function (e) { e.stopPropagation(); };\n addEvents(img, eve);\n\n addEvents(img, imgEvents);\n\n // update src\n img.src = getAttr(img, 'data-src');\n\n // update srcset\n var srcset = getAttr(img, 'data-srcset');\n if (srcset) { img.srcset = srcset; }\n\n addClass(img, 'loading');\n }\n });\n }\n }\n\n function onImgLoaded (e) {\n imgLoaded(getTarget(e));\n }\n\n function onImgFailed (e) {\n imgFailed(getTarget(e));\n }\n\n function imgLoaded (img) {\n addClass(img, 'loaded');\n imgCompleted(img);\n }\n\n function imgFailed (img) {\n addClass(img, 'failed');\n imgCompleted(img);\n }\n\n function imgCompleted (img) {\n addClass(img, imgCompleteClass);\n removeClass(img, 'loading');\n removeEvents(img, imgEvents);\n }\n\n function getImageArray (start, end, imgSelector) {\n var imgs = [];\n if (!imgSelector) { imgSelector = 'img'; }\n\n while (start <= end) {\n forEach(slideItems[start].querySelectorAll(imgSelector), function (img) { imgs.push(img); });\n start++;\n }\n\n return imgs;\n }\n\n // check if all visible images are loaded\n // and update container height if it's done\n function doAutoHeight () {\n var imgs = getImageArray.apply(null, getVisibleSlideRange());\n raf(function(){ imgsLoadedCheck(imgs, updateInnerWrapperHeight); });\n }\n\n function imgsLoadedCheck (imgs, cb) {\n // execute callback function if all images are complete\n if (imgsComplete) { return cb(); }\n\n // check image classes\n imgs.forEach(function (img, index) {\n if (!lazyload && img.complete) { imgCompleted(img); } // Check image.complete\n if (hasClass(img, imgCompleteClass)) { imgs.splice(index, 1); }\n });\n\n // execute callback function if selected images are all complete\n if (!imgs.length) { return cb(); }\n\n // otherwise execute this functiona again\n raf(function(){ imgsLoadedCheck(imgs, cb); });\n }\n\n function additionalUpdates () {\n doLazyLoad();\n updateSlideStatus();\n updateLiveRegion();\n updateControlsStatus();\n updateNavStatus();\n }\n\n\n function update_carousel_transition_duration () {\n if (carousel && autoHeight) {\n middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\n }\n }\n\n function getMaxSlideHeight (slideStart, slideRange) {\n var heights = [];\n for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\n heights.push(slideItems[i].offsetHeight);\n }\n\n return Math.max.apply(null, heights);\n }\n\n // update inner wrapper height\n // 1. get the max-height of the visible slides\n // 2. set transitionDuration to speed\n // 3. update inner wrapper height to max-height\n // 4. set transitionDuration to 0s after transition done\n function updateInnerWrapperHeight () {\n var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\n wp = middleWrapper ? middleWrapper : innerWrapper;\n\n if (wp.style.height !== maxHeight) { wp.style.height = maxHeight + 'px'; }\n }\n\n // get the distance from the top edge of the first slide to each slide\n // (init) => slidePositions\n function setSlidePositions () {\n slidePositions = [0];\n var attr = horizontal ? 'left' : 'top',\n attr2 = horizontal ? 'right' : 'bottom',\n base = slideItems[0].getBoundingClientRect()[attr];\n\n forEach(slideItems, function(item, i) {\n // skip the first slide\n if (i) { slidePositions.push(item.getBoundingClientRect()[attr] - base); }\n // add the end edge\n if (i === slideCountNew - 1) { slidePositions.push(item.getBoundingClientRect()[attr2] - base); }\n });\n }\n\n // update slide\n function updateSlideStatus () {\n var range = getVisibleSlideRange(),\n start = range[0],\n end = range[1];\n\n forEach(slideItems, function(item, i) {\n // show slides\n if (i >= start && i <= end) {\n if (hasAttr(item, 'aria-hidden')) {\n removeAttrs(item, ['aria-hidden', 'tabindex']);\n addClass(item, slideActiveClass);\n }\n // hide slides\n } else {\n if (!hasAttr(item, 'aria-hidden')) {\n setAttrs(item, {\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n });\n removeClass(item, slideActiveClass);\n }\n }\n });\n }\n\n // gallery: update slide position\n function updateGallerySlidePositions () {\n var l = index + Math.min(slideCount, items);\n for (var i = slideCountNew; i--;) {\n var item = slideItems[i];\n\n if (i >= index && i < l) {\n // add transitions to visible slides when adjusting their positions\n addClass(item, 'tns-moving');\n\n item.style.left = (i - index) * 100 / items + '%';\n addClass(item, animateIn);\n removeClass(item, animateNormal);\n } else if (item.style.left) {\n item.style.left = '';\n addClass(item, animateNormal);\n removeClass(item, animateIn);\n }\n\n // remove outlet animation\n removeClass(item, animateOut);\n }\n\n // removing '.tns-moving'\n setTimeout(function() {\n forEach(slideItems, function(el) {\n removeClass(el, 'tns-moving');\n });\n }, 300);\n }\n\n // set tabindex on Nav\n function updateNavStatus () {\n // get current nav\n if (nav) {\n navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\n navClicked = -1;\n\n if (navCurrentIndex !== navCurrentIndexCached) {\n var navPrev = navItems[navCurrentIndexCached],\n navCurrent = navItems[navCurrentIndex];\n\n setAttrs(navPrev, {\n 'tabindex': '-1',\n 'aria-label': navStr + (navCurrentIndexCached + 1)\n });\n removeClass(navPrev, navActiveClass);\n\n setAttrs(navCurrent, {'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent});\n removeAttrs(navCurrent, 'tabindex');\n addClass(navCurrent, navActiveClass);\n\n navCurrentIndexCached = navCurrentIndex;\n }\n }\n }\n\n function getLowerCaseNodeName (el) {\n return el.nodeName.toLowerCase();\n }\n\n function isButton (el) {\n return getLowerCaseNodeName(el) === 'button';\n }\n\n function isAriaDisabled (el) {\n return el.getAttribute('aria-disabled') === 'true';\n }\n\n function disEnableElement (isButton, el, val) {\n if (isButton) {\n el.disabled = val;\n } else {\n el.setAttribute('aria-disabled', val.toString());\n }\n }\n\n // set 'disabled' to true on controls when reach the edges\n function updateControlsStatus () {\n if (!controls || rewind || loop) { return; }\n\n var prevDisabled = (prevIsButton) ? prevButton.disabled : isAriaDisabled(prevButton),\n nextDisabled = (nextIsButton) ? nextButton.disabled : isAriaDisabled(nextButton),\n disablePrev = (index <= indexMin) ? true : false,\n disableNext = (!rewind && index >= indexMax) ? true : false;\n\n if (disablePrev && !prevDisabled) {\n disEnableElement(prevIsButton, prevButton, true);\n }\n if (!disablePrev && prevDisabled) {\n disEnableElement(prevIsButton, prevButton, false);\n }\n if (disableNext && !nextDisabled) {\n disEnableElement(nextIsButton, nextButton, true);\n }\n if (!disableNext && nextDisabled) {\n disEnableElement(nextIsButton, nextButton, false);\n }\n }\n\n // set duration\n function resetDuration (el, str) {\n if (TRANSITIONDURATION) { el.style[TRANSITIONDURATION] = str; }\n }\n\n function getSliderWidth () {\n return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\n }\n\n function getCenterGap (num) {\n if (num == null) { num = index; }\n\n var gap = edgePadding ? gutter : 0;\n return autoWidth ? ((viewport - gap) - (slidePositions[num + 1] - slidePositions[num] - gutter))/2 :\n fixedWidth ? (viewport - fixedWidth) / 2 :\n (items - 1) / 2;\n }\n\n function getRightBoundary () {\n var gap = edgePadding ? gutter : 0,\n result = (viewport + gap) - getSliderWidth();\n\n if (center && !loop) {\n result = fixedWidth ? - (fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() :\n getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\n }\n if (result > 0) { result = 0; }\n\n return result;\n }\n\n function getContainerTransformValue (num) {\n if (num == null) { num = index; }\n\n var val;\n if (horizontal && !autoWidth) {\n if (fixedWidth) {\n val = - (fixedWidth + gutter) * num;\n if (center) { val += getCenterGap(); }\n } else {\n var denominator = TRANSFORM ? slideCountNew : items;\n if (center) { num -= getCenterGap(); }\n val = - num * 100 / denominator;\n }\n } else {\n val = - slidePositions[num];\n if (center && autoWidth) {\n val += getCenterGap();\n }\n }\n\n if (hasRightDeadZone) { val = Math.max(val, rightBoundary); }\n\n val += (horizontal && !autoWidth && !fixedWidth) ? '%' : 'px';\n\n return val;\n }\n\n function doContainerTransformSilent (val) {\n resetDuration(container, '0s');\n doContainerTransform(val);\n }\n\n function doContainerTransform (val) {\n if (val == null) { val = getContainerTransformValue(); }\n container.style[transformAttr] = transformPrefix + val + transformPostfix;\n }\n\n function animateSlide (number, classOut, classIn, isOut) {\n var l = number + items;\n if (!loop) { l = Math.min(l, slideCountNew); }\n\n for (var i = number; i < l; i++) {\n var item = slideItems[i];\n\n // set item positions\n if (!isOut) { item.style.left = (i - index) * 100 / items + '%'; }\n\n if (animateDelay && TRANSITIONDELAY) {\n item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\n }\n removeClass(item, classOut);\n addClass(item, classIn);\n\n if (isOut) { slideItemsOut.push(item); }\n }\n }\n\n // make transfer after click/drag:\n // 1. change 'transform' property for mordern browsers\n // 2. change 'left' property for legacy browsers\n var transformCore = (function () {\n return carousel ?\n function () {\n resetDuration(container, '');\n if (TRANSITIONDURATION || !speed) {\n // for morden browsers with non-zero duration or\n // zero duration for all browsers\n doContainerTransform();\n // run fallback function manually\n // when duration is 0 / container is hidden\n if (!speed || !isVisible(container)) { onTransitionEnd(); }\n\n } else {\n // for old browser with non-zero duration\n jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\n }\n\n if (!horizontal) { updateContentWrapperHeight(); }\n } :\n function () {\n slideItemsOut = [];\n\n var eve = {};\n eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\n removeEvents(slideItems[indexCached], eve);\n addEvents(slideItems[index], eve);\n\n animateSlide(indexCached, animateIn, animateOut, true);\n animateSlide(index, animateNormal, animateIn);\n\n // run fallback function manually\n // when transition or animation not supported / duration is 0\n if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) { onTransitionEnd(); }\n };\n })();\n\n function render (e, sliderMoved) {\n if (updateIndexBeforeTransform) { updateIndex(); }\n\n // render when slider was moved (touch or drag) even though index may not change\n if (index !== indexCached || sliderMoved) {\n // events\n events.emit('indexChanged', info());\n events.emit('transitionStart', info());\n if (autoHeight) { doAutoHeight(); }\n\n // pause autoplay when click or keydown from user\n if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) { stopAutoplay(); }\n\n running = true;\n transformCore();\n }\n }\n\n /*\n * Transfer prefixed properties to the same format\n * CSS: -Webkit-Transform => webkittransform\n * JS: WebkitTransform => webkittransform\n * @param {string} str - property\n *\n */\n function strTrans (str) {\n return str.toLowerCase().replace(/-/g, '');\n }\n\n // AFTER TRANSFORM\n // Things need to be done after a transfer:\n // 1. check index\n // 2. add classes to visible slide\n // 3. disable controls buttons when reach the first/last slide in non-loop slider\n // 4. update nav status\n // 5. lazyload images\n // 6. update container height\n function onTransitionEnd (event) {\n // check running on gallery mode\n // make sure trantionend/animationend events run only once\n if (carousel || running) {\n events.emit('transitionEnd', info(event));\n\n if (!carousel && slideItemsOut.length > 0) {\n for (var i = 0; i < slideItemsOut.length; i++) {\n var item = slideItemsOut[i];\n // set item positions\n item.style.left = '';\n\n if (ANIMATIONDELAY && TRANSITIONDELAY) {\n item.style[ANIMATIONDELAY] = '';\n item.style[TRANSITIONDELAY] = '';\n }\n removeClass(item, animateOut);\n addClass(item, animateNormal);\n }\n }\n\n /* update slides, nav, controls after checking ...\n * => legacy browsers who don't support 'event'\n * have to check event first, otherwise event.target will cause an error\n * => or 'gallery' mode:\n * + event target is slide item\n * => or 'carousel' mode:\n * + event target is container,\n * + event.property is the same with transform attribute\n */\n if (!event ||\n !carousel && event.target.parentNode === container ||\n event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\n\n if (!updateIndexBeforeTransform) {\n var indexTem = index;\n updateIndex();\n if (index !== indexTem) {\n events.emit('indexChanged', info());\n\n doContainerTransformSilent();\n }\n }\n\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\n running = false;\n indexCached = index;\n }\n }\n\n }\n\n // # ACTIONS\n function goTo (targetIndex, e) {\n if (freeze) { return; }\n\n // prev slideBy\n if (targetIndex === 'prev') {\n onControlsClick(e, -1);\n\n // next slideBy\n } else if (targetIndex === 'next') {\n onControlsClick(e, 1);\n\n // go to exact slide\n } else {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n var absIndex = getAbsIndex(),\n indexGap = 0;\n\n if (targetIndex === 'first') {\n indexGap = - absIndex;\n } else if (targetIndex === 'last') {\n indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\n } else {\n if (typeof targetIndex !== 'number') { targetIndex = parseInt(targetIndex); }\n\n if (!isNaN(targetIndex)) {\n // from directly called goTo function\n if (!e) { targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex)); }\n\n indexGap = targetIndex - absIndex;\n }\n }\n\n // gallery: make sure new page won't overlap with current page\n if (!carousel && indexGap && Math.abs(indexGap) < items) {\n var factor = indexGap > 0 ? 1 : -1;\n indexGap += (index + indexGap - slideCount) >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\n }\n\n index += indexGap;\n\n // make sure index is in range\n if (carousel && loop) {\n if (index < indexMin) { index += slideCount; }\n if (index > indexMax) { index -= slideCount; }\n }\n\n // if index is changed, start rendering\n if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\n render(e);\n }\n\n }\n }\n\n // on controls click\n function onControlsClick (e, dir) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n var passEventObject;\n\n if (!dir) {\n e = getEvent(e);\n var target = getTarget(e);\n\n while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) { target = target.parentNode; }\n\n var targetIn = [prevButton, nextButton].indexOf(target);\n if (targetIn >= 0) {\n passEventObject = true;\n dir = targetIn === 0 ? -1 : 1;\n }\n }\n\n if (rewind) {\n if (index === indexMin && dir === -1) {\n goTo('last', e);\n return;\n } else if (index === indexMax && dir === 1) {\n goTo('first', e);\n return;\n }\n }\n\n if (dir) {\n index += slideBy * dir;\n if (autoWidth) { index = Math.floor(index); }\n // pass e when click control buttons or keydown\n render((passEventObject || (e && e.type === 'keydown')) ? e : null);\n }\n }\n\n // on nav click\n function onNavClick (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n e = getEvent(e);\n var target = getTarget(e), navIndex;\n\n // find the clicked nav item\n while (target !== navContainer && !hasAttr(target, 'data-nav')) { target = target.parentNode; }\n if (hasAttr(target, 'data-nav')) {\n var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\n targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\n targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\n goTo(targetIndex, e);\n\n if (navCurrentIndex === navIndex) {\n if (animating) { stopAutoplay(); }\n navClicked = -1; // reset navClicked\n }\n }\n }\n\n // autoplay functions\n function setAutoplayTimer () {\n autoplayTimer = setInterval(function () {\n onControlsClick(null, autoplayDirection);\n }, autoplayTimeout);\n\n animating = true;\n }\n\n function stopAutoplayTimer () {\n clearInterval(autoplayTimer);\n animating = false;\n }\n\n function updateAutoplayButton (action, txt) {\n setAttrs(autoplayButton, {'data-action': action});\n autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\n }\n\n function startAutoplay () {\n setAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('stop', autoplayText[1]); }\n }\n\n function stopAutoplay () {\n stopAutoplayTimer();\n if (autoplayButton) { updateAutoplayButton('start', autoplayText[0]); }\n }\n\n // programaitcally play/pause the slider\n function play () {\n if (autoplay && !animating) {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n function pause () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n }\n }\n\n function toggleAutoplay () {\n if (animating) {\n stopAutoplay();\n autoplayUserPaused = true;\n } else {\n startAutoplay();\n autoplayUserPaused = false;\n }\n }\n\n function onVisibilityChange () {\n if (doc.hidden) {\n if (animating) {\n stopAutoplayTimer();\n autoplayVisibilityPaused = true;\n }\n } else if (autoplayVisibilityPaused) {\n setAutoplayTimer();\n autoplayVisibilityPaused = false;\n }\n }\n\n function mouseoverPause () {\n if (animating) {\n stopAutoplayTimer();\n autoplayHoverPaused = true;\n }\n }\n\n function mouseoutRestart () {\n if (autoplayHoverPaused) {\n setAutoplayTimer();\n autoplayHoverPaused = false;\n }\n }\n\n // keydown events on document\n function onDocumentKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n onControlsClick(e, keyIndex === 0 ? -1 : 1);\n }\n }\n\n // on key control\n function onControlsKeydown (e) {\n e = getEvent(e);\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (!prevButton.disabled) { onControlsClick(e, -1); }\n } else if (!nextButton.disabled) {\n onControlsClick(e, 1);\n }\n }\n }\n\n // set focus\n function setFocus (el) {\n el.focus();\n }\n\n // on key nav\n function onNavKeydown (e) {\n e = getEvent(e);\n var curElement = doc.activeElement;\n if (!hasAttr(curElement, 'data-nav')) { return; }\n\n // var code = e.keyCode,\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\n navIndex = Number(getAttr(curElement, 'data-nav'));\n\n if (keyIndex >= 0) {\n if (keyIndex === 0) {\n if (navIndex > 0) { setFocus(navItems[navIndex - 1]); }\n } else if (keyIndex === 1) {\n if (navIndex < pages - 1) { setFocus(navItems[navIndex + 1]); }\n } else {\n navClicked = navIndex;\n goTo(navIndex, e);\n }\n }\n }\n\n function getEvent (e) {\n e = e || win.event;\n return isTouchEvent(e) ? e.changedTouches[0] : e;\n }\n function getTarget (e) {\n return e.target || win.event.srcElement;\n }\n\n function isTouchEvent (e) {\n return e.type.indexOf('touch') >= 0;\n }\n\n function preventDefaultBehavior (e) {\n e.preventDefault ? e.preventDefault() : e.returnValue = false;\n }\n\n function getMoveDirectionExpected () {\n return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\n }\n\n function onPanStart (e) {\n if (running) {\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\n }\n\n if (autoplay && animating) { stopAutoplayTimer(); }\n\n panStart = true;\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n\n var $ = getEvent(e);\n events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\n\n if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\n preventDefaultBehavior(e);\n }\n\n lastPosition.x = initPosition.x = $.clientX;\n lastPosition.y = initPosition.y = $.clientY;\n if (carousel) {\n translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\n resetDuration(container, '0s');\n }\n }\n\n function onPanMove (e) {\n if (panStart) {\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n\n if (carousel) {\n if (!rafIndex) { rafIndex = raf(function(){ panUpdate(e); }); }\n } else {\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) { preventScroll = true; }\n }\n\n if ((typeof e.cancelable !== 'boolean' || e.cancelable) && preventScroll) {\n e.preventDefault();\n }\n }\n }\n\n function panUpdate (e) {\n if (!moveDirectionExpected) {\n panStart = false;\n return;\n }\n caf(rafIndex);\n if (panStart) { rafIndex = raf(function(){ panUpdate(e); }); }\n\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\n if (moveDirectionExpected) {\n if (!preventScroll && isTouchEvent(e)) { preventScroll = true; }\n\n try {\n if (e.type) { events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e)); }\n } catch(err) {}\n\n var x = translateInit,\n dist = getDist(lastPosition, initPosition);\n if (!horizontal || fixedWidth || autoWidth) {\n x += dist;\n x += 'px';\n } else {\n var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew): dist * 100 / (viewport + gutter);\n x += percentageX;\n x += '%';\n }\n\n container.style[transformAttr] = transformPrefix + x + transformPostfix;\n }\n }\n\n function onPanEnd (e) {\n if (panStart) {\n if (rafIndex) {\n caf(rafIndex);\n rafIndex = null;\n }\n if (carousel) { resetDuration(container, ''); }\n panStart = false;\n\n var $ = getEvent(e);\n lastPosition.x = $.clientX;\n lastPosition.y = $.clientY;\n var dist = getDist(lastPosition, initPosition);\n\n if (Math.abs(dist)) {\n // drag vs click\n if (!isTouchEvent(e)) {\n // prevent \"click\"\n var target = getTarget(e);\n addEvents(target, {'click': function preventClick (e) {\n preventDefaultBehavior(e);\n removeEvents(target, {'click': preventClick});\n }});\n }\n\n if (carousel) {\n rafIndex = raf(function() {\n if (horizontal && !autoWidth) {\n var indexMoved = - dist * items / (viewport + gutter);\n indexMoved = dist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\n index += indexMoved;\n } else {\n var moved = - (translateInit + dist);\n if (moved <= 0) {\n index = indexMin;\n } else if (moved >= slidePositions[slideCountNew - 1]) {\n index = indexMax;\n } else {\n var i = 0;\n while (i < slideCountNew && moved >= slidePositions[i]) {\n index = i;\n if (moved > slidePositions[i] && dist < 0) { index += 1; }\n i++;\n }\n }\n }\n\n render(e, dist);\n events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\n });\n } else {\n if (moveDirectionExpected) {\n onControlsClick(e, dist > 0 ? -1 : 1);\n }\n }\n }\n }\n\n // reset\n if (options.preventScrollOnTouch === 'auto') { preventScroll = false; }\n if (swipeAngle) { moveDirectionExpected = '?'; }\n if (autoplay && !animating) { setAutoplayTimer(); }\n }\n\n // === RESIZE FUNCTIONS === //\n // (slidePositions, index, items) => vertical_conentWrapper.height\n function updateContentWrapperHeight () {\n var wp = middleWrapper ? middleWrapper : innerWrapper;\n wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\n }\n\n function getPages () {\n var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\n return Math.min(Math.ceil(rough), slideCount);\n }\n\n /*\n * 1. update visible nav items list\n * 2. add \"hidden\" attributes to previous visible nav items\n * 3. remove \"hidden\" attrubutes to new visible nav items\n */\n function updateNavVisibility () {\n if (!nav || navAsThumbnails) { return; }\n\n if (pages !== pagesCached) {\n var min = pagesCached,\n max = pages,\n fn = showElement;\n\n if (pagesCached > pages) {\n min = pages;\n max = pagesCached;\n fn = hideElement;\n }\n\n while (min < max) {\n fn(navItems[min]);\n min++;\n }\n\n // cache pages\n pagesCached = pages;\n }\n }\n\n function info (e) {\n return {\n container: container,\n slideItems: slideItems,\n navContainer: navContainer,\n navItems: navItems,\n controlsContainer: controlsContainer,\n hasControls: hasControls,\n prevButton: prevButton,\n nextButton: nextButton,\n items: items,\n slideBy: slideBy,\n cloneCount: cloneCount,\n slideCount: slideCount,\n slideCountNew: slideCountNew,\n index: index,\n indexCached: indexCached,\n displayIndex: getCurrentSlide(),\n navCurrentIndex: navCurrentIndex,\n navCurrentIndexCached: navCurrentIndexCached,\n pages: pages,\n pagesCached: pagesCached,\n sheet: sheet,\n isOn: isOn,\n event: e || {},\n };\n }\n\n return {\n version: '2.9.4',\n getInfo: info,\n events: events,\n goTo: goTo,\n play: play,\n pause: pause,\n isOn: isOn,\n updateSliderHeight: updateInnerWrapperHeight,\n refresh: initSliderTransform,\n destroy: destroy,\n rebuild: function() {\n return tns(extend(options, optionsElements));\n }\n };\n};\n","import {registerListeners, unregisterListeners} from './lib/event.js';\nimport {formatDate} from './lib/date-format.js';\nimport Datepicker from './Datepicker.js';\n\n// filter out the config options inapproprite to pass to Datepicker\nfunction filterOptions(options) {\n const newOpts = Object.assign({}, options);\n\n delete newOpts.inputs;\n delete newOpts.allowOneSidedRange;\n delete newOpts.maxNumberOfDates; // to ensure each datepicker handles a single date\n\n return newOpts;\n}\n\nfunction setupDatepicker(rangepicker, changeDateListener, el, options) {\n registerListeners(rangepicker, [\n [el, 'changeDate', changeDateListener],\n ]);\n new Datepicker(el, options, rangepicker);\n}\n\nfunction onChangeDate(rangepicker, ev) {\n // to prevent both datepickers trigger the other side's update each other\n if (rangepicker._updating) {\n return;\n }\n rangepicker._updating = true;\n\n const target = ev.target;\n if (target.datepicker === undefined) {\n return;\n }\n\n const datepickers = rangepicker.datepickers;\n const setDateOptions = {render: false};\n const changedSide = rangepicker.inputs.indexOf(target);\n const otherSide = changedSide === 0 ? 1 : 0;\n const changedDate = datepickers[changedSide].dates[0];\n const otherDate = datepickers[otherSide].dates[0];\n\n if (changedDate !== undefined && otherDate !== undefined) {\n // if the start of the range > the end, swap them\n if (changedSide === 0 && changedDate > otherDate) {\n datepickers[0].setDate(otherDate, setDateOptions);\n datepickers[1].setDate(changedDate, setDateOptions);\n } else if (changedSide === 1 && changedDate < otherDate) {\n datepickers[0].setDate(changedDate, setDateOptions);\n datepickers[1].setDate(otherDate, setDateOptions);\n }\n } else if (!rangepicker.allowOneSidedRange) {\n // to prevent the range from becoming one-sided, copy changed side's\n // selection (no matter if it's empty) to the other side\n if (changedDate !== undefined || otherDate !== undefined) {\n setDateOptions.clear = true;\n datepickers[otherSide].setDate(datepickers[changedSide].dates, setDateOptions);\n }\n }\n datepickers[0].picker.update().render();\n datepickers[1].picker.update().render();\n delete rangepicker._updating;\n}\n\n/**\n * Class representing a date range picker\n */\nexport default class DateRangePicker {\n /**\n * Create a date range picker\n * @param {Element} element - element to bind a date range picker\n * @param {Object} [options] - config options\n */\n constructor(element, options = {}) {\n const inputs = Array.isArray(options.inputs)\n ? options.inputs\n : Array.from(element.querySelectorAll('input'));\n if (inputs.length < 2) {\n return;\n }\n\n element.rangepicker = this;\n this.element = element;\n this.inputs = inputs.slice(0, 2);\n this.allowOneSidedRange = !!options.allowOneSidedRange;\n\n const changeDateListener = onChangeDate.bind(null, this);\n const cleanOptions = filterOptions(options);\n // in order for initial date setup to work right when pcicLvel > 0,\n // let Datepicker constructor add the instance to the rangepicker\n const datepickers = [];\n Object.defineProperty(this, 'datepickers', {\n get() {\n return datepickers;\n },\n });\n setupDatepicker(this, changeDateListener, this.inputs[0], cleanOptions);\n setupDatepicker(this, changeDateListener, this.inputs[1], cleanOptions);\n Object.freeze(datepickers);\n // normalize the range if inital dates are given\n if (datepickers[0].dates.length > 0) {\n onChangeDate(this, {target: this.inputs[0]});\n } else if (datepickers[1].dates.length > 0) {\n onChangeDate(this, {target: this.inputs[1]});\n }\n }\n\n /**\n * @type {Array} - selected date of the linked date pickers\n */\n get dates() {\n return this.datepickers.length === 2\n ? [\n this.datepickers[0].dates[0],\n this.datepickers[1].dates[0],\n ]\n : undefined;\n }\n\n /**\n * Set new values to the config options\n * @param {Object} options - config options to update\n */\n setOptions(options) {\n this.allowOneSidedRange = !!options.allowOneSidedRange;\n\n const cleanOptions = filterOptions(options);\n this.datepickers[0].setOptions(cleanOptions);\n this.datepickers[1].setOptions(cleanOptions);\n }\n\n /**\n * Destroy the DateRangePicker instance\n * @return {DateRangePicker} - the instance destroyed\n */\n destroy() {\n this.datepickers[0].destroy();\n this.datepickers[1].destroy();\n unregisterListeners(this);\n delete this.element.rangepicker;\n }\n\n /**\n * Get the start and end dates of the date range\n *\n * The method returns Date objects by default. If format string is passed,\n * it returns date strings formatted in given format.\n * The result array always contains 2 items (start date/end date) and\n * undefined is used for unselected side. (e.g. If none is selected,\n * the result will be [undefined, undefined]. If only the end date is set\n * when allowOneSidedRange config option is true, [undefined, endDate] will\n * be returned.)\n *\n * @param {String} [format] - Format string to stringify the dates\n * @return {Array} - Start and end dates\n */\n getDates(format = undefined) {\n const callback = format\n ? date => formatDate(date, format, this.datepickers[0].config.locale)\n : date => new Date(date);\n\n return this.dates.map(date => date === undefined ? date : callback(date));\n }\n\n /**\n * Set the start and end dates of the date range\n *\n * The method calls datepicker.setDate() internally using each of the\n * arguments in start→end order.\n *\n * When a clear: true option object is passed instead of a date, the method\n * clears the date.\n *\n * If an invalid date, the same date as the current one or an option object\n * without clear: true is passed, the method considers that argument as an\n * \"ineffective\" argument because calling datepicker.setDate() with those\n * values makes no changes to the date selection.\n *\n * When the allowOneSidedRange config option is false, passing {clear: true}\n * to clear the range works only when it is done to the last effective\n * argument (in other words, passed to rangeEnd or to rangeStart along with\n * ineffective rangeEnd). This is because when the date range is changed,\n * it gets normalized based on the last change at the end of the changing\n * process.\n *\n * @param {Date|Number|String|Object} rangeStart - Start date of the range\n * or {clear: true} to clear the date\n * @param {Date|Number|String|Object} rangeEnd - End date of the range\n * or {clear: true} to clear the date\n */\n setDates(rangeStart, rangeEnd) {\n const [datepicker0, datepicker1] = this.datepickers;\n const origDates = this.dates;\n\n // If range normalization runs on every change, we can't set a new range\n // that starts after the end of the current range correctly because the\n // normalization process swaps start↔︎end right after setting the new start\n // date. To prevent this, the normalization process needs to run once after\n // both of the new dates are set.\n this._updating = true;\n datepicker0.setDate(rangeStart);\n datepicker1.setDate(rangeEnd);\n delete this._updating;\n\n if (datepicker1.dates[0] !== origDates[1]) {\n onChangeDate(this, {target: this.inputs[1]});\n } else if (datepicker0.dates[0] !== origDates[0]) {\n onChangeDate(this, {target: this.inputs[0]});\n }\n }\n}\n","import {lastItemOf, stringToArray, isInRange} from './lib/utils.js';\nimport {today, regularizeDate} from './lib/date.js';\nimport {parseDate, formatDate} from './lib/date-format.js';\nimport {isActiveElement} from './lib/dom.js';\nimport {registerListeners, unregisterListeners} from './lib/event.js';\nimport {locales} from './i18n/base-locales.js';\nimport defaultOptions from './options/defaultOptions.js';\nimport processOptions from './options/processOptions.js';\nimport Picker from './picker/Picker.js';\nimport {triggerDatepickerEvent} from './events/functions.js';\nimport {onKeydown, onFocus, onMousedown, onClickInput, onPaste} from './events/inputFieldListeners.js';\nimport {onClickOutside} from './events/otherListeners.js';\n\nfunction stringifyDates(dates, config) {\n return dates\n .map(dt => formatDate(dt, config.format, config.locale))\n .join(config.dateDelimiter);\n}\n\n// parse input dates and create an array of time values for selection\n// returns undefined if there are no valid dates in inputDates\n// when origDates (current selection) is passed, the function works to mix\n// the input dates into the current selection\nfunction processInputDates(datepicker, inputDates, clear = false) {\n // const {config, dates: origDates, rangepicker} = datepicker;\n const {config, dates: origDates, rangeSideIndex} = datepicker;\n if (inputDates.length === 0) {\n // empty input is considered valid unless origiDates is passed\n return clear ? [] : undefined;\n }\n\n // const rangeEnd = rangepicker && datepicker === rangepicker.datepickers[1];\n let newDates = inputDates.reduce((dates, dt) => {\n let date = parseDate(dt, config.format, config.locale);\n if (date === undefined) {\n return dates;\n }\n // adjust to 1st of the month/Jan 1st of the year\n // or to the last day of the monh/Dec 31st of the year if the datepicker\n // is the range-end picker of a rangepicker\n date = regularizeDate(date, config.pickLevel, rangeSideIndex);\n if (\n isInRange(date, config.minDate, config.maxDate)\n && !dates.includes(date)\n && !config.datesDisabled.includes(date)\n && (config.pickLevel > 0 || !config.daysOfWeekDisabled.includes(new Date(date).getDay()))\n ) {\n dates.push(date);\n }\n return dates;\n }, []);\n if (newDates.length === 0) {\n return;\n }\n if (config.multidate && !clear) {\n // get the synmetric difference between origDates and newDates\n newDates = newDates.reduce((dates, date) => {\n if (!origDates.includes(date)) {\n dates.push(date);\n }\n return dates;\n }, origDates.filter(date => !newDates.includes(date)));\n }\n // do length check always because user can input multiple dates regardless of the mode\n return config.maxNumberOfDates && newDates.length > config.maxNumberOfDates\n ? newDates.slice(config.maxNumberOfDates * -1)\n : newDates;\n}\n\n// refresh the UI elements\n// modes: 1: input only, 2, picker only, 3 both\nfunction refreshUI(datepicker, mode = 3, quickRender = true) {\n const {config, picker, inputField} = datepicker;\n if (mode & 2) {\n const newView = picker.active ? config.pickLevel : config.startView;\n picker.update().changeView(newView).render(quickRender);\n }\n if (mode & 1 && inputField) {\n inputField.value = stringifyDates(datepicker.dates, config);\n }\n}\n\nfunction setDate(datepicker, inputDates, options) {\n let {clear, render, autohide, revert} = options;\n if (render === undefined) {\n render = true;\n }\n if (!render) {\n autohide = false;\n } else if (autohide === undefined) {\n autohide = datepicker.config.autohide;\n }\n\n const newDates = processInputDates(datepicker, inputDates, clear);\n if (!newDates && !revert) {\n return;\n }\n if (newDates && newDates.toString() !== datepicker.dates.toString()) {\n datepicker.dates = newDates;\n refreshUI(datepicker, render ? 3 : 1);\n triggerDatepickerEvent(datepicker, 'changeDate');\n } else {\n refreshUI(datepicker, 1);\n }\n\n if (autohide) {\n datepicker.hide();\n }\n}\n\n/**\n * Class representing a date picker\n */\nexport default class Datepicker {\n /**\n * Create a date picker\n * @param {Element} element - element to bind a date picker\n * @param {Object} [options] - config options\n * @param {DateRangePicker} [rangepicker] - DateRangePicker instance the\n * date picker belongs to. Use this only when creating date picker as a part\n * of date range picker\n */\n constructor(element, options = {}, rangepicker = undefined) {\n element.datepicker = this;\n this.element = element;\n\n const config = this.config = Object.assign({\n buttonClass: (options.buttonClass && String(options.buttonClass)) || 'button',\n container: null,\n defaultViewDate: today(),\n maxDate: undefined,\n minDate: undefined,\n }, processOptions(defaultOptions, this));\n // configure by type\n const inline = this.inline = element.tagName !== 'INPUT';\n let inputField;\n if (inline) {\n config.container = element;\n } else {\n if (options.container) {\n // omit string type check because it doesn't guarantee to avoid errors\n // (invalid selector string causes abend with sytax error)\n config.container = options.container instanceof HTMLElement\n ? options.container\n : document.querySelector(options.container);\n }\n inputField = this.inputField = element;\n inputField.classList.add('datepicker-input');\n }\n if (rangepicker) {\n // check validiry\n const index = rangepicker.inputs.indexOf(inputField);\n const datepickers = rangepicker.datepickers;\n if (index < 0 || index > 1 || !Array.isArray(datepickers)) {\n throw Error('Invalid rangepicker object.');\n }\n // attach itaelf to the rangepicker here so that processInputDates() can\n // determine if this is the range-end picker of the rangepicker while\n // setting inital values when pickLevel > 0\n datepickers[index] = this;\n // add getter for rangepicker\n Object.defineProperty(this, 'rangepicker', {\n get() {\n return rangepicker;\n },\n });\n Object.defineProperty(this, 'rangeSideIndex', {\n get() {\n return index;\n },\n });\n }\n\n // set up config\n this._options = options;\n Object.assign(config, processOptions(options, this));\n\n // set initial dates\n let initialDates;\n if (inline) {\n initialDates = stringToArray(element.dataset.date, config.dateDelimiter);\n delete element.dataset.date;\n } else {\n initialDates = stringToArray(inputField.value, config.dateDelimiter);\n }\n this.dates = [];\n // process initial value\n const inputDateValues = processInputDates(this, initialDates);\n if (inputDateValues && inputDateValues.length > 0) {\n this.dates = inputDateValues;\n }\n if (inputField) {\n inputField.value = stringifyDates(this.dates, config);\n }\n\n const picker = this.picker = new Picker(this);\n\n if (inline) {\n this.show();\n } else {\n // set up event listeners in other modes\n const onMousedownDocument = onClickOutside.bind(null, this);\n const listeners = [\n [inputField, 'keydown', onKeydown.bind(null, this)],\n [inputField, 'focus', onFocus.bind(null, this)],\n [inputField, 'mousedown', onMousedown.bind(null, this)],\n [inputField, 'click', onClickInput.bind(null, this)],\n [inputField, 'paste', onPaste.bind(null, this)],\n [document, 'mousedown', onMousedownDocument],\n [document, 'touchstart', onMousedownDocument],\n [window, 'resize', picker.place.bind(picker)]\n ];\n registerListeners(this, listeners);\n }\n }\n\n /**\n * Format Date object or time value in given format and language\n * @param {Date|Number} date - date or time value to format\n * @param {String|Object} format - format string or object that contains\n * toDisplay() custom formatter, whose signature is\n * - args:\n * - date: {Date} - Date instance of the date passed to the method\n * - format: {Object} - the format object passed to the method\n * - locale: {Object} - locale for the language specified by `lang`\n * - return:\n * {String} formatted date\n * @param {String} [lang=en] - language code for the locale to use\n * @return {String} formatted date\n */\n static formatDate(date, format, lang) {\n return formatDate(date, format, lang && locales[lang] || locales.en);\n }\n\n /**\n * Parse date string\n * @param {String|Date|Number} dateStr - date string, Date object or time\n * value to parse\n * @param {String|Object} format - format string or object that contains\n * toValue() custom parser, whose signature is\n * - args:\n * - dateStr: {String|Date|Number} - the dateStr passed to the method\n * - format: {Object} - the format object passed to the method\n * - locale: {Object} - locale for the language specified by `lang`\n * - return:\n * {Date|Number} parsed date or its time value\n * @param {String} [lang=en] - language code for the locale to use\n * @return {Number} time value of parsed date\n */\n static parseDate(dateStr, format, lang) {\n return parseDate(dateStr, format, lang && locales[lang] || locales.en);\n }\n\n /**\n * @type {Object} - Installed locales in `[languageCode]: localeObject` format\n * en`:_English (US)_ is pre-installed.\n */\n static get locales() {\n return locales;\n }\n\n /**\n * @type {Boolean} - Whether the picker element is shown. `true` whne shown\n */\n get active() {\n return !!(this.picker && this.picker.active);\n }\n\n /**\n * @type {HTMLDivElement} - DOM object of picker element\n */\n get pickerElement() {\n return this.picker ? this.picker.element : undefined;\n }\n\n /**\n * Set new values to the config options\n * @param {Object} options - config options to update\n */\n setOptions(options) {\n const picker = this.picker;\n const newOptions = processOptions(options, this);\n Object.assign(this._options, options);\n Object.assign(this.config, newOptions);\n picker.setOptions(newOptions);\n\n refreshUI(this, 3);\n }\n\n /**\n * Show the picker element\n */\n show() {\n if (this.inputField) {\n if (this.inputField.disabled) {\n return;\n }\n if (!isActiveElement(this.inputField) && !this.config.disableTouchKeyboard) {\n this._showing = true;\n this.inputField.focus();\n delete this._showing;\n }\n }\n this.picker.show();\n }\n\n /**\n * Hide the picker element\n * Not available on inline picker\n */\n hide() {\n if (this.inline) {\n return;\n }\n this.picker.hide();\n this.picker.update().changeView(this.config.startView).render();\n }\n\n /**\n * Destroy the Datepicker instance\n * @return {Detepicker} - the instance destroyed\n */\n destroy() {\n this.hide();\n unregisterListeners(this);\n this.picker.detach();\n if (!this.inline) {\n this.inputField.classList.remove('datepicker-input');\n }\n delete this.element.datepicker;\n return this;\n }\n\n /**\n * Get the selected date(s)\n *\n * The method returns a Date object of selected date by default, and returns\n * an array of selected dates in multidate mode. If format string is passed,\n * it returns date string(s) formatted in given format.\n *\n * @param {String} [format] - Format string to stringify the date(s)\n * @return {Date|String|Date[]|String[]} - selected date(s), or if none is\n * selected, empty array in multidate mode and untitled in sigledate mode\n */\n getDate(format = undefined) {\n const callback = format\n ? date => formatDate(date, format, this.config.locale)\n : date => new Date(date);\n\n if (this.config.multidate) {\n return this.dates.map(callback);\n }\n if (this.dates.length > 0) {\n return callback(this.dates[0]);\n }\n }\n\n /**\n * Set selected date(s)\n *\n * In multidate mode, you can pass multiple dates as a series of arguments\n * or an array. (Since each date is parsed individually, the type of the\n * dates doesn't have to be the same.)\n * The given dates are used to toggle the select status of each date. The\n * number of selected dates is kept from exceeding the length set to\n * maxNumberOfDates.\n *\n * With clear: true option, the method can be used to clear the selection\n * and to replace the selection instead of toggling in multidate mode.\n * If the option is passed with no date arguments or an empty dates array,\n * it works as \"clear\" (clear the selection then set nothing), and if the\n * option is passed with new dates to select, it works as \"replace\" (clear\n * the selection then set the given dates)\n *\n * When render: false option is used, the method omits re-rendering the\n * picker element. In this case, you need to call refresh() method later in\n * order for the picker element to reflect the changes. The input field is\n * refreshed always regardless of this option.\n *\n * When invalid (unparsable, repeated, disabled or out-of-range) dates are\n * passed, the method ignores them and applies only valid ones. In the case\n * that all the given dates are invalid, which is distinguished from passing\n * no dates, the method considers it as an error and leaves the selection\n * untouched. (The input field also remains untouched unless revert: true\n * option is used.)\n *\n * @param {...(Date|Number|String)|Array} [dates] - Date strings, Date\n * objects, time values or mix of those for new selection\n * @param {Object} [options] - function options\n * - clear: {boolean} - Whether to clear the existing selection\n * defualt: false\n * - render: {boolean} - Whether to re-render the picker element\n * default: true\n * - autohide: {boolean} - Whether to hide the picker element after re-render\n * Ignored when used with render: false\n * default: config.autohide\n * - revert: {boolean} - Whether to refresh the input field when all the\n * passed dates are invalid\n * default: false\n */\n setDate(...args) {\n const dates = [...args];\n const opts = {};\n const lastArg = lastItemOf(args);\n if (\n typeof lastArg === 'object'\n && !Array.isArray(lastArg)\n && !(lastArg instanceof Date)\n && lastArg\n ) {\n Object.assign(opts, dates.pop());\n }\n\n const inputDates = Array.isArray(dates[0]) ? dates[0] : dates;\n setDate(this, inputDates, opts);\n }\n\n /**\n * Update the selected date(s) with input field's value\n * Not available on inline picker\n *\n * The input field will be refreshed with properly formatted date string.\n *\n * In the case that all the entered dates are invalid (unparsable, repeated,\n * disabled or out-of-range), whixh is distinguished from empty input field,\n * the method leaves the input field untouched as well as the selection by\n * default. If revert: true option is used in this case, the input field is\n * refreshed with the existing selection.\n *\n * @param {Object} [options] - function options\n * - autohide: {boolean} - whether to hide the picker element after refresh\n * default: false\n * - revert: {boolean} - Whether to refresh the input field when all the\n * passed dates are invalid\n * default: false\n */\n update(options = undefined) {\n if (this.inline) {\n return;\n }\n\n const opts = Object.assign(options || {}, {clear: true, render: true});\n const inputDates = stringToArray(this.inputField.value, this.config.dateDelimiter);\n setDate(this, inputDates, opts);\n }\n\n /**\n * Refresh the picker element and the associated input field\n * @param {String} [target] - target item when refreshing one item only\n * 'picker' or 'input'\n * @param {Boolean} [forceRender] - whether to re-render the picker element\n * regardless of its state instead of optimized refresh\n */\n refresh(target = undefined, forceRender = false) {\n if (target && typeof target !== 'string') {\n forceRender = target;\n target = undefined;\n }\n\n let mode;\n if (target === 'picker') {\n mode = 2;\n } else if (target === 'input') {\n mode = 1;\n } else {\n mode = 3;\n }\n refreshUI(this, mode, !forceRender);\n }\n\n /**\n * Enter edit mode\n * Not available on inline picker or when the picker element is hidden\n */\n enterEditMode() {\n if (this.inline || !this.picker.active || this.editMode) {\n return;\n }\n this.editMode = true;\n this.inputField.classList.add('in-edit');\n }\n\n /**\n * Exit from edit mode\n * Not available on inline picker\n * @param {Object} [options] - function options\n * - update: {boolean} - whether to call update() after exiting\n * If false, input field is revert to the existing selection\n * default: false\n */\n exitEditMode(options = undefined) {\n if (this.inline || !this.editMode) {\n return;\n }\n const opts = Object.assign({update: false}, options);\n delete this.editMode;\n this.inputField.classList.remove('in-edit');\n if (opts.update) {\n this.update(opts);\n }\n }\n}\n","import {limitToRange} from '../lib/utils.js';\nimport {addMonths, addYears} from '../lib/date.js';\n\nexport function triggerDatepickerEvent(datepicker, type) {\n const detail = {\n date: datepicker.getDate(),\n viewDate: new Date(datepicker.picker.viewDate),\n viewId: datepicker.picker.currentView.id,\n datepicker,\n };\n datepicker.element.dispatchEvent(new CustomEvent(type, {detail}));\n}\n\n// direction: -1 (to previous), 1 (to next)\nexport function goToPrevOrNext(datepicker, direction) {\n const {minDate, maxDate} = datepicker.config;\n const {currentView, viewDate} = datepicker.picker;\n let newViewDate;\n switch (currentView.id) {\n case 0:\n newViewDate = addMonths(viewDate, direction);\n break;\n case 1:\n newViewDate = addYears(viewDate, direction);\n break;\n default:\n newViewDate = addYears(viewDate, direction * currentView.navStep);\n }\n newViewDate = limitToRange(newViewDate, minDate, maxDate);\n datepicker.picker.changeFocus(newViewDate).render();\n}\n\nexport function switchView(datepicker) {\n const viewId = datepicker.picker.currentView.id;\n if (viewId === datepicker.config.maxView) {\n return;\n }\n datepicker.picker.changeView(viewId + 1).render();\n}\n\nexport function unfocus(datepicker) {\n if (datepicker.config.updateOnBlur) {\n datepicker.update({revert: true});\n } else {\n datepicker.refresh('input');\n }\n datepicker.hide();\n}\n","import {isInRange} from '../lib/utils.js';\nimport {isActiveElement} from '../lib/dom.js';\nimport {addDays, addMonths, addYears, startOfYearPeriod} from '../lib/date.js';\nimport {goToPrevOrNext, switchView, unfocus} from './functions.js';\n\n// Find the closest date that doesn't meet the condition for unavailable date\n// Returns undefined if no available date is found\n// addFn: function to calculate the next date\n// - args: time value, amount\n// increase: amount to pass to addFn\n// testFn: function to test the unavailablity of the date\n// - args: time value; retun: true if unavailable\nfunction findNextAvailableOne(date, addFn, increase, testFn, min, max) {\n if (!isInRange(date, min, max)) {\n return;\n }\n if (testFn(date)) {\n const newDate = addFn(date, increase);\n return findNextAvailableOne(newDate, addFn, increase, testFn, min, max);\n }\n return date;\n}\n\n// direction: -1 (left/up), 1 (right/down)\n// vertical: true for up/down, false for left/right\nfunction moveByArrowKey(datepicker, ev, direction, vertical) {\n const picker = datepicker.picker;\n const currentView = picker.currentView;\n const step = currentView.step || 1;\n let viewDate = picker.viewDate;\n let addFn;\n let testFn;\n switch (currentView.id) {\n case 0:\n if (vertical) {\n viewDate = addDays(viewDate, direction * 7);\n } else if (ev.ctrlKey || ev.metaKey) {\n viewDate = addYears(viewDate, direction);\n } else {\n viewDate = addDays(viewDate, direction);\n }\n addFn = addDays;\n testFn = (date) => currentView.disabled.includes(date);\n break;\n case 1:\n viewDate = addMonths(viewDate, vertical ? direction * 4 : direction);\n addFn = addMonths;\n testFn = (date) => {\n const dt = new Date(date);\n const {year, disabled} = currentView;\n return dt.getFullYear() === year && disabled.includes(dt.getMonth());\n };\n break;\n default:\n viewDate = addYears(viewDate, direction * (vertical ? 4 : 1) * step);\n addFn = addYears;\n testFn = date => currentView.disabled.includes(startOfYearPeriod(date, step));\n }\n viewDate = findNextAvailableOne(\n viewDate,\n addFn,\n direction < 0 ? -step : step,\n testFn,\n currentView.minDate,\n currentView.maxDate\n );\n if (viewDate !== undefined) {\n picker.changeFocus(viewDate).render();\n }\n}\n\nexport function onKeydown(datepicker, ev) {\n const key = ev.key;\n if (key === 'Tab') {\n unfocus(datepicker);\n return;\n }\n\n const picker = datepicker.picker;\n const {id, isMinView} = picker.currentView;\n if (!picker.active) {\n if (key === 'ArrowDown') {\n picker.show();\n } else {\n if (key === 'Enter') {\n datepicker.update();\n } else if (key === 'Escape') {\n picker.show();\n }\n return;\n }\n } else if (datepicker.editMode) {\n if (key === 'Enter') {\n datepicker.exitEditMode({update: true, autohide: datepicker.config.autohide});\n } else if (key === 'Escape') {\n picker.hide();\n }\n return;\n } else {\n if (key === 'ArrowLeft') {\n if (ev.ctrlKey || ev.metaKey) {\n goToPrevOrNext(datepicker, -1);\n } else if (ev.shiftKey) {\n datepicker.enterEditMode();\n return;\n } else {\n moveByArrowKey(datepicker, ev, -1, false);\n }\n } else if (key === 'ArrowRight') {\n if (ev.ctrlKey || ev.metaKey) {\n goToPrevOrNext(datepicker, 1);\n } else if (ev.shiftKey) {\n datepicker.enterEditMode();\n return;\n } else {\n moveByArrowKey(datepicker, ev, 1, false);\n }\n } else if (key === 'ArrowUp') {\n if (ev.ctrlKey || ev.metaKey) {\n switchView(datepicker);\n } else if (ev.shiftKey) {\n datepicker.enterEditMode();\n return;\n } else {\n moveByArrowKey(datepicker, ev, -1, true);\n }\n } else if (key === 'ArrowDown') {\n if (ev.shiftKey && !ev.ctrlKey && !ev.metaKey) {\n datepicker.enterEditMode();\n return;\n }\n moveByArrowKey(datepicker, ev, 1, true);\n } else if (key === 'Enter') {\n if (isMinView) {\n datepicker.setDate(picker.viewDate);\n return;\n }\n picker.changeView(id - 1).render();\n } else {\n if (key === 'Escape') {\n picker.hide();\n } else if (\n key === 'Backspace'\n || key === 'Delete'\n || (key.length === 1 && !ev.ctrlKey && !ev.metaKey)\n ) {\n datepicker.enterEditMode();\n }\n return;\n }\n }\n ev.preventDefault();\n}\n\nexport function onFocus(datepicker) {\n if (datepicker.config.showOnFocus && !datepicker._showing) {\n datepicker.show();\n }\n}\n\n// for the prevention for entering edit mode while getting focus on click\nexport function onMousedown(datepicker, ev) {\n const el = ev.target;\n if (datepicker.picker.active || datepicker.config.showOnClick) {\n el._active = isActiveElement(el);\n el._clicking = setTimeout(() => {\n delete el._active;\n delete el._clicking;\n }, 2000);\n }\n}\n\nexport function onClickInput(datepicker, ev) {\n const el = ev.target;\n if (!el._clicking) {\n return;\n }\n clearTimeout(el._clicking);\n delete el._clicking;\n\n if (el._active) {\n datepicker.enterEditMode();\n }\n delete el._active;\n\n if (datepicker.config.showOnClick) {\n datepicker.show();\n }\n}\n\nexport function onPaste(datepicker, ev) {\n if (ev.clipboardData.types.includes('text/plain')) {\n datepicker.enterEditMode();\n }\n}\n","import {isActiveElement} from '../lib/dom.js';\nimport {findElementInEventPath} from '../lib/event.js';\nimport {unfocus} from './functions.js';\n\n// for the `document` to delegate the events from outside the picker/input field\nexport function onClickOutside(datepicker, ev) {\n const {element, picker} = datepicker;\n // check both picker's and input's activeness to make updateOnBlur work in\n // the cases where...\n // - picker is hidden by ESC key press → input stays focused\n // - input is unfocused by closing mobile keyboard → piker is kept shown\n if (!picker.active && !isActiveElement(element)) {\n return;\n }\n const pickerElem = picker.element;\n if (findElementInEventPath(ev, el => el === element || el === pickerElem)) {\n return;\n }\n unfocus(datepicker);\n}\n","import {today, addMonths, addYears} from '../lib/date.js';\nimport {findElementInEventPath} from '../lib/event.js';\nimport {goToPrevOrNext, switchView} from './functions.js';\n\nfunction goToSelectedMonthOrYear(datepicker, selection) {\n const picker = datepicker.picker;\n const viewDate = new Date(picker.viewDate);\n const viewId = picker.currentView.id;\n const newDate = viewId === 1\n ? addMonths(viewDate, selection - viewDate.getMonth())\n : addYears(viewDate, selection - viewDate.getFullYear());\n\n picker.changeFocus(newDate).changeView(viewId - 1).render();\n}\n\nexport function onClickTodayBtn(datepicker) {\n const picker = datepicker.picker;\n const currentDate = today();\n if (datepicker.config.todayBtnMode === 1) {\n if (datepicker.config.autohide) {\n datepicker.setDate(currentDate);\n return;\n }\n datepicker.setDate(currentDate, {render: false});\n picker.update();\n }\n if (picker.viewDate !== currentDate) {\n picker.changeFocus(currentDate);\n }\n picker.changeView(0).render();\n}\n\nexport function onClickClearBtn(datepicker) {\n datepicker.setDate({clear: true});\n}\n\nexport function onClickViewSwitch(datepicker) {\n switchView(datepicker);\n}\n\nexport function onClickPrevBtn(datepicker) {\n goToPrevOrNext(datepicker, -1);\n}\n\nexport function onClickNextBtn(datepicker) {\n goToPrevOrNext(datepicker, 1);\n}\n\n// For the picker's main block to delegete the events from `datepicker-cell`s\nexport function onClickView(datepicker, ev) {\n const target = findElementInEventPath(ev, '.datepicker-cell');\n if (!target || target.classList.contains('disabled')) {\n return;\n }\n\n const {id, isMinView} = datepicker.picker.currentView;\n if (isMinView) {\n datepicker.setDate(Number(target.dataset.date));\n } else if (id === 1) {\n goToSelectedMonthOrYear(datepicker, Number(target.dataset.month));\n } else {\n goToSelectedMonthOrYear(datepicker, Number(target.dataset.year));\n }\n}\n\nexport function onMousedownPicker(ev) {\n ev.preventDefault();\n}\n","// default locales\nexport const locales = {\n en: {\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n today: \"Today\",\n clear: \"Clear\",\n titleFormat: \"MM y\"\n }\n};\n","import {stripTime, today} from './date.js';\nimport {lastItemOf} from './utils.js';\n\n// pattern for format parts\nexport const reFormatTokens = /dd?|DD?|mm?|MM?|yy?(?:yy)?/;\n// pattern for non date parts\nexport const reNonDateParts = /[\\s!-/:-@[-`{-~年月日]+/;\n// cache for persed formats\nlet knownFormats = {};\n// parse funtions for date parts\nconst parseFns = {\n y(date, year) {\n return new Date(date).setFullYear(parseInt(year, 10));\n },\n m(date, month, locale) {\n const newDate = new Date(date);\n let monthIndex = parseInt(month, 10) - 1;\n\n if (isNaN(monthIndex)) {\n if (!month) {\n return NaN;\n }\n\n const monthName = month.toLowerCase();\n const compareNames = name => name.toLowerCase().startsWith(monthName);\n // compare with both short and full names because some locales have periods\n // in the short names (not equal to the first X letters of the full names)\n monthIndex = locale.monthsShort.findIndex(compareNames);\n if (monthIndex < 0) {\n monthIndex = locale.months.findIndex(compareNames);\n }\n if (monthIndex < 0) {\n return NaN;\n }\n }\n\n newDate.setMonth(monthIndex);\n return newDate.getMonth() !== normalizeMonth(monthIndex)\n ? newDate.setDate(0)\n : newDate.getTime();\n },\n d(date, day) {\n return new Date(date).setDate(parseInt(day, 10));\n },\n};\n// format functions for date parts\nconst formatFns = {\n d(date) {\n return date.getDate();\n },\n dd(date) {\n return padZero(date.getDate(), 2);\n },\n D(date, locale) {\n return locale.daysShort[date.getDay()];\n },\n DD(date, locale) {\n return locale.days[date.getDay()];\n },\n m(date) {\n return date.getMonth() + 1;\n },\n mm(date) {\n return padZero(date.getMonth() + 1, 2);\n },\n M(date, locale) {\n return locale.monthsShort[date.getMonth()];\n },\n MM(date, locale) {\n return locale.months[date.getMonth()];\n },\n y(date) {\n return date.getFullYear();\n },\n yy(date) {\n return padZero(date.getFullYear(), 2).slice(-2);\n },\n yyyy(date) {\n return padZero(date.getFullYear(), 4);\n },\n};\n\n// get month index in normal range (0 - 11) from any number\nfunction normalizeMonth(monthIndex) {\n return monthIndex > -1 ? monthIndex % 12 : normalizeMonth(monthIndex + 12);\n}\n\nfunction padZero(num, length) {\n return num.toString().padStart(length, '0');\n}\n\nfunction parseFormatString(format) {\n if (typeof format !== 'string') {\n throw new Error(\"Invalid date format.\");\n }\n if (format in knownFormats) {\n return knownFormats[format];\n }\n\n // sprit the format string into parts and seprators\n const separators = format.split(reFormatTokens);\n const parts = format.match(new RegExp(reFormatTokens, 'g'));\n if (separators.length === 0 || !parts) {\n throw new Error(\"Invalid date format.\");\n }\n\n // collect format functions used in the format\n const partFormatters = parts.map(token => formatFns[token]);\n\n // collect parse function keys used in the format\n // iterate over parseFns' keys in order to keep the order of the keys.\n const partParserKeys = Object.keys(parseFns).reduce((keys, key) => {\n const token = parts.find(part => part[0] !== 'D' && part[0].toLowerCase() === key);\n if (token) {\n keys.push(key);\n }\n return keys;\n }, []);\n\n return knownFormats[format] = {\n parser(dateStr, locale) {\n const dateParts = dateStr.split(reNonDateParts).reduce((dtParts, part, index) => {\n if (part.length > 0 && parts[index]) {\n const token = parts[index][0];\n if (token === 'M') {\n dtParts.m = part;\n } else if (token !== 'D') {\n dtParts[token] = part;\n }\n }\n return dtParts;\n }, {});\n\n // iterate over partParserkeys so that the parsing is made in the oder\n // of year, month and day to prevent the day parser from correcting last\n // day of month wrongly\n return partParserKeys.reduce((origDate, key) => {\n const newDate = parseFns[key](origDate, dateParts[key], locale);\n // ingnore the part failed to parse\n return isNaN(newDate) ? origDate : newDate;\n }, today());\n },\n formatter(date, locale) {\n let dateStr = partFormatters.reduce((str, fn, index) => {\n return str += `${separators[index]}${fn(date, locale)}`;\n }, '');\n // separators' length is always parts' length + 1,\n return dateStr += lastItemOf(separators);\n },\n };\n}\n\nexport function parseDate(dateStr, format, locale) {\n if (dateStr instanceof Date || typeof dateStr === 'number') {\n const date = stripTime(dateStr);\n return isNaN(date) ? undefined : date;\n }\n if (!dateStr) {\n return undefined;\n }\n if (dateStr === 'today') {\n return today();\n }\n\n if (format && format.toValue) {\n const date = format.toValue(dateStr, format, locale);\n return isNaN(date) ? undefined : stripTime(date);\n }\n\n return parseFormatString(format).parser(dateStr, locale);\n}\n\nexport function formatDate(date, format, locale) {\n if (isNaN(date) || (!date && date !== 0)) {\n return '';\n }\n\n const dateObj = typeof date === 'number' ? new Date(date) : date;\n\n if (format.toDisplay) {\n return format.toDisplay(dateObj, format, locale);\n }\n\n return parseFormatString(format).formatter(dateObj, locale);\n}\n","export function stripTime(timeValue) {\n return new Date(timeValue).setHours(0, 0, 0, 0);\n}\n\nexport function today() {\n return new Date().setHours(0, 0, 0, 0);\n}\n\n// Get the time value of the start of given date or year, month and day\nexport function dateValue(...args) {\n switch (args.length) {\n case 0:\n return today();\n case 1:\n return stripTime(args[0]);\n }\n\n // use setFullYear() to keep 2-digit year from being mapped to 1900-1999\n const newDate = new Date(0);\n newDate.setFullYear(...args);\n return newDate.setHours(0, 0, 0, 0);\n}\n\nexport function addDays(date, amount) {\n const newDate = new Date(date);\n return newDate.setDate(newDate.getDate() + amount);\n}\n\nexport function addWeeks(date, amount) {\n return addDays(date, amount * 7);\n}\n\nexport function addMonths(date, amount) {\n // If the day of the date is not in the new month, the last day of the new\n // month will be returned. e.g. Jan 31 + 1 month → Feb 28 (not Mar 03)\n const newDate = new Date(date);\n const monthsToSet = newDate.getMonth() + amount;\n let expectedMonth = monthsToSet % 12;\n if (expectedMonth < 0) {\n expectedMonth += 12;\n }\n\n const time = newDate.setMonth(monthsToSet);\n return newDate.getMonth() !== expectedMonth ? newDate.setDate(0) : time;\n}\n\nexport function addYears(date, amount) {\n // If the date is Feb 29 and the new year is not a leap year, Feb 28 of the\n // new year will be returned.\n const newDate = new Date(date);\n const expectedMonth = newDate.getMonth();\n const time = newDate.setFullYear(newDate.getFullYear() + amount);\n return expectedMonth === 1 && newDate.getMonth() === 2 ? newDate.setDate(0) : time;\n}\n\n// Calculate the distance bettwen 2 days of the week\nfunction dayDiff(day, from) {\n return (day - from + 7) % 7;\n}\n\n// Get the date of the specified day of the week of given base date\nexport function dayOfTheWeekOf(baseDate, dayOfWeek, weekStart = 0) {\n const baseDay = new Date(baseDate).getDay();\n return addDays(baseDate, dayDiff(dayOfWeek, weekStart) - dayDiff(baseDay, weekStart));\n}\n\n// Get the ISO week of a date\nexport function getWeek(date) {\n // start of ISO week is Monday\n const thuOfTheWeek = dayOfTheWeekOf(date, 4, 1);\n // 1st week == the week where the 4th of January is in\n const firstThu = dayOfTheWeekOf(new Date(thuOfTheWeek).setMonth(0, 4), 4, 1);\n return Math.round((thuOfTheWeek - firstThu) / 604800000) + 1;\n}\n\n// Get the start year of the period of years that includes given date\n// years: length of the year period\nexport function startOfYearPeriod(date, years) {\n /* @see https://en.wikipedia.org/wiki/Year_zero#ISO_8601 */\n const year = new Date(date).getFullYear();\n return Math.floor(year / years) * years;\n}\n\n// Convert date to the first/last date of the month/year of the date\nexport function regularizeDate(date, timeSpan, useLastDate) {\n if (timeSpan !== 1 && timeSpan !== 2) {\n return date;\n }\n const newDate = new Date(date);\n if (timeSpan === 1) {\n useLastDate\n ? newDate.setMonth(newDate.getMonth() + 1, 0)\n : newDate.setDate(1);\n } else {\n useLastDate\n ? newDate.setFullYear(newDate.getFullYear() + 1, 0, 0)\n : newDate.setMonth(0, 1);\n }\n return newDate.setHours(0, 0, 0, 0);\n}\n","const range = document.createRange();\n\nexport function parseHTML(html) {\n return range.createContextualFragment(html);\n}\n\nexport function getParent(el) {\n return el.parentElement\n || (el.parentNode instanceof ShadowRoot ? el.parentNode.host : undefined);\n}\n\nexport function isActiveElement(el) {\n return el.getRootNode().activeElement === el;\n}\n\n// equivalent to jQuery's :visble\nexport function isVisible(el) {\n return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function hideElement(el) {\n if (el.style.display === 'none') {\n return;\n }\n // back up the existing display setting in data-style-display\n if (el.style.display) {\n el.dataset.styleDisplay = el.style.display;\n }\n el.style.display = 'none';\n}\n\nexport function showElement(el) {\n if (el.style.display !== 'none') {\n return;\n }\n if (el.dataset.styleDisplay) {\n // restore backed-up dispay property\n el.style.display = el.dataset.styleDisplay;\n delete el.dataset.styleDisplay;\n } else {\n el.style.display = '';\n }\n}\n\nexport function emptyChildNodes(el) {\n if (el.firstChild) {\n el.removeChild(el.firstChild);\n emptyChildNodes(el);\n }\n}\n\nexport function replaceChildNodes(el, newChildNodes) {\n emptyChildNodes(el);\n if (newChildNodes instanceof DocumentFragment) {\n el.appendChild(newChildNodes);\n } else if (typeof newChildNodes === 'string') {\n el.appendChild(parseHTML(newChildNodes));\n } else if (typeof newChildNodes.forEach === 'function') {\n newChildNodes.forEach((node) => {\n el.appendChild(node);\n });\n }\n}\n","const listenerRegistry = new WeakMap();\nconst {addEventListener, removeEventListener} = EventTarget.prototype;\n\n// Register event listeners to a key object\n// listeners: array of listener definitions;\n// - each definition must be a flat array of event target and the arguments\n// used to call addEventListener() on the target\nexport function registerListeners(keyObj, listeners) {\n let registered = listenerRegistry.get(keyObj);\n if (!registered) {\n registered = [];\n listenerRegistry.set(keyObj, registered);\n }\n listeners.forEach((listener) => {\n addEventListener.call(...listener);\n registered.push(listener);\n });\n}\n\nexport function unregisterListeners(keyObj) {\n let listeners = listenerRegistry.get(keyObj);\n if (!listeners) {\n return;\n }\n listeners.forEach((listener) => {\n removeEventListener.call(...listener);\n });\n listenerRegistry.delete(keyObj);\n}\n\n// Event.composedPath() polyfill for Edge\n// based on https://gist.github.com/kleinfreund/e9787d73776c0e3750dcfcdc89f100ec\nif (!Event.prototype.composedPath) {\n const getComposedPath = (node, path = []) => {\n path.push(node);\n\n let parent;\n if (node.parentNode) {\n parent = node.parentNode;\n } else if (node.host) { // ShadowRoot\n parent = node.host;\n } else if (node.defaultView) { // Document\n parent = node.defaultView;\n }\n return parent ? getComposedPath(parent, path) : path;\n };\n\n Event.prototype.composedPath = function () {\n return getComposedPath(this.target);\n };\n}\n\nfunction findFromPath(path, criteria, currentTarget) {\n const [node, ...rest] = path;\n if (criteria(node)) {\n return node;\n }\n if (node === currentTarget || node.tagName === 'HTML' || rest.length === 0) {\n // stop when reaching currentTarget or <html>\n return;\n }\n return findFromPath(rest, criteria, currentTarget);\n}\n\n// Search for the actual target of a delegated event\nexport function findElementInEventPath(ev, selector) {\n const criteria = typeof selector === 'function'\n ? selector\n : el => el instanceof Element && el.matches(selector);\n return findFromPath(ev.composedPath(), criteria, ev.currentTarget);\n}\n","export function hasProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function lastItemOf(arr) {\n return arr[arr.length - 1];\n}\n\n// push only the items not included in the array\nexport function pushUnique(arr, ...items) {\n items.forEach((item) => {\n if (arr.includes(item)) {\n return;\n }\n arr.push(item);\n });\n return arr;\n}\n\nexport function stringToArray(str, separator) {\n // convert empty string to an empty array\n return str ? str.split(separator) : [];\n}\n\nexport function isInRange(testVal, min, max) {\n const minOK = min === undefined || testVal >= min;\n const maxOK = max === undefined || testVal <= max;\n return minOK && maxOK;\n}\n\nexport function limitToRange(val, min, max) {\n if (val < min) {\n return min;\n }\n if (val > max) {\n return max;\n }\n return val;\n}\n\nexport function createTagRepeat(tagName, repeat, attributes = {}, index = 0, html = '') {\n const openTagSrc = Object.keys(attributes).reduce((src, attr) => {\n let val = attributes[attr];\n if (typeof val === 'function') {\n val = val(index);\n }\n return `${src} ${attr}=\"${val}\"`;\n }, tagName);\n html += `<${openTagSrc}></${tagName}>`;\n\n const next = index + 1;\n return next < repeat\n ? createTagRepeat(tagName, repeat, attributes, next, html)\n : html;\n}\n\n// Remove the spacing surrounding tags for HTML parser not to create text nodes\n// before/after elements\nexport function optimizeTemplateHTML(html) {\n return html.replace(/>\\s+/g, '>').replace(/\\s+</, '<');\n}\n","import Datepicker from './Datepicker.js';\nimport DateRangePicker from './DateRangePicker.js';\n\nexport {Datepicker, DateRangePicker};\n","// config options updatable by setOptions() and their default values\nconst defaultOptions = {\n autohide: false,\n beforeShowDay: null,\n beforeShowDecade: null,\n beforeShowMonth: null,\n beforeShowYear: null,\n calendarWeeks: false,\n clearBtn: false,\n dateDelimiter: ',',\n datesDisabled: [],\n daysOfWeekDisabled: [],\n daysOfWeekHighlighted: [],\n defaultViewDate: undefined, // placeholder, defaults to today() by the program\n disableTouchKeyboard: false,\n format: 'mm/dd/yyyy',\n language: 'en',\n maxDate: null,\n maxNumberOfDates: 1,\n maxView: 3,\n minDate: null,\n nextArrow: '»',\n orientation: 'auto',\n pickLevel: 0,\n prevArrow: '«',\n showDaysOfWeek: true,\n showOnClick: true,\n showOnFocus: true,\n startView: 0,\n title: '',\n todayBtn: false,\n todayBtnMode: 0,\n todayHighlight: false,\n updateOnBlur: true,\n weekStart: 0,\n};\n\nexport default defaultOptions;\n","import {hasProperty, pushUnique} from '../lib/utils.js';\nimport {dateValue, regularizeDate} from '../lib/date.js';\nimport {reFormatTokens, parseDate} from '../lib/date-format.js';\nimport {parseHTML} from '../lib/dom.js';\nimport defaultOptions from './defaultOptions.js';\n\nconst {\n language: defaultLang,\n format: defaultFormat,\n weekStart: defaultWeekStart,\n} = defaultOptions;\n\n// Reducer function to filter out invalid day-of-week from the input\nfunction sanitizeDOW(dow, day) {\n return dow.length < 6 && day >= 0 && day < 7\n ? pushUnique(dow, day)\n : dow;\n}\n\nfunction calcEndOfWeek(startOfWeek) {\n return (startOfWeek + 6) % 7;\n}\n\n// validate input date. if invalid, fallback to the original value\nfunction validateDate(value, format, locale, origValue) {\n const date = parseDate(value, format, locale);\n return date !== undefined ? date : origValue;\n}\n\n// Validate viewId. if invalid, fallback to the original value\nfunction validateViewId(value, origValue, max = 3) {\n const viewId = parseInt(value, 10);\n return viewId >= 0 && viewId <= max ? viewId : origValue;\n}\n\n// Create Datepicker configuration to set\nexport default function processOptions(options, datepicker) {\n const inOpts = Object.assign({}, options);\n const config = {};\n const locales = datepicker.constructor.locales;\n const rangeSideIndex = datepicker.rangeSideIndex;\n let {\n format,\n language,\n locale,\n maxDate,\n maxView,\n minDate,\n pickLevel,\n startView,\n weekStart,\n } = datepicker.config || {};\n\n if (inOpts.language) {\n let lang;\n if (inOpts.language !== language) {\n if (locales[inOpts.language]) {\n lang = inOpts.language;\n } else {\n // Check if langauge + region tag can fallback to the one without\n // region (e.g. fr-CA → fr)\n lang = inOpts.language.split('-')[0];\n if (locales[lang] === undefined) {\n lang = false;\n }\n }\n }\n delete inOpts.language;\n if (lang) {\n language = config.language = lang;\n\n // update locale as well when updating language\n const origLocale = locale || locales[defaultLang];\n // use default language's properties for the fallback\n locale = Object.assign({\n format: defaultFormat,\n weekStart: defaultWeekStart\n }, locales[defaultLang]);\n if (language !== defaultLang) {\n Object.assign(locale, locales[language]);\n }\n config.locale = locale;\n // if format and/or weekStart are the same as old locale's defaults,\n // update them to new locale's defaults\n if (format === origLocale.format) {\n format = config.format = locale.format;\n }\n if (weekStart === origLocale.weekStart) {\n weekStart = config.weekStart = locale.weekStart;\n config.weekEnd = calcEndOfWeek(locale.weekStart);\n }\n }\n }\n\n if (inOpts.format) {\n const hasToDisplay = typeof inOpts.format.toDisplay === 'function';\n const hasToValue = typeof inOpts.format.toValue === 'function';\n const validFormatString = reFormatTokens.test(inOpts.format);\n if ((hasToDisplay && hasToValue) || validFormatString) {\n format = config.format = inOpts.format;\n }\n delete inOpts.format;\n }\n\n //*** pick level ***//\n let newPickLevel = pickLevel;\n if (inOpts.pickLevel !== undefined) {\n newPickLevel = validateViewId(inOpts.pickLevel, 2);\n delete inOpts.pickLevel;\n }\n if (newPickLevel !== pickLevel) {\n if (newPickLevel > pickLevel) {\n // complement current minDate/madDate so that the existing range will be\n // expanded to fit the new level later\n if (inOpts.minDate === undefined) {\n inOpts.minDate = minDate;\n }\n if (inOpts.maxDate === undefined) {\n inOpts.maxDate = maxDate;\n }\n }\n // complement datesDisabled so that it will be reset later\n if (!inOpts.datesDisabled) {\n inOpts.datesDisabled = [];\n }\n pickLevel = config.pickLevel = newPickLevel;\n }\n\n //*** dates ***//\n // while min and maxDate for \"no limit\" in the options are better to be null\n // (especially when updating), the ones in the config have to be undefined\n // because null is treated as 0 (= unix epoch) when comparing with time value\n let minDt = minDate;\n let maxDt = maxDate;\n if (inOpts.minDate !== undefined) {\n const defaultMinDt = dateValue(0, 0, 1);\n minDt = inOpts.minDate === null\n ? defaultMinDt // set 0000-01-01 to prevent negative values for year\n : validateDate(inOpts.minDate, format, locale, minDt);\n if (minDt !== defaultMinDt) {\n minDt = regularizeDate(minDt, pickLevel, false);\n }\n delete inOpts.minDate;\n }\n if (inOpts.maxDate !== undefined) {\n maxDt = inOpts.maxDate === null\n ? undefined\n : validateDate(inOpts.maxDate, format, locale, maxDt);\n if (maxDt !== undefined) {\n maxDt = regularizeDate(maxDt, pickLevel, true);\n }\n delete inOpts.maxDate;\n }\n if (maxDt < minDt) {\n minDate = config.minDate = maxDt;\n maxDate = config.maxDate = minDt;\n } else {\n if (minDate !== minDt) {\n minDate = config.minDate = minDt;\n }\n if (maxDate !== maxDt) {\n maxDate = config.maxDate = maxDt;\n }\n }\n\n if (inOpts.datesDisabled) {\n config.datesDisabled = inOpts.datesDisabled.reduce((dates, dt) => {\n const date = parseDate(dt, format, locale);\n return date !== undefined\n ? pushUnique(dates, regularizeDate(date, pickLevel, rangeSideIndex))\n : dates;\n }, []);\n delete inOpts.datesDisabled;\n }\n if (inOpts.defaultViewDate !== undefined) {\n const viewDate = parseDate(inOpts.defaultViewDate, format, locale);\n if (viewDate !== undefined) {\n config.defaultViewDate = viewDate;\n }\n delete inOpts.defaultViewDate;\n }\n\n //*** days of week ***//\n if (inOpts.weekStart !== undefined) {\n const wkStart = Number(inOpts.weekStart) % 7;\n if (!isNaN(wkStart)) {\n weekStart = config.weekStart = wkStart;\n config.weekEnd = calcEndOfWeek(wkStart);\n }\n delete inOpts.weekStart;\n }\n if (inOpts.daysOfWeekDisabled) {\n config.daysOfWeekDisabled = inOpts.daysOfWeekDisabled.reduce(sanitizeDOW, []);\n delete inOpts.daysOfWeekDisabled;\n }\n if (inOpts.daysOfWeekHighlighted) {\n config.daysOfWeekHighlighted = inOpts.daysOfWeekHighlighted.reduce(sanitizeDOW, []);\n delete inOpts.daysOfWeekHighlighted;\n }\n\n //*** multi date ***//\n if (inOpts.maxNumberOfDates !== undefined) {\n const maxNumberOfDates = parseInt(inOpts.maxNumberOfDates, 10);\n if (maxNumberOfDates >= 0) {\n config.maxNumberOfDates = maxNumberOfDates;\n config.multidate = maxNumberOfDates !== 1;\n }\n delete inOpts.maxNumberOfDates;\n }\n if (inOpts.dateDelimiter) {\n config.dateDelimiter = String(inOpts.dateDelimiter);\n delete inOpts.dateDelimiter;\n }\n\n //*** view ***//\n let newMaxView = maxView;\n if (inOpts.maxView !== undefined) {\n newMaxView = validateViewId(inOpts.maxView, maxView);\n delete inOpts.maxView;\n }\n // ensure max view >= pick level\n newMaxView = pickLevel > newMaxView ? pickLevel : newMaxView;\n if (newMaxView !== maxView) {\n maxView = config.maxView = newMaxView;\n }\n\n let newStartView = startView;\n if (inOpts.startView !== undefined) {\n newStartView = validateViewId(inOpts.startView, newStartView);\n delete inOpts.startView;\n }\n // ensure pick level <= start view <= max view\n if (newStartView < pickLevel) {\n newStartView = pickLevel;\n } else if (newStartView > maxView) {\n newStartView = maxView;\n }\n if (newStartView !== startView) {\n config.startView = newStartView;\n }\n\n //*** template ***//\n if (inOpts.prevArrow) {\n const prevArrow = parseHTML(inOpts.prevArrow);\n if (prevArrow.childNodes.length > 0) {\n config.prevArrow = prevArrow.childNodes;\n }\n delete inOpts.prevArrow;\n }\n if (inOpts.nextArrow) {\n const nextArrow = parseHTML(inOpts.nextArrow);\n if (nextArrow.childNodes.length > 0) {\n config.nextArrow = nextArrow.childNodes;\n }\n delete inOpts.nextArrow;\n }\n\n //*** misc ***//\n if (inOpts.disableTouchKeyboard !== undefined) {\n config.disableTouchKeyboard = 'ontouchstart' in document && !!inOpts.disableTouchKeyboard;\n delete inOpts.disableTouchKeyboard;\n }\n if (inOpts.orientation) {\n const orientation = inOpts.orientation.toLowerCase().split(/\\s+/g);\n config.orientation = {\n x: orientation.find(x => (x === 'left' || x === 'right')) || 'auto',\n y: orientation.find(y => (y === 'top' || y === 'bottom')) || 'auto',\n };\n delete inOpts.orientation;\n }\n if (inOpts.todayBtnMode !== undefined) {\n switch(inOpts.todayBtnMode) {\n case 0:\n case 1:\n config.todayBtnMode = inOpts.todayBtnMode;\n }\n delete inOpts.todayBtnMode;\n }\n\n //*** copy the rest ***//\n Object.keys(inOpts).forEach((key) => {\n if (inOpts[key] !== undefined && hasProperty(defaultOptions, key)) {\n config[key] = inOpts[key];\n }\n });\n\n return config;\n}\n","import {hasProperty, lastItemOf, isInRange, limitToRange} from '../lib/utils.js';\nimport {today} from '../lib/date.js';\nimport {parseHTML, getParent, showElement, hideElement, emptyChildNodes} from '../lib/dom.js';\nimport {registerListeners} from '../lib/event.js';\nimport pickerTemplate from './templates/pickerTemplate.js';\nimport DaysView from './views/DaysView.js';\nimport MonthsView from './views/MonthsView.js';\nimport YearsView from './views/YearsView.js';\nimport {triggerDatepickerEvent} from '../events/functions.js';\nimport {\n onClickTodayBtn,\n onClickClearBtn,\n onClickViewSwitch,\n onClickPrevBtn,\n onClickNextBtn,\n onClickView,\n onMousedownPicker,\n} from '../events/pickerListeners.js';\n\nconst orientClasses = ['left', 'top', 'right', 'bottom'].reduce((obj, key) => {\n obj[key] = `datepicker-orient-${key}`;\n return obj;\n}, {});\nconst toPx = num => num ? `${num}px` : num;\n\nfunction processPickerOptions(picker, options) {\n if (options.title !== undefined) {\n if (options.title) {\n picker.controls.title.textContent = options.title;\n showElement(picker.controls.title);\n } else {\n picker.controls.title.textContent = '';\n hideElement(picker.controls.title);\n }\n }\n if (options.prevArrow) {\n const prevBtn = picker.controls.prevBtn;\n emptyChildNodes(prevBtn);\n options.prevArrow.forEach((node) => {\n prevBtn.appendChild(node.cloneNode(true));\n });\n }\n if (options.nextArrow) {\n const nextBtn = picker.controls.nextBtn;\n emptyChildNodes(nextBtn);\n options.nextArrow.forEach((node) => {\n nextBtn.appendChild(node.cloneNode(true));\n });\n }\n if (options.locale) {\n picker.controls.todayBtn.textContent = options.locale.today;\n picker.controls.clearBtn.textContent = options.locale.clear;\n }\n if (options.todayBtn !== undefined) {\n if (options.todayBtn) {\n showElement(picker.controls.todayBtn);\n } else {\n hideElement(picker.controls.todayBtn);\n }\n }\n if (hasProperty(options, 'minDate') || hasProperty(options, 'maxDate')) {\n const {minDate, maxDate} = picker.datepicker.config;\n picker.controls.todayBtn.disabled = !isInRange(today(), minDate, maxDate);\n }\n if (options.clearBtn !== undefined) {\n if (options.clearBtn) {\n showElement(picker.controls.clearBtn);\n } else {\n hideElement(picker.controls.clearBtn);\n }\n }\n}\n\n// Compute view date to reset, which will be...\n// - the last item of the selected dates or defaultViewDate if no selection\n// - limitted to minDate or maxDate if it exceeds the range\nfunction computeResetViewDate(datepicker) {\n const {dates, config} = datepicker;\n const viewDate = dates.length > 0 ? lastItemOf(dates) : config.defaultViewDate;\n return limitToRange(viewDate, config.minDate, config.maxDate);\n}\n\n// Change current view's view date\nfunction setViewDate(picker, newDate) {\n const oldViewDate = new Date(picker.viewDate);\n const newViewDate = new Date(newDate);\n const {id, year, first, last} = picker.currentView;\n const viewYear = newViewDate.getFullYear();\n\n picker.viewDate = newDate;\n if (viewYear !== oldViewDate.getFullYear()) {\n triggerDatepickerEvent(picker.datepicker, 'changeYear');\n }\n if (newViewDate.getMonth() !== oldViewDate.getMonth()) {\n triggerDatepickerEvent(picker.datepicker, 'changeMonth');\n }\n\n // return whether the new date is in different period on time from the one\n // displayed in the current view\n // when true, the view needs to be re-rendered on the next UI refresh.\n switch (id) {\n case 0:\n return newDate < first || newDate > last;\n case 1:\n return viewYear !== year;\n default:\n return viewYear < first || viewYear > last;\n }\n}\n\nfunction getTextDirection(el) {\n return window.getComputedStyle(el).direction;\n}\n\n// find the closet scrollable ancestor elemnt under the body\nfunction findScrollParents(el) {\n const parent = getParent(el);\n if (parent === document.body || !parent) {\n return;\n }\n\n // checking overflow only is enough because computed overflow cannot be\n // visible or a combination of visible and other when either axis is set\n // to other than visible.\n // (Setting one axis to other than 'visible' while the other is 'visible'\n // results in the other axis turning to 'auto')\n return window.getComputedStyle(parent).overflow !== 'visible'\n ? parent\n : findScrollParents(parent);\n}\n\n// Class representing the picker UI\nexport default class Picker {\n constructor(datepicker) {\n const {config} = this.datepicker = datepicker;\n\n const template = pickerTemplate.replace(/%buttonClass%/g, config.buttonClass);\n const element = this.element = parseHTML(template).firstChild;\n const [header, main, footer] = element.firstChild.children;\n const title = header.firstElementChild;\n const [prevBtn, viewSwitch, nextBtn] = header.lastElementChild.children;\n const [todayBtn, clearBtn] = footer.firstChild.children;\n const controls = {\n title,\n prevBtn,\n viewSwitch,\n nextBtn,\n todayBtn,\n clearBtn,\n };\n this.main = main;\n this.controls = controls;\n\n const elementClass = datepicker.inline ? 'inline' : 'dropdown';\n element.classList.add(`datepicker-${elementClass}`);\n\n processPickerOptions(this, config);\n this.viewDate = computeResetViewDate(datepicker);\n\n // set up event listeners\n registerListeners(datepicker, [\n [element, 'mousedown', onMousedownPicker],\n [main, 'click', onClickView.bind(null, datepicker)],\n [controls.viewSwitch, 'click', onClickViewSwitch.bind(null, datepicker)],\n [controls.prevBtn, 'click', onClickPrevBtn.bind(null, datepicker)],\n [controls.nextBtn, 'click', onClickNextBtn.bind(null, datepicker)],\n [controls.todayBtn, 'click', onClickTodayBtn.bind(null, datepicker)],\n [controls.clearBtn, 'click', onClickClearBtn.bind(null, datepicker)],\n ]);\n\n // set up views\n this.views = [\n new DaysView(this),\n new MonthsView(this),\n new YearsView(this, {id: 2, name: 'years', cellClass: 'year', step: 1}),\n new YearsView(this, {id: 3, name: 'decades', cellClass: 'decade', step: 10}),\n ];\n this.currentView = this.views[config.startView];\n\n this.currentView.render();\n this.main.appendChild(this.currentView.element);\n if (config.container) {\n config.container.appendChild(this.element);\n } else {\n datepicker.inputField.after(this.element);\n }\n }\n\n setOptions(options) {\n processPickerOptions(this, options);\n this.views.forEach((view) => {\n view.init(options, false);\n });\n this.currentView.render();\n }\n\n detach() {\n this.element.remove();\n }\n\n show() {\n if (this.active) {\n return;\n }\n\n const {datepicker, element} = this;\n if (datepicker.inline) {\n element.classList.add('active');\n } else {\n // ensure picker's direction matches input's\n const inputDirection = getTextDirection(datepicker.inputField);\n if (inputDirection !== getTextDirection(getParent(element))) {\n element.dir = inputDirection;\n } else if (element.dir) {\n element.removeAttribute('dir');\n }\n\n element.style.visiblity = 'hidden';\n element.classList.add('active');\n this.place();\n element.style.visiblity = '';\n\n if (datepicker.config.disableTouchKeyboard) {\n datepicker.inputField.blur();\n }\n }\n this.active = true;\n triggerDatepickerEvent(datepicker, 'show');\n }\n\n hide() {\n if (!this.active) {\n return;\n }\n this.datepicker.exitEditMode();\n this.element.classList.remove('active');\n this.active = false;\n triggerDatepickerEvent(this.datepicker, 'hide');\n }\n\n place() {\n const {classList, offsetParent, style} = this.element;\n const {config, inputField} = this.datepicker;\n const {\n width: calendarWidth,\n height: calendarHeight,\n } = this.element.getBoundingClientRect();\n const {\n left: inputLeft,\n top: inputTop,\n right: inputRight,\n bottom: inputBottom,\n width: inputWidth,\n height: inputHeight\n } = inputField.getBoundingClientRect();\n let {x: orientX, y: orientY} = config.orientation;\n let left = inputLeft;\n let top = inputTop;\n\n // caliculate offsetLeft/Top of inputField\n if (offsetParent === document.body || !offsetParent) {\n left += window.scrollX;\n top += window.scrollY;\n } else {\n const offsetParentRect = offsetParent.getBoundingClientRect();\n left -= offsetParentRect.left - offsetParent.scrollLeft;\n top -= offsetParentRect.top - offsetParent.scrollTop;\n }\n\n // caliculate the boundaries of the visible area that contains inputField\n const scrollParent = findScrollParents(inputField);\n let scrollAreaLeft = 0;\n let scrollAreaTop = 0;\n let {\n clientWidth: scrollAreaRight,\n clientHeight: scrollAreaBottom,\n } = document.documentElement;\n\n if (scrollParent) {\n const scrollParentRect = scrollParent.getBoundingClientRect();\n if (scrollParentRect.top > 0) {\n scrollAreaTop = scrollParentRect.top;\n }\n if (scrollParentRect.left > 0) {\n scrollAreaLeft = scrollParentRect.left;\n }\n if (scrollParentRect.right < scrollAreaRight) {\n scrollAreaRight = scrollParentRect.right;\n }\n if (scrollParentRect.bottom < scrollAreaBottom) {\n scrollAreaBottom = scrollParentRect.bottom;\n }\n }\n\n // determine the horizontal orientation and left position\n let adjustment = 0;\n if (orientX === 'auto') {\n if (inputLeft < scrollAreaLeft) {\n orientX = 'left';\n adjustment = scrollAreaLeft - inputLeft;\n } else if (inputLeft + calendarWidth > scrollAreaRight) {\n orientX = 'right';\n if (scrollAreaRight < inputRight) {\n adjustment = scrollAreaRight - inputRight;\n }\n } else if (getTextDirection(inputField) === 'rtl') {\n orientX = inputRight - calendarWidth < scrollAreaLeft ? 'left' : 'right';\n } else {\n orientX = 'left';\n }\n }\n if (orientX === 'right') {\n left += inputWidth - calendarWidth;\n }\n left += adjustment;\n\n // determine the vertical orientation and top position\n if (orientY === 'auto') {\n if (inputTop - calendarHeight > scrollAreaTop) {\n orientY = inputBottom + calendarHeight > scrollAreaBottom ? 'top' : 'bottom';\n } else {\n orientY = 'bottom';\n }\n }\n if (orientY === 'top') {\n top -= calendarHeight;\n } else {\n top += inputHeight;\n }\n\n classList.remove(...Object.values(orientClasses));\n classList.add(orientClasses[orientX], orientClasses[orientY]);\n\n style.left = toPx(left);\n style.top = toPx(top);\n }\n\n setViewSwitchLabel(labelText) {\n this.controls.viewSwitch.textContent = labelText;\n }\n\n setPrevBtnDisabled(disabled) {\n this.controls.prevBtn.disabled = disabled;\n }\n\n setNextBtnDisabled(disabled) {\n this.controls.nextBtn.disabled = disabled;\n }\n\n changeView(viewId) {\n const oldView = this.currentView;\n const newView = this.views[viewId];\n if (newView.id !== oldView.id) {\n this.currentView = newView;\n this._renderMethod = 'render';\n triggerDatepickerEvent(this.datepicker, 'changeView');\n this.main.replaceChild(newView.element, oldView.element);\n }\n return this;\n }\n\n // Change the focused date (view date)\n changeFocus(newViewDate) {\n this._renderMethod = setViewDate(this, newViewDate) ? 'render' : 'refreshFocus';\n this.views.forEach((view) => {\n view.updateFocus();\n });\n return this;\n }\n\n // Apply the change of the selected dates\n update() {\n const newViewDate = computeResetViewDate(this.datepicker);\n this._renderMethod = setViewDate(this, newViewDate) ? 'render' : 'refresh';\n this.views.forEach((view) => {\n view.updateFocus();\n view.updateSelection();\n });\n return this;\n }\n\n // Refresh the picker UI\n render(quickRender = true) {\n const renderMethod = (quickRender && this._renderMethod) || 'render';\n delete this._renderMethod;\n\n this.currentView[renderMethod]();\n }\n}\n","import {createTagRepeat, optimizeTemplateHTML} from '../../lib/utils.js';\n\nconst calendarWeeksTemplate = optimizeTemplateHTML(`<div class=\"calendar-weeks\">\n <div class=\"days-of-week\"><span class=\"dow\"></span></div>\n <div class=\"weeks\">${createTagRepeat('span', 6, {class: 'week'})}</div>\n</div>`);\n\nexport default calendarWeeksTemplate;\n","import {createTagRepeat, optimizeTemplateHTML} from '../../lib/utils.js';\n\nconst daysTemplate = optimizeTemplateHTML(`<div class=\"days\">\n <div class=\"days-of-week\">${createTagRepeat('span', 7, {class: 'dow'})}</div>\n <div class=\"datepicker-grid\">${createTagRepeat('span', 42)}</div>\n</div>`);\n\nexport default daysTemplate;\n","import {optimizeTemplateHTML} from '../../lib/utils.js';\n\nconst pickerTemplate = optimizeTemplateHTML(`<div class=\"datepicker\">\n <div class=\"datepicker-picker\">\n <div class=\"datepicker-header\">\n <div class=\"datepicker-title\"></div>\n <div class=\"datepicker-controls\">\n <button type=\"button\" class=\"%buttonClass% prev-btn\"></button>\n <button type=\"button\" class=\"%buttonClass% view-switch\"></button>\n <button type=\"button\" class=\"%buttonClass% next-btn\"></button>\n </div>\n </div>\n <div class=\"datepicker-main\"></div>\n <div class=\"datepicker-footer\">\n <div class=\"datepicker-controls\">\n <button type=\"button\" class=\"%buttonClass% today-btn\"></button>\n <button type=\"button\" class=\"%buttonClass% clear-btn\"></button>\n </div>\n </div>\n </div>\n</div>`);\n\nexport default pickerTemplate;\n","import {hasProperty, pushUnique} from '../../lib/utils.js';\nimport {today, dateValue, addDays, addWeeks, dayOfTheWeekOf, getWeek} from '../../lib/date.js';\nimport {formatDate} from '../../lib/date-format.js';\nimport {parseHTML, showElement, hideElement} from '../../lib/dom.js';\nimport daysTemplate from '../templates/daysTemplate.js';\nimport calendarWeeksTemplate from '../templates/calendarWeeksTemplate.js';\nimport View from './View.js';\n\nexport default class DaysView extends View {\n constructor(picker) {\n super(picker, {\n id: 0,\n name: 'days',\n cellClass: 'day',\n });\n }\n\n init(options, onConstruction = true) {\n if (onConstruction) {\n const inner = parseHTML(daysTemplate).firstChild;\n this.dow = inner.firstChild;\n this.grid = inner.lastChild;\n this.element.appendChild(inner);\n }\n super.init(options);\n }\n\n setOptions(options) {\n let updateDOW;\n\n if (hasProperty(options, 'minDate')) {\n this.minDate = options.minDate;\n }\n if (hasProperty(options, 'maxDate')) {\n this.maxDate = options.maxDate;\n }\n if (options.datesDisabled) {\n this.datesDisabled = options.datesDisabled;\n }\n if (options.daysOfWeekDisabled) {\n this.daysOfWeekDisabled = options.daysOfWeekDisabled;\n updateDOW = true;\n }\n if (options.daysOfWeekHighlighted) {\n this.daysOfWeekHighlighted = options.daysOfWeekHighlighted;\n }\n if (options.todayHighlight !== undefined) {\n this.todayHighlight = options.todayHighlight;\n }\n if (options.weekStart !== undefined) {\n this.weekStart = options.weekStart;\n this.weekEnd = options.weekEnd;\n updateDOW = true;\n }\n if (options.locale) {\n const locale = this.locale = options.locale;\n this.dayNames = locale.daysMin;\n this.switchLabelFormat = locale.titleFormat;\n updateDOW = true;\n }\n if (options.beforeShowDay !== undefined) {\n this.beforeShow = typeof options.beforeShowDay === 'function'\n ? options.beforeShowDay\n : undefined;\n }\n\n if (options.calendarWeeks !== undefined) {\n if (options.calendarWeeks && !this.calendarWeeks) {\n const weeksElem = parseHTML(calendarWeeksTemplate).firstChild;\n this.calendarWeeks = {\n element: weeksElem,\n dow: weeksElem.firstChild,\n weeks: weeksElem.lastChild,\n };\n this.element.insertBefore(weeksElem, this.element.firstChild);\n } else if (this.calendarWeeks && !options.calendarWeeks) {\n this.element.removeChild(this.calendarWeeks.element);\n this.calendarWeeks = null;\n }\n }\n if (options.showDaysOfWeek !== undefined) {\n if (options.showDaysOfWeek) {\n showElement(this.dow);\n if (this.calendarWeeks) {\n showElement(this.calendarWeeks.dow);\n }\n } else {\n hideElement(this.dow);\n if (this.calendarWeeks) {\n hideElement(this.calendarWeeks.dow);\n }\n }\n }\n\n // update days-of-week when locale, daysOfweekDisabled or weekStart is changed\n if (updateDOW) {\n Array.from(this.dow.children).forEach((el, index) => {\n const dow = (this.weekStart + index) % 7;\n el.textContent = this.dayNames[dow];\n el.className = this.daysOfWeekDisabled.includes(dow) ? 'dow disabled' : 'dow';\n });\n }\n }\n\n // Apply update on the focused date to view's settings\n updateFocus() {\n const viewDate = new Date(this.picker.viewDate);\n const viewYear = viewDate.getFullYear();\n const viewMonth = viewDate.getMonth();\n const firstOfMonth = dateValue(viewYear, viewMonth, 1);\n const start = dayOfTheWeekOf(firstOfMonth, this.weekStart, this.weekStart);\n\n this.first = firstOfMonth;\n this.last = dateValue(viewYear, viewMonth + 1, 0);\n this.start = start;\n this.focused = this.picker.viewDate;\n }\n\n // Apply update on the selected dates to view's settings\n updateSelection() {\n const {dates, rangepicker} = this.picker.datepicker;\n this.selected = dates;\n if (rangepicker) {\n this.range = rangepicker.dates;\n }\n }\n\n // Update the entire view UI\n render() {\n // update today marker on ever render\n this.today = this.todayHighlight ? today() : undefined;\n // refresh disabled dates on every render in order to clear the ones added\n // by beforeShow hook at previous render\n this.disabled = [...this.datesDisabled];\n\n const switchLabel = formatDate(this.focused, this.switchLabelFormat, this.locale);\n this.picker.setViewSwitchLabel(switchLabel);\n this.picker.setPrevBtnDisabled(this.first <= this.minDate);\n this.picker.setNextBtnDisabled(this.last >= this.maxDate);\n\n if (this.calendarWeeks) {\n // start of the UTC week (Monday) of the 1st of the month\n const startOfWeek = dayOfTheWeekOf(this.first, 1, 1);\n Array.from(this.calendarWeeks.weeks.children).forEach((el, index) => {\n el.textContent = getWeek(addWeeks(startOfWeek, index));\n });\n }\n Array.from(this.grid.children).forEach((el, index) => {\n const classList = el.classList;\n const current = addDays(this.start, index);\n const date = new Date(current);\n const day = date.getDay();\n\n el.className = `datepicker-cell ${this.cellClass}`;\n el.dataset.date = current;\n el.textContent = date.getDate();\n\n if (current < this.first) {\n classList.add('prev');\n } else if (current > this.last) {\n classList.add('next');\n }\n if (this.today === current) {\n classList.add('today');\n }\n if (current < this.minDate || current > this.maxDate || this.disabled.includes(current)) {\n classList.add('disabled');\n }\n if (this.daysOfWeekDisabled.includes(day)) {\n classList.add('disabled');\n pushUnique(this.disabled, current);\n }\n if (this.daysOfWeekHighlighted.includes(day)) {\n classList.add('highlighted');\n }\n if (this.range) {\n const [rangeStart, rangeEnd] = this.range;\n if (current > rangeStart && current < rangeEnd) {\n classList.add('range');\n }\n if (current === rangeStart) {\n classList.add('range-start');\n }\n if (current === rangeEnd) {\n classList.add('range-end');\n }\n }\n if (this.selected.includes(current)) {\n classList.add('selected');\n }\n if (current === this.focused) {\n classList.add('focused');\n }\n\n if (this.beforeShow) {\n this.performBeforeHook(el, current, current);\n }\n });\n }\n\n // Update the view UI by applying the changes of selected and focused items\n refresh() {\n const [rangeStart, rangeEnd] = this.range || [];\n this.grid\n .querySelectorAll('.range, .range-start, .range-end, .selected, .focused')\n .forEach((el) => {\n el.classList.remove('range', 'range-start', 'range-end', 'selected', 'focused');\n });\n Array.from(this.grid.children).forEach((el) => {\n const current = Number(el.dataset.date);\n const classList = el.classList;\n if (current > rangeStart && current < rangeEnd) {\n classList.add('range');\n }\n if (current === rangeStart) {\n classList.add('range-start');\n }\n if (current === rangeEnd) {\n classList.add('range-end');\n }\n if (this.selected.includes(current)) {\n classList.add('selected');\n }\n if (current === this.focused) {\n classList.add('focused');\n }\n });\n }\n\n // Update the view UI by applying the change of focused item\n refreshFocus() {\n const index = Math.round((this.focused - this.start) / 86400000);\n this.grid.querySelectorAll('.focused').forEach((el) => {\n el.classList.remove('focused');\n });\n this.grid.children[index].classList.add('focused');\n }\n}\n","import {hasProperty, pushUnique, createTagRepeat} from '../../lib/utils.js';\nimport {dateValue} from '../../lib/date.js';\nimport {parseHTML} from '../../lib/dom.js';\nimport View from './View.js';\n\nfunction computeMonthRange(range, thisYear) {\n if (!range || !range[0] || !range[1]) {\n return;\n }\n\n const [[startY, startM], [endY, endM]] = range;\n if (startY > thisYear || endY < thisYear) {\n return;\n }\n return [\n startY === thisYear ? startM : -1,\n endY === thisYear ? endM : 12,\n ];\n}\n\nexport default class MonthsView extends View {\n constructor(picker) {\n super(picker, {\n id: 1,\n name: 'months',\n cellClass: 'month',\n });\n }\n\n init(options, onConstruction = true) {\n if (onConstruction) {\n this.grid = this.element;\n this.element.classList.add('months', 'datepicker-grid');\n this.grid.appendChild(parseHTML(createTagRepeat('span', 12, {'data-month': ix => ix})));\n }\n super.init(options);\n }\n\n setOptions(options) {\n if (options.locale) {\n this.monthNames = options.locale.monthsShort;\n }\n if (hasProperty(options, 'minDate')) {\n if (options.minDate === undefined) {\n this.minYear = this.minMonth = this.minDate = undefined;\n } else {\n const minDateObj = new Date(options.minDate);\n this.minYear = minDateObj.getFullYear();\n this.minMonth = minDateObj.getMonth();\n this.minDate = minDateObj.setDate(1);\n }\n }\n if (hasProperty(options, 'maxDate')) {\n if (options.maxDate === undefined) {\n this.maxYear = this.maxMonth = this.maxDate = undefined;\n } else {\n const maxDateObj = new Date(options.maxDate);\n this.maxYear = maxDateObj.getFullYear();\n this.maxMonth = maxDateObj.getMonth();\n this.maxDate = dateValue(this.maxYear, this.maxMonth + 1, 0);\n }\n }\n if (this.isMinView) {\n if (options.datesDisabled) {\n this.datesDisabled = options.datesDisabled;\n }\n } else {\n this.datesDisabled = [];\n }\n if (options.beforeShowMonth !== undefined) {\n this.beforeShow = typeof options.beforeShowMonth === 'function'\n ? options.beforeShowMonth\n : undefined;\n }\n }\n\n // Update view's settings to reflect the viewDate set on the picker\n updateFocus() {\n const viewDate = new Date(this.picker.viewDate);\n this.year = viewDate.getFullYear();\n this.focused = viewDate.getMonth();\n }\n\n // Update view's settings to reflect the selected dates\n updateSelection() {\n const {dates, rangepicker} = this.picker.datepicker;\n this.selected = dates.reduce((selected, timeValue) => {\n const date = new Date(timeValue);\n const year = date.getFullYear();\n const month = date.getMonth();\n if (selected[year] === undefined) {\n selected[year] = [month];\n } else {\n pushUnique(selected[year], month);\n }\n return selected;\n }, {});\n if (rangepicker && rangepicker.dates) {\n this.range = rangepicker.dates.map(timeValue => {\n const date = new Date(timeValue);\n return isNaN(date) ? undefined : [date.getFullYear(), date.getMonth()];\n });\n }\n }\n\n // Update the entire view UI\n render() {\n // refresh disabled months on every render in order to clear the ones added\n // by beforeShow hook at previous render\n // this.disabled = [...this.datesDisabled];\n this.disabled = this.datesDisabled.reduce((arr, disabled) => {\n const dt = new Date(disabled);\n if (this.year === dt.getFullYear()) {\n arr.push(dt.getMonth());\n }\n return arr;\n }, []);\n\n this.picker.setViewSwitchLabel(this.year);\n this.picker.setPrevBtnDisabled(this.year <= this.minYear);\n this.picker.setNextBtnDisabled(this.year >= this.maxYear);\n\n const selected = this.selected[this.year] || [];\n const yrOutOfRange = this.year < this.minYear || this.year > this.maxYear;\n const isMinYear = this.year === this.minYear;\n const isMaxYear = this.year === this.maxYear;\n const range = computeMonthRange(this.range, this.year);\n\n Array.from(this.grid.children).forEach((el, index) => {\n const classList = el.classList;\n const date = dateValue(this.year, index, 1);\n\n el.className = `datepicker-cell ${this.cellClass}`;\n if (this.isMinView) {\n el.dataset.date = date;\n }\n // reset text on every render to clear the custom content set\n // by beforeShow hook at previous render\n el.textContent = this.monthNames[index];\n\n if (\n yrOutOfRange\n || isMinYear && index < this.minMonth\n || isMaxYear && index > this.maxMonth\n || this.disabled.includes(index)\n ) {\n classList.add('disabled');\n }\n if (range) {\n const [rangeStart, rangeEnd] = range;\n if (index > rangeStart && index < rangeEnd) {\n classList.add('range');\n }\n if (index === rangeStart) {\n classList.add('range-start');\n }\n if (index === rangeEnd) {\n classList.add('range-end');\n }\n }\n if (selected.includes(index)) {\n classList.add('selected');\n }\n if (index === this.focused) {\n classList.add('focused');\n }\n\n if (this.beforeShow) {\n this.performBeforeHook(el, index, date);\n }\n });\n }\n\n // Update the view UI by applying the changes of selected and focused items\n refresh() {\n const selected = this.selected[this.year] || [];\n const [rangeStart, rangeEnd] = computeMonthRange(this.range, this.year) || [];\n this.grid\n .querySelectorAll('.range, .range-start, .range-end, .selected, .focused')\n .forEach((el) => {\n el.classList.remove('range', 'range-start', 'range-end', 'selected', 'focused');\n });\n Array.from(this.grid.children).forEach((el, index) => {\n const classList = el.classList;\n if (index > rangeStart && index < rangeEnd) {\n classList.add('range');\n }\n if (index === rangeStart) {\n classList.add('range-start');\n }\n if (index === rangeEnd) {\n classList.add('range-end');\n }\n if (selected.includes(index)) {\n classList.add('selected');\n }\n if (index === this.focused) {\n classList.add('focused');\n }\n });\n }\n\n // Update the view UI by applying the change of focused item\n refreshFocus() {\n this.grid.querySelectorAll('.focused').forEach((el) => {\n el.classList.remove('focused');\n });\n this.grid.children[this.focused].classList.add('focused');\n }\n}","import {pushUnique} from '../../lib/utils.js';\nimport {parseHTML, replaceChildNodes} from '../../lib/dom.js';\n\n// Base class of the view classes\nexport default class View {\n constructor(picker, config) {\n Object.assign(this, config, {\n picker,\n element: parseHTML(`<div class=\"datepicker-view\"></div>`).firstChild,\n selected: [],\n });\n this.init(this.picker.datepicker.config);\n }\n\n init(options) {\n if (options.pickLevel !== undefined) {\n this.isMinView = this.id === options.pickLevel;\n }\n this.setOptions(options);\n this.updateFocus();\n this.updateSelection();\n }\n\n // Execute beforeShow() callback and apply the result to the element\n // args:\n // - current - current value on the iteration on view rendering\n // - timeValue - time value of the date to pass to beforeShow()\n performBeforeHook(el, current, timeValue) {\n let result = this.beforeShow(new Date(timeValue));\n switch (typeof result) {\n case 'boolean':\n result = {enabled: result};\n break;\n case 'string':\n result = {classes: result};\n }\n\n if (result) {\n if (result.enabled === false) {\n el.classList.add('disabled');\n pushUnique(this.disabled, current);\n }\n if (result.classes) {\n const extraClasses = result.classes.split(/\\s+/);\n el.classList.add(...extraClasses);\n if (extraClasses.includes('disabled')) {\n pushUnique(this.disabled, current);\n }\n }\n if (result.content) {\n replaceChildNodes(el, result.content);\n }\n }\n }\n}\n","import {hasProperty, pushUnique, createTagRepeat} from '../../lib/utils.js';\nimport {dateValue, startOfYearPeriod} from '../../lib/date.js';\nimport {parseHTML} from '../../lib/dom.js';\nimport View from './View.js';\n\nfunction toTitleCase(word) {\n return [...word].reduce((str, ch, ix) => str += ix ? ch : ch.toUpperCase(), '');\n}\n\n// Class representing the years and decades view elements\nexport default class YearsView extends View {\n constructor(picker, config) {\n super(picker, config);\n }\n\n init(options, onConstruction = true) {\n if (onConstruction) {\n this.navStep = this.step * 10;\n this.beforeShowOption = `beforeShow${toTitleCase(this.cellClass)}`;\n this.grid = this.element;\n this.element.classList.add(this.name, 'datepicker-grid');\n this.grid.appendChild(parseHTML(createTagRepeat('span', 12)));\n }\n super.init(options);\n }\n\n setOptions(options) {\n if (hasProperty(options, 'minDate')) {\n if (options.minDate === undefined) {\n this.minYear = this.minDate = undefined;\n } else {\n this.minYear = startOfYearPeriod(options.minDate, this.step);\n this.minDate = dateValue(this.minYear, 0, 1);\n }\n }\n if (hasProperty(options, 'maxDate')) {\n if (options.maxDate === undefined) {\n this.maxYear = this.maxDate = undefined;\n } else {\n this.maxYear = startOfYearPeriod(options.maxDate, this.step);\n this.maxDate = dateValue(this.maxYear, 11, 31);\n }\n }\n if (this.isMinView) {\n if (options.datesDisabled) {\n this.datesDisabled = options.datesDisabled;\n }\n } else {\n this.datesDisabled = [];\n }\n if (options[this.beforeShowOption] !== undefined) {\n const beforeShow = options[this.beforeShowOption];\n this.beforeShow = typeof beforeShow === 'function' ? beforeShow : undefined;\n }\n }\n\n // Update view's settings to reflect the viewDate set on the picker\n updateFocus() {\n const viewDate = new Date(this.picker.viewDate);\n const first = startOfYearPeriod(viewDate, this.navStep);\n const last = first + 9 * this.step;\n\n this.first = first;\n this.last = last;\n this.start = first - this.step;\n this.focused = startOfYearPeriod(viewDate, this.step);\n }\n\n // Update view's settings to reflect the selected dates\n updateSelection() {\n const {dates, rangepicker} = this.picker.datepicker;\n this.selected = dates.reduce((years, timeValue) => {\n return pushUnique(years, startOfYearPeriod(timeValue, this.step));\n }, []);\n if (rangepicker && rangepicker.dates) {\n this.range = rangepicker.dates.map(timeValue => {\n if (timeValue !== undefined) {\n return startOfYearPeriod(timeValue, this.step);\n }\n });\n }\n }\n\n // Update the entire view UI\n render() {\n // refresh disabled years on every render in order to clear the ones added\n // by beforeShow hook at previous render\n // this.disabled = [...this.datesDisabled];\n this.disabled = this.datesDisabled.map(disabled => new Date(disabled).getFullYear());\n\n this.picker.setViewSwitchLabel(`${this.first}-${this.last}`);\n this.picker.setPrevBtnDisabled(this.first <= this.minYear);\n this.picker.setNextBtnDisabled(this.last >= this.maxYear);\n\n Array.from(this.grid.children).forEach((el, index) => {\n const classList = el.classList;\n const current = this.start + (index * this.step);\n const date = dateValue(current, 0, 1);\n\n el.className = `datepicker-cell ${this.cellClass}`;\n if (this.isMinView) {\n el.dataset.date = date;\n }\n el.textContent = el.dataset.year = current;\n\n if (index === 0) {\n classList.add('prev');\n } else if (index === 11) {\n classList.add('next');\n }\n if (current < this.minYear || current > this.maxYear || this.disabled.includes(current)) {\n classList.add('disabled');\n }\n if (this.range) {\n const [rangeStart, rangeEnd] = this.range;\n if (current > rangeStart && current < rangeEnd) {\n classList.add('range');\n }\n if (current === rangeStart) {\n classList.add('range-start');\n }\n if (current === rangeEnd) {\n classList.add('range-end');\n }\n }\n if (this.selected.includes(current)) {\n classList.add('selected');\n }\n if (current === this.focused) {\n classList.add('focused');\n }\n\n if (this.beforeShow) {\n this.performBeforeHook(el, current, date);\n }\n });\n }\n\n // Update the view UI by applying the changes of selected and focused items\n refresh() {\n const [rangeStart, rangeEnd] = this.range || [];\n this.grid\n .querySelectorAll('.range, .range-start, .range-end, .selected, .focused')\n .forEach((el) => {\n el.classList.remove('range', 'range-start', 'range-end', 'selected', 'focused');\n });\n Array.from(this.grid.children).forEach((el) => {\n const current = Number(el.textContent);\n const classList = el.classList;\n if (current > rangeStart && current < rangeEnd) {\n classList.add('range');\n }\n if (current === rangeStart) {\n classList.add('range-start');\n }\n if (current === rangeEnd) {\n classList.add('range-end');\n }\n if (this.selected.includes(current)) {\n classList.add('selected');\n }\n if (current === this.focused) {\n classList.add('focused');\n }\n });\n }\n\n // Update the view UI by applying the change of focused item\n refreshFocus() {\n const index = Math.round((this.focused - this.start) / this.step);\n this.grid.querySelectorAll('.focused').forEach((el) => {\n el.classList.remove('focused');\n });\n this.grid.children[index].classList.add('focused');\n }\n}\n"],"sourceRoot":""}