{"version":3,"file":"main.js","mappings":"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","sources":["webpack://Flow.LandingItSchool/./wwwroot/src/modules/getPageName.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/core/utils.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/core/action-details.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/core/holder.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/factory.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/controls/mask-element.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/controls/html-mask-element.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/controls/html-input-mask-element.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/controls/html-contenteditable-mask-element.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/controls/input.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/core/change-details.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/core/continuous-tail-details.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/base.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/pattern/chunk-tail-details.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/pattern/cursor.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/pattern/fixed-definition.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/pattern/input-definition.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/regexp.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/pattern.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/range.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/date.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/dynamic.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/enum.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/function.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/number.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/masked/pipe.js","webpack://Flow.LandingItSchool/./node_modules/imask/esm/index.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/metrics.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/form.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/site.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/blog.js","webpack://Flow.LandingItSchool/./node_modules/ssr-window/ssr-window.esm.js","webpack://Flow.LandingItSchool/./node_modules/dom7/dom7.esm.js","webpack://Flow.LandingItSchool/./node_modules/swiper/shared/dom.js","webpack://Flow.LandingItSchool/./node_modules/swiper/shared/utils.js","webpack://Flow.LandingItSchool/./node_modules/swiper/shared/get-support.js","webpack://Flow.LandingItSchool/./node_modules/swiper/shared/get-device.js","webpack://Flow.LandingItSchool/./node_modules/swiper/shared/get-browser.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/events-emitter.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/update/index.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/update/updateSize.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/update/updateSlides.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/update/updateAutoHeight.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/update/updateSlidesOffset.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/update/updateSlidesProgress.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/update/updateProgress.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/update/updateSlidesClasses.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/update/updateActiveIndex.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/update/updateClickedSlide.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/transition/transitionEmit.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/slide/index.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/slide/slideTo.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/slide/slideToLoop.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/slide/slideNext.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/slide/slidePrev.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/slide/slideReset.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/slide/slideToClosest.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/loop/index.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/loop/loopCreate.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/loop/loopFix.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/loop/loopDestroy.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/events/onTouchStart.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/events/onTouchMove.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/events/onTouchEnd.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/events/onResize.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/events/onClick.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/events/onScroll.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/events/index.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/breakpoints/index.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/classes/index.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/classes/addClasses.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/classes/removeClasses.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/defaults.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/moduleExtendParams.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/core.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/translate/index.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/translate/getTranslate.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/translate/setTranslate.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/translate/minTranslate.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/translate/maxTranslate.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/translate/translateTo.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/transition/index.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/transition/setTransition.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/transition/transitionStart.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/transition/transitionEnd.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/grab-cursor/index.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/check-overflow/index.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/images/index.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/images/loadImage.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/images/preloadImages.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/modules/resize/resize.js","webpack://Flow.LandingItSchool/./node_modules/swiper/core/modules/observer/observer.js","webpack://Flow.LandingItSchool/./node_modules/swiper/shared/create-element-if-not-defined.js","webpack://Flow.LandingItSchool/./node_modules/swiper/modules/navigation/navigation.js","webpack://Flow.LandingItSchool/./node_modules/swiper/shared/classes-to-selector.js","webpack://Flow.LandingItSchool/./node_modules/swiper/modules/pagination/pagination.js","webpack://Flow.LandingItSchool/./node_modules/swiper/modules/lazy/lazy.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/sliders/init-teachersFull-slider.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/parse-teachers.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/sliders/init-testimonials-slider.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/parse-testimonials.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/sliders/init-careercenter-slider.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/sliders/init-confirmSkills-slider.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/sliders/init-partners-slider.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/sliders/init-portfolio-slider.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/castomize-portfolio-gallery.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/sliders/init-teachersMob-slider.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/sliders/init-sliders.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/init-appearing-modal.js","webpack://Flow.LandingItSchool/./wwwroot/src/index.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/UtmTags.js","webpack://Flow.LandingItSchool/./wwwroot/src/modules/init-banner.js"],"sourcesContent":["// Название страницы по url\r\n\r\n const getPageName = () => { \r\n const segments = new URL(window.location.href).pathname.split('/');\r\n const last = segments.pop() || segments.pop();\r\n return last.toLocaleLowerCase();\r\n \r\n}\r\n\r\nexport default getPageName","/** Checks if value is string */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n\n/** Checks if value is object */\nfunction isObject(obj) {\n var _obj$constructor;\n return typeof obj === 'object' && obj != null && (obj == null || (_obj$constructor = obj.constructor) == null ? void 0 : _obj$constructor.name) === 'Object';\n}\nfunction pick(obj, keys) {\n if (Array.isArray(keys)) return pick(obj, (_, k) => keys.includes(k));\n return Object.entries(obj).reduce((acc, _ref) => {\n let [k, v] = _ref;\n if (keys(v, k)) acc[k] = v;\n return acc;\n }, {});\n}\n\n/** Direction */\nconst DIRECTION = {\n NONE: 'NONE',\n LEFT: 'LEFT',\n FORCE_LEFT: 'FORCE_LEFT',\n RIGHT: 'RIGHT',\n FORCE_RIGHT: 'FORCE_RIGHT'\n};\n\n/** Direction */\n\nfunction forceDirection(direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n default:\n return direction;\n }\n}\n\n/** Escapes regular expression control chars */\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n}\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nfunction objectIncludes(b, a) {\n if (a === b) return true;\n const arrA = Array.isArray(a),\n arrB = Array.isArray(b);\n let i;\n if (arrA && arrB) {\n if (a.length != b.length) return false;\n for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false;\n return true;\n }\n if (arrA != arrB) return false;\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n const dateA = a instanceof Date,\n dateB = b instanceof Date;\n if (dateA && dateB) return a.getTime() == b.getTime();\n if (dateA != dateB) return false;\n const regexpA = a instanceof RegExp,\n regexpB = b instanceof RegExp;\n if (regexpA && regexpB) return a.toString() == b.toString();\n if (regexpA != regexpB) return false;\n const keys = Object.keys(a);\n // if (keys.length !== Object.keys(b).length) return false;\n\n for (i = 0; i < keys.length; i++) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString();\n }\n return false;\n}\n\n/** Selection range */\n\nexport { DIRECTION, escapeRegExp, forceDirection, isObject, isString, objectIncludes, pick };\n","import { DIRECTION } from './utils.js';\n\n/** Provides details of changing input */\nclass ActionDetails {\n /** Current input value */\n\n /** Current cursor position */\n\n /** Old input value */\n\n /** Old selection */\n\n constructor(opts) {\n Object.assign(this, opts);\n\n // double check if left part was changed (autofilling, other non-standard input triggers)\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n }\n\n /** Start changing position */\n get startChangePos() {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n\n /** Inserted symbols count */\n get insertedCount() {\n return this.cursorPos - this.startChangePos;\n }\n\n /** Inserted symbols */\n get inserted() {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n\n /** Removed symbols count */\n get removedCount() {\n // Math.max for opposite operation\n return Math.max(this.oldSelection.end - this.startChangePos ||\n // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n\n /** Removed symbols */\n get removed() {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n\n /** Unchanged head symbols */\n get head() {\n return this.value.substring(0, this.startChangePos);\n }\n\n /** Unchanged tail symbols */\n get tail() {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n\n /** Remove direction */\n get removeDirection() {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n // align right if delete at right\n return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&\n // if not range removed (event with backspace)\n this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n }\n}\n\nexport { ActionDetails as default };\n","/** Applies mask on element */\nfunction IMask(el, opts) {\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n","import { isString, isObject, pick } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n// export function maskedClass(mask: string): typeof MaskedPattern;\n// export function maskedClass(mask: DateConstructor): typeof MaskedDate;\n// export function maskedClass(mask: NumberConstructor): typeof MaskedNumber;\n// export function maskedClass(mask: Array | ArrayConstructor): typeof MaskedDynamic;\n// export function maskedClass(mask: MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass(mask: Masked): typeof Masked;\n// export function maskedClass(mask: typeof Masked): typeof Masked;\n// export function maskedClass(mask: typeof MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: typeof MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: typeof MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: typeof MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: typeof MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: typeof MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: typeof MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: typeof MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass (mask: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n/** Get Masked class by mask type */\nfunction maskedClass(mask) /* TODO */{\n if (mask == null) throw new Error('mask property should be defined');\n if (mask instanceof RegExp) return IMask.MaskedRegExp;\n if (isString(mask)) return IMask.MaskedPattern;\n if (mask === Date) return IMask.MaskedDate;\n if (mask === Number) return IMask.MaskedNumber;\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor;\n if (mask instanceof Function) return IMask.MaskedFunction;\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n return IMask.Masked;\n}\nfunction normalizeOpts(opts) {\n if (!opts) throw new Error('Options in not defined');\n if (IMask.Masked) {\n if (opts.prototype instanceof IMask.Masked) return {\n mask: opts\n };\n\n /*\n handle cases like:\n 1) opts = Masked\n 2) opts = { mask: Masked, ...instanceOpts }\n */\n const {\n mask = undefined,\n ...instanceOpts\n } = opts instanceof IMask.Masked ? {\n mask: opts\n } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {};\n if (mask) {\n const _mask = mask.mask;\n return {\n ...pick(mask, (_, k) => !k.startsWith('_')),\n mask: mask.constructor,\n _mask,\n ...instanceOpts\n };\n }\n }\n if (!isObject(opts)) return {\n mask: opts\n };\n return {\n ...opts\n };\n}\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n\n// From masked\n// export default function createMask (opts: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n const nOpts = normalizeOpts(opts);\n const MaskedClass = maskedClass(nOpts.mask);\n if (!MaskedClass) throw new Error('Masked class is not found for provided mask, appropriate module needs to be imported manually before creating mask.');\n if (nOpts.mask === MaskedClass) delete nOpts.mask;\n if (nOpts._mask) {\n nOpts.mask = nOpts._mask;\n delete nOpts._mask;\n }\n return new MaskedClass(nOpts);\n}\nIMask.createMask = createMask;\n\nexport { createMask as default, maskedClass, normalizeOpts };\n","import IMask from '../core/holder.js';\n\n/** Generic element API to use with mask */\nclass MaskElement {\n /** */\n\n /** */\n\n /** */\n\n /** Safely returns selection start */\n get selectionStart() {\n let start;\n try {\n start = this._unsafeSelectionStart;\n } catch {}\n return start != null ? start : this.value.length;\n }\n\n /** Safely returns selection end */\n get selectionEnd() {\n let end;\n try {\n end = this._unsafeSelectionEnd;\n } catch {}\n return end != null ? end : this.value.length;\n }\n\n /** Safely sets element selection */\n select(start, end) {\n if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n try {\n this._unsafeSelect(start, end);\n } catch {}\n }\n\n /** */\n get isActive() {\n return false;\n }\n /** */\n\n /** */\n\n /** */\n}\n\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n","import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\n/** Bridge between HTMLElement and {@link Masked} */\nclass HTMLMaskElement extends MaskElement {\n /** HTMLElement to use mask on */\n\n constructor(input) {\n super();\n this.input = input;\n this._handlers = {};\n }\n get rootElement() {\n var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) == null ? void 0 : _this$input$getRootNo2.call(_this$input)) != null ? _this$input$getRootNo : document;\n }\n\n /**\n Is element in focus\n */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /**\n Binds HTMLElement events to mask internal events\n */\n bindEvents(handlers) {\n Object.keys(handlers).forEach(event => this._toggleEventHandler(HTMLMaskElement.EVENTS_MAP[event], handlers[event]));\n }\n\n /**\n Unbinds HTMLElement events to mask internal events\n */\n unbindEvents() {\n Object.keys(this._handlers).forEach(event => this._toggleEventHandler(event));\n }\n _toggleEventHandler(event, handler) {\n if (this._handlers[event]) {\n this.input.removeEventListener(event, this._handlers[event]);\n delete this._handlers[event];\n }\n if (handler) {\n this.input.addEventListener(event, handler);\n this._handlers[event] = handler;\n }\n }\n}\n/** Mapping between HTMLElement events and mask internal events */\nHTMLMaskElement.EVENTS_MAP = {\n selectionChange: 'keydown',\n input: 'input',\n drop: 'drop',\n click: 'click',\n focus: 'focus',\n commit: 'blur'\n};\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\n/** Bridge between InputElement and {@link Masked} */\nclass HTMLInputMaskElement extends HTMLMaskElement {\n /** InputElement to use mask on */\n\n constructor(input) {\n super(input);\n this.input = input;\n this._handlers = {};\n }\n\n /** Returns InputElement selection start */\n get _unsafeSelectionStart() {\n return this.input.selectionStart != null ? this.input.selectionStart : this.value.length;\n }\n\n /** Returns InputElement selection end */\n get _unsafeSelectionEnd() {\n return this.input.selectionEnd;\n }\n\n /** Sets InputElement selection */\n _unsafeSelect(start, end) {\n this.input.setSelectionRange(start, end);\n }\n get value() {\n return this.input.value;\n }\n set value(value) {\n this.input.value = value;\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLInputMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n /** Returns HTMLElement selection start */\n get _unsafeSelectionStart() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Returns HTMLElement selection end */\n get _unsafeSelectionEnd() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Sets HTMLElement selection */\n _unsafeSelect(start, end) {\n if (!this.rootElement.createRange) return;\n const range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /** HTMLElement value */\n get value() {\n return this.input.textContent || '';\n }\n set value(value) {\n this.input.textContent = value;\n }\n}\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nexport { HTMLContenteditableMaskElement as default };\n","import { objectIncludes, DIRECTION } from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport createMask, { maskedClass } from '../masked/factory.js';\nimport MaskElement from './mask-element.js';\nimport HTMLInputMaskElement from './html-input-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './html-mask-element.js';\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nclass InputMask {\n /**\n View element\n */\n\n /** Internal {@link Masked} model */\n\n constructor(el, opts) {\n this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLInputMaskElement(el);\n this.masked = createMask(opts);\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n this._bindEvents();\n\n // refresh\n this.updateValue();\n this._onChange();\n }\n maskEquals(mask) {\n var _this$masked;\n return mask == null || ((_this$masked = this.masked) == null ? void 0 : _this$masked.maskEquals(mask));\n }\n\n /** Masked */\n get mask() {\n return this.masked.mask;\n }\n set mask(mask) {\n if (this.maskEquals(mask)) return;\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n // TODO \"any\" no idea\n this.masked.updateOptions({\n mask\n });\n return;\n }\n const masked = mask instanceof IMask.Masked ? mask : createMask({\n mask\n });\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n\n /** Raw value */\n get value() {\n return this._value;\n }\n set value(str) {\n if (this.value === str) return;\n this.masked.value = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Unmasked value */\n get unmaskedValue() {\n return this._unmaskedValue;\n }\n set unmaskedValue(str) {\n if (this.unmaskedValue === str) return;\n this.masked.unmaskedValue = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Typed unmasked value */\n get typedValue() {\n return this.masked.typedValue;\n }\n set typedValue(val) {\n if (this.masked.typedValueEquals(val)) return;\n this.masked.typedValue = val;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Display value */\n get displayValue() {\n return this.masked.displayValue;\n }\n\n /** Starts listening to element events */\n _bindEvents() {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange\n });\n }\n\n /** Stops listening to element events */\n _unbindEvents() {\n if (this.el) this.el.unbindEvents();\n }\n\n /** Fires custom event */\n _fireEvent(ev, e) {\n const listeners = this._listeners[ev];\n if (!listeners) return;\n listeners.forEach(l => l(e));\n }\n\n /** Current selection start */\n get selectionStart() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n }\n\n /** Current cursor position */\n get cursorPos() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n }\n set cursorPos(pos) {\n if (!this.el || !this.el.isActive) return;\n this.el.select(pos, pos);\n this._saveSelection();\n }\n\n /** Stores current selection */\n _saveSelection( /* ev */\n ) {\n if (this.displayValue !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n\n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n\n /** Syncronizes model value from view */\n updateValue() {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl() {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (isChanged) this._fireChangeEvents();\n }\n\n /** Updates options with deep equal check, recreates {@link Masked} model if mask type changes */\n updateOptions(opts) {\n const {\n mask,\n ...restOpts\n } = opts;\n const updateMask = !this.maskEquals(mask);\n const updateOpts = !objectIncludes(this.masked, restOpts);\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts); // TODO\n\n if (updateMask || updateOpts) this.updateControl();\n }\n\n /** Updates cursor */\n updateCursor(cursorPos) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos;\n\n // also queue change cursor for mobile browsers\n this._delayUpdateCursor(cursorPos);\n }\n\n /** Delays cursor update to support mobile browsers */\n _delayUpdateCursor(cursorPos) {\n this._abortUpdateCursor();\n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(() => {\n if (!this.el) return; // if was destroyed\n this.cursorPos = this._changingCursorPos;\n this._abortUpdateCursor();\n }, 10);\n }\n\n /** Fires custom events */\n _fireChangeEvents() {\n this._fireEvent('accept', this._inputEvent);\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n\n /** Aborts delayed cursor update */\n _abortUpdateCursor() {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n\n /** Aligns cursor to nearest available position */\n alignCursor() {\n this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n }\n\n /** Aligns cursor only if selection is empty */\n alignCursorFriendly() {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n this.alignCursor();\n }\n\n /** Adds listener on custom event */\n on(ev, handler) {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n this._listeners[ev].push(handler);\n return this;\n }\n\n /** Removes custom event listener */\n off(ev, handler) {\n if (!this._listeners[ev]) return this;\n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n const hIndex = this._listeners[ev].indexOf(handler);\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n\n /** Handles view input event */\n _onInput(e) {\n this._inputEvent = e;\n this._abortUpdateCursor();\n\n // fix strange IE behavior\n if (!this._selection) return this.updateValue();\n const details = new ActionDetails({\n // new state\n value: this.el.value,\n cursorPos: this.cursorPos,\n // old state\n oldValue: this.displayValue,\n oldSelection: this._selection\n });\n const oldRawValue = this.masked.rawInputValue;\n const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n input: true,\n raw: true\n }).offset;\n\n // force align in remove direction only if no input chars were removed\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n this.updateControl();\n this.updateCursor(cursorPos);\n delete this._inputEvent;\n }\n\n /** Handles view change event and commits model value */\n _onChange() {\n if (this.displayValue !== this.el.value) {\n this.updateValue();\n }\n this.masked.doCommit();\n this.updateControl();\n this._saveSelection();\n }\n\n /** Handles view drop event, prevents by default */\n _onDrop(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n /** Restore last selection on focus */\n _onFocus(ev) {\n this.alignCursorFriendly();\n }\n\n /** Restore last selection on focus */\n _onClick(ev) {\n this.alignCursorFriendly();\n }\n\n /** Unbind view events and removes element reference */\n destroy() {\n this._unbindEvents();\n this._listeners.length = 0;\n delete this.el;\n }\n}\nIMask.InputMask = InputMask;\n\nexport { InputMask as default };\n","import IMask from './holder.js';\n\n/** Provides details of changing model value */\nclass ChangeDetails {\n /** Inserted symbols */\n\n /** Can skip chars */\n\n /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n static normalize(prep) {\n return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n }\n constructor(details) {\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n skip: false,\n tailShift: 0\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.rawInserted += details.rawInserted;\n this.skip = this.skip || details.skip;\n this.inserted += details.inserted;\n this.tailShift += details.tailShift;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n}\nIMask.ChangeDetails = ChangeDetails;\n\nexport { ChangeDetails as default };\n","/** Provides details of continuous extracted tail */\nclass ContinuousTailDetails {\n /** Tail value as string */\n\n /** Tail start position */\n\n /** Start position */\n\n constructor(value, from, stop) {\n if (value === void 0) {\n value = '';\n }\n if (from === void 0) {\n from = 0;\n }\n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n toString() {\n return this.value;\n }\n extend(tail) {\n this.value += String(tail);\n }\n appendTo(masked) {\n return masked.append(this.toString(), {\n tail: true\n }).aggregate(masked._appendPlaceholder());\n }\n get state() {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop\n };\n }\n set state(state) {\n Object.assign(this, state);\n }\n unshift(beforePos) {\n if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n const shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n shift() {\n if (!this.value.length) return '';\n const shiftChar = this.value[this.value.length - 1];\n this.value = this.value.slice(0, -1);\n return shiftChar;\n }\n}\n\nexport { ContinuousTailDetails as default };\n","import ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { isString, DIRECTION, forceDirection } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n/** Append flags */\n\n/** Extract flags */\n\n// see https://github.com/microsoft/TypeScript/issues/6223\n\n/** Provides common masking stuff */\nclass Masked {\n /** */\n\n /** */\n\n /** Transforms value before mask processing */\n\n /** Transforms each char before mask processing */\n\n /** Validates if value is acceptable */\n\n /** Does additional processing at the end of editing */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n this._value = '';\n this._update({\n ...Masked.DEFAULTS,\n ...opts\n });\n this._initialized = true;\n }\n\n /** Sets and applies new options */\n updateOptions(opts) {\n if (!Object.keys(opts).length) return;\n this.withValueRefresh(this._update.bind(this, opts));\n }\n\n /** Sets new options */\n _update(opts) {\n Object.assign(this, opts);\n }\n\n /** Mask state */\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n }\n\n /** Resets value */\n reset() {\n this._value = '';\n }\n get value() {\n return this._value;\n }\n set value(value) {\n this.resolve(value, {\n input: true\n });\n }\n\n /** Resolve new value */\n resolve(value, flags) {\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n this.reset();\n this.append(value, flags, '');\n this.doCommit();\n }\n get unmaskedValue() {\n return this.value;\n }\n set unmaskedValue(value) {\n this.resolve(value, {});\n }\n get typedValue() {\n return this.parse ? this.parse(this.value, this) : this.unmaskedValue;\n }\n set typedValue(value) {\n if (this.format) {\n this.value = this.format(value, this);\n } else {\n this.unmaskedValue = String(value);\n }\n }\n\n /** Value that includes raw user input */\n get rawInputValue() {\n return this.extractInput(0, this.displayValue.length, {\n raw: true\n });\n }\n set rawInputValue(value) {\n this.resolve(value, {\n raw: true\n });\n }\n get displayValue() {\n return this.value;\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return this.isComplete;\n }\n\n /** Finds nearest input position in direction */\n nearestInputPos(cursorPos, direction) {\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return Math.min(this.displayValue.length, toPos - fromPos);\n }\n\n /** Extracts value in range considering flags */\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return this.displayValue.slice(fromPos, toPos);\n }\n\n /** Extracts tail in range */\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n\n /** Appends tail */\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n\n /** Appends char */\n _appendCharRaw(ch, flags) {\n if (!ch) return new ChangeDetails();\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch\n });\n }\n\n /** Appends char */\n _appendChar(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const consistentState = this.state;\n let details;\n [ch, details] = this.doPrepareChar(ch, flags);\n details = details.aggregate(this._appendCharRaw(ch, flags));\n if (details.inserted) {\n let consistentTail;\n let appended = this.doValidate(flags) !== false;\n if (appended && checkTail != null) {\n // validation ok, check tail\n const beforeTailState = this.state;\n if (this.overwrite === true) {\n consistentTail = checkTail.state;\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted === checkTail.toString();\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n checkTail.shift();\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted === checkTail.toString();\n }\n\n // if ok, rollback state after tail\n if (appended && tailDetails.inserted) this.state = beforeTailState;\n }\n\n // revert all if something went wrong\n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n return details;\n }\n\n /** Appends optional placeholder at the end */\n _appendPlaceholder() {\n return new ChangeDetails();\n }\n\n /** Appends optional eager placeholder at the end */\n _appendEager() {\n return new ChangeDetails();\n }\n\n /** Appends symbols considering flags */\n append(str, flags, tail) {\n if (!isString(str)) throw new Error('value should be string');\n const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags != null && flags.tail) flags._beforeTailState = this.state;\n let details;\n [str, details] = this.doPrepare(str, flags);\n for (let ci = 0; ci < str.length; ++ci) {\n const d = this._appendChar(str[ci], flags, checkTail);\n if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break;\n details.aggregate(d);\n }\n if ((this.eager === true || this.eager === 'append') && flags != null && flags.input && str) {\n details.aggregate(this._appendEager());\n }\n\n // append tail but aggregate only tailShift\n if (checkTail != null) {\n details.tailShift += this.appendTail(checkTail).tailShift;\n // TODO it's a good idea to clear state after appending ends\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n // this._resetBeforeTailState();\n }\n\n return details;\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n this._value = this.displayValue.slice(0, fromPos) + this.displayValue.slice(toPos);\n return new ChangeDetails();\n }\n\n /** Calls function and reapplies current value */\n withValueRefresh(fn) {\n if (this._refreshing || !this._initialized) return fn();\n this._refreshing = true;\n const rawInput = this.rawInputValue;\n const value = this.value;\n const ret = fn();\n this.rawInputValue = rawInput;\n // append lost trailing chars at the end\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.displayValue.length), {}, '');\n }\n delete this._refreshing;\n return ret;\n }\n runIsolated(fn) {\n if (this._isolated || !this._initialized) return fn(this);\n this._isolated = true;\n const state = this.state;\n const ret = fn(this);\n this.state = state;\n delete this._isolated;\n return ret;\n }\n doSkipInvalid(ch, flags, checkTail) {\n return Boolean(this.skipInvalid);\n }\n\n /** Prepares string before mask processing */\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepare ? this.prepare(str, this, flags) : str);\n }\n\n /** Prepares each char before mask processing */\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepareChar ? this.prepareChar(str, this, flags) : str);\n }\n\n /** Validates if value is acceptable */\n doValidate(flags) {\n return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n }\n\n /** Does additional processing at the end of editing */\n doCommit() {\n if (this.commit) this.commit(this.value, this);\n }\n splice(start, deleteCount, inserted, removeDirection, flags) {\n if (removeDirection === void 0) {\n removeDirection = DIRECTION.NONE;\n }\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n const tailPos = start + deleteCount;\n const tail = this.extractTail(tailPos);\n const eagerRemove = this.eager === true || this.eager === 'remove';\n let oldRawValue;\n if (eagerRemove) {\n removeDirection = forceDirection(removeDirection);\n oldRawValue = this.extractInput(0, tailPos, {\n raw: true\n });\n }\n let startChangePos = start;\n const details = new ChangeDetails();\n\n // if it is just deletion without insertion\n if (removeDirection !== DIRECTION.NONE) {\n startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection);\n\n // adjust tailShift if start was aligned\n details.tailShift = startChangePos - start;\n }\n details.aggregate(this.remove(startChangePos));\n if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n if (removeDirection === DIRECTION.FORCE_LEFT) {\n let valLength;\n while (oldRawValue === this.rawInputValue && (valLength = this.displayValue.length)) {\n details.aggregate(new ChangeDetails({\n tailShift: -1\n })).aggregate(this.remove(valLength - 1));\n }\n } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n tail.unshift();\n }\n }\n return details.aggregate(this.append(inserted, flags, tail));\n }\n maskEquals(mask) {\n return this.mask === mask;\n }\n typedValueEquals(value) {\n const tval = this.typedValue;\n return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || (this.format ? this.format(value, this) === this.format(this.typedValue, this) : false);\n }\n}\nMasked.DEFAULTS = {\n skipInvalid: true\n};\nMasked.EMPTY_VALUES = [undefined, null, ''];\nIMask.Masked = Masked;\n\nexport { Masked as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport IMask from '../../core/holder.js';\n\nclass ChunksTailDetails {\n /** */\n\n constructor(chunks, from) {\n if (chunks === void 0) {\n chunks = [];\n }\n if (from === void 0) {\n from = 0;\n }\n this.chunks = chunks;\n this.from = from;\n }\n toString() {\n return this.chunks.map(String).join('');\n }\n extend(tailChunk) {\n if (!String(tailChunk)) return;\n tailChunk = isString(tailChunk) ? new ContinuousTailDetails(String(tailChunk)) : tailChunk;\n const lastChunk = this.chunks[this.chunks.length - 1];\n const extendLast = lastChunk && (\n // if stops are same or tail has no stop\n lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n // if tail chunk goes just after last chunk\n tailChunk.from === lastChunk.from + lastChunk.toString().length;\n if (tailChunk instanceof ContinuousTailDetails) {\n // check the ability to extend previous chunk\n if (extendLast) {\n // extend previous chunk\n lastChunk.extend(tailChunk.toString());\n } else {\n // append new chunk\n this.chunks.push(tailChunk);\n }\n } else if (tailChunk instanceof ChunksTailDetails) {\n if (tailChunk.stop == null) {\n // unwrap floating chunks to parent, keeping `from` pos\n let firstTailChunk;\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift(); // not possible to be `undefined` because length was checked above\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n }\n\n // if tail chunk still has value\n if (tailChunk.toString()) {\n // if chunks contains stops, then popup stop to container\n tailChunk.stop = tailChunk.blockIndex;\n this.chunks.push(tailChunk);\n }\n }\n }\n appendTo(masked) {\n if (!(masked instanceof IMask.MaskedPattern)) {\n const tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n const details = new ChangeDetails();\n for (let ci = 0; ci < this.chunks.length && !details.skip; ++ci) {\n const chunk = this.chunks[ci];\n const lastBlockIter = masked._mapPosToBlock(masked.displayValue.length);\n const stop = chunk.stop;\n let chunkBlock;\n if (stop != null && (\n // if block not found or stop is behind lastBlock\n !lastBlockIter || lastBlockIter.index <= stop)) {\n if (chunk instanceof ChunksTailDetails ||\n // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0) {\n const phDetails = masked._appendPlaceholder(stop);\n details.aggregate(phDetails);\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n tailDetails.skip = false; // always ignore skip, it will be set on last\n details.aggregate(tailDetails);\n masked._value += tailDetails.inserted;\n\n // get not inserted chars\n const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n if (remainChars) details.aggregate(masked.append(remainChars, {\n tail: true\n }));\n } else {\n details.aggregate(masked.append(chunk.toString(), {\n tail: true\n }));\n }\n }\n return details;\n }\n get state() {\n return {\n chunks: this.chunks.map(c => c.state),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex\n };\n }\n set state(state) {\n const {\n chunks,\n ...props\n } = state;\n Object.assign(this, props);\n this.chunks = chunks.map(cstate => {\n const chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails();\n chunk.state = cstate;\n return chunk;\n });\n }\n unshift(beforePos) {\n if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n let ci = 0;\n while (ci < this.chunks.length) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.unshift(chunkShiftPos);\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n ++ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n shift() {\n if (!this.chunks.length) return '';\n let ci = this.chunks.length - 1;\n while (0 <= ci) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.shift();\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n --ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n}\n\nexport { ChunksTailDetails as default };\n","import { DIRECTION } from '../../core/utils.js';\n\nclass PatternCursor {\n constructor(masked, pos) {\n this.masked = masked;\n this._log = [];\n const {\n offset,\n index\n } = masked._mapPosToBlock(pos) || (pos < 0 ?\n // first\n {\n index: 0,\n offset: 0\n } :\n // last\n {\n index: this.masked._blocks.length,\n offset: 0\n });\n this.offset = offset;\n this.index = index;\n this.ok = false;\n }\n get block() {\n return this.masked._blocks[this.index];\n }\n get pos() {\n return this.masked._blockStartPos(this.index) + this.offset;\n }\n get state() {\n return {\n index: this.index,\n offset: this.offset,\n ok: this.ok\n };\n }\n set state(s) {\n Object.assign(this, s);\n }\n pushState() {\n this._log.push(this.state);\n }\n popState() {\n const s = this._log.pop();\n if (s) this.state = s;\n return s;\n }\n bindBlock() {\n if (this.block) return;\n if (this.index < 0) {\n this.index = 0;\n this.offset = 0;\n }\n if (this.index >= this.masked._blocks.length) {\n this.index = this.masked._blocks.length - 1;\n this.offset = this.block.displayValue.length; // TODO this is stupid type error, `block` depends on index that was changed above\n }\n }\n\n _pushLeft(fn) {\n this.pushState();\n for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) == null ? void 0 : _this$block.displayValue.length) || 0) {\n var _this$block;\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n _pushRight(fn) {\n this.pushState();\n for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n pushLeftBeforeFilled() {\n return this._pushLeft(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT);\n if (this.offset !== 0) return true;\n });\n }\n pushLeftBeforeInput() {\n // cases:\n // filled input: 00|\n // optional empty input: 00[]|\n // nested block: XX<[]>|\n return this._pushLeft(() => {\n if (this.block.isFixed) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushLeftBeforeRequired() {\n return this._pushLeft(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushRightBeforeFilled() {\n return this._pushRight(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT);\n if (this.offset !== this.block.value.length) return true;\n });\n }\n pushRightBeforeInput() {\n return this._pushRight(() => {\n if (this.block.isFixed) return;\n\n // const o = this.offset;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n // aa|X\n // aaX_ - this will not work\n // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n return true;\n });\n }\n pushRightBeforeRequired() {\n return this._pushRight(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n // TODO check |[*]XX_\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n return true;\n });\n }\n}\n\nexport { PatternCursor as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport '../../core/holder.js';\n\nclass PatternFixedDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n Object.assign(this, opts);\n this._value = '';\n this.isFixed = true;\n }\n get value() {\n return this._value;\n }\n get unmaskedValue() {\n return this.isUnmasking ? this.value : '';\n }\n get rawInputValue() {\n return this._isRawInput ? this.value : '';\n }\n get displayValue() {\n return this.value;\n }\n reset() {\n this._isRawInput = false;\n this._value = '';\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n if (!this._value) this._isRawInput = false;\n return new ChangeDetails();\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this._value.length;\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default:\n return maxPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n return this._isRawInput ? toPos - fromPos : 0;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return Boolean(this._value);\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n const appendEager = this.eager === true || this.eager === 'append';\n const appended = this.char === ch;\n const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;\n if (isResolved) details.rawInserted = this.char;\n this._value = details.inserted = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n return details;\n }\n _appendEager() {\n return this._appendChar(this.char, {\n tail: true\n });\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n this._value = details.inserted = this.char;\n return details;\n }\n extractTail() {\n return new ContinuousTailDetails('');\n }\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n append(str, flags, tail) {\n const details = this._appendChar(str[0], flags);\n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n return details;\n }\n doCommit() {}\n get state() {\n return {\n _value: this._value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n this._isRawInput = Boolean(state._rawInputValue);\n }\n}\n\nexport { PatternFixedDefinition as default };\n","import createMask from '../factory.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION } from '../../core/utils.js';\nimport '../../core/holder.js';\n\nclass PatternInputDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n const {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager,\n ...maskOpts\n } = opts;\n this.masked = createMask(maskOpts);\n Object.assign(this, {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager\n });\n }\n reset() {\n this.isFilled = false;\n this.masked.reset();\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n if (fromPos === 0 && toPos >= 1) {\n this.isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n return new ChangeDetails();\n }\n get value() {\n return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n }\n get unmaskedValue() {\n return this.masked.unmaskedValue;\n }\n get rawInputValue() {\n return this.masked.rawInputValue;\n }\n get displayValue() {\n return this.masked.value && this.displayChar || this.value;\n }\n get isComplete() {\n return Boolean(this.masked.value) || this.isOptional;\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const state = this.masked.state;\n // simulate input\n const details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details.inserted = details.rawInserted = '';\n this.masked.state = state;\n }\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n details.skip = !details.inserted && !this.isOptional;\n this.isFilled = Boolean(details.inserted);\n return details;\n }\n append(str, flags, tail) {\n // TODO probably should be done via _appendChar\n return this.masked.append(str, this.currentMaskFlags(flags), tail);\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled || this.isOptional) return details;\n this.isFilled = true;\n details.inserted = this.placeholderChar;\n return details;\n }\n _appendEager() {\n return new ChangeDetails();\n }\n extractTail(fromPos, toPos) {\n return this.masked.extractTail(fromPos, toPos);\n }\n appendTail(tail) {\n return this.masked.appendTail(tail);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this.value.length;\n const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n case DIRECTION.NONE:\n default:\n return boundPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.value.slice(fromPos, toPos).length;\n }\n doValidate(flags) {\n return this.masked.doValidate(this.currentMaskFlags(flags)) && (!this.parent || this.parent.doValidate(this.currentMaskFlags(flags)));\n }\n doCommit() {\n this.masked.doCommit();\n }\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue,\n masked: this.masked.state,\n isFilled: this.isFilled\n };\n }\n set state(state) {\n this.masked.state = state.masked;\n this.isFilled = state.isFilled;\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta;\n return {\n ...flags,\n _beforeTailState: (flags == null || (_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.masked) || (flags == null ? void 0 : flags._beforeTailState)\n };\n }\n}\nPatternInputDefinition.DEFAULT_DEFINITIONS = {\n '0': /\\d/,\n 'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // http://stackoverflow.com/a/22075070\n '*': /./\n};\n\nexport { PatternInputDefinition as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by RegExp */\nclass MaskedRegExp extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const mask = opts.mask;\n if (mask) opts.validate = value => value.search(mask) >= 0;\n super._update(opts);\n }\n}\nIMask.MaskedRegExp = MaskedRegExp;\n\nexport { MaskedRegExp as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport { DIRECTION } from '../core/utils.js';\nimport Masked from './base.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport PatternCursor from './pattern/cursor.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport PatternInputDefinition from './pattern/input-definition.js';\nimport './regexp.js';\nimport '../core/continuous-tail-details.js';\n\n/** Pattern mask */\nclass MaskedPattern extends Masked {\n /** */\n\n /** */\n\n /** Single char for empty input */\n\n /** Single char for filled input */\n\n /** Show placeholder only when needed */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n constructor(opts) {\n super({\n ...MaskedPattern.DEFAULTS,\n ...opts,\n definitions: Object.assign({}, PatternInputDefinition.DEFAULT_DEFINITIONS, opts == null ? void 0 : opts.definitions)\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n super._update(opts);\n this._rebuildMask();\n }\n _rebuildMask() {\n const defs = this.definitions;\n this._blocks = [];\n this.exposeBlock = undefined;\n this._stops = [];\n this._maskedBlocks = {};\n const pattern = this.mask;\n if (!pattern || !defs) return;\n let unmaskingBlock = false;\n let optionalBlock = false;\n for (let i = 0; i < pattern.length; ++i) {\n if (this.blocks) {\n const p = pattern.slice(i);\n const bNames = Object.keys(this.blocks).filter(bName => p.indexOf(bName) === 0);\n // order by key length\n bNames.sort((a, b) => b.length - a.length);\n // use block name with max length\n const bName = bNames[0];\n if (bName) {\n const {\n expose,\n ...blockOpts\n } = normalizeOpts(this.blocks[bName]);\n const maskedBlock = createMask({\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n ...blockOpts,\n parent: this\n });\n if (maskedBlock) {\n this._blocks.push(maskedBlock);\n if (expose) this.exposeBlock = maskedBlock;\n\n // store block index\n if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n this._maskedBlocks[bName].push(this._blocks.length - 1);\n }\n i += bName.length - 1;\n continue;\n }\n }\n let char = pattern[i];\n let isInput = (char in defs);\n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n continue;\n }\n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n isInput = false;\n }\n const def = isInput ? new PatternInputDefinition({\n isOptional: optionalBlock,\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n ...normalizeOpts(defs[char]),\n parent: this\n }) : new PatternFixedDefinition({\n char,\n eager: this.eager,\n isUnmasking: unmaskingBlock\n });\n this._blocks.push(def);\n }\n }\n get state() {\n return {\n ...super.state,\n _blocks: this._blocks.map(b => b.state)\n };\n }\n set state(state) {\n const {\n _blocks,\n ...maskedState\n } = state;\n this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n super.state = maskedState;\n }\n reset() {\n super.reset();\n this._blocks.forEach(b => b.reset());\n }\n get isComplete() {\n return this.exposeBlock ? this.exposeBlock.isComplete : this._blocks.every(b => b.isComplete);\n }\n get isFilled() {\n return this._blocks.every(b => b.isFilled);\n }\n get isFixed() {\n return this._blocks.every(b => b.isFixed);\n }\n get isOptional() {\n return this._blocks.every(b => b.isOptional);\n }\n doCommit() {\n this._blocks.forEach(b => b.doCommit());\n super.doCommit();\n }\n get unmaskedValue() {\n return this.exposeBlock ? this.exposeBlock.unmaskedValue : this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.unmaskedValue = unmaskedValue;\n this.appendTail(tail);\n this.doCommit();\n } else super.unmaskedValue = unmaskedValue;\n }\n get value() {\n return this.exposeBlock ? this.exposeBlock.value :\n // TODO return _value when not in change?\n this._blocks.reduce((str, b) => str += b.value, '');\n }\n set value(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.value = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.value = value;\n }\n get typedValue() {\n return this.exposeBlock ? this.exposeBlock.typedValue : super.typedValue;\n }\n set typedValue(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.typedValue = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.typedValue = value;\n }\n get displayValue() {\n return this._blocks.reduce((str, b) => str += b.displayValue, '');\n }\n appendTail(tail) {\n return super.appendTail(tail).aggregate(this._appendPlaceholder());\n }\n _appendEager() {\n var _this$_mapPosToBlock;\n const details = new ChangeDetails();\n let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index;\n if (startBlockIndex == null) return details;\n\n // TODO test if it works for nested pattern masks\n if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n const d = this._blocks[bi]._appendEager();\n if (!d.inserted) break;\n details.aggregate(d);\n }\n return details;\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const blockIter = this._mapPosToBlock(this.displayValue.length);\n const details = new ChangeDetails();\n if (!blockIter) return details;\n for (let bi = blockIter.index;; ++bi) {\n var _flags$_beforeTailSta;\n const block = this._blocks[bi];\n if (!block) break;\n const blockDetails = block._appendChar(ch, {\n ...flags,\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n });\n const skip = blockDetails.skip;\n details.aggregate(blockDetails);\n if (skip || blockDetails.rawInserted) break; // go next char\n }\n\n return details;\n }\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n const blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = this._findStopBefore(bi);\n blockChunk.from = this._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n chunkTail.extend(blockChunk);\n });\n return chunkTail;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n if (fromPos === toPos) return '';\n let input = '';\n this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n input += b.extractInput(fromPos, toPos, flags);\n });\n return input;\n }\n _findStopBefore(blockIndex) {\n let stopBefore;\n for (let si = 0; si < this._stops.length; ++si) {\n const stop = this._stops[si];\n if (stop <= blockIndex) stopBefore = stop;else break;\n }\n return stopBefore;\n }\n\n /** Appends placeholder depending on laziness */\n _appendPlaceholder(toBlockIndex) {\n const details = new ChangeDetails();\n if (this.lazy && toBlockIndex == null) return details;\n const startBlockIter = this._mapPosToBlock(this.displayValue.length);\n if (!startBlockIter) return details;\n const startBlockIndex = startBlockIter.index;\n const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n this._blocks.slice(startBlockIndex, endBlockIndex).forEach(b => {\n if (!b.lazy || toBlockIndex != null) {\n var _blocks2;\n const bDetails = b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length);\n this._value += bDetails.inserted;\n details.aggregate(bDetails);\n }\n });\n return details;\n }\n\n /** Finds block in pos */\n _mapPosToBlock(pos) {\n let accVal = '';\n for (let bi = 0; bi < this._blocks.length; ++bi) {\n const block = this._blocks[bi];\n const blockStartPos = accVal.length;\n accVal += block.displayValue;\n if (pos <= accVal.length) {\n return {\n index: bi,\n offset: pos - blockStartPos\n };\n }\n }\n }\n _blockStartPos(blockIndex) {\n return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.displayValue.length, 0);\n }\n _forEachBlocksInRange(fromPos, toPos, fn) {\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const fromBlockIter = this._mapPosToBlock(fromPos);\n if (fromBlockIter) {\n const toBlockIter = this._mapPosToBlock(toPos);\n // process first block\n const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n const fromBlockStartPos = fromBlockIter.offset;\n const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].displayValue.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n fn(this._blocks[bi], bi, 0, this._blocks[bi].displayValue.length);\n }\n\n // process last block\n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n }\n }\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const removeDetails = super.remove(fromPos, toPos);\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n return removeDetails;\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n if (!this._blocks.length) return 0;\n const cursor = new PatternCursor(this, cursorPos);\n if (direction === DIRECTION.NONE) {\n // -------------------------------------------------\n // NONE should only go out from fixed to the right!\n // -------------------------------------------------\n if (cursor.pushRightBeforeInput()) return cursor.pos;\n cursor.popState();\n if (cursor.pushLeftBeforeInput()) return cursor.pos;\n return this.displayValue.length;\n }\n\n // FORCE is only about a|* otherwise is 0\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // try to break fast when *|a\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeFilled();\n if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n cursor.popState();\n }\n\n // forward flow\n cursor.pushLeftBeforeInput();\n cursor.pushLeftBeforeRequired();\n cursor.pushLeftBeforeFilled();\n\n // backward flow\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n }\n if (cursor.ok) return cursor.pos;\n if (direction === DIRECTION.FORCE_LEFT) return 0;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return 0;\n }\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // forward flow\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.pushRightBeforeFilled()) return cursor.pos;\n if (direction === DIRECTION.FORCE_RIGHT) return this.displayValue.length;\n\n // backward flow\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n }\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n let total = 0;\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n total += b.totalInputPositions(bFromPos, bToPos);\n });\n return total;\n }\n\n /** Get block by name */\n maskedBlock(name) {\n return this.maskedBlocks(name)[0];\n }\n\n /** Get all blocks by name */\n maskedBlocks(name) {\n const indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(gi => this._blocks[gi]);\n }\n}\nMaskedPattern.DEFAULTS = {\n lazy: true,\n placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\nIMask.MaskedPattern = MaskedPattern;\n\nexport { MaskedPattern as default };\n","import IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/change-details.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which accepts ranges */\nclass MaskedRange extends MaskedPattern {\n /**\n Optionally sets max length of pattern.\n Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n */\n\n /** Min bound */\n\n /** Max bound */\n\n /** */\n\n get _matchFrom() {\n return this.maxLength - String(this.from).length;\n }\n constructor(opts) {\n super(opts); // mask will be created in _update\n }\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n to = this.to || 0,\n from = this.from || 0,\n maxLength = this.maxLength || 0,\n autofix = this.autofix,\n ...patternOpts\n } = opts;\n this.to = to;\n this.from = from;\n this.maxLength = Math.max(String(to).length, maxLength);\n this.autofix = autofix;\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n let sameCharsCount = 0;\n while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount;\n patternOpts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(this.maxLength - sameCharsCount);\n super._update(patternOpts);\n }\n get isComplete() {\n return super.isComplete && Boolean(this.value);\n }\n boundaries(str) {\n let minstr = '';\n let maxstr = '';\n const [, placeholder, num] = str.match(/^(\\D*)(\\d*)(\\D*)/) || [];\n if (num) {\n minstr = '0'.repeat(placeholder.length) + num;\n maxstr = '9'.repeat(placeholder.length) + num;\n }\n minstr = minstr.padEnd(this.maxLength, '0');\n maxstr = maxstr.padEnd(this.maxLength, '9');\n return [minstr, maxstr];\n }\n doPrepareChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let details;\n [ch, details] = super.doPrepareChar(ch.replace(/\\D/g, ''), flags);\n if (!this.autofix || !ch) return [ch, details];\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const nextVal = this.value + ch;\n if (nextVal.length > this.maxLength) return ['', details];\n const [minstr, maxstr] = this.boundaries(nextVal);\n if (Number(maxstr) < this.from) return [fromStr[nextVal.length - 1], details];\n if (Number(minstr) > this.to) {\n if (this.autofix === 'pad' && nextVal.length < this.maxLength) {\n return ['', details.aggregate(this.append(fromStr[nextVal.length - 1] + ch, flags))];\n }\n return [toStr[nextVal.length - 1], details];\n }\n return [ch, details];\n }\n doValidate(flags) {\n const str = this.value;\n const firstNonZero = str.search(/[^0]/);\n if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n const [minstr, maxstr] = this.boundaries(str);\n return this.from <= Number(maxstr) && Number(minstr) <= this.to && super.doValidate(flags);\n }\n}\nIMask.MaskedRange = MaskedRange;\n\nexport { MaskedRange as default };\n","import MaskedPattern from './pattern.js';\nimport MaskedRange from './range.js';\nimport IMask from '../core/holder.js';\nimport { isString } from '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = {\n ...MaskedDate.DEFAULTS,\n ...opts\n };\n super({\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n mask,\n pattern,\n blocks,\n ...patternOpts\n } = {\n ...MaskedDate.DEFAULTS,\n ...opts\n };\n const patternBlocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS());\n // adjust year block\n if (opts.min) patternBlocks.Y.from = opts.min.getFullYear();\n if (opts.max) patternBlocks.Y.to = opts.max.getFullYear();\n if (opts.min && opts.max && patternBlocks.Y.from === patternBlocks.Y.to) {\n patternBlocks.m.from = opts.min.getMonth() + 1;\n patternBlocks.m.to = opts.max.getMonth() + 1;\n if (patternBlocks.m.from === patternBlocks.m.to) {\n patternBlocks.d.from = opts.min.getDate();\n patternBlocks.d.to = opts.max.getDate();\n }\n }\n Object.assign(patternBlocks, this.blocks, blocks);\n\n // add autofix\n Object.keys(patternBlocks).forEach(bk => {\n const b = patternBlocks[bk];\n if (!('autofix' in b) && 'autofix' in opts) b.autofix = opts.autofix;\n });\n super._update({\n ...patternOpts,\n mask: isString(mask) ? mask : pattern,\n blocks: patternBlocks\n });\n }\n doValidate(flags) {\n const date = this.date;\n return super.doValidate(flags) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n }\n\n /** Checks if date is exists */\n isDateExist(str) {\n return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n }\n\n /** Parsed Date */\n get date() {\n return this.typedValue;\n }\n set date(date) {\n this.typedValue = date;\n }\n get typedValue() {\n return this.isComplete ? super.typedValue : null;\n }\n set typedValue(value) {\n super.typedValue = value;\n }\n maskEquals(mask) {\n return mask === Date || super.maskEquals(mask);\n }\n}\nMaskedDate.GET_DEFAULT_BLOCKS = () => ({\n d: {\n mask: MaskedRange,\n from: 1,\n to: 31,\n maxLength: 2\n },\n m: {\n mask: MaskedRange,\n from: 1,\n to: 12,\n maxLength: 2\n },\n Y: {\n mask: MaskedRange,\n from: 1900,\n to: 9999\n }\n});\nMaskedDate.DEFAULTS = {\n mask: Date,\n pattern: 'd{.}`m{.}`Y',\n format: (date, masked) => {\n if (!date) return '';\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n return [day, month, year].join('.');\n },\n parse: (str, masked) => {\n const [day, month, year] = str.split('.').map(Number);\n return new Date(year, month - 1, day);\n }\n};\nIMask.MaskedDate = MaskedDate;\n\nexport { MaskedDate as default };\n","import { DIRECTION, objectIncludes } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/** Dynamic mask for choosing appropriate mask in run-time */\nclass MaskedDynamic extends Masked {\n /** Currently chosen mask */\n\n /** Currently chosen mask */\n\n /** Compliled {@link Masked} options */\n\n /** Chooses {@link Masked} depending on input value */\n\n constructor(opts) {\n super({\n ...MaskedDynamic.DEFAULTS,\n ...opts\n });\n this.currentMask = undefined;\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update(opts);\n if ('mask' in opts) {\n this.exposeMask = undefined;\n // mask could be totally dynamic with only `dispatch` option\n this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map(m => {\n const {\n expose,\n ...maskOpts\n } = normalizeOpts(m);\n const masked = createMask({\n overwrite: this._overwrite,\n eager: this._eager,\n skipInvalid: this._skipInvalid,\n ...maskOpts\n });\n if (expose) this.exposeMask = masked;\n return masked;\n }) : [];\n\n // this.currentMask = this.doDispatch(''); // probably not needed but lets see\n }\n }\n\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = this._applyDispatch(ch, flags);\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags)));\n }\n return details;\n }\n _applyDispatch(appended, flags, tail) {\n if (appended === void 0) {\n appended = '';\n }\n if (flags === void 0) {\n flags = {};\n }\n if (tail === void 0) {\n tail = '';\n }\n const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value;\n const inputValue = this.rawInputValue;\n const insertValue = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._rawInputValue : inputValue;\n const tailValue = inputValue.slice(insertValue.length);\n const prevMask = this.currentMask;\n const details = new ChangeDetails();\n const prevMaskState = prevMask == null ? void 0 : prevMask.state;\n\n // clone flags to prevent overwriting `_beforeTailState`\n this.currentMask = this.doDispatch(appended, {\n ...flags\n }, tail);\n\n // restore state after dispatch\n if (this.currentMask) {\n if (this.currentMask !== prevMask) {\n // if mask changed reapply input\n this.currentMask.reset();\n if (insertValue) {\n const d = this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = d.inserted.length - prevValueBeforeTail.length;\n }\n if (tailValue) {\n details.tailShift += this.currentMask.append(tailValue, {\n raw: true,\n tail: true\n }).tailShift;\n }\n } else if (prevMaskState) {\n // Dispatch can do something bad with state, so\n // restore prev mask state\n this.currentMask.state = prevMaskState;\n }\n }\n return details;\n }\n _appendPlaceholder() {\n const details = this._applyDispatch();\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendPlaceholder());\n }\n return details;\n }\n _appendEager() {\n const details = this._applyDispatch();\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendEager());\n }\n return details;\n }\n appendTail(tail) {\n const details = new ChangeDetails();\n if (tail) details.aggregate(this._applyDispatch('', {}, tail));\n return details.aggregate(this.currentMask ? this.currentMask.appendTail(tail) : super.appendTail(tail));\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n return {\n ...flags,\n _beforeTailState: ((_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.currentMaskRef) === this.currentMask && ((_flags$_beforeTailSta2 = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta2.currentMask) || flags._beforeTailState\n };\n }\n doDispatch(appended, flags, tail) {\n if (flags === void 0) {\n flags = {};\n }\n if (tail === void 0) {\n tail = '';\n }\n return this.dispatch(appended, this, flags, tail);\n }\n doValidate(flags) {\n return super.doValidate(flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags)));\n }\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let [s, details] = super.doPrepare(str, flags);\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = super.doPrepare(s, this.currentMaskFlags(flags));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let [s, details] = super.doPrepareChar(str, flags);\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = super.doPrepareChar(s, this.currentMaskFlags(flags));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n reset() {\n var _this$currentMask;\n (_this$currentMask = this.currentMask) == null ? void 0 : _this$currentMask.reset();\n this.compiledMasks.forEach(m => m.reset());\n }\n get value() {\n return this.exposeMask ? this.exposeMask.value : this.currentMask ? this.currentMask.value : '';\n }\n set value(value) {\n if (this.exposeMask) {\n this.exposeMask.value = value;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n } else super.value = value;\n }\n get unmaskedValue() {\n return this.exposeMask ? this.exposeMask.unmaskedValue : this.currentMask ? this.currentMask.unmaskedValue : '';\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeMask) {\n this.exposeMask.unmaskedValue = unmaskedValue;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n } else super.unmaskedValue = unmaskedValue;\n }\n get typedValue() {\n return this.exposeMask ? this.exposeMask.typedValue : this.currentMask ? this.currentMask.typedValue : '';\n }\n set typedValue(typedValue) {\n if (this.exposeMask) {\n this.exposeMask.typedValue = typedValue;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n return;\n }\n let unmaskedValue = String(typedValue);\n\n // double check it\n if (this.currentMask) {\n this.currentMask.typedValue = typedValue;\n unmaskedValue = this.currentMask.unmaskedValue;\n }\n this.unmaskedValue = unmaskedValue;\n }\n get displayValue() {\n return this.currentMask ? this.currentMask.displayValue : '';\n }\n get isComplete() {\n var _this$currentMask2;\n return Boolean((_this$currentMask2 = this.currentMask) == null ? void 0 : _this$currentMask2.isComplete);\n }\n get isFilled() {\n var _this$currentMask3;\n return Boolean((_this$currentMask3 = this.currentMask) == null ? void 0 : _this$currentMask3.isFilled);\n }\n remove(fromPos, toPos) {\n const details = new ChangeDetails();\n if (this.currentMask) {\n details.aggregate(this.currentMask.remove(fromPos, toPos))\n // update with dispatch\n .aggregate(this._applyDispatch());\n }\n return details;\n }\n get state() {\n var _this$currentMask4;\n return {\n ...super.state,\n _rawInputValue: this.rawInputValue,\n compiledMasks: this.compiledMasks.map(m => m.state),\n currentMaskRef: this.currentMask,\n currentMask: (_this$currentMask4 = this.currentMask) == null ? void 0 : _this$currentMask4.state\n };\n }\n set state(state) {\n const {\n compiledMasks,\n currentMaskRef,\n currentMask,\n ...maskedState\n } = state;\n if (compiledMasks) this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]);\n if (currentMaskRef != null) {\n this.currentMask = currentMaskRef;\n this.currentMask.state = currentMask;\n }\n super.state = maskedState;\n }\n extractInput(fromPos, toPos, flags) {\n return this.currentMask ? this.currentMask.extractInput(fromPos, toPos, flags) : '';\n }\n extractTail(fromPos, toPos) {\n return this.currentMask ? this.currentMask.extractTail(fromPos, toPos) : super.extractTail(fromPos, toPos);\n }\n doCommit() {\n if (this.currentMask) this.currentMask.doCommit();\n super.doCommit();\n }\n nearestInputPos(cursorPos, direction) {\n return this.currentMask ? this.currentMask.nearestInputPos(cursorPos, direction) : super.nearestInputPos(cursorPos, direction);\n }\n get overwrite() {\n return this.currentMask ? this.currentMask.overwrite : this._overwrite;\n }\n set overwrite(overwrite) {\n this._overwrite = overwrite;\n }\n get eager() {\n return this.currentMask ? this.currentMask.eager : this._eager;\n }\n set eager(eager) {\n this._eager = eager;\n }\n get skipInvalid() {\n return this.currentMask ? this.currentMask.skipInvalid : this._skipInvalid;\n }\n set skipInvalid(skipInvalid) {\n this._skipInvalid = skipInvalid;\n }\n maskEquals(mask) {\n return Array.isArray(mask) ? this.compiledMasks.every((m, mi) => {\n if (!mask[mi]) return;\n const {\n mask: oldMask,\n ...restOpts\n } = mask[mi];\n return objectIncludes(m, restOpts) && m.maskEquals(oldMask);\n }) : super.maskEquals(mask);\n }\n typedValueEquals(value) {\n var _this$currentMask5;\n return Boolean((_this$currentMask5 = this.currentMask) == null ? void 0 : _this$currentMask5.typedValueEquals(value));\n }\n}\nMaskedDynamic.DEFAULTS = void 0;\nMaskedDynamic.DEFAULTS = {\n dispatch: (appended, masked, flags, tail) => {\n if (!masked.compiledMasks.length) return;\n const inputValue = masked.rawInputValue;\n\n // simulate input\n const inputs = masked.compiledMasks.map((m, index) => {\n const isCurrent = masked.currentMask === m;\n const startInputPos = isCurrent ? m.displayValue.length : m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT);\n if (m.rawInputValue !== inputValue) {\n m.reset();\n m.append(inputValue, {\n raw: true\n });\n } else if (!isCurrent) {\n m.remove(startInputPos);\n }\n m.append(appended, masked.currentMaskFlags(flags));\n m.appendTail(tail);\n return {\n index,\n weight: m.rawInputValue.length,\n totalInputPositions: m.totalInputPositions(0, Math.max(startInputPos, m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT)))\n };\n });\n\n // pop masks with longer values first\n inputs.sort((i1, i2) => i2.weight - i1.weight || i2.totalInputPositions - i1.totalInputPositions);\n return masked.compiledMasks[inputs[0].index];\n }\n};\nIMask.MaskedDynamic = MaskedDynamic;\n\nexport { MaskedDynamic as default };\n","import MaskedPattern from './pattern.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which validates enum values */\nclass MaskedEnum extends MaskedPattern {\n constructor(opts) {\n super(opts); // mask will be created in _update\n }\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n enum: _enum,\n ...eopts\n } = opts;\n if (_enum) {\n const lengths = _enum.map(e => e.length);\n const requiredLength = Math.min(...lengths);\n const optionalLength = Math.max(...lengths) - requiredLength;\n eopts.mask = '*'.repeat(requiredLength);\n if (optionalLength) eopts.mask += '[' + '*'.repeat(optionalLength) + ']';\n this.enum = _enum;\n }\n super._update(eopts);\n }\n doValidate(flags) {\n return this.enum.some(e => e.indexOf(this.unmaskedValue) === 0) && super.doValidate(flags);\n }\n}\nIMask.MaskedEnum = MaskedEnum;\n\nexport { MaskedEnum as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by custom Function */\nclass MaskedFunction extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update({\n ...opts,\n validate: opts.mask\n });\n }\n}\nIMask.MaskedFunction = MaskedFunction;\n\nexport { MaskedFunction as default };\n","import { escapeRegExp, DIRECTION } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/** Number mask */\nclass MaskedNumber extends Masked {\n /** Single char */\n\n /** Single char */\n\n /** Array of single chars */\n\n /** */\n\n /** */\n\n /** Digits after point */\n\n /** Flag to remove leading and trailing zeros in the end of editing */\n\n /** Flag to pad trailing zeros after point in the end of editing */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super({\n ...MaskedNumber.DEFAULTS,\n ...opts\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update(opts);\n this._updateRegExps();\n }\n _updateRegExps() {\n const start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n const mid = '\\\\d*';\n const end = (this.scale ? \"(\" + escapeRegExp(this.radix) + \"\\\\d{0,\" + this.scale + \"})?\" : '') + '$';\n this._numberRegExp = new RegExp(start + mid + end);\n this._mapToRadixRegExp = new RegExp(\"[\" + this.mapToRadix.map(escapeRegExp).join('') + \"]\", 'g');\n this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n }\n _removeThousandsSeparators(value) {\n return value.replace(this._thousandsSeparatorRegExp, '');\n }\n _insertThousandsSeparators(value) {\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n const parts = value.split(this.radix);\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n return parts.join(this.radix);\n }\n doPrepareChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const [prepCh, details] = super.doPrepareChar(this._removeThousandsSeparators(this.scale && this.mapToRadix.length && (\n /*\n radix should be mapped when\n 1) input is done from keyboard = flags.input && flags.raw\n 2) unmasked value is set = !flags.input && !flags.raw\n and should not be mapped when\n 1) value is set = flags.input && !flags.raw\n 2) raw value is set = !flags.input && flags.raw\n */\n flags.input && flags.raw || !flags.input && !flags.raw) ? ch.replace(this._mapToRadixRegExp, this.radix) : ch), flags);\n if (ch && !prepCh) details.skip = true;\n if (prepCh && !this.allowPositive && !this.value && prepCh !== '-') details.aggregate(this._appendChar('-'));\n return [prepCh, details];\n }\n _separatorsCount(to, extendOnSeparators) {\n if (extendOnSeparators === void 0) {\n extendOnSeparators = false;\n }\n let count = 0;\n for (let pos = 0; pos < to; ++pos) {\n if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n ++count;\n if (extendOnSeparators) to += this.thousandsSeparator.length;\n }\n }\n return count;\n }\n _separatorsCountFromSlice(slice) {\n if (slice === void 0) {\n slice = this._value;\n }\n return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags));\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.thousandsSeparator) return super._appendCharRaw(ch, flags);\n const prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n this._value = this._removeThousandsSeparators(this.value);\n const appendDetails = super._appendCharRaw(ch, flags);\n this._value = this._insertThousandsSeparators(this._value);\n const beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n appendDetails.skip = !appendDetails.rawInserted && ch === this.thousandsSeparator;\n return appendDetails;\n }\n _findSeparatorAround(pos) {\n if (this.thousandsSeparator) {\n const searchFrom = pos - this.thousandsSeparator.length + 1;\n const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n if (separatorPos <= pos) return separatorPos;\n }\n return -1;\n }\n _adjustRangeWithSeparators(from, to) {\n const separatorAroundFromPos = this._findSeparatorAround(from);\n if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n const separatorAroundToPos = this._findSeparatorAround(to);\n if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n return [from, to];\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n const valueBeforePos = this.value.slice(0, fromPos);\n const valueAfterPos = this.value.slice(toPos);\n const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n return new ChangeDetails({\n tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n });\n }\n nearestInputPos(cursorPos, direction) {\n if (!this.thousandsSeparator) return cursorPos;\n switch (direction) {\n case DIRECTION.NONE:\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n {\n const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n if (separatorAtLeftPos >= 0) {\n const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n return separatorAtLeftPos;\n }\n }\n break;\n }\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n {\n const separatorAtRightPos = this._findSeparatorAround(cursorPos);\n if (separatorAtRightPos >= 0) {\n return separatorAtRightPos + this.thousandsSeparator.length;\n }\n }\n }\n return cursorPos;\n }\n doValidate(flags) {\n // validate as string\n let valid = Boolean(this._removeThousandsSeparators(this.value).match(this._numberRegExp));\n if (valid) {\n // validate as number\n const number = this.number;\n valid = valid && !isNaN(number) && (\n // check min bound for negative values\n this.min == null || this.min >= 0 || this.min <= this.number) && (\n // check max bound for positive values\n this.max == null || this.max <= 0 || this.number <= this.max);\n }\n return valid && super.doValidate(flags);\n }\n doCommit() {\n if (this.value) {\n const number = this.number;\n let validnum = number;\n\n // check bounds\n if (this.min != null) validnum = Math.max(validnum, this.min);\n if (this.max != null) validnum = Math.min(validnum, this.max);\n if (validnum !== number) this.unmaskedValue = this.format(validnum, this);\n let formatted = this.value;\n if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted);\n this._value = formatted;\n }\n super.doCommit();\n }\n _normalizeZeros(value) {\n const parts = this._removeThousandsSeparators(value).split(this.radix);\n\n // remove leading zeros\n parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, (match, sign, zeros, num) => sign + num);\n // add leading zero\n if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n if (parts.length > 1) {\n parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n if (!parts[1].length) parts.length = 1; // remove fractional\n }\n\n return this._insertThousandsSeparators(parts.join(this.radix));\n }\n _padFractionalZeros(value) {\n if (!value) return value;\n const parts = value.split(this.radix);\n if (parts.length < 2) parts.push('');\n parts[1] = parts[1].padEnd(this.scale, '0');\n return parts.join(this.radix);\n }\n doSkipInvalid(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const dropFractional = this.scale === 0 && ch !== this.thousandsSeparator && (ch === this.radix || ch === MaskedNumber.UNMASKED_RADIX || this.mapToRadix.includes(ch));\n return super.doSkipInvalid(ch, flags, checkTail) && !dropFractional;\n }\n get unmaskedValue() {\n return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, MaskedNumber.UNMASKED_RADIX);\n }\n set unmaskedValue(unmaskedValue) {\n super.unmaskedValue = unmaskedValue;\n }\n get typedValue() {\n return this.parse(this.unmaskedValue, this);\n }\n set typedValue(n) {\n this.rawInputValue = this.format(n, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n }\n\n /** Parsed Number */\n get number() {\n return this.typedValue;\n }\n set number(number) {\n this.typedValue = number;\n }\n\n /**\n Is negative allowed\n */\n get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\n }\n\n /**\n Is positive allowed\n */\n get allowPositive() {\n return this.min != null && this.min > 0 || this.max != null && this.max > 0;\n }\n typedValueEquals(value) {\n // handle 0 -> '' case (typed = 0 even if value = '')\n // for details see https://github.com/uNmAnNeR/imaskjs/issues/134\n return (super.typedValueEquals(value) || MaskedNumber.EMPTY_VALUES.includes(value) && MaskedNumber.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === '');\n }\n}\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n mask: Number,\n radix: ',',\n thousandsSeparator: '',\n mapToRadix: [MaskedNumber.UNMASKED_RADIX],\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n scale: 2,\n normalizeZeros: true,\n padFractionalZeros: false,\n parse: Number,\n format: n => n.toLocaleString('en-US', {\n useGrouping: false,\n maximumFractionDigits: 20\n })\n};\nIMask.MaskedNumber = MaskedNumber;\n\nexport { MaskedNumber as default };\n","import createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\n\n/** Mask pipe source and destination types */\nconst PIPE_TYPE = {\n MASKED: 'value',\n UNMASKED: 'unmaskedValue',\n TYPED: 'typedValue'\n};\n/** Creates new pipe function depending on mask type, source and destination options */\nfunction createPipe(arg, from, to) {\n if (from === void 0) {\n from = PIPE_TYPE.MASKED;\n }\n if (to === void 0) {\n to = PIPE_TYPE.MASKED;\n }\n const masked = createMask(arg);\n return value => masked.runIsolated(m => {\n m[from] = value;\n return m[to];\n });\n}\n\n/** Pipes value through mask depending on mask type, source and destination options */\nfunction pipe(value, mask, from, to) {\n return createPipe(mask, from, to)(value);\n}\nIMask.PIPE_TYPE = PIPE_TYPE;\nIMask.createPipe = createPipe;\nIMask.pipe = pipe;\n\nexport { PIPE_TYPE, createPipe, pipe };\n","export { default as InputMask } from './controls/input.js';\nimport IMask from './core/holder.js';\nexport { default as HTMLContenteditableMaskElement } from './controls/html-contenteditable-mask-element.js';\nexport { default as HTMLInputMaskElement } from './controls/html-input-mask-element.js';\nexport { default as HTMLMaskElement } from './controls/html-mask-element.js';\nexport { default as MaskElement } from './controls/mask-element.js';\nexport { default as ChangeDetails } from './core/change-details.js';\nexport { DIRECTION, forceDirection } from './core/utils.js';\nexport { default as Masked } from './masked/base.js';\nexport { default as MaskedDate } from './masked/date.js';\nexport { default as MaskedDynamic } from './masked/dynamic.js';\nexport { default as MaskedEnum } from './masked/enum.js';\nexport { default as createMask, normalizeOpts } from './masked/factory.js';\nexport { default as MaskedFunction } from './masked/function.js';\nexport { default as MaskedNumber } from './masked/number.js';\nexport { default as MaskedPattern } from './masked/pattern.js';\nexport { default as ChunksTailDetails } from './masked/pattern/chunk-tail-details.js';\nexport { default as PatternFixedDefinition } from './masked/pattern/fixed-definition.js';\nexport { default as PatternInputDefinition } from './masked/pattern/input-definition.js';\nexport { PIPE_TYPE, createPipe, pipe } from './masked/pipe.js';\nexport { default as MaskedRange } from './masked/range.js';\nexport { default as MaskedRegExp } from './masked/regexp.js';\nimport './core/action-details.js';\nimport './core/continuous-tail-details.js';\nimport './masked/pattern/cursor.js';\n\ntry {\n globalThis.IMask = IMask;\n} catch {}\n\nexport { IMask as default };\n","const metrics = () => {\r\n /* Установка метрики по клику на кнопку телеграмма */\r\n (() => {\r\n const buttonsTelegram = document.querySelectorAll(\".TelegramClickKB\");\r\n\r\n buttonsTelegram.forEach((button) => {\r\n button.addEventListener(\"click\", () => {\r\n ym(90894624, \"reachGoal\", \"TelegramClickKB\");\r\n });\r\n });\r\n })();\r\n};\r\n\r\nexport default metrics;\r\n","import getPageName from \"./getPageName\";\r\nimport IMask from 'imask';\r\nimport metrics from \"./metrics\";\r\n\r\nconst form = () => {\r\n //const citizenRequest = 'https://localhost:44328/CitizenRequest/InternalNewRequest'; // debug\r\n\r\n const citizenRequest =\r\n 'https://flowrequests.code.flow-crm.study/citizenrequest/InternalNewRequest';\r\n const regions = 'https://2024.api.tgu-dpo.ru/regions/GetRegions';\r\n const crmRequest = 'https://sigmaedu.ru/handler.php';\r\n\r\n const manual = '/files/Instructia_Gosuslugi.pdf',\r\n telegram = 'http://t.me/education_school_bot';\r\n\r\n const redirectList = {\r\n 'Python Essentials: концепции и технологии разработки':\r\n 'https://www.gosuslugi.ru/futurecode/27438?view=online',\r\n 'Data-science: программирование нейросетей (Machine Learning)':\r\n 'https://www.gosuslugi.ru/futurecode/27361?view=online',\r\n 'Разработчик на Python: с нуля до junior':\r\n 'https://www.gosuslugi.ru/futurecode/27361?view=online',\r\n 'Python: разработка web-приложений на Flask':\r\n 'https://www.gosuslugi.ru/futurecode/27457?view=online',\r\n 'Разработка игр и чат-ботов на Python':\r\n 'https://www.gosuslugi.ru/futurecode/27457?view=online',\r\n 'Web-программирование: с нуля до первых проектов':\r\n 'https://www.gosuslugi.ru/futurecode/27434?view=online',\r\n 'Тестировщик программного обеспечения':\r\n 'https://www.gosuslugi.ru/futurecode/27470?view=online',\r\n 'Основы разработки виртуальной реальности (VR) и дополненной реальности (AR)':\r\n 'https://www.gosuslugi.ru/futurecode/27449?view=online',\r\n 'Разработчик мобильных приложений на Android':\r\n 'https://www.gosuslugi.ru/futurecode/27445?view=online',\r\n 'Разработчик игр на С#: с нуля до PRO':\r\n 'https://www.gosuslugi.ru/futurecode/27438?view=online',\r\n };\r\n\r\n const DIRECTIONS = {\r\n Games: [\r\n //\"Разработка игр и приложений на Unity 3D и C#\",\r\n //\"Python: разработка игр с Pygame и GUI\",\r\n //\"Unreal Engine: от программирования на С++ до дизайна уровней в Blueprints\",\r\n //\"Разработка игры в Roblox Studio: с нуля до создания игрового мира\",\r\n 'Разработка игр и чат-ботов на Python',\r\n 'Разработчик игр на С#: с нуля до PRO',\r\n ],\r\n Web: [\r\n 'Разработчик на Python: с нуля до junior',\r\n 'Разработчик мобильных приложений на Android',\r\n 'Web-программирование: с нуля до первых проектов',\r\n 'Python: разработка web-приложений на Flask',\r\n 'Python Essentials: концепции и технологии разработки',\r\n \"Уверенный старт в IT\",\r\n ],\r\n AI: [\r\n 'Основы разработки виртуальной реальности (VR) и дополненной реальности (AR)',\r\n //\"Интернет вещей и AI: программирование умных устройств\",\r\n 'Data-science: программирование нейросетей (Machine Learning)',\r\n ],\r\n Data: [\r\n //\"Анализ данных на Python (базовый уровень)\",\r\n //\"Анализ данных на Python (начальный уровень)\",\r\n ],\r\n Testing: ['Тестировщик программного обеспечения'],\r\n Bpla: [\r\n //\"Программирование БПЛА на Python: от основ до автономных полетов\",\r\n //\"Программирование БПЛА на JavaScript: от основ до первого полета\",\r\n //\"Программирование БПЛА на Python: от теории к практике\",\r\n //\"Программирование БПЛА на Python: паттерны, API и библиотеки эффективных решений\",\r\n ],\r\n };\r\n\r\n var isChange = false; // Проверка заполнял ли форму уже пользователь в текущий момент\r\n function setVkTarget() {\r\n if (!isChange) {\r\n isChange = true;\r\n VK.Retargeting.Event('initiate_checkout');\r\n VK.Goal('initiate_checkout');\r\n }\r\n }\r\n\r\n //Select2\r\n $(document).ready(function () {\r\n $('.form__select_direction')\r\n .select2({\r\n placeholder: 'Направление',\r\n })\r\n .change(() => {\r\n setVkTarget();\r\n });\r\n\r\n $('#Program')\r\n .select2({\r\n placeholder: 'Курс',\r\n })\r\n .change(() => {\r\n setVkTarget();\r\n });\r\n\r\n setTimeout(() => {\r\n VK.Retargeting.Event('PageView30sec');\r\n }, 30000);\r\n });\r\n\r\n /**\r\n * Получение cookie\r\n */\r\n function getCookie(cname) {\r\n let name = cname + '=';\r\n let decodedCookie = decodeURIComponent(document.cookie);\r\n let ca = decodedCookie.split(';');\r\n for (let i = 0; i < ca.length; i++) {\r\n let c = ca[i];\r\n while (c.charAt(0) === ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) === 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n // Добавление disabled кнопки отправки формы\r\n function setFormCheckbox(cbx, btn) {\r\n if (!cbx) {\r\n return;\r\n }\r\n\r\n cbx.addEventListener('change', function (e) {\r\n if (e.target.checked) {\r\n btn.removeAttribute('disabled');\r\n } else {\r\n btn.setAttribute('disabled', 'disabled');\r\n }\r\n });\r\n }\r\n\r\n var validators = {\r\n requried: function (value, error) {\r\n if (!value || value.length === 0) {\r\n error.message = 'Это поле необходимо заполнить';\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n },\r\n birthday: function (value, error) {\r\n var parts = value.split('.');\r\n if (\r\n parts.length != 3 ||\r\n parts[0].length != 2 ||\r\n parts[1].length != 2 ||\r\n parts[2].length != 4\r\n ) {\r\n error.message = 'Некорректная дата рождения';\r\n return false;\r\n }\r\n\r\n return true;\r\n },\r\n email: function (value, error) {\r\n if (/.+@.+\\..+/.test(value)) {\r\n return true;\r\n } else {\r\n error.message = 'Некорректный email';\r\n return false;\r\n }\r\n },\r\n };\r\n\r\n // Показ ошибок при заполнении формы\r\n function showError(error, field) {\r\n if (error.message) {\r\n var errorContainer = document.createElement('div');\r\n errorContainer.textContent = error.message;\r\n errorContainer.classList.add('form__error-container');\r\n field.appendChild(errorContainer);\r\n }\r\n }\r\n\r\n // Валидация формы\r\n function validate(form) {\r\n var result = true;\r\n Array.from(form.querySelectorAll('.form__field')).forEach(function (\r\n formField\r\n ) {\r\n var error = {};\r\n var control = formField.querySelector('select, input, textarea');\r\n if (formField.querySelector('.form__required')) {\r\n if (!validators.requried(control.value, error)) {\r\n showError(error, formField);\r\n control.classList.add('form__field--invalid');\r\n result = false;\r\n return;\r\n }\r\n }\r\n if (control.id === 'email') {\r\n if (!validators.email(control.value, error)) {\r\n showError(error, formField);\r\n control.classList.add('form__field--invalid');\r\n result = false;\r\n }\r\n }\r\n if (control.id === 'birthday') {\r\n if (!validators.birthday(control.value, error)) {\r\n showError(error, formField);\r\n control.classList.add('form__field--invalid');\r\n result = false;\r\n }\r\n }\r\n });\r\n\r\n let invalidField = document.querySelector('.form__field--invalid');\r\n if (invalidField) {\r\n invalidField.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // Удаление ошибок с формы\r\n function deleteErrors(form) {\r\n form.querySelectorAll('.form__error-container').forEach(function (el) {\r\n el.remove();\r\n });\r\n form.querySelectorAll('.form__field--invalid').forEach(function (el) {\r\n el.classList.remove('form__field--invalid');\r\n });\r\n }\r\n\r\n // Установка формы\r\n function setForm(selector) {\r\n var form = document.querySelector(selector);\r\n\r\n if (!form) {\r\n return;\r\n }\r\n\r\n form.addEventListener('submit', function (e) {\r\n sendForm(form, e);\r\n });\r\n\r\n onFormFilling(form, () => {\r\n // ВК\r\n VK.Retargeting.Event('initiate_checkout');\r\n VK.Goal('initiate_checkout');\r\n\r\n // Top.Mail.Ru\r\n var _tmr = window._tmr || (window._tmr = []);\r\n _tmr.push({ id: '3269480', type: 'reachGoal', goal: 'initiatecheckout' });\r\n _tmr.push({ type: 'reachGoal', id: 3269480, goal: 'addToCart' });\r\n });\r\n }\r\n\r\n // Отправка формы\r\n let firstFormData = {};\r\n function sendForm(form, e) {\r\n var sendBtn = form.querySelector(\r\n 'button[type=\"submit\"], input[type=\"submit\"]'\r\n );\r\n e.preventDefault();\r\n deleteErrors(form);\r\n var data = {};\r\n\r\n if (!validate(form)) {\r\n return;\r\n }\r\n\r\n sendBtn.disabled = true;\r\n Array.from(new FormData(form)).forEach(function (formElement) {\r\n var key = formElement[0];\r\n var value = formElement[1];\r\n\r\n if (key == 'BirthDate') {\r\n data[key] = value.split('.').reverse().join('-');\r\n } else {\r\n data[key] = value;\r\n }\r\n });\r\n\r\n var url = document.location.href;\r\n\r\n data['Landing'] = url.split('?')[0] || url;\r\n\r\n var paramsStartIndex = url.indexOf('?');\r\n if (paramsStartIndex > -1) {\r\n url\r\n .slice(paramsStartIndex + 1, url.length)\r\n .split('&')\r\n .map(function (utmString) {\r\n return utmString.split('=');\r\n })\r\n .forEach(function (utmMark) {\r\n var key = utmMark[0];\r\n key = key[0].toUpperCase() + key.slice(1, key.length);\r\n var value = utmMark[1];\r\n value =\r\n value.indexOf('#') > -1\r\n ? value.slice(0, value.indexOf('#'))\r\n : value;\r\n\r\n data[key] = value;\r\n });\r\n }\r\n\r\n let roistatCookie = getCookie('roistat_visit');\r\n\r\n if (!!roistatCookie) {\r\n data['RoistatCookie'] = roistatCookie;\r\n }\r\n\r\n if (form.id == 'form-first') {\r\n firstFormData = { ...data };\r\n\r\n document.querySelector('.form__steps').classList.add('first');\r\n document\r\n .querySelector('.form__right')\r\n .classList.remove('form__right--decor');\r\n document.getElementById('form-first').style.display = 'none';\r\n document.getElementById('form-second').style.display = 'block';\r\n\r\n document\r\n .querySelector('#form-second .form__btn--alt')\r\n .addEventListener('click', () => {\r\n document.getElementById('form-first').style.display = 'block';\r\n document.getElementById('form-second').style.display = 'none';\r\n document.querySelector('.form__steps').classList.remove('first');\r\n document\r\n .querySelector('.form__right')\r\n .classList.add('form__right--decor');\r\n });\r\n sendBtn.disabled = false;\r\n return;\r\n }\r\n\r\n if (form.id == 'form-second') {\r\n data['FirstName'] = firstFormData.FirstName;\r\n data['Email'] = firstFormData.Email;\r\n data['Phone'] = firstFormData.Phone;\r\n }\r\n\r\n if (form.id == 'form-app') {\r\n if (!data.Program) {\r\n if (programName) {\r\n data['Program'] = programName;\r\n } else {\r\n const title = document.querySelector(\r\n '.home .home-block__title'\r\n ).textContent,\r\n program = title.slice(title.indexOf('«') + 1, title.indexOf('»'));\r\n\r\n data['Program'] = program;\r\n }\r\n }\r\n }\r\n\r\n toastr.options.progressBar = true;\r\n fetch(citizenRequest, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json;charset=utf-8' },\r\n body: JSON.stringify(data),\r\n })\r\n .then((response) => response.json())\r\n .then((result) => {\r\n sendBtn.disabled = false;\r\n\r\n if (form.id == 'form-second') {\r\n if (window.yaCounter90894624) {\r\n ym(90894624, 'reachGoal', 'submit_form');\r\n }\r\n formSubmitCRM(data);\r\n toastr.success('Ваша анкета успешно отправлена', 'Поздравляем!');\r\n onSuccess(data);\r\n document.querySelector('.form__steps').classList.remove('first');\r\n document.querySelector('.form__steps').classList.add('second');\r\n }\r\n\r\n if (form.id == 'form-app') {\r\n if (window.yaCounter90894624) {\r\n ym(90894624, 'reachGoal', 'submit_form');\r\n }\r\n formSubmitCRM(data);\r\n toastr.success('Ваша анкета успешно отправлена', 'Поздравляем!');\r\n onSuccess(data);\r\n }\r\n // Статистика для ВК\r\n VK.Goal('lead');\r\n VK.Retargeting.Event('lead');\r\n fbq('track', 'Lead');\r\n\r\n // Top.Mail.Ru\r\n var _tmr = window._tmr || (window._tmr = []);\r\n _tmr.push({ id: '3269480', type: 'reachGoal', goal: 'lead' });\r\n _tmr.push({ type: 'reachGoal', id: 3269480, goal: 'purchase' });\r\n\r\n addAdvCakeScript(\r\n result.requestId,\r\n result.odinId,\r\n result.programName,\r\n data.Email\r\n );\r\n\r\n form.reset();\r\n })\r\n .catch((err) => {\r\n sendBtn.disabled = false;\r\n toastr.error(\r\n 'Пожалуйста, проверьте ваше соединение с сетью или повторите попытку позже',\r\n 'Произошла ошибка!'\r\n );\r\n console.log(err);\r\n });\r\n }\r\n\r\n // Отправка формы на АМО CRM\r\n function formSubmitCRM(data) {\r\n $.ajax({\r\n url: crmRequest,\r\n method: 'POST',\r\n contentType: 'application/json;charset=utf-8',\r\n data: JSON.stringify(data),\r\n success: function () {\r\n if (getPageName() == 'webinarweb') {\r\n const redirect = document.createElement('a');\r\n redirect.href = '/webinarweb/thank-you';\r\n redirect.style.display = 'none';\r\n document.body.append(redirect);\r\n redirect.click();\r\n }\r\n },\r\n error: function () {},\r\n });\r\n }\r\n\r\n // Установка масок\r\n function setMasks() {\r\n let phoneInput = document.getElementById('phone');\r\n\r\n try { \r\n new IMask(phoneInput, {\r\n mask: '+{7} (000) 000-00-00',\r\n autoclear: false\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n // Начало заполнения формы\r\n function onFormFilling(form, callback) {\r\n const controls = form.querySelectorAll('input, select, textarea');\r\n let changed = false;\r\n controls.forEach((control) => {\r\n $(control).one('blur', (e) => {\r\n if (!changed) {\r\n callback(e);\r\n changed = true;\r\n }\r\n });\r\n });\r\n }\r\n\r\n $(function () {\r\n setMasks();\r\n setForm('#form-app');\r\n setForm('#form-first');\r\n setForm('#form-second');\r\n setFormCheckbox(\r\n document.querySelector('#personal-data'),\r\n document.querySelector('.form__btn')\r\n );\r\n });\r\n\r\n // Модальное окно успешно отправленной формы\r\n function successModal() {\r\n let modal = document.querySelector('#quiz-success');\r\n if (!modal) {\r\n modal = document.createElement('div');\r\n ['modal', 'quiz'].forEach((additionalClass) => {\r\n modal.classList.add(additionalClass);\r\n });\r\n modal.id = 'quiz-success';\r\n modal.innerHTML = '
';\r\n\r\n document.body.append(modal);\r\n }\r\n\r\n const a = document.createElement('a');\r\n a.href = '#quiz-success';\r\n a.rel = 'modal:open';\r\n a.style.display = 'none';\r\n document.body.append(a);\r\n\r\n window.openRedirectSuccessModal = () => {\r\n // if (!/iPhone|iPad|iPod/i.test(navigator.userAgent)) {\r\n // const downloadInstruction = document.createElement('a');\r\n // downloadInstruction.href = manual;\r\n // downloadInstruction.setAttribute('download', '');\r\n // downloadInstruction.style.display = 'none';\r\n // document.body.append(downloadInstruction);\r\n\r\n // downloadInstruction.click();\r\n // }\r\n\r\n modal.classList.add('rvr-modal', 'rvr-modal__style');\r\n setStyles(modal, {\r\n position: 'relative',\r\n maxWidth: '800px',\r\n });\r\n modal.querySelector('.quiz__content').innerHTML = /*html*/ `\r\n

Набор на обучение в 2025 году.

\r\n

Вы зачислены в список приоритетных кандидатов на обучение!

\r\n

Чтобы не пропустить старт обучения и получить дальнейшие инструкции о следующих шагах, подпишитесь на нашего Telegram-бота и вступите в чат программы.

\r\n

Подписаться

\r\n `;\r\n\r\n a.click();\r\n metrics();\r\n };\r\n\r\n window.openNoRedirectSuccessModal = () => {\r\n modal.classList.add('rvr-modal');\r\n setStyles(modal, {\r\n position: 'relative',\r\n paddingBottom: '2rem',\r\n });\r\n\r\n if (window.location.pathname.split('/')[1] == 'webinarweb') {\r\n modal.querySelector('.quiz__content').innerHTML = /*html*/ `\r\n

Ваша заявка принята

\r\n

Благодарим за заявку! Письмо с подарком уже отправлено вам на почту.

\r\n `;\r\n a.click();\r\n } else {\r\n const formModal = document.createElement('div');\r\n formModal.classList.add('beat');\r\n formModal.innerHTML = `\r\n
\r\n
\r\n
\r\n

Благодарим за заявку!

\r\n

В ближайшее время наш менеджер свяжется с вами. Для следующего этапа вам понадобится справка об обучении в 8–11 классе школы, техникума или колледжа, выданная от 01.06.2023 за 2023-2024 учебный год.

\r\n

Чтобы узнать требования по подаче необходимых документов приглашаем Вас присоединиться к чат-боту проекта «Код будущего». Здесь Вы получите ответы на все Ваши вопросы, в том числе и индивидуальную консультацию.

\r\n Узнать требования\r\n
\r\n \r\n
\r\n
\r\n `;\r\n\r\n document.body.append(formModal);\r\n document.body.classList.add('scroll-lock');\r\n const beatClose = formModal.querySelector('.beat__close');\r\n metrics();\r\n\r\n beatClose.addEventListener('click', () => {\r\n document.body.classList.remove('scroll-lock');\r\n document.body.removeChild(formModal);\r\n });\r\n }\r\n };\r\n\r\n window.openNoRedirectSuccessModalTest = () => {\r\n modal.classList.add('rvr-modal');\r\n setStyles(modal, {\r\n position: 'relative',\r\n paddingBottom: '2rem',\r\n });\r\n const formModal = document.createElement('div');\r\n formModal.classList.add('beat');\r\n formModal.innerHTML = `\r\n
\r\n
\r\n
\r\n

Поздравляем! Ваша заявка принята!

\r\n

Ваш следующий шаг — в течение 3х дней получить и загрузить справку об обучении в 8-11 классе, колледже или техникуме. После этого вы сможете перейти к следующим этапам — подтверждению заявки на портале «Госуслуги» и тестированию.

\r\n

Перейдите по кнопке ниже в наш Telegram-бот, чтобы узнать требования к справке и загрузить скан.

\r\n

ВАЖНО:

\r\n
    \r\n
  • • В ближайшее время с вами свяжется наш менеджер. Пожалуйста, ответьте на звонок с номера +7-495-152-39-55
  • \r\n
  • • На вашу почту будут приходить письма с инструкциями — обязательно проверяйте почту и папку «Спам»
  • \r\n
  • • Подпишитесь на соцсети проекта, чтобы быть в курсе новостей и стать участником розыгрыша Playstation и MacBook: ВКонтакте, Telegram, YouTube, Одноклассники
  • \r\n
\r\n

Осталось 135 мест из 10 000

\r\n Перейти в Telegram-бот\r\n
\r\n \r\n
\r\n
\r\n `;\r\n\r\n document.body.append(formModal);\r\n document.body.classList.add('scroll-lock');\r\n const beatClose = formModal.querySelector('.beat__close');\r\n metrics();\r\n\r\n beatClose.addEventListener('click', () => {\r\n document.body.classList.remove('scroll-lock');\r\n document.body.removeChild(formModal);\r\n });\r\n };\r\n }\r\n\r\n // Функция для определения вывода модальных окон после успешной отправки формы\r\n function onSuccess(data = null) {\r\n if (getPageName() === 'dev') {\r\n openNoRedirectSuccessModalTest();\r\n } else {\r\n openRedirectSuccessModal();\r\n }\r\n }\r\n\r\n // Добавление стилей\r\n function setStyles(el, stylesObject) {\r\n if (!el) {\r\n return;\r\n }\r\n Object.keys(stylesObject).forEach((key) => {\r\n el.style[key] = stylesObject[key];\r\n });\r\n }\r\n\r\n successModal();\r\n\r\n // Таймер редиректа\r\n function setTimerRedirect(el) {\r\n if (!el) {\r\n console.error('Не передан элемент');\r\n return;\r\n }\r\n const interval = setInterval(() => {\r\n if (el.textContent === '0' || Number(el.textContent) < 1) {\r\n clearInterval(interval);\r\n return;\r\n }\r\n el.textContent = Number(el.textContent) - 1;\r\n }, 1000);\r\n }\r\n\r\n //Вывод полей Региона\r\n function initDropDownsRegions() {\r\n let regionsSelect = $('#Regions');\r\n\r\n regionsSelect.val(null);\r\n regionsSelect.select2({\r\n placeholder: 'Ваш регион',\r\n });\r\n\r\n $.ajax({\r\n type: 'GET',\r\n url: regions,\r\n }).then(function (regions) {\r\n regions.forEach(function (el, i) {\r\n var selected = false;\r\n let currentCity;\r\n let currentRegion;\r\n\r\n if (\r\n el.name == currentCity ||\r\n el.name.includes(currentCity) ||\r\n el.name.includes(currentRegion)\r\n ) {\r\n selected = false;\r\n }\r\n\r\n var option = new Option(el.name, el.id, false, selected);\r\n option.accessKey = el.id;\r\n regionsSelect.append(option);\r\n });\r\n\r\n regionsSelect.val(null);\r\n regionsSelect.select2({\r\n placeholder: 'Ваш регион',\r\n });\r\n });\r\n }\r\n\r\n // Вывод поля Курс\r\n $('.form__select_direction')\r\n .val(null)\r\n .change(function () {\r\n let field_program = document.getElementById('Program'),\r\n direction = document.getElementById('Direction').value;\r\n\r\n field_program\r\n .querySelectorAll('option')\r\n .forEach((option) => option.remove());\r\n renderPrograms(direction);\r\n });\r\n\r\n const renderPrograms = (direction) => {\r\n let Program = $('#Program');\r\n document.querySelector('#Program').removeAttribute('disabled');\r\n DIRECTIONS[direction].forEach(function (el) {\r\n let option = new Option(el, el, false, false);\r\n Program.append(option);\r\n });\r\n\r\n DIRECTIONS[direction].length > 1 && Program.val(null);\r\n };\r\n\r\n /* Инициализация datepicker */\r\n const datepicker = document.getElementById('birthday');\r\n try {\r\n new IMask(datepicker, {\r\n mask: Date,\r\n min: new Date(1900, 0, 1),\r\n max: new Date(2100, 0, 1),\r\n }); \r\n $(\"#birthday\").datepicker();\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n /* Добавление скрипта AdvCake на сайт */\r\n function addAdvCakeScript(id, OdinId, program, email) {\r\n window.advcake_data = window.advcake_data || [];\r\n window.advcake_data.push({\r\n pageType: 6,\r\n user: {\r\n email: `md5(${email})`,\r\n type: '',\r\n },\r\n leadInfo: {\r\n id: `${id}`,\r\n leadid: `${OdinId}`,\r\n name: `${program}`,\r\n totalPrice: 0,\r\n coupon: '',\r\n marketing_cat: 2,\r\n },\r\n });\r\n }\r\n};\r\n\r\nexport default form;\r\n","const site = () => {\r\n //Переменные по смене дат\r\n const settingDate = '1';\r\n const settingMonth = 'марта';\r\n\r\n // Для использования API ВК\r\n VK.Retargeting.Init('VK-RTRG-1577285-8IJ2I');\r\n \r\n changeDates();\r\n switchTabs();\r\n seeAllFaq();\r\n programTabs(\r\n '.programCollapse__blocks',\r\n '.faqBlock__top',\r\n '.faqBlock__collapse',\r\n '.faqBlock__icon'\r\n );\r\n\r\n if (window.innerWidth <= 660) {\r\n timerСountdown(2, 2025, nameConversMonth(), settingDate - 1, 23, 59, 0);\r\n } else {\r\n timerСountdown(1, 2025, nameConversMonth(), settingDate - 1, 23, 59, 0);\r\n }\r\n\r\n const select = new CustomSelect();\r\n select.init();\r\n\r\n seeAllProgramm();\r\n\r\n /* Сортировка программ на главной странице блока каталога */\r\n sortProgramsCatalog();\r\n\r\n /* Функционал фильтров в каталоге */\r\n initDirectionFilter();\r\n\r\n /* Интеграция Adv.Cace для программ */\r\n try {\r\n advCaceProgram();\r\n } catch(e) {\r\n console.log(e);\r\n }\r\n\r\n //Кнопки смотреть все\r\n function seeAllProgramm() {\r\n let btn_viewAll = document.querySelector('.program__button');\r\n let blocks = document.querySelectorAll('.program__block');\r\n\r\n blocks.forEach((item, index) => {\r\n blocks[index].style.display = 'none';\r\n blocks[0].removeAttribute('style');\r\n\r\n btn_viewAll.addEventListener('click', function () {\r\n if (blocks[index].hasAttribute('style')) {\r\n blocks[index].removeAttribute('style');\r\n btn_viewAll.textContent = 'Свернуть все';\r\n btn_viewAll.classList.add('active');\r\n } else {\r\n blocks[index].style.display = 'none';\r\n blocks[0].removeAttribute('style');\r\n blocks[0].scrollIntoView();\r\n btn_viewAll.textContent = 'Развернуть всю программу';\r\n btn_viewAll.classList.remove('active');\r\n }\r\n });\r\n });\r\n }\r\n\r\n function seeAllFaq() {\r\n let btn_viewAll = document.querySelector('.faqBlock__button'),\r\n topSection = document.querySelector('.faq__blocks'),\r\n hiddenBlocks = Array.from(\r\n document.querySelectorAll('.faq__block_hidden')\r\n );\r\n\r\n hiddenBlocks.forEach((item) => {\r\n btn_viewAll?.addEventListener('click', function () {\r\n if (!item.classList.contains('show')) {\r\n item.classList.add('show');\r\n btn_viewAll.textContent = 'Свернуть все';\r\n btn_viewAll.classList.add('active');\r\n } else {\r\n item.classList.remove('show');\r\n topSection.scrollIntoView({\r\n behavior: 'smooth',\r\n });\r\n btn_viewAll.textContent = 'Развернуть все вопросы';\r\n btn_viewAll.classList.remove('active');\r\n }\r\n });\r\n });\r\n }\r\n\r\n //Переключение табов faq\r\n function switchTabs() {\r\n let cardsDesk = Array.from(document.querySelectorAll('.faq__card--desk')),\r\n cardsMob = Array.from(document.querySelectorAll('.faq__card--mob')),\r\n faqSection = Array.from(document.querySelectorAll('.faq__section')),\r\n targetBlock;\r\n\r\n targetBlock = faqSection.find((item) => {\r\n return item ? item.classList.contains('visible') : '';\r\n });\r\n\r\n if (document.querySelector('.faq')) {\r\n faqTabs(\r\n targetBlock,\r\n '.faqBlock__top',\r\n '.faqBlock__collapse',\r\n '.faqBlock__icon'\r\n );\r\n }\r\n\r\n cardsDesk.forEach((item) => {\r\n item.addEventListener('click', function (e) {\r\n cardsDesk.forEach((i) => {\r\n i.classList.remove('active-faq');\r\n });\r\n item.classList.toggle('active-faq');\r\n faqSection.forEach((it) => {\r\n it.classList.remove('visible');\r\n });\r\n targetBlock = faqSection[cardsDesk.indexOf(item)];\r\n targetBlock.classList.toggle('visible');\r\n\r\n faqTabs(\r\n targetBlock,\r\n '.faqBlock__top',\r\n '.faqBlock__collapse',\r\n '.faqBlock__icon'\r\n );\r\n });\r\n });\r\n\r\n cardsMob.forEach((item) => {\r\n item.addEventListener('click', function (e) {\r\n cardsMob.forEach((i) => {\r\n i.classList.remove('active-faq');\r\n });\r\n item.classList.toggle('active-faq');\r\n faqSection.forEach((it) => {\r\n it.classList.remove('visible');\r\n });\r\n targetBlock = faqSection[cardsMob.indexOf(item)];\r\n targetBlock.classList.toggle('visible');\r\n\r\n faqTabs(\r\n targetBlock,\r\n '.faqBlock__top',\r\n '.faqBlock__collapse',\r\n '.faqBlock__icon'\r\n );\r\n });\r\n });\r\n }\r\n\r\n //Timer\r\n function timerСountdown(index, cYear, cMonth, cDay, cHour, cMinute, cSecond) {\r\n const utcDateT = new Date(\r\n Date.UTC(cYear, cMonth, cDay, cHour - 3, cMinute, cSecond)\r\n );\r\n let countDownDate = new Date(utcDateT).getTime();\r\n\r\n function setTimer() {\r\n let now = new Date().getTime(),\r\n distance = countDownDate - now,\r\n days = Math.floor(distance / (1000 * 60 * 60 * 24)),\r\n hours = Math.floor(\r\n (distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)\r\n ),\r\n minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)),\r\n seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n\r\n const getMinutesWord = (minutes) => {\r\n let result = ' минут';\r\n if (minutes > 10 && minutes < 20) {\r\n return result;\r\n }\r\n const lastDigit = Number(String(minutes).slice(-1));\r\n if (lastDigit === 0 || lastDigit >= 5) {\r\n return result;\r\n }\r\n if (lastDigit === 1) {\r\n return result + 'а';\r\n }\r\n return result + 'ы';\r\n };\r\n\r\n const getHoursWord = (hours) => {\r\n let result = ' часов ';\r\n if (hours > 10 && hours < 20) {\r\n return result;\r\n }\r\n const lastDigit = Number(String(hours).slice(-1));\r\n if (lastDigit === 0 || lastDigit >= 5) {\r\n return result;\r\n }\r\n if (lastDigit === 1) {\r\n return ' час ';\r\n }\r\n return ' часа ';\r\n };\r\n\r\n const getDaysWord = (days) => {\r\n let result = ' дней ';\r\n\r\n if (days > 10 && days < 20) {\r\n return result;\r\n }\r\n const lastDigit = Number(String(days).slice(-1));\r\n\r\n if (lastDigit === 0 || lastDigit >= 5) {\r\n return result;\r\n }\r\n\r\n if (lastDigit === 1) {\r\n return ' день ';\r\n }\r\n\r\n return ' дня ';\r\n };\r\n\r\n const getSecondsWord = (seconds) => {\r\n let result = ' секунд ';\r\n if (seconds > 10 && seconds < 20) {\r\n return result;\r\n }\r\n const lastDigit = Number(String(seconds).slice(-1));\r\n if (lastDigit === 0 || lastDigit >= 5) {\r\n return result;\r\n }\r\n if (lastDigit === 1) {\r\n return ' секунда ';\r\n }\r\n return ' секунды ';\r\n };\r\n\r\n const getBitNumber = (data, selector) => {\r\n if (data.toString().length < 2) {\r\n if (window.innerWidth <= 660 && selector == '.onCountDay-2') {\r\n if (document.querySelector(selector)) {\r\n document.querySelector(selector).innerHTML = data;\r\n }\r\n } else {\r\n if (document.querySelector(selector)) {\r\n document.querySelector(selector).innerHTML = '0' + data;\r\n }\r\n }\r\n } else {\r\n if (document.querySelector(selector)) {\r\n document.querySelector(selector).innerHTML = data;\r\n }\r\n }\r\n };\r\n\r\n getBitNumber(days, '.onCountDay-' + index);\r\n if (document.querySelector('.onCountDays-' + index)) {\r\n document.querySelector('.onCountDays-' + index).innerHTML =\r\n getDaysWord(days);\r\n }\r\n\r\n getBitNumber(hours, '.onCountHour-' + index);\r\n if (document.querySelector('.onCountHours-' + index)) {\r\n document.querySelector('.onCountHours-' + index).innerHTML =\r\n getHoursWord(hours);\r\n }\r\n\r\n getBitNumber(minutes, '.onCountMinute-' + index);\r\n if (document.querySelector('.onCountMinutes-' + index)) {\r\n document.querySelector('.onCountMinutes-' + index).innerHTML =\r\n getMinutesWord(minutes);\r\n }\r\n\r\n getBitNumber(seconds, '.onCountSecond-' + index);\r\n if (document.querySelector('.onCountSeconds-' + index)) {\r\n document.querySelector('.onCountSeconds-' + index).innerHTML =\r\n getSecondsWord(seconds);\r\n }\r\n \r\n if (distance < 1000 || Math.sign(distance) == '-1') {\r\n clearInterval(x);\r\n document.querySelector('.onCountDay-' + index).innerHTML = '00';\r\n document.querySelector('.onCountHour-' + index).innerHTML = '00';\r\n document.querySelector('.onCountMinute-' + index).innerHTML = '00';\r\n document.querySelector('.onCountSecond-' + index).innerHTML = '00';\r\n }\r\n }\r\n\r\n let x = setInterval(setTimer, 300);\r\n }\r\n\r\n // Плавный скролл\r\n function setNavigation() {\r\n $(\"a[href^='#']:not(.employment-formats__btn):not([rel='modal:open'])\").on(\r\n 'click',\r\n function (e) {\r\n e.preventDefault();\r\n $('html,body')\r\n .stop()\r\n .animate(\r\n {\r\n scrollTop: $(`#${this.href.split('#').pop()}`).offset()?.top,\r\n },\r\n 700\r\n );\r\n }\r\n );\r\n }\r\n\r\n $(function () {\r\n setNavigation();\r\n //programTabs('.programCollapse__blocks','.faqBlock__top', '.faqBlock__collapse', '.faqBlock__icon');\r\n });\r\n\r\n //Typed.js\r\n function customTyped() {\r\n let typed = new Typed('.typed', {\r\n strings: [\r\n \"профессия, которая нужна\",\r\n \"доход от любимого дела\",\r\n \"путь к успешной карьере\",\r\n \"монетизация навыков\",\r\n \"«Sold out» на ваши услуги\",\r\n ],\r\n typeSpeed: 38,\r\n backSpeed: 12,\r\n startDelay: 500,\r\n loop: true,\r\n loopCount: Infinity,\r\n showCursor: false,\r\n });\r\n }\r\n\r\n //Массовая смена дат\r\n function changeDates() {\r\n let changeDate = document.querySelectorAll('.target_changeDate'),\r\n changeMonth = document.querySelectorAll('.target_changeMonth');\r\n\r\n if (changeDate && changeMonth) {\r\n for (let item of changeDate) {\r\n item.innerHTML = settingDate;\r\n }\r\n for (let item of changeMonth) {\r\n item.innerHTML = settingMonth;\r\n }\r\n }\r\n }\r\n\r\n //Преобразование названия месяца в цифру для таймера\r\n function nameConversMonth() {\r\n if (settingMonth.includes('янв')) {\r\n return 0;\r\n } else if (settingMonth.includes('фев')) {\r\n return 1;\r\n } else if (settingMonth.includes('мар')) {\r\n return 2;\r\n } else if (settingMonth.includes('апре')) {\r\n return 3;\r\n } else if (settingMonth.includes('мая')) {\r\n return 4;\r\n } else if (settingMonth.includes('июн')) {\r\n return 5;\r\n } else if (settingMonth.includes('июл')) {\r\n return 6;\r\n } else if (settingMonth.includes('авгу')) {\r\n return 7;\r\n } else if (settingMonth.includes('сентя')) {\r\n return 8;\r\n } else if (settingMonth.includes('октя')) {\r\n return 9;\r\n } else if (settingMonth.includes('ноябр')) {\r\n return 10;\r\n } else if (settingMonth.includes('дека')) {\r\n return 11;\r\n }\r\n }\r\n\r\n //Табы для Faq блока\r\n function faqTabs(target, button, block, icon) {\r\n let buttonsClick = target?.querySelectorAll(button);\r\n let blockCollapseHeights = [];\r\n let collapseBlock = target?.querySelectorAll(block);\r\n\r\n buttonsClick?.forEach((item, i) => {\r\n blockCollapseHeights.push(collapseBlock[i].clientHeight);\r\n collapseBlock[i].style.height = 0;\r\n\r\n item.addEventListener('click', (e) => {\r\n e.stopImmediatePropagation();\r\n\r\n if (collapseBlock[i].style.height == 0 + 'px') {\r\n collapseBlock[i].style.height = blockCollapseHeights[i] + 'px';\r\n item.querySelector(icon).classList.add('rotate');\r\n } else {\r\n collapseBlock[i].style.height = 0;\r\n item.querySelector(icon).classList.remove('rotate');\r\n }\r\n });\r\n });\r\n }\r\n\r\n //Табы для Program блока\r\n function programTabs(target, button, block, icon) {\r\n let targetBlock = document.querySelector(target);\r\n\r\n if (targetBlock) {\r\n let buttonsClick = targetBlock.querySelectorAll(button),\r\n blockCollapseHeights = [],\r\n collapseBlock = targetBlock?.querySelectorAll(block);\r\n\r\n buttonsClick.forEach((item, i) => {\r\n blockCollapseHeights.push(collapseBlock[i].clientHeight);\r\n collapseBlock[i].style.height = 0;\r\n\r\n item.addEventListener('click', (e) => {\r\n e.stopImmediatePropagation();\r\n\r\n if (collapseBlock[i].style.height == 0 + 'px') {\r\n collapseBlock[i].style.height = blockCollapseHeights[i] + 'px';\r\n item.querySelector(icon).classList.add('rotate');\r\n } else {\r\n collapseBlock[i].style.height = 0;\r\n item.querySelector(icon).classList.remove('rotate');\r\n }\r\n });\r\n });\r\n }\r\n }\r\n \r\n\r\n //Уменьшение количество участников на 36 каждый день\r\n function decreaseQuantity() {\r\n // Возвращает пробелы в числах\r\n function format(value) {\r\n return new Intl.NumberFormat().format(value);\r\n }\r\n\r\n const totalMembers = 2000,\r\n ratio = 54,\r\n formatText = document.querySelector('.application-block__count-text');\r\n\r\n let currentDate = new Date().getDate(),\r\n number = Math.floor(totalMembers - ratio * (currentDate - 1)),\r\n formatNumber = format(number);\r\n\r\n // Склонение окончания\r\n function declination(number, txt) {\r\n var cases = [2, 0, 1, 1, 1, 2];\r\n return txt[\r\n number % 100 > 4 && number % 100 < 20\r\n ? 2\r\n : cases[number % 10 < 5 ? number % 10 : 5]\r\n ];\r\n }\r\n\r\n if (formatText) {\r\n formatText.innerHTML = declination(number, ['место', 'места', 'мест']);\r\n }\r\n\r\n return formatNumber;\r\n }\r\n\r\n //Вставляем остаток мест в баннере\r\n function insertNumbers() {\r\n const target = document.querySelectorAll('.targetNum'),\r\n formatNumber = decreaseQuantity();\r\n\r\n for (let item of target) {\r\n item.innerHTML = formatNumber;\r\n }\r\n }\r\n\r\n insertNumbers();\r\n\r\n // Удаление контента на странице\r\n function removeContent(removeObject) {\r\n if (typeof removeObject !== 'object') {\r\n return;\r\n }\r\n\r\n for (let item in removeObject) {\r\n removeObject[item].remove();\r\n }\r\n }\r\n\r\n // Замена контента\r\n function changeContent(changeObject) {\r\n if (typeof changeObject !== 'object') {\r\n return;\r\n }\r\n\r\n for (let item in removeObject) {\r\n changeObject[item].textContent;\r\n }\r\n }\r\n\r\n // Модальное окно, появляющееся через минуту\r\n \r\n\r\n // Функционал фильтров в каталоге\r\n function initDirectionFilter() {\r\n const body = document.querySelector('body');\r\n const filter = document.querySelector('.direction__filter');\r\n if (!filter) return;\r\n const directionsFilters = filter.querySelectorAll('input');\r\n const directionsFiltersLabels = filter.querySelectorAll('label');\r\n const programs = document.querySelectorAll('.programs-item');\r\n const filterButton = document.querySelector('.direction__level-button');\r\n const filterCloseButton = filter.querySelector('.direction__filter-close');\r\n\r\n directionsFilters.forEach((directionsFilter) => {\r\n directionsFilter.addEventListener('change', () => {\r\n programs.forEach((program) => {\r\n program.classList.add('disabled');\r\n if (\r\n program.getAttribute('data-level') === directionsFilter.value ||\r\n directionsFilter.value === 'any'\r\n ) {\r\n program.classList.remove('disabled');\r\n }\r\n });\r\n });\r\n });\r\n\r\n filterButton.addEventListener('click', () => {\r\n filter.classList.add('open');\r\n body.classList.add('scroll-lock');\r\n\r\n directionsFiltersLabels.forEach((directionsFiltersLabel) => {\r\n directionsFiltersLabel.addEventListener('click', (evt) => {\r\n filter.classList.remove('open');\r\n body.classList.remove('scroll-lock');\r\n filterButton.textContent = directionsFiltersLabel.textContent;\r\n });\r\n });\r\n\r\n filterCloseButton.addEventListener('click', () => {\r\n filter.classList.remove('open');\r\n body.classList.remove('scroll-lock');\r\n });\r\n });\r\n\r\n let currentInnerWidth = window.innerWidth;\r\n window.addEventListener('resize', () => {\r\n if (window.innerWidth === currentInnerWidth) return;\r\n currentInnerWidth = window.innerWidth;\r\n\r\n if (window.innerWidth > 660) {\r\n filter.classList.remove('open');\r\n body.classList.remove('scroll-lock');\r\n }\r\n });\r\n }\r\n\r\n /* Сортировка программ на главной странице блока каталога */\r\n function sortProgramsCatalog() {\r\n const points = document.querySelectorAll('.catalog__point'),\r\n programs = document.querySelectorAll('.catalog__program');\r\n\r\n let active = document.querySelector('.catalog__point.active');\r\n\r\n if (!points && !programs) {\r\n return;\r\n }\r\n\r\n points.forEach((point) => {\r\n point.addEventListener('click', () => {\r\n let direction = point.getAttribute('data-direction');\r\n\r\n point.classList.add('active');\r\n active.classList.remove('active');\r\n active = point;\r\n\r\n for (let i = 0; i < programs.length; i++) {\r\n if (direction === 'all') {\r\n programs[i].style.display = 'flex';\r\n } else if (programs[i].getAttribute('data-direction') === direction) {\r\n programs[i].style.display = 'flex';\r\n } else {\r\n programs[i].style.display = 'none';\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Интеграция Adv.Cace для программ\r\n function advCaceProgram() {\r\n let targetUrl = location.href.split('/');\r\n\r\n //Фильтруем по типу text\r\n let programNameArr = [\r\n ...document?.querySelector('.home-block__title').childNodes,\r\n ].filter((it) => {\r\n return it.nodeType == Node.TEXT_NODE;\r\n });\r\n\r\n //Удаляем первый элемент, соединяем и убираем кавычки\r\n programNameArr.shift();\r\n let programName = programNameArr\r\n .map((it) => it.textContent)\r\n .join('')\r\n .slice(2, -1);\r\n\r\n //Включаем на странице программ и передаем имя программы\r\n if (targetUrl[3] !== '') {\r\n window.advcake_data = window.advcake_data || [];\r\n window.advcake_data.push({\r\n pageType: 2,\r\n user: {\r\n email: '',\r\n },\r\n currentLead: {\r\n leadid: '',\r\n name: programName,\r\n },\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport default site;\r\n","const blog = () => {\r\n const blogCards = document.querySelector(\".blog-cards\"),\r\n filterButtons = document.querySelectorAll(\".blog-panel__btn\");\r\n\r\n let arrCardsAll = [];\r\n\r\n //Отображение инпута формы поиска блога\r\n function displayInputForm() {\r\n const button = document.querySelector(\".blog-form__icon\"),\r\n form = document.querySelector(\".blog-form\");\r\n\r\n button?.addEventListener(\"click\", function () {\r\n form.classList.toggle(\"active\");\r\n });\r\n }\r\n\r\n // Вывод карточек блога\r\n async function parseBlogCards() {\r\n let arrCards = [];\r\n arrCardsAll = [];\r\n\r\n let response = await fetch(`/files/blog.json`);\r\n let cards = await response.json();\r\n document.querySelector(\".blog-spinner__wrap\")?.classList.remove(\"block\");\r\n\r\n cards.forEach(function (el) {\r\n if (blogCards) {\r\n arrCards.push(el);\r\n arrCardsAll.push(el);\r\n }\r\n });\r\n\r\n if (arrCards.length > 0) {\r\n createBlogCards(arrCards);\r\n }\r\n\r\n filterButtonsCard();\r\n }\r\n\r\n function createBlogCards(data) {\r\n blogCards.innerHTML = \"\";\r\n\r\n data.forEach((item, i) => {\r\n const { title, date, name_link, article_link, id } = item;\r\n\r\n if (i == 0) {\r\n blogCards.innerHTML += `\r\n
\r\n
\r\n \r\n
\r\n
\r\n

${date}

\r\n #${name_link}\r\n
\r\n \r\n

${title}

\r\n
\r\n #${name_link}\r\n
\r\n
\r\n
\r\n `;\r\n } else {\r\n blogCards.innerHTML += `\r\n
\r\n
\r\n \r\n
\r\n
\r\n

${date}

\r\n #${name_link}\r\n
\r\n \r\n

${title}

\r\n
\r\n
\r\n
\r\n
\r\n `;\r\n }\r\n });\r\n }\r\n\r\n // Фильтрация по кнопкам\r\n filterButtons?.forEach((item) => {\r\n item.addEventListener(\"click\", () => {\r\n removeSearchMessage();\r\n resetFilterButtons();\r\n\r\n item.classList.add(\"active\");\r\n\r\n if (item.classList.contains(\"blog-panel__all\")) {\r\n parseBlogCards();\r\n } else {\r\n filterBlogCards(item.textContent);\r\n }\r\n });\r\n });\r\n\r\n function filterBlogCards(data) {\r\n let btnName = data.replace(/\\s/g, \"\"),\r\n arrCards = [];\r\n\r\n $.ajax({\r\n type: \"GET\",\r\n url: \"/files/blog.json\",\r\n }).then(function (cards) {\r\n cards.forEach(function (el) {\r\n if (blogCards) {\r\n if (el.name_link == btnName) {\r\n arrCards.push(el);\r\n }\r\n }\r\n });\r\n\r\n if (arrCards.length > 0) {\r\n createFilterBlogCards(arrCards);\r\n }\r\n\r\n filterButtonsCard();\r\n });\r\n }\r\n\r\n function createFilterBlogCards(data) {\r\n blogCards.innerHTML = \"\";\r\n\r\n data.forEach((item) => {\r\n const { title, date, name_link, article_link, id } = item;\r\n\r\n blogCards.innerHTML += `\r\n
\r\n
\r\n \r\n
\r\n
\r\n

${date}

\r\n #${name_link}\r\n
\r\n \r\n

${title}

\r\n
\r\n
\r\n
\r\n
\r\n `;\r\n });\r\n }\r\n\r\n // Отображение и скрытие нопки \"Наверх\" и баннера\r\n function displayUpBtn() {\r\n const upBtn = document.querySelector(\".blog-upBtn__desk\"),\r\n topPoint = upBtn?.parentElement.offsetTop,\r\n bannerSticky = document.querySelector(\".blog-banner__sticky\");\r\n\r\n document.addEventListener(\"scroll\", () => {\r\n // кнопка Наверх\r\n if (window.pageYOffset > topPoint) {\r\n upBtn.style.display = \"flex\";\r\n } else if (window.pageYOffset < topPoint) {\r\n upBtn.style.display = \"none\";\r\n }\r\n\r\n // Баннер\r\n if (bannerSticky) {\r\n if (window.pageYOffset > bannerSticky.clientHeight / 3) {\r\n bannerSticky.style.opacity = 1;\r\n } else {\r\n bannerSticky.style.opacity = 0;\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Сброс активных кнопок на кнопках выбора направления статей\r\n function resetFilterButtons() {\r\n for (let i = 0; i < filterButtons.length; i++) {\r\n if (filterButtons[i].classList.contains(\"active\")) {\r\n filterButtons[i].classList.remove(\"active\");\r\n }\r\n }\r\n }\r\n\r\n // Фильтрация по кнопкам на карточке статьи\r\n function filterButtonsCard() {\r\n const filterButtonsCardLink = document.querySelectorAll(\r\n \".btnCardFilterBlock\"\r\n );\r\n\r\n filterButtonsCardLink?.forEach((item) => {\r\n item.addEventListener(\"click\", () => {\r\n removeSearchMessage();\r\n resetFilterButtons();\r\n\r\n let link = item.textContent.split(\"#\").pop();\r\n filterBlogCards(link);\r\n\r\n filterButtons?.forEach((item) => {\r\n if (item.textContent.replace(/\\s/g, \"\") == link) {\r\n item.classList.add(\"active\");\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n // Поиск\r\n function searchArticles() {\r\n const searchBtn = document.querySelector(\".blog-form__icon\"),\r\n searchInput = document.querySelector(\".blog-form__input\");\r\n\r\n searchBtn?.addEventListener(\"click\", () => {\r\n let arrSearchCards = [];\r\n\r\n if (searchInput.value != \"\") {\r\n arrCardsAll.forEach((item) => {\r\n let text = item.title.toLowerCase();\r\n\r\n if (text.includes(searchInput.value.toLowerCase())) {\r\n arrSearchCards.push(item);\r\n }\r\n });\r\n\r\n if (arrSearchCards.length > 0) {\r\n createFilterBlogCards(arrSearchCards);\r\n removeSearchMessage();\r\n addSearchMessage(searchInput.value);\r\n } else {\r\n removeSearchMessage();\r\n addSearchMessage(searchInput.value);\r\n blogCards.innerHTML = \"\";\r\n blogCards.innerHTML = `\r\n
\r\n

Ничего не нашлось.

\r\n

Попробуйте поискать нужную статью по другому слову.

\r\n
\r\n `;\r\n }\r\n\r\n document.querySelector(\".blog-form\").reset();\r\n filterButtonsCard();\r\n }\r\n });\r\n }\r\n\r\n function removeSearchMessage() {\r\n if (document.querySelector(\".blog-search\")) {\r\n document.querySelector(\".blog-search\").remove();\r\n }\r\n }\r\n\r\n function addSearchMessage(message) {\r\n $(\r\n `
\r\n

Статьи по запросу ${message}:

\r\n
`\r\n ).insertAfter(\".blog-panel\");\r\n }\r\n\r\n // Добавление баннера в статью\r\n function addBanner() {\r\n const titles = document.querySelectorAll(\".blog-article__content h4\"),\r\n lastTitles = titles[titles.length - 1];\r\n\r\n $(\r\n `
\r\n
\r\n
\r\n \r\n \r\n \r\n \"\"\r\n \r\n
\r\n

Учитесь IT бесплатно.
Обучение по программам
занимает не более 4 часов
в неделю

\r\n Принять участие\r\n
\r\n
\r\n
\r\n
`\r\n ).insertBefore(lastTitles);\r\n }\r\n\r\n displayInputForm();\r\n displayUpBtn();\r\n parseBlogCards();\r\n searchArticles();\r\n addBanner();\r\n};\r\n\r\nexport default blog;\r\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.6\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2023, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: February 2, 2023\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionStart(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionstart', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionstart', fireCallBack);\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, transitionStart, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\n\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","/* eslint-disable no-underscore-dangle */\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n\n function onceHandler(...args) {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n}","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex]; // Update progress\n\n swiper.updateProgress(translate); // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n return swiper.slideTo(swiper.slides.length - 1, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n if ($targetEl.is(data.focusableElements)) preventDefault = false;\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === -0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n }\n\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n}\n\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n init();\n update();\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n Object.assign(swiper.navigation, {\n update,\n init,\n destroy\n });\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(params.modifierClass + swiper.params.direction);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(params.modifierClass + swiper.params.direction);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n init();\n render();\n update();\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n Object.assign(swiper.pagination, {\n render,\n update,\n init,\n destroy\n });\n}","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function Lazy({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n lazy: {\n checkInView: false,\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n scrollingElement: '',\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader'\n }\n });\n swiper.lazy = {};\n let scrollHandlerAttached = false;\n let initialImageLoaded = false;\n\n function loadInSlide(index, loadInDuplicate = true) {\n const params = swiper.params.lazy;\n if (typeof index === 'undefined') return;\n if (swiper.slides.length === 0) return;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const $slideEl = isVirtual ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`) : swiper.slides.eq(index);\n const $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n\n if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n $images.push($slideEl[0]);\n }\n\n if ($images.length === 0) return;\n $images.each(imageEl => {\n const $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n const background = $imageEl.attr('data-background');\n const src = $imageEl.attr('data-src');\n const srcset = $imageEl.attr('data-srcset');\n const sizes = $imageEl.attr('data-sizes');\n const $pictureEl = $imageEl.parent('picture');\n swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n\n if (background) {\n $imageEl.css('background-image', `url(\"${background}\")`);\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n\n if ($pictureEl.length) {\n $pictureEl.children('source').each(sourceEl => {\n const $source = $(sourceEl);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeAttr('data-srcset');\n }\n });\n }\n\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find(`.${params.preloaderClass}`).remove();\n\n if (swiper.params.loop && loadInDuplicate) {\n const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n loadInSlide(duplicatedSlide.index(), false);\n }\n }\n\n emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n });\n emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n }\n\n function load() {\n const {\n $wrapperEl,\n params: swiperParams,\n slides,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n const params = swiperParams.lazy;\n let slidesPerView = swiperParams.slidesPerView;\n\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index) {\n if (isVirtual) {\n if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n return true;\n }\n } else if (slides[index]) return true;\n\n return false;\n }\n\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n\n return $(slideEl).index();\n }\n\n if (!initialImageLoaded) initialImageLoaded = true;\n\n if (swiper.params.watchSlidesProgress) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each(slideEl => {\n const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n loadInSlide(activeIndex);\n }\n\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n const amount = params.loadPrevNextAmount;\n const spv = slidesPerView;\n const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides\n\n for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n } // Prev Slides\n\n\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide));\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide));\n }\n }\n }\n\n function checkInViewOnLoad() {\n const window = getWindow();\n if (!swiper || swiper.destroyed) return;\n const $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window);\n const isWindow = $scrollElement[0] === window;\n const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n const swiperOffset = swiper.$el.offset();\n const {\n rtlTranslate: rtl\n } = swiper;\n let inView = false;\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n const passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n\n if (inView) {\n load();\n $scrollElement.off('scroll', checkInViewOnLoad, passiveListener);\n } else if (!scrollHandlerAttached) {\n scrollHandlerAttached = true;\n $scrollElement.on('scroll', checkInViewOnLoad, passiveListener);\n }\n }\n\n on('beforeInit', () => {\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n });\n on('init', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('scroll', () => {\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.freeMode.sticky) {\n load();\n }\n });\n on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('transitionStart', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n }\n });\n on('transitionEnd', () => {\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('slideChange', () => {\n const {\n lazy,\n cssMode,\n watchSlidesProgress,\n touchReleaseOnEdges,\n resistanceRatio\n } = swiper.params;\n\n if (lazy.enabled && (cssMode || watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0))) {\n load();\n }\n });\n Object.assign(swiper.lazy, {\n load,\n loadInSlide\n });\n}","import Swiper, {Navigation, Lazy} from \"swiper\";\r\nSwiper.use([Navigation, Lazy]);\r\n\r\nconst initTeachersFullSlider = () => {\r\n const slider = document.querySelector(\".teachers__blocks--full\");\r\n\r\n slider && new Swiper(slider, {\r\n loop: true,\r\n lazy: true,\r\n\r\n breakpoints: {\r\n 1441: {\r\n slidesPerView: 4,\r\n spaceBetween: 63,\r\n },\r\n 660: {\r\n slidesPerView: 2.5,\r\n spaceBetween: 40,\r\n },\r\n 320: {\r\n slidesPerView: 1.5,\r\n spaceBetween: 40,\r\n },\r\n },\r\n navigation: {\r\n nextEl: '.teachersNavigation__next',\r\n prevEl: '.teachersNavigation__prev',\r\n disabledClass: 'last',\r\n },\r\n });\r\n};\r\n\r\nexport default initTeachersFullSlider;\r\n","import getPageName from \"./getPageName\";\r\nimport initTeachersFullSlider from \"./sliders/init-teachersFull-slider\";\r\n\r\nconst parseTeachers = () => {\r\n const teachers__wrap = document.querySelector('.teachers__swiper-wrapper');\r\n if (!teachers__wrap) return;\r\n const teachers__modals = document.querySelector('.teachers__modals');\r\n const isNeedFullSlider = Boolean(document.querySelector('.teachers__blocks--full'));\r\n \r\n const generContent = (arr) => {\r\n let result = '';\r\n \r\n arr && arr.slice(1).forEach((el) => {\r\n if (arr.includes('li')) {\r\n result += `
  • ${el}
  • `;\r\n } else {\r\n result += `

    ${el}

    `;\r\n }\r\n })\r\n \r\n return result;\r\n }\r\n\r\n const createTeachersCard = (data) => {\r\n data.forEach((item) => {\r\n teachers__wrap.innerHTML += `\r\n \r\n
    \r\n \"${item.name}\" \r\n
    \r\n
    \r\n

    ${item.name}

    \r\n

    Преподаватель программы
    ${item.program}

    \r\n
    Подробнее
    \r\n
    \r\n `;\r\n\r\n teachers__modals.innerHTML += `\r\n
    \r\n
    \r\n
    \r\n \"${item.name}\"\r\n
    \r\n
    \r\n

    ${item.name}

    \r\n

    Преподаватель программы
    ${item.programModal}

    \r\n

    Образование: ${item.education}

    \r\n ${generContent(item.p)}\r\n ${item.job ? `

    Место работы: ${item.job}

    ` : ``}\r\n ${item.experience ? `

    Опыт работы: ${item.experience}

    ` : ``}\r\n ${item.certificates ? `\r\n

    Сертификаты и курсы:

    \r\n
      ${generContent(item.certificates)}
    \r\n `\r\n : ''}\r\n ${item.training ? `\r\n

    Повышение квалификации:

    \r\n
      ${generContent(item.training)}
    \r\n `\r\n : ''}\r\n ${item.lectures ? `\r\n

    Лекции и практики:

    \r\n
      ${generContent(item.lectures)}
    \r\n `\r\n : ''}\r\n ${item.awards ? `\r\n

    Награды и достижения:

    \r\n
      ${generContent(item.awards)}
    \r\n `\r\n : ''}\r\n ${item.skills ? `\r\n

    Компьютерные навыки: ${item.skills}

    \r\n `\r\n : ``}\r\n ${item.projects2D ? `\r\n

    Выполненные 2D проекты:

    \r\n
      ${generContent(item.projects2D)}
    \r\n `\r\n : ``}\r\n ${item.projects3D ? `\r\n

    Выполненные 2D проекты:

    \r\n
      ${generContent(item.projects3D)}
    \r\n `\r\n : ``}\r\n ${item.additional ? `\r\n

    Дополнительная информация:

    \r\n
      ${generContent(item.additional)}
    \r\n `\r\n : ''}\r\n ${item.li ? `\r\n
      ${generContent(item.li)}
    \r\n `\r\n : ''}\r\n ${item.url ? `\r\n Перейти к курсу\r\n `\r\n : ''}\r\n
    \r\n
    \r\n \r\n
    \r\n `;\r\n });\r\n \r\n initTeachersFullSlider(); \r\n }\r\n \r\n isNeedFullSlider && $.ajax({\r\n type: 'GET',\r\n url: '/files/teachers.json',\r\n })\r\n .then((teachers) => createTeachersCard(teachers.find((el) => el.url == getPageName()).data));\r\n};\r\n\r\nexport default parseTeachers;\r\n","import Swiper, {Navigation, Pagination} from \"swiper\";\r\nSwiper.use([Pagination, Navigation]);\r\n\r\nconst initTestimonialsSlider = () => {\r\n const slider = document.querySelector(\".testimonials-swiper\");\r\n\r\n slider && new Swiper(slider, {\r\n loop: true,\r\n breakpoints: {\r\n 1441: {\r\n slidesPerView: 4,\r\n spaceBetween: 20,\r\n },\r\n 1280: {\r\n slidesPerView: 3,\r\n spaceBetween: 20,\r\n },\r\n 997: {\r\n slidesPerView: 3,\r\n spaceBetween: 20,\r\n },\r\n 801: {\r\n slidesPerView: 2,\r\n spaceBetween: 20,\r\n },\r\n 768: {\r\n slidesPerView: 2,\r\n spaceBetween: 20,\r\n },\r\n 320: {\r\n slidesOffsetBefore: -5,\r\n slidesPerView: 1.3,\r\n spaceBetween: 20,\r\n },\r\n },\r\n navigation: {\r\n nextEl: '.testimonials__next',\r\n prevEl: '.testimonials__prev',\r\n disabledClass: 'last',\r\n },\r\n pagination: {\r\n el: '.testimonials .swiper-pagination',\r\n type: 'fraction',\r\n },\r\n });\r\n\r\n const videoReviews = slider?.querySelectorAll('.testimonialBlock');\r\n videoReviews?.forEach((videoReview) => {\r\n videoReview.addEventListener(\"mouseover\", () => {\r\n videoReview.querySelector(\"video\")?.play();\r\n videoReview.addEventListener(\"mouseleave\", () => videoReview.querySelector(\"video\")?.pause());\r\n });\r\n });\r\n};\r\n\r\nexport default initTestimonialsSlider;\r\n","import getPageName from \"./getPageName\";\r\nimport initTestimonialsSlider from \"./sliders/init-testimonials-slider\";\r\n\r\nconst parseTestimonials = () => {\r\n const testimonials__wrap = document.querySelector('.testimonials__blocks');\r\n if (!testimonials__wrap) return;\r\n const testimonials__modals = document.querySelector('.testimonials__modals');\r\n\r\n const createTestimonialsCard = (data) => {\r\n data.forEach((item) => {\r\n if (item.video) {\r\n testimonials__wrap.innerHTML += `\r\n \r\n \r\n
    ${item.name}
    \r\n
    \r\n

    \r\n

    Смотреть отзыв

    \r\n
    \r\n
    \r\n
    \r\n `;\r\n \r\n testimonials__modals.innerHTML += `\r\n
    \r\n \r\n
    \r\n `;\r\n } else {\r\n testimonials__wrap.innerHTML += `\r\n
    \r\n
    \r\n
    \r\n ${item.img ? `\"\"` : ''}\r\n

    ${item.name}

    \r\n
    \r\n

    ${item.text}

    \r\n

    ${item.program}

    \r\n
    \r\n
    \r\n `;\r\n };\r\n });\r\n\r\n initTestimonialsSlider();\r\n };\r\n\r\n $.ajax({\r\n type: 'GET',\r\n url: '/files/testimonials.json',\r\n })\r\n .then((testimonials) => createTestimonialsCard(testimonials.find((el) => el.url == getPageName()).data));\r\n};\r\n\r\nexport default parseTestimonials;\r\n","import Swiper, {Pagination} from \"swiper\";\r\nSwiper.use([Pagination]);\r\n\r\nconst initCareerCenterSlider = () => {\r\n const slider = document.querySelector(\".careerCenter__slider\");\r\n\r\n const BREAKPOINT = 660;\r\n let careerCenterSlider = null;\r\n\r\n const careerCenterSliderInit = () => {\r\n if (!careerCenterSlider) {\r\n careerCenterSlider = new Swiper(slider, {\r\n slidesPerView: 1,\r\n loop: true,\r\n pagination: {\r\n el: '.careerCenter__slider .swiper-pagination',\r\n clickable: true,\r\n },\r\n });\r\n }\r\n };\r\n\r\n const careerCenterSliderDestroy = () => {\r\n if (careerCenterSlider) {\r\n careerCenterSlider.pagination.destroy();\r\n careerCenterSlider.destroy();\r\n careerCenterSlider = null;\r\n }\r\n };\r\n\r\n slider && window.innerWidth <= BREAKPOINT\r\n ? careerCenterSliderInit()\r\n : careerCenterSliderDestroy();\r\n\r\n slider && window.addEventListener('resize', () => {\r\n window.innerWidth <= BREAKPOINT\r\n ? careerCenterSliderInit()\r\n : careerCenterSliderDestroy();\r\n });\r\n};\r\n\r\nexport default initCareerCenterSlider;\r\n","import Swiper, {Navigation, Pagination, Lazy} from \"swiper\";\r\nSwiper.use([Pagination, Navigation, Lazy]);\r\n\r\nconst initConfirmSkillsSlider = () => {\r\n const slider = document.querySelector(\".confirmSkills__swiper\");\r\n\r\n slider && new Swiper(slider, {\r\n lazy: true,\r\n navigation: {\r\n nextEl: '.confirmNavigation__next',\r\n prevEl: '.confirmNavigation__prev',\r\n disabledClass: 'last',\r\n },\r\n pagination: {\r\n el: '.confirmSkills__pagination',\r\n clickable: true,\r\n bulletActiveClass: 'active',\r\n },\r\n });\r\n};\r\n\r\nexport default initConfirmSkillsSlider;\r\n","import Swiper, {Navigation, Pagination, Lazy} from \"swiper\";\r\nSwiper.use([Pagination, Navigation, Lazy]);\r\n\r\nconst initPartnersSlider = () => {\r\n const slider = document.querySelector(\".partners__slider\");\r\n\r\n slider && new Swiper(slider, {\r\n lazy: true,\r\n watchOverflow: true,\r\n breakpoints: {\r\n 768: {\r\n slidesPerView: 5,\r\n spaceBetween: 16,\r\n },\r\n 0: {\r\n slidesPerView: 2,\r\n spaceBetween: 15,\r\n },\r\n },\r\n navigation: {\r\n nextEl: '.partners .slider-navigation__button--next',\r\n prevEl: '.partners .slider-navigation__button--prev',\r\n },\r\n pagination: {\r\n el: '.partners .swiper-pagination',\r\n clickable: true,\r\n },\r\n });\r\n};\r\n\r\nexport default initPartnersSlider;\r\n","import Swiper, {Navigation, Pagination, Lazy} from \"swiper\";\r\nimport castomizePortfolioGallery from \"../castomize-portfolio-gallery\";\r\nSwiper.use([Pagination, Navigation, Lazy]);\r\n\r\nconst initPortfolioSlider = () => {\r\n const slider = document.querySelector(\".portfolio-swiper\");\r\n\r\n slider && new Swiper(slider, {\r\n lazy: true,\r\n loop: true,\r\n centeredSlides: true,\r\n slidesPerView: 1.8,\r\n spaceBetween: 80,\r\n breakpoints: {\r\n 1131: {\r\n slidesPerView: 1.8,\r\n },\r\n 997: {\r\n slidesPerView: 2.2,\r\n },\r\n 661: {\r\n centeredSlides: true,\r\n },\r\n 361: {\r\n slidesPerView: 1.2,\r\n spaceBetween: 30,\r\n centeredSlides: false,\r\n },\r\n 320: {\r\n slidesPerView: 1,\r\n spaceBetween: 20,\r\n centeredSlides: false,\r\n },\r\n },\r\n pagination: {\r\n el: '.portfolio-pagination',\r\n type: 'fraction',\r\n },\r\n speed: 1000,\r\n navigation: {\r\n nextEl: '.portfolio-next',\r\n prevEl: '.portfolio-prev',\r\n },\r\n });\r\n\r\n slider && castomizePortfolioGallery();\r\n};\r\n\r\nexport default initPortfolioSlider;\r\n","const castomizePortfolioGallery = () => {\r\n refreshFsLightbox();\r\n fsLightboxInstances['works'].props.onOpen = function () {\r\n document.querySelector('.fslightbox-container .fslightbox-nav')?.remove();\r\n document.querySelector('.fslightbox-container').classList.add('custom-gallery');\r\n document.querySelector('.fslightbox-container > div').classList.add('custom-gallery__wrapper');\r\n const sourceContainers = document.querySelectorAll('.fslightbox-container .fslightbox-absoluted.fslightbox-full-dimension.fslightbox-flex-centered div');\r\n sourceContainers.forEach((container) => container.classList.add('custom-gallery__work'));\r\n };\r\n};\r\n\r\nexport default castomizePortfolioGallery;\r\n","import Swiper, {Navigation, Lazy} from \"swiper\";\r\nSwiper.use([Navigation, Lazy]);\r\n\r\nconst initTeachersMobSlider = () => {\r\n const slider = document.querySelector(\".teachers__blocks--mob\");\r\n\r\n const BREAKPOINT = 767;\r\n let teachersSlider = null;\r\n\r\n const initTeachersSlider = () => {\r\n if (!teachersSlider) {\r\n teachersSlider = new Swiper(slider, {\r\n lazy: true,\r\n loop: true,\r\n\r\n breakpoints: {\r\n 0: {\r\n spaceBetween: 50,\r\n slidesPerView: 1.5,\r\n },\r\n },\r\n navigation: {\r\n nextEl: '.teachers--mob .teachersNavigation__next',\r\n prevEl: '.teachers--mob .teachersNavigation__prev',\r\n disabledClass: 'last',\r\n },\r\n });\r\n }\r\n };\r\n\r\n const destroyTeachersSlider = () => {\r\n if (teachersSlider) {\r\n teachersSlider.destroy();\r\n teachersSlider = null;\r\n }\r\n };\r\n\r\n slider && window.innerWidth <= BREAKPOINT\r\n ? initTeachersSlider()\r\n : destroyTeachersSlider();\r\n\r\n slider && window.addEventListener('resize', () => {\r\n window.innerWidth <= BREAKPOINT\r\n ? initTeachersSlider()\r\n : destroyTeachersSlider();\r\n });\r\n};\r\n\r\nexport default initTeachersMobSlider;\r\n","import initCareerCenterSlider from \"./init-careercenter-slider\";\r\nimport initConfirmSkillsSlider from \"./init-confirmSkills-slider\";\r\nimport initPartnersSlider from \"./init-partners-slider\";\r\nimport initPortfolioSlider from \"./init-portfolio-slider\";\r\nimport initTeachersMobSlider from \"./init-teachersMob-slider\";\r\n\r\n\r\nconst initSliders = () => {\r\n initConfirmSkillsSlider();\r\n initPortfolioSlider();\r\n initPartnersSlider();\r\n initCareerCenterSlider();\r\n initTeachersMobSlider();\r\n}\r\n\r\nexport default initSliders;\r\n","import metrics from \"./metrics\";\r\n\r\nconst initAppearingModal = () => {\r\n const formModal = document.createElement('div');\r\n formModal.classList.add('beat');\r\n formModal.classList.add('beat--appear');\r\n formModal.innerHTML = `\r\n
    \r\n
    \r\n
    \r\n

    Бесплатно получи IT-профессию
    и помощь со стартом карьеры

    \r\n

    ✅ Топовые направления: Python, Java, C#, С++, Web, Mobile и Game Dev, Data‑Science, AR/VR

    \r\n

    ✅ До +8 баллов к ЕГЭ при поступлении в НИ ТГУ, в вуз с одной из лучших IT-школ РФ

    \r\n

    ✅ Возможность стать фрилансером и работать удаленно из любой точки мира

    \r\n

    ✅ Реальный шанс работать в IT‑гигантах: Яндекс, Ростех, Сбер, VK, Ozon

    \r\n

    Набор на программы завершен.
    Присоединяйтесь к нам в Telegram, чтобы первыми получать новости о проекте.

    \r\n Подписаться на нас\r\n
    \r\n \r\n
    \r\n
    \r\n `;\r\n\r\n document.body.append(formModal);\r\n document.body.classList.add('scroll-lock');\r\n const beatClose = formModal.querySelector('.beat__close');\r\n const buttonToForm = formModal.querySelector('.beat__button');\r\n\r\n beatClose.addEventListener('click', () => {\r\n document.body.classList.remove('scroll-lock');\r\n document.body.removeChild(formModal);\r\n });\r\n\r\n buttonToForm.addEventListener('click', () => {\r\n document.body.classList.remove('scroll-lock');\r\n document.body.removeChild(formModal);\r\n });\r\n\r\n metrics();\r\n};\r\n\r\nexport default initAppearingModal;\r\n","'use strict';\r\n\r\n/* Стили */\r\nimport '../css/site.scss';\r\n\r\n/* Скрипты */\r\nimport form from './modules/form';\r\nimport site from './modules/site'; \r\nimport blog from './modules/blog';\r\nimport parseTeachers from './modules/parse-teachers';\r\nimport parseTestimonials from './modules/parse-testimonials';\r\nimport initSliders from './modules/sliders/init-sliders';\r\nimport initBanner from './modules/init-banner';\r\nimport initAppearingModal from './modules/init-appearing-modal';\r\nimport metrics from './modules/metrics';\r\nimport UtmTags from './modules/UtmTags';\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n UtmTags();\r\n metrics();\r\n site();\r\n form();\r\n blog();\r\n parseTeachers();\r\n parseTestimonials();\r\n initSliders();\r\n initBanner();\r\n setTimeout(initAppearingModal, 60000);\r\n});","const UtmTags = () => {\r\n // Функция добавления UTM меток в url сайта\r\n const updateQueryStringParam = function (value) {\r\n let baseUrl = [\r\n location.protocol,\r\n \"//\",\r\n location.host,\r\n location.pathname,\r\n ].join(\"\"),\r\n params = \"?\" + value;\r\n\r\n params = params == \"?\" ? \"\" : params;\r\n window.history.replaceState({}, \"\", baseUrl + params);\r\n };\r\n \r\n const url = document.location.href,\r\n paramsStartIndex = url.indexOf(\"?\"),\r\n hostname = window.location.hostname;\r\n\r\n if (paramsStartIndex > -1) {\r\n // Добавление UTM меток в session storage\r\n sessionStorage.setItem(\r\n \"utm_tags\",\r\n url.slice(paramsStartIndex + 1, url.length)\r\n );\r\n sessionStorage.setItem(\r\n \"hostname\",\r\n hostname\r\n );\r\n } else {\r\n // При переходе по страницам если сохранены метки в session\r\n // storage, то выполняем функцию по их добавлению в url \r\n if (sessionStorage.getItem(\"utm_tags\") && hostname == sessionStorage.getItem(\"hostname\")) {\r\n updateQueryStringParam(sessionStorage.getItem(\"utm_tags\"));\r\n }\r\n }\r\n};\r\n\r\nexport default UtmTags;\r\n","import getPageName from \"./getPageName\";\r\n\r\nconst initBanner = () => {\r\n const banner = document.querySelector('.banner');\r\n if (!banner) return;\r\n\r\n const buttons = banner.querySelectorAll('.banner__button_two');\r\n let heightBanner = banner.clientHeight,\r\n toppointlock = document.querySelector('.home'),\r\n bottomPointBlock = document.querySelector('.footer'),\r\n browseHeight = document.documentElement.clientHeight;\r\n\r\n const trackScroll = () => {\r\n if (toppointlock.getBoundingClientRect().bottom + heightBanner <= browseHeight) {\r\n banner.classList.add('activeBanner');\r\n banner.style.bottom = '0';\r\n } else {\r\n banner.classList.remove('activeBanner');\r\n }\r\n\r\n if (bottomPointBlock.getBoundingClientRect().top <= browseHeight) {\r\n banner.classList.add('bott');\r\n banner.style.bottom = `-${heightBanner + 40}px`;\r\n }\r\n }\r\n\r\n banner.style.bottom = '0';\r\n \r\n buttons.length &&\r\n getPageName() === '' &&\r\n buttons.forEach((button) => button.remove());\r\n\r\n window.addEventListener('scroll', trackScroll);\r\n}\r\n\r\nexport default initBanner;\r\n"],"names":["segments","URL","window","location","href","pathname","split","pop","toLocaleLowerCase","isString","str","String","isObject","obj","_obj$constructor","constructor","name","pick","keys","Array","isArray","_","k","includes","Object","entries","reduce","acc","_ref","v","DIRECTION","escapeRegExp","replace","objectIncludes","b","a","arrA","arrB","i","length","dateA","Date","dateB","getTime","regexpA","RegExp","regexpB","toString","prototype","hasOwnProperty","call","ActionDetails","opts","assign","this","value","slice","startChangePos","oldValue","oldSelection","start","Math","min","cursorPos","insertedCount","inserted","substr","removedCount","max","end","removed","head","substring","tail","removeDirection","IMask","el","InputMask","maskedClass","mask","Error","MaskedRegExp","MaskedPattern","MaskedDate","Number","MaskedNumber","MaskedDynamic","Masked","Function","MaskedFunction","console","warn","normalizeOpts","instanceOpts","_mask","startsWith","createMask","nOpts","MaskedClass","MaskElement","selectionStart","_unsafeSelectionStart","selectionEnd","_unsafeSelectionEnd","select","_unsafeSelect","isActive","HTMLMaskElement","input","super","_handlers","rootElement","_this$input$getRootNo","_this$input$getRootNo2","_this$input","getRootNode","document","activeElement","bindEvents","handlers","forEach","event","_toggleEventHandler","EVENTS_MAP","unbindEvents","handler","removeEventListener","addEventListener","selectionChange","drop","click","focus","commit","HTMLInputMaskElement","setSelectionRange","HTMLContenteditableMaskElement","root","selection","getSelection","anchorOffset","focusOffset","createRange","range","setStart","firstChild","setEnd","lastChild","removeAllRanges","addRange","textContent","isContentEditable","tagName","masked","_listeners","_value","_unmaskedValue","_saveSelection","bind","_onInput","_onChange","_onDrop","_onFocus","_onClick","alignCursor","alignCursorFriendly","_bindEvents","updateValue","maskEquals","_this$masked","updateOptions","unmaskedValue","updateControl","typedValue","val","typedValueEquals","displayValue","_unbindEvents","_fireEvent","ev","e","listeners","l","_cursorChanging","_changingCursorPos","pos","_selection","newUnmaskedValue","newValue","newDisplayValue","isChanged","_fireChangeEvents","restOpts","updateMask","updateOpts","updateCursor","_delayUpdateCursor","_abortUpdateCursor","setTimeout","_inputEvent","isComplete","clearTimeout","nearestInputPos","on","push","off","hIndex","indexOf","splice","details","oldRawValue","rawInputValue","offset","raw","doCommit","preventDefault","stopPropagation","destroy","ChangeDetails","normalize","prep","rawInserted","skip","tailShift","aggregate","ContinuousTailDetails","from","stop","extend","appendTo","append","_appendPlaceholder","state","unshift","beforePos","shiftChar","shift","_update","DEFAULTS","_initialized","withValueRefresh","_rawInputValue","reset","resolve","flags","parse","format","extractInput","isFilled","direction","totalInputPositions","fromPos","toPos","extractTail","appendTail","_appendCharRaw","ch","_appendChar","checkTail","consistentState","doPrepareChar","consistentTail","appended","doValidate","beforeTailState","overwrite","tailDetails","_appendEager","_beforeTailState","doPrepare","ci","d","doSkipInvalid","eager","remove","fn","_refreshing","rawInput","ret","runIsolated","_isolated","Boolean","skipInvalid","prepare","prepareChar","validate","parent","deleteCount","tailPos","eagerRemove","forceDirection","valLength","tval","EMPTY_VALUES","undefined","ChunksTailDetails","chunks","map","join","tailChunk","lastChunk","extendLast","firstTailChunk","blockIndex","chunk","lastBlockIter","_mapPosToBlock","chunkBlock","index","_stops","phDetails","_blocks","remainChars","c","props","cstate","chunkShiftPos","PatternCursor","_log","ok","block","_blockStartPos","s","pushState","popState","bindBlock","_pushLeft","_this$block","_pushRight","pushLeftBeforeFilled","isFixed","pushLeftBeforeInput","pushLeftBeforeRequired","isOptional","pushRightBeforeFilled","pushRightBeforeInput","pushRightBeforeRequired","PatternFixedDefinition","isUnmasking","_isRawInput","maxPos","appendEager","isResolved","char","PatternInputDefinition","placeholderChar","displayChar","lazy","maskOpts","currentMaskFlags","boundPos","_flags$_beforeTailSta","DEFAULT_DEFINITIONS","search","definitions","_rebuildMask","defs","exposeBlock","_maskedBlocks","pattern","unmaskingBlock","optionalBlock","blocks","p","bNames","filter","bName","sort","expose","blockOpts","maskedBlock","isInput","STOP_CHAR","ESCAPE_CHAR","def","maskedState","bi","every","_this$_mapPosToBlock","startBlockIndex","blockIter","blockDetails","chunkTail","_forEachBlocksInRange","bFromPos","bToPos","blockChunk","_findStopBefore","stopBefore","si","toBlockIndex","startBlockIter","endBlockIndex","_blocks2","bDetails","accVal","blockStartPos","fromBlockIter","toBlockIter","isSameBlock","fromBlockStartPos","fromBlockEndPos","removeDetails","cursor","total","maskedBlocks","indices","gi","InputDefinition","FixedDefinition","MaskedRange","_matchFrom","maxLength","to","autofix","patternOpts","fromStr","padStart","toStr","sameCharsCount","repeat","boundaries","minstr","maxstr","placeholder","num","match","padEnd","nextVal","patternBlocks","GET_DEFAULT_BLOCKS","Y","getFullYear","m","getMonth","getDate","bk","date","isDateExist","day","month","year","currentMask","exposeMask","compiledMasks","_overwrite","_eager","_skipInvalid","_applyDispatch","prevValueBeforeTail","inputValue","insertValue","tailValue","prevMask","prevMaskState","doDispatch","_flags$_beforeTailSta2","currentMaskRef","dispatch","currentDetails","_this$currentMask","_this$currentMask2","_this$currentMask3","_this$currentMask4","mi","oldMask","_this$currentMask5","inputs","isCurrent","startInputPos","weight","i1","i2","MaskedEnum","enum","_enum","eopts","lengths","requiredLength","optionalLength","some","_updateRegExps","allowNegative","scale","radix","_numberRegExp","_mapToRadixRegExp","mapToRadix","_thousandsSeparatorRegExp","thousandsSeparator","_removeThousandsSeparators","_insertThousandsSeparators","parts","prepCh","allowPositive","_separatorsCount","extendOnSeparators","count","_separatorsCountFromSlice","_adjustRangeWithSeparators","prevBeforeTailValue","prevBeforeTailSeparatorsCount","appendDetails","beforeTailValue","beforeTailSeparatorsCount","_findSeparatorAround","searchFrom","separatorPos","separatorAroundFromPos","separatorAroundToPos","valueBeforePos","valueAfterPos","separatorAtLeftPos","separatorAtLeftEndPos","separatorAtRightPos","valid","number","isNaN","validnum","formatted","normalizeZeros","_normalizeZeros","padFractionalZeros","_padFractionalZeros","sign","zeros","test","dropFractional","UNMASKED_RADIX","n","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","toLocaleString","useGrouping","maximumFractionDigits","PIPE_TYPE","MASKED","UNMASKED","TYPED","createPipe","arg","pipe","globalThis","querySelectorAll","button","ym","crmRequest","DIRECTIONS","Games","Web","AI","Data","Testing","Bpla","isChange","setVkTarget","VK","Retargeting","Event","Goal","$","ready","select2","change","validators","error","message","showError","field","errorContainer","createElement","classList","add","appendChild","setForm","selector","form","querySelector","sendBtn","deleteErrors","data","result","formField","control","id","invalidField","scrollIntoView","behavior","disabled","FormData","formElement","key","reverse","url","paramsStartIndex","utmString","utmMark","toUpperCase","roistatCookie","cname","ca","decodeURIComponent","cookie","charAt","getCookie","firstFormData","_objectSpread","getElementById","style","display","FirstName","Email","Phone","Program","programName","title","program","toastr","options","progressBar","fetch","method","headers","body","JSON","stringify","then","response","json","yaCounter90894624","formSubmitCRM","success","onSuccess","fbq","_tmr","type","goal","OdinId","email","advcake_data","pageType","user","concat","leadInfo","leadid","totalPrice","coupon","marketing_cat","addAdvCakeScript","requestId","odinId","catch","err","log","sendForm","callback","controls","changed","one","onFormFilling","ajax","contentType","getPageName","redirect","openNoRedirectSuccessModalTest","openRedirectSuccessModal","setStyles","stylesObject","cbx","btn","phoneInput","autoclear","setMasks","target","checked","removeAttribute","setAttribute","modal","additionalClass","innerHTML","rel","position","maxWidth","metrics","openNoRedirectSuccessModal","paddingBottom","formModal","beatClose","removeChild","successModal","field_program","option","renderPrograms","Option","datepicker","btn_viewAll","topSection","points","programs","active","targetBlock","cardsDesk","cardsMob","faqSection","settingMonth","Init","changeDate","changeMonth","_step","_iterator","_createForOfIteratorHelper","done","f","_step2","_iterator2","changeDates","find","item","contains","faqTabs","toggle","it","icon","buttonsClick","blockCollapseHeights","collapseBlock","clientHeight","height","stopImmediatePropagation","programTabs","innerWidth","timerСountdown","nameConversMonth","settingDate","CustomSelect","init","hasAttribute","seeAllProgramm","point","getAttribute","directionsFilters","directionsFiltersLabels","filterButton","filterCloseButton","directionsFilter","directionsFiltersLabel","evt","currentInnerWidth","initDirectionFilter","_document","targetUrl","programNameArr","childNodes","nodeType","Node","TEXT_NODE","currentLead","advCaceProgram","cYear","cMonth","cDay","cHour","cMinute","cSecond","utcDateT","UTC","countDownDate","x","setInterval","now","distance","days","floor","hours","minutes","seconds","getBitNumber","lastDigit","getDaysWord","getHoursWord","getMinutesWord","getSecondsWord","clearInterval","_$$offset","animate","scrollTop","top","_step3","formatNumber","formatText","currentDate","Intl","NumberFormat","txt","declination","decreaseQuantity","_iterator3","insertNumbers","_regeneratorRuntime","t","r","o","defineProperty","Symbol","iterator","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","h","y","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","_typeof","__await","callInvokeWithMethodAndArg","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","displayName","isGeneratorFunction","mark","setPrototypeOf","__proto__","awrap","async","Promise","prev","rval","handle","complete","finish","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","info","src","ssrDocument","blur","nodeName","createEvent","initEvent","children","getElementsByTagName","createElementNS","importNode","hash","host","hostname","origin","protocol","getDocument","doc","ssrWindow","navigator","userAgent","history","replaceState","go","back","CustomEvent","getComputedStyle","getPropertyValue","Image","screen","matchMedia","requestAnimationFrame","cancelAnimationFrame","getWindow","win","Dom7","items","proto","get","set","makeReactive","arrayFlat","arr","res","arrayFilter","context","html","trim","toCreate","tempParent","qsa","uniqueArray","arrayUnique","noTrigger","shortcut","args","trigger","Methods","addClass","classes","classNames","removeClass","hasClass","className","toggleClass","attr","attrs","arguments","attrName","removeAttr","transform","transition","duration","transitionDuration","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","is","apply","parents","handleEvent","events","j","dom7LiveListeners","proxyListener","dom7Listeners","dom7proxy","detail","bubbles","cancelable","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","styles","offsetWidth","parseFloat","outerHeight","offsetHeight","box","getBoundingClientRect","clientTop","clientLeft","scrollY","scrollLeft","scrollX","left","css","prop","each","text","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","els","newChild","tempDiv","prepend","insertBefore","nextElementSibling","nextAll","nextEls","previousElementSibling","prevAll","prevEls","parentNode","closest","foundElements","found","methodName","nextTick","delay","noExtend","nextSource","node","HTMLElement","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","swiper","targetPosition","side","startPosition","translate","time","startTime","params","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","progress","easeProgress","cos","PI","currentPosition","scrollTo","overflow","support","deviceCached","browser","getSupport","smoothScroll","documentElement","touch","DocumentTouch","passiveListener","supportsPassive","gestures","calcSupport","priority","self","eventsListeners","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","emit","updateSize","width","$el","clientWidth","isHorizontal","isVertical","parseInt","size","updateSlides","getDirectionLabel","property","getDirectionPropertyValue","label","$wrapperEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginBottom","marginTop","marginRight","centeredSlides","cssMode","gridEnabled","grid","rows","slideSize","initSlides","shouldResetSlideSize","slidesPerView","breakpoints","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","webkitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","visibleSlides","ceil","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","autoHeight","updateSlidesClasses","realIndex","activeSlide","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","loop","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","transitionEmit","runCallbacks","step","slideTo","internal","initial","indexAsNumber","isFinite","animating","preventInteractionOnTransition","initialSlide","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","setTranslate","transitionStart","isH","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","destroyed","slideToLoop","newIndex","loopedSlides","slideNext","perGroup","slidesPerGroupAuto","slidesPerViewDynamic","increment","loopPreventsSlide","loopFix","_clientLeft","rewind","slidePrev","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","loopCreate","$selector","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","prependSlides","appendSlides","cloneNode","diff","getTranslate","loopDestroy","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","which","isTouched","isMoved","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","closestElement","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","touchAngle","atan2","touchMoveStopPropagation","nested","startTranslate","allowMomentumBounce","grabCursor","setGrabCursor","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","onTouchEnd","touchEndTime","timeDiff","pathTree","composedPath","lastClickTime","currentPos","stopIndex","groupSize","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","autoplay","running","paused","run","onClick","preventClicks","preventClicksPropagation","onScroll","newProgress","previousTranslate","dummyEventAttached","dummyEventListener","touchEvents","device","domMethod","swiperMethod","passiveListeners","passive","move","cancel","updateOnWindowResize","ios","android","attachEvents","detachEvents","isGridEnabled","addClasses","suffixes","prefix","resultClasses","prepareClasses","fill","containerModifierClass","emitContainerClasses","removeClasses","resizeObserver","createElements","virtualTranslate","breakpointsBase","simulateTouch","uniqueNavElements","preloadImages","updateOnImagesReady","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","update","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","byController","translateTo","translateBounds","newTranslate","onTranslateToWrapperTransitionEnd","moving","isLocked","unsetGrabCursor","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","directionChanged","needsReLoop","changeDirection","isEnabled","disable","enable","containerEl","currentHeight","innerHeight","minRatio","wasLocked","lastSlideIndex","lastSlideRightEdge","images","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","onload","onerror","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","Swiper","swipers","newParams","overrides","platform","ua","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","getDevice","isSafari","toLowerCase","isWebView","calcBrowser","modules","__modules__","mod","extendParams","swiperParams","defaults","passedParams","eventName","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","setProgress","cls","getSlideClasses","slideEl","updates","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","mount","mounted","getWrapperSelector","getWrapper","wrapper","deleteInstance","cleanStyles","object","deleteProps","extendDefaults","newDefaults","installModule","use","module","prototypeGroup","protoMethod","observer","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","createElementIfNotDefined","checkProps","element","Navigation","getEl","toggleEl","disabledClass","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","hideOnClick","hiddenClass","_s","targetEl","pagination","clickable","isHidden","classesToSelector","Pagination","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","paginationType","firstIndex","lastIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","progressbarDirection","scaleX","scaleY","render","paginationHTML","numberOfBullets","Lazy","checkInView","loadPrevNext","loadPrevNextAmount","loadOnTransitionStart","scrollingElement","elementClass","loadingClass","loadedClass","preloaderClass","scrollHandlerAttached","initialImageLoaded","loadInSlide","loadInDuplicate","$slideEl","$images","$imageEl","background","$pictureEl","sourceEl","$source","slideOriginalIndex","load","slideExist","amount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","isWindow","scrollElementWidth","scrollElementHeight","swiperOffset","inView","swiperCoord","sticky","teachers__wrap","teachers__modals","isNeedFullSlider","generContent","teachers","imageMod","programModal","education","job","experience","certificates","training","lectures","awards","skills","projects2D","projects3D","additional","li","slider","testimonials__wrap","testimonials__modals","testimonials","video","poster","img","videoReviews","videoReview","_videoReview$querySel","play","_videoReview$querySel2","pause","initTestimonialsSlider","refreshFsLightbox","fsLightboxInstances","onOpen","_document$querySelect","container","initPortfolioSlider","initPartnersSlider","careerCenterSlider","careerCenterSliderInit","careerCenterSliderDestroy","initCareerCenterSlider","teachersSlider","initTeachersSlider","destroyTeachersSlider","initTeachersMobSlider","buttonToForm","baseUrl","sessionStorage","setItem","getItem","site","upBtn","topPoint","bannerSticky","searchBtn","searchInput","titles","lastTitles","blogCards","filterButtons","arrCardsAll","parseBlogCards","_parseBlogCards","_callee","arrCards","cards","_context","name_link","article_link","filterButtonsCard","filterBlogCards","btnName","createFilterBlogCards","resetFilterButtons","filterButtonsCardLink","removeSearchMessage","link","addSearchMessage","insertAfter","parentElement","pageYOffset","opacity","arrSearchCards","blog","parseTeachers","parseTestimonials","initSliders","banner","buttons","heightBanner","toppointlock","bottomPointBlock","browseHeight","bottom","initBanner","initAppearingModal"],"sourceRoot":""}