{"version":3,"file":"scripts/bundle.6aaeb9b34ccd90b1eb4a.js","mappings":"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","sources":["webpack://easyfy.hayppgroup/./ClientApp/scripts/extensions/axios.extension.ts","webpack://easyfy.hayppgroup/./ClientApp/scripts/shared/easyfy.core.ts","webpack://easyfy.hayppgroup/./ClientApp/scripts/shared/easyfy.decorators.ts","webpack://easyfy.hayppgroup/./ClientApp/scripts/shared/easyfy.utils.ts","webpack://easyfy.hayppgroup/./ClientApp/scripts/shared/injectorFactory.ts","webpack://easyfy.hayppgroup/./ClientApp/scripts/shared/slider.ts"],"sourcesContent":["import axios from 'axios';\r\nimport { getTenant } from '../shared/easyfy.utils';\r\naxios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\r\naxios.defaults.headers.common['Cache-Control'] = 'no-cache';\r\naxios.defaults.xsrfCookieName = undefined;\r\naxios.defaults.baseURL = `${location.protocol}//${location.host}${getTenant(location.pathname)}`;\r\naxios.interceptors.request.use((config) => {\r\n if (config.url.startsWith('/secure')) {\r\n config.baseURL = `${location.protocol}//${location.host}`;\r\n return config;\r\n }\r\n\r\n const urlTenant: string = getTenant(location.pathname);\r\n const actionPathTenant: string = getTenant(config.url);\r\n\r\n if(urlTenant !== actionPathTenant) {\r\n config.url = config.url.replace(actionPathTenant, '');\r\n }\r\n\r\n config.url = config.url.replace(urlTenant, '/');\r\n\r\n return config;\r\n});\r\nexport default axios;\r\n","// exemple\r\n// element('.about'); //
\r\n// element('[data-action=\"top-nav\"]'); //
\r\nimport domready from 'domready';\r\nimport { isString, hide } from './easyfy.utils';\r\n\r\n//export const element = (query: string) => document.querySelector(query);\r\nexport const element = (query: string) => document.querySelector(query);\r\n\r\nexport const elements = (query: string) => document.querySelectorAll(query);\r\n\r\nexport const elementsOf = (element: Element | HTMLElement, query: string) => element.querySelector(query);\r\n\r\n// exemple\r\n// elementContains(document.querySelector('head'), document.querySelector('title')); // true\r\n// elementContains(document.querySelector('body'), document.querySelector('body')); // false\r\nexport const elementContains = (parent: Element, child: Element) => parent !== child && parent.contains(child);\r\n\r\n// ####################################\r\n// #### Setup custom event handlers ####\r\n\r\ninterface BindArgs {\r\n target: string | Element | HTMLElement;\r\n type: string;\r\n callback: EventListener | EventListenerObject;\r\n options?: EventOptions;\r\n}\r\n\r\ninterface ActionArgs {\r\n target: string;\r\n type: string;\r\n callback: EventListener | EventListenerObject;\r\n options?: EventOptions;\r\n}\r\n\r\ninterface EventArgs {\r\n target: string;\r\n type: string;\r\n callback: EventListener | EventListenerObject;\r\n options?: EventOptions;\r\n}\r\n\r\ninterface EventHandlerArgs {\r\n element?: Element | HTMLElement;\r\n type?: string;\r\n callback?: EventListener | EventListenerObject;\r\n options?: EventOptions;\r\n}\r\n\r\nexport interface EventOptions {\r\n capture?: boolean;\r\n once?: boolean;\r\n passive?: boolean;\r\n}\r\n\r\nconst addEventHandler = (event: EventHandlerArgs) =>\r\n event.element?.addEventListener(event.type, event.callback, mergeEventOptions(event.options));\r\n\r\nconst mergeEventOptions = (options?: EventOptions): EventOptions => Object.assign({ passive: true }, options || {});\r\n\r\nexport const on = (action: string | Element, type: string, callback: Function, ref?: object, meta?: object) => {\r\n domready(() => {\r\n type.split(' ').forEach(function (t) {\r\n (action instanceof Element ? action : element(action)).addEventListener(\r\n t,\r\n (e) => {\r\n try {\r\n callback.call(e.target, e, ref ?? null, meta ?? null);\r\n } catch (err) {}\r\n },\r\n { once: false, passive: true }\r\n );\r\n });\r\n });\r\n};\r\n\r\nexport const one = (action: string | Element, type: string, callback: Function) => {\r\n domready(() => {\r\n type.split(' ').forEach(function (e) {\r\n (action instanceof Element ? action : element(action)).addEventListener(e, callback, { once: true });\r\n });\r\n });\r\n};\r\n\r\nexport const event = (arg: EventArgs) => {\r\n domready(() => {\r\n addEventHandler({\r\n element: element(`[data-event=\"${arg.target}\"]`),\r\n type: arg.type,\r\n callback: arg.callback,\r\n options: arg.options,\r\n });\r\n });\r\n};\r\n\r\nexport const events = (arg: EventArgs) => {\r\n domready(() => {\r\n arg.type.split(' ').forEach((t) => {\r\n elements(`[data-event=\"${arg.target}\"]`)?.forEach((item) => {\r\n addEventHandler({\r\n element: item,\r\n type: t,\r\n callback: arg.callback,\r\n options: arg.options,\r\n });\r\n });\r\n });\r\n });\r\n};\r\n\r\nexport const action = (arg: ActionArgs) => {\r\n domready(() => {\r\n addEventHandler({\r\n element: element(`[data-action=\"${arg.target}\"]`),\r\n type: arg.type,\r\n callback: arg.callback,\r\n options: mergeEventOptions(arg.options),\r\n });\r\n });\r\n};\r\n\r\nexport const actions = (arg: ActionArgs) => {\r\n domready(() => {\r\n arg.type.split(' ').forEach((t) => {\r\n elements(`[data-action=\"${arg.target}\"]`)?.forEach((item) => {\r\n addEventHandler({\r\n element: item,\r\n type: t,\r\n callback: arg.callback,\r\n options: mergeEventOptions(arg.options),\r\n });\r\n });\r\n });\r\n });\r\n};\r\n\r\nexport const bind = (arg: BindArgs) => {\r\n domready(() => {\r\n if (arg.target instanceof HTMLElement || arg.target instanceof Element) {\r\n arg.type.split(' ').forEach((t) => {\r\n addEventHandler({\r\n element: arg.target as Element,\r\n type: t,\r\n callback: arg.callback,\r\n options: arg.options,\r\n });\r\n });\r\n }\r\n\r\n if (isString(arg.target)) {\r\n elements((arg.target as string) || '')?.forEach((item) => {\r\n arg.type.split(' ').forEach((t) => {\r\n addEventHandler({\r\n element: item,\r\n type: t,\r\n callback: arg.callback,\r\n options: arg.options,\r\n });\r\n });\r\n });\r\n }\r\n });\r\n};\r\n\r\nexport const off = (\r\n action: string | Element | HTMLElement | Array,\r\n type: string,\r\n callback: EventListener | EventListenerObject\r\n) => {\r\n if (action instanceof String || action instanceof Element || action instanceof HTMLElement) {\r\n (action instanceof Element || action instanceof HTMLElement ? action : element(action)).removeEventListener(\r\n type,\r\n callback,\r\n false\r\n );\r\n }\r\n\r\n if (action instanceof Array) {\r\n for (let x of action) {\r\n let item: any = x;\r\n (item instanceof Element || item instanceof HTMLElement ? item : element(item)).removeEventListener(\r\n type,\r\n callback,\r\n false\r\n );\r\n }\r\n }\r\n};\r\n\r\nexport const offAll = (action: string, type: string, callback: EventListener | EventListenerObject) => {\r\n elements(action).forEach((item) => {\r\n item.removeEventListener(type, callback, false);\r\n });\r\n};\r\n\r\n// #####################\r\n// #### Event chain ####\r\n\r\nexport interface IEventChain {\r\n target: string;\r\n type: string;\r\n events: Array;\r\n options?: EventOptions;\r\n}\r\n\r\nexport interface IEventChainItem {\r\n action?: string;\r\n event?: string;\r\n callback?: Function;\r\n}\r\n\r\nexport const eventChain = (arg: IEventChain) => {\r\n bind({\r\n target: arg.target,\r\n type: arg.type,\r\n callback: (e: Event) => {\r\n const target: any = e.target;\r\n let closestElement: HTMLElement;\r\n let eventTarget = target?.attributes['data-action']?.value ?? target?.attributes['data-event']?.value;\r\n if (!eventTarget)\r\n eventTarget =\r\n target.parentNode?.attributes['data-action']?.value ?? target.parentNode?.attributes['data-event']?.value;\r\n\r\n if (!eventTarget) return;\r\n\r\n e.preventDefault();\r\n\r\n let item: any = arg.events.find(({ action, event }) => (action ?? event).includes(eventTarget));\r\n\r\n if (!item) {\r\n item = arg.events.find(({ action, event }) => {\r\n const dataName: string = action ? 'action' : 'event';\r\n const dataTarget: string = action ? action : event;\r\n closestElement = target.closest(`[data-${dataName}=\"${dataTarget}\"]`);\r\n return closestElement;\r\n });\r\n }\r\n\r\n if (item?.callback) item.callback.call(closestElement ? closestElement : e.target, e);\r\n return false;\r\n },\r\n options: arg.options,\r\n });\r\n};\r\n\r\n// ##############################\r\n// #### Global event handler ####\r\n\r\nexport interface IEvent {\r\n type: string;\r\n event?: IEventItem;\r\n events?: Array;\r\n}\r\n\r\nexport interface IEventItem {\r\n action?: string;\r\n event?: string;\r\n callback?: Function;\r\n}\r\n\r\ninterface IGlobalEventItem {\r\n type: string;\r\n action?: string;\r\n event?: string;\r\n callback?: Array;\r\n}\r\n\r\n// Global event\r\nexport let globalEventList: Array = [];\r\n\r\nexport const globalEvent = (event: IEvent) => {\r\n event.type.split(' ').forEach((type) => {\r\n if (event.event) event.events = [...(event.events ?? []), ...[event.event]];\r\n\r\n if (event.events) {\r\n for (let item of event.events) {\r\n let foundItem;\r\n\r\n if (item?.action) {\r\n let actionFound: IGlobalEventItem = globalFindAction(type, item?.action);\r\n if (actionFound) {\r\n foundItem = actionFound;\r\n }\r\n }\r\n\r\n if (item?.event) {\r\n let eventFound: IGlobalEventItem = globalFindEvent(type, item?.event);\r\n if (eventFound) {\r\n foundItem = eventFound;\r\n }\r\n }\r\n\r\n if (!item?.event && !item?.action) {\r\n // check global state.\r\n let globalFound: IGlobalEventItem = globalFind(type);\r\n if (globalFound) {\r\n foundItem = globalFound;\r\n }\r\n }\r\n\r\n foundItem ? foundItem.callback.push(item.callback) : globalEventAdd(type, item);\r\n }\r\n }\r\n\r\n document?.body?.removeEventListener(type, globalEventHandler);\r\n\r\n domready(() => {\r\n document?.body?.addEventListener(type, globalEventHandler, { passive: false });\r\n });\r\n });\r\n};\r\n\r\nconst globalEventHandler = (e) => {\r\n const target: any = e.target;\r\n\r\n // check action\r\n let eventTarget = globalGetTargetAction(target);\r\n if (eventTarget) {\r\n const item: IGlobalEventItem = globalFindAction(e.type, eventTarget);\r\n if (item?.callback) {\r\n globalEventInvokeCallback(item?.callback, e);\r\n }\r\n return;\r\n }\r\n\r\n // check event\r\n eventTarget = globalGetTargetEvent(target);\r\n if (eventTarget) {\r\n const item: IGlobalEventItem = globalFindEvent(e.type, eventTarget);\r\n if (item?.callback) {\r\n globalEventInvokeCallback(item?.callback, e);\r\n }\r\n return;\r\n }\r\n\r\n // check event\r\n const item = globalMatchType(e.type);\r\n if (item?.callback) {\r\n globalEventInvokeCallback(item?.callback, e);\r\n return;\r\n }\r\n};\r\n\r\nconst globalEventInvokeCallback = (cbs: Array, e: any) => {\r\n for (let item of cbs) {\r\n item?.call(null, e);\r\n }\r\n};\r\n\r\nconst globalEventAdd = (type: string, item: IEventItem): void => {\r\n globalEventList.push({\r\n type: type,\r\n action: item?.action,\r\n event: item?.event,\r\n callback: [item?.callback],\r\n });\r\n};\r\n\r\nconst globalFind = (itemType: string): IGlobalEventItem => {\r\n return globalEventList.find(({ type, action, event }) => type === itemType && !action && !event);\r\n};\r\n\r\nconst globalFindEvent = (itemType: string, eventType: string): IGlobalEventItem =>\r\n globalEventList.find(({ type, event }) => type === itemType && (event ?? '') === (eventType ?? ''));\r\n\r\nconst globalFindAction = (itemType: string, actionType: string): IGlobalEventItem =>\r\n globalEventList.find(({ type, action }) => type === itemType && (action ?? '') === (actionType ?? ''));\r\n\r\nconst globalMatchType = (itemType: string): IGlobalEventItem =>\r\n globalEventList.find(({ type, action, event }) => type === itemType && !action && !event);\r\n\r\nconst globalGetTargetAction = (target) => globalGetTarget(target, 'data-action');\r\n\r\nconst globalGetTargetEvent = (target) => globalGetTarget(target, 'data-event');\r\n\r\nconst globalGetTarget = (target, dataTarget: string) => {\r\n let eventTarget = target?.attributes[dataTarget]?.value;\r\n if (!eventTarget) eventTarget = target.parentNode?.attributes[dataTarget]?.value;\r\n return eventTarget;\r\n};\r\n","import domready from 'domready';\r\nimport {\r\n EventOptions,\r\n event as eventHandler,\r\n events as eventsHandler,\r\n action as actionHandler,\r\n actions as actionsHandler,\r\n bind as bindHandler,\r\n} from './easyfy.core';\r\nimport InjectorFactory from './injectorFactory';\r\nexport { Idependencies } from './injectorFactory';\r\n\r\ninterface IEvent {\r\n target: string;\r\n type: string;\r\n meta?: object;\r\n options?: EventOptions;\r\n}\r\n\r\ninterface IAction {\r\n target: string;\r\n type: string;\r\n meta?: object;\r\n options?: EventOptions;\r\n}\r\n\r\ninterface IBind {\r\n target: string | Element | HTMLElement;\r\n type: string;\r\n meta?: object;\r\n options?: EventOptions;\r\n}\r\n\r\nexport const invoke = function (ctor: T): void {\r\n let newClass: Object;\r\n\r\n const readyAfter = () => {\r\n // call class function onInit\r\n try {\r\n ctor?.prototype?.onInit?.apply(newClass);\r\n } catch (error) {\r\n console.log('Invoke onInit error', error);\r\n }\r\n };\r\n\r\n const init = (resolves?: Array) => {\r\n try {\r\n newClass = new ctor(...(resolves || []));\r\n } catch (err) {\r\n console.log('Error ', err);\r\n }\r\n\r\n if (ctor.prototype.hasOwnProperty('onInit')) {\r\n // Use the handy event callback\r\n domready(readyAfter);\r\n }\r\n };\r\n\r\n const depends = ctor['depends'];\r\n depends\r\n ? new InjectorFactory(ctor['depends'], (resolves) => {\r\n delete ctor['depends'];\r\n init(resolves);\r\n })\r\n : init();\r\n};\r\n\r\nexport const event = (arg: IEvent) => {\r\n return (_target: any, _key: string, descriptor: PropertyDescriptor) => {\r\n eventHandler({\r\n target: arg.target,\r\n type: arg.type,\r\n callback: actionEventHelper(descriptor, arg.meta).value,\r\n options: arg.options,\r\n });\r\n };\r\n};\r\n\r\nexport const events = (arg: IEvent) => {\r\n return (_target: any, _key: string, descriptor: PropertyDescriptor) => {\r\n eventsHandler({\r\n target: arg.target,\r\n type: arg.type,\r\n callback: actionEventHelper(descriptor, arg.meta).value,\r\n options: arg.options,\r\n });\r\n };\r\n};\r\n\r\nexport const action = (arg: IAction) => {\r\n return (_target: any, _key: string, descriptor: PropertyDescriptor) => {\r\n actionHandler({\r\n target: arg.target,\r\n type: arg.type,\r\n callback: actionEventHelper(descriptor, arg.meta).value,\r\n options: arg.options,\r\n });\r\n };\r\n};\r\n\r\nexport const actions = (arg: IAction) => {\r\n return (_target: any, _key: string, descriptor: PropertyDescriptor) => {\r\n actionsHandler({\r\n target: arg.target,\r\n type: arg.type,\r\n callback: actionEventHelper(descriptor, arg.meta).value,\r\n options: arg.options,\r\n });\r\n };\r\n};\r\n\r\nexport const bind = (arg: IBind) => {\r\n return (_target: any, _key: string, descriptor: PropertyDescriptor) => {\r\n bindHandler({\r\n target: arg.target,\r\n type: arg.type,\r\n callback: actionEventHelper(descriptor, arg.meta).value,\r\n options: arg.options,\r\n });\r\n };\r\n};\r\n\r\nconst actionEventHelper = (descriptor: PropertyDescriptor, meta?: object) => {\r\n const decorated: Function = descriptor.value;\r\n descriptor.value = function (event: Event) {\r\n if (event.defaultPrevented) {\r\n event?.preventDefault();\r\n }\r\n\r\n return decorated.apply(this, [...Array.from(arguments), meta]);\r\n };\r\n return descriptor;\r\n};\r\n","import { element, elements } from './easyfy.core';\r\nimport mobileDetect from 'mobile-detect';\r\n\r\nconst tenantRegex = /^\\/[a-z]{2}(\\/|$)/g;\r\nconst mailRegexp =\r\n /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\r\nexport interface Attribute {\r\n name: string;\r\n value: string;\r\n}\r\n\r\nexport const detector = new mobileDetect(window.navigator.userAgent);\r\n\r\n// exemple\r\n// findKey(\r\n// {\r\n// barney: { age: 36, active: true },\r\n// fred: { age: 40, active: false },\r\n// pebbles: { age: 1, active: true }\r\n// },\r\n// o => o['active']\r\n// ); // 'barney\r\nexport const findKey = (obj: any, fn: any) => Object.keys(obj).find((key) => fn(obj[key], key, obj));\r\n\r\n// exemple\r\n// findLast([1, 2, 3, 4], n => n % 2 === 1); // 3\r\nexport const findLast = (arr: Array, fn: any) => arr.filter(fn).pop();\r\n\r\n// exemple\r\n// all([4, 2, 3], x => x > 1); // true\r\n// all([1, 2, 3]); // true\r\nexport const all = (arr: Array, fn = Boolean) => arr.every(fn);\r\n\r\n// exemple\r\n// allEqual([1, 2, 3, 4, 5, 6]); // false\r\n// allEqual([1, 1, 1, 1]); // true\r\nexport const allEqual = (arr: Array) => arr.every((val) => val === arr[0]);\r\n\r\n// exemple\r\n// arrayToHtmlList('#myListID', 'li' ,['item 1', 'item 2']);\r\nexport const arrayToHtmlList = (selector: string, elementType: string, arr: Array) =>\r\n ((el) => (\r\n (el = document.querySelector(selector)),\r\n (el.innerHTML += arr.map((item) => `<${elementType}>${item}`).join(''))\r\n ))();\r\n\r\n// exemple\r\n//hasClass(document.querySelector('p.special'), 'special'); // true\r\nexport const hasClass = (el: HTMLElement, className: string) => el?.classList?.contains(className);\r\n\r\nexport const isDisabled = (el: HTMLElement) => el?.getAttribute('disabled')?.length > 0;\r\n\r\n// exemple\r\n// isBrowserTabFocused(); // true\r\nexport const isBrowserTabFocused = () => !document.hidden;\r\n\r\n// exemple\r\n// isNil(null); // true\r\n// isNil(undefined); // true\r\nexport const isNil = (val: any) => val === undefined || val === null;\r\n\r\n// exemple\r\n// isNull(null); // true\r\nexport const isNull = (val: any) => val === null;\r\n\r\nexport const isNullOrUndefined = (val: unknown) => val === undefined || val === null;\r\n\r\n// exemple\r\n// isNumber('1'); // false\r\n// isNumber(1); // true\r\nexport const isNumber = (n: any) => {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n};\r\n\r\n// exemple\r\n// isObject([1, 2, 3, 4]); // true\r\n// isObject([]); // true\r\n// isObject(['Hello!']); // true\r\n// isObject({ a: 1 }); // true\r\n// isObject({}); // true\r\n// isObject(true); // false\r\nexport const isObject = (obj: any) => obj === Object(obj);\r\n\r\n// exemple\r\n// isObjectLike({}); // true\r\n// isObjectLike([1, 2, 3]); // true\r\n// isObjectLike(x => x); // false\r\n// isObjectLike(null); // false\r\nexport const isObjectLike = (val: any) => val !== null && typeof val === 'object';\r\n\r\n// exemple\r\n// isPlainObject({ a: 1 }); // true\r\n// isPlainObject(new Map()); // false\r\n// export const isPlainObject = (val: any) =>\r\n// !!val && typeof val === \"object\" && val.export && constructor === Object;\r\n\r\n// exemple\r\n// isString('10'); // true\r\nexport const isString = (val: any) => typeof val === 'string';\r\n\r\n// exemple\r\n// isUndefined(undefined); // true\r\nexport const isUndefined = (val: any) => val === undefined;\r\n\r\n// exemple\r\n// parse string into boolean\r\nexport const parseToBoolean = (val: string) => isString(val) && val?.toLowerCase() === 'true';\r\n\r\n// exemple\r\n// isValidJSON('{\"name\":\"Adam\",\"age\":20}'); // true\r\n// isValidJSON('{\"name\":\"Adam\",age:\"20\"}'); // false\r\n// isValidJSON(null); // true\r\nexport const isValidJSON = (str: string) => {\r\n try {\r\n JSON.parse(str);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n};\r\n\r\nexport const replaceHtml = (element: HTMLElement, html: string) => {\r\n if (element?.outerHTML) {\r\n element.outerHTML = html;\r\n } else {\r\n let tmpElement = document.createElement('div');\r\n tmpElement.innerHTML = html;\r\n element?.parentNode?.replaceChild(tmpElement, element);\r\n }\r\n};\r\n\r\nexport const replaceELement = (element: HTMLElement, replaceElement: HTMLElement) => {\r\n element?.parentNode?.replaceChild(replaceElement, element);\r\n};\r\n\r\nexport const htmlToElement = (html: string): HTMLElement => {\r\n var template = document.createElement('template');\r\n html = html.trim(); // Never return a text node of whitespace as the result\r\n template.innerHTML = html;\r\n return template.content.firstChild as HTMLElement;\r\n};\r\n\r\n// exemple\r\n// matches({ age: 25, hair: 'long', beard: true }, { hair: 'long', beard: true }); // true\r\n// matches({ hair: 'long', beard: true }, { age: 25, hair: 'long', beard: true }); // false\r\nexport const matches = (obj: any, source: any) =>\r\n Object.keys(source).every((key) => obj.hasOwnProperty(key) && obj[key] === source[key]);\r\n\r\n// exemple\r\n// randomHexColorCode(); // \"#e34155\"\r\nexport const randomHexColorCode = () => {\r\n let n = (Math.random() * 0xfffff * 1000000).toString(16);\r\n return '#' + n.slice(0, 6);\r\n};\r\n\r\n// exemple\r\n// redirect('https://google.com');\r\nexport const redirect = (url, asLink = true) => (asLink ? (window.location.href = url) : window.location.replace(url));\r\n\r\n// exemple\r\n// scrollToTop();\r\nexport const scrollToTop = () => {\r\n const c = document.documentElement.scrollTop || document.body.scrollTop;\r\n //scrollTo(0, c - c / 8);\r\n scrollTo(0, 0);\r\n};\r\n\r\n// exemple\r\n// scrollToTop();\r\nexport const scrollToElement = (element?: HTMLElement, yCoords?: number) => {\r\n if (element) {\r\n yCoords = element.offsetTop || 0;\r\n }\r\n scrollTo(0, yCoords);\r\n};\r\n\r\nexport const scrollTo = (x: number, y: number) => {\r\n window.scrollTo(x, y);\r\n};\r\n\r\n// exemple\r\n// setStyle('p', 'font-size', '20px');\r\nexport const setStyle = (selector: string, ruleName: string, val: string) => (element(selector).style[ruleName] = val);\r\n\r\n// exemple\r\n// getStyle('p', 'font-size');\r\nexport const getStyle = (selector: string, ruleName: string) => element(selector).style[ruleName];\r\n\r\n// exemple\r\n// show(...document.querySelectorAll(\"img\")); // Shows all elements on the page\r\nexport const showAll = (el: Array, displayType?: string) =>\r\n [...el].forEach((e) => (e.style.display = displayType || 'block'));\r\n\r\n// exemple\r\n// hide(document.querySelectorAll('img')); // Hides all elements on the page\r\nexport const hideAll = (el: Array | NodeListOf) =>\r\n el.forEach((e) => (e.style.display = 'none'));\r\n\r\nexport const show = (selector: string | Element, displayType?: string) =>\r\n showAll([selector instanceof Element ? selector : element(selector)], displayType);\r\n\r\nexport const hide = (selector: string | Element) =>\r\n hideAll([selector instanceof Element ? selector : element(selector)]);\r\n\r\nexport const toggleShow = (selector: string, displayType?: string) => {\r\n const el = element(selector);\r\n visible(el) ? hideAll([el]) : showAll([el], displayType);\r\n};\r\n\r\nexport const removeCss = (\r\n el: HTMLElement | Element | Array | NodeListOf,\r\n className: string | Array\r\n) => {\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n el.forEach((element) => {\r\n Array.isArray(className) ? element?.classList?.remove(...className) : element?.classList?.remove(className);\r\n });\r\n } else {\r\n Array.isArray(className)\r\n ? (el as HTMLElement | Element)?.classList?.remove(...className)\r\n : (el as HTMLElement | Element)?.classList?.remove(className);\r\n return el;\r\n }\r\n};\r\n\r\nexport const addCss = (el: HTMLElement | Element, className: string | Array) => {\r\n if (Array.isArray(className)) {\r\n el?.classList?.add(...className);\r\n return el;\r\n }\r\n\r\n if (!hasClass(el as HTMLElement, className)) {\r\n el?.classList?.add(className);\r\n }\r\n\r\n return el;\r\n};\r\n\r\nexport const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nexport const visible = (element: HTMLElement): boolean => {\r\n return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);\r\n};\r\n\r\n// exemple\r\n// smoothScroll('#fooBar'); // scrolls smoothly to the element with the id fooBar\r\n// smoothScroll('.fooBar'); // scrolls smoothly to the first element with a class of fooBar\r\nexport const smoothScroll = (element: any) =>\r\n document.querySelector(element)?.scrollIntoView({\r\n behavior: 'smooth',\r\n });\r\n\r\n// exemple\r\n// splitLines('This\\nis a\\nmultiline\\nstring.\\n'); // ['This', 'is a', 'multiline', 'string.' , '']\r\nexport const splitLines = (str: string) => str.split(/\\r?\\n/);\r\n\r\n// exemple\r\n// stripHTMLTags('

lorem ipsum

'); // 'lorem ipsum'\r\nexport const stripHTMLTags = (str: string) => str.replace(/<[^>]*>/g, '');\r\n\r\n// exemple\r\n// sum(1, 2, 3, 4); // 10\r\n// sum(...[1, 2, 3, 4]); // 10\r\nexport const sum = (...arr: any) => [...arr].reduce((acc, val) => acc + val, 0);\r\n\r\n// exemple\r\n// timeTaken(() => Math.pow(2, 10)); // 1024, (logged): timeTaken: 0.02099609375ms\r\nexport const timeTaken = (callback: any) => {\r\n console.time('timeTaken');\r\n const r = callback();\r\n console.timeEnd('timeTaken');\r\n return r;\r\n};\r\n\r\nexport const replaceWith = (element: HTMLElement, replaceWithElement: HTMLElement) => {\r\n element.replaceWith(replaceWithElement);\r\n};\r\n\r\n// exemple\r\n// toCurrency(123456.789, \"EUR\"); // €123,456.79 | currency: Euro | currencyLangFormat: Local\r\n// toCurrency(123456.789, 'USD', 'en-us'); // $123,456.79 | currency: US Dollar | currencyLangFormat: English (United States)\r\n// toCurrency(123456.789, 'USD', 'fa'); // ۱۲۳٬۴۵۶٫۷۹ ؜$ | currency: US Dollar | currencyLangFormat: Farsi\r\n// toCurrency(322342436423.2435, 'JPY'); // ¥322,342,436,423 | currency: Japanese Yen | currencyLangFormat: Local\r\n// toCurrency(322342436423.2435, 'JPY', 'fi'); // 322 342 436 423 ¥ | currency: Japanese Yen | currencyLangFormat: Finnish\r\nexport const toCurrency = (n: any, curr: any, languageFormat = undefined) =>\r\n Intl.NumberFormat(languageFormat, {\r\n style: 'currency',\r\n currency: curr,\r\n }).format(n);\r\n\r\n// exemple\r\n// toDecimalMark(12305030388.9087); // \"12,305,030,388.909\"\r\n// toDecimalMark(12305030388.9087, \"en-us\"); // \"12,305,030,388.909\"\r\nexport const toDecimalMark = (num: any, languageFormat = undefined) => num.toLocaleString(languageFormat);\r\n\r\n// exemple\r\n// toggleClass('p.special', 'special'); // The paragraph will not have the 'special' class anymore\r\nexport const toggleClass = (selector: string | HTMLElement, className: any) => {\r\n if (selector instanceof HTMLElement) selector.classList.toggle(className);\r\n};\r\n\r\nexport const debounce = any>(func: F, waitFor: number) => {\r\n let timeout;\r\n\r\n return (...args: Parameters): Promise> =>\r\n new Promise((resolve) => {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n }\r\n\r\n timeout = setTimeout(() => resolve(func(...args)), waitFor);\r\n });\r\n};\r\n\r\nexport const isFunction = (f: Function) => {\r\n return f && {}.toString.call(f) === '[object Function]';\r\n};\r\n\r\nexport const Id = (len: number) => {\r\n return '_' + Math.random().toString(36).substr(2, len);\r\n};\r\n\r\nexport const toggleClassBySelector = (selector: string, className: string, toggle: boolean) => {\r\n let els = elements(selector);\r\n els.forEach((item) => {\r\n if (toggle) {\r\n addCss(item, className);\r\n } else {\r\n removeCss(item, className);\r\n }\r\n });\r\n};\r\n\r\nexport const setAttributes = (element: HTMLElement, attributes: Array): HTMLElement | Element => {\r\n attributes.forEach((item) => {\r\n if (item?.name && item?.value) {\r\n element.setAttribute(item.name, item.value);\r\n }\r\n });\r\n return element;\r\n};\r\n\r\nexport const offset = (element: HTMLElement): { top: number; left: number } => {\r\n const rect = element.getBoundingClientRect(),\r\n scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,\r\n scrollTop = window.pageYOffset || document.documentElement.scrollTop;\r\n return { top: rect.top + scrollTop, left: rect.left + scrollLeft };\r\n};\r\n\r\nexport const winHeight = () =>\r\n window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\r\nexport const winWidth = () => window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n\r\nexport const isBetweenDates = (startDate: Date, endDate: Date, checkDate: Date) => {\r\n if (checkDate > startDate && checkDate < endDate) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\n//todo: support other short date string formats other then 2020-01-01\r\nexport const getDate = (date: string) => {\r\n if (date !== '') {\r\n var d = date.split('-');\r\n if (d.length == 3) {\r\n return new Date(parseInt(d[0]), parseInt(d[1]) - 1, parseInt(d[2]));\r\n }\r\n }\r\n return new Date();\r\n};\r\n\r\nexport const getSelectedValue = (select: HTMLSelectElement) => {\r\n if (select) {\r\n const selectedOption = select.options[select.selectedIndex];\r\n return { text: selectedOption.text, value: selectedOption.value };\r\n }\r\n return;\r\n};\r\n\r\nexport const removeHash = () => {\r\n var scrollV,\r\n scrollH,\r\n loc = window.location;\r\n if ('pushState' in history) {\r\n history.pushState('', document.title, loc.pathname + loc.search);\r\n } else {\r\n // Prevent scrolling by storing the page's current scroll offset\r\n scrollV = document.body.scrollTop;\r\n scrollH = document.body.scrollLeft;\r\n\r\n loc.hash = '';\r\n\r\n // Restore the scroll offset, should be flicker free\r\n document.body.scrollTop = scrollV;\r\n document.body.scrollLeft = scrollH;\r\n }\r\n};\r\n\r\nexport const truncate = (text: string, length: number) =>\r\n text.length > length ? `${text.substring(0, length)}...` : text;\r\n\r\nexport const truncateVisible = (text: string, length: number) =>\r\n text.length > length\r\n ? `${text.substring(0, length)}...
${text.substring(length, text.length)}
`\r\n : text;\r\n\r\ninterface viewPort {\r\n mobile: boolean;\r\n tablet: boolean;\r\n desktop: boolean;\r\n}\r\n\r\nexport const viewWidth = () => Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\r\n\r\nexport const viewPort = (): viewPort => {\r\n const vw = viewWidth();\r\n const mobileViewport: number = 480;\r\n const tableViewport: number = 768;\r\n const desktopViewport: number = 1024;\r\n return {\r\n mobile: vw >= 0 && vw <= tableViewport,\r\n tablet: vw >= mobileViewport && vw <= desktopViewport,\r\n desktop: vw >= desktopViewport,\r\n };\r\n};\r\n\r\nexport const getTenant = (str: string): string => {\r\n const found = (str || '').match(tenantRegex);\r\n return found?.length > 0 ? `${found[0].length === 3 ? found[0] : found[0].substr(0, 3)}/` : '';\r\n};\r\n\r\nexport const diffMinutes = (dt2, dt1) => {\r\n let diff = (dt2.getTime() - dt1.getTime()) / 1000;\r\n diff /= 60;\r\n return Math.abs(Math.round(diff));\r\n};\r\n\r\nexport const isEmail = (email: string) => mailRegexp.test(email);\r\n\r\nexport const domLoaded = (fn: Function) => {\r\n let fns = [],\r\n listener,\r\n doc = document,\r\n readystatechange = 'readystatechange',\r\n loaded = /^loaded|^i|^c/.test(doc.readyState);\r\n\r\n if (!loaded)\r\n doc.addEventListener(\r\n 'readystatechange',\r\n (listener = () => {\r\n if (document.readyState === 'complete') {\r\n doc.removeEventListener(readystatechange, listener);\r\n while ((listener = fns.shift())) listener();\r\n }\r\n })\r\n );\r\n\r\n loaded ? setTimeout(fn, 0) : fns.push(fn);\r\n};\r\n\r\nexport const pageReload = (timeOut: number = 500) => {\r\n setTimeout(function () {\r\n location.reload();\r\n }, timeOut);\r\n};\r\n\r\nexport const GetCookie = (cname) => {\r\n return document.cookie\r\n .split('; ')\r\n .find((row) => row.startsWith(cname))\r\n .split('=')[1];\r\n};\r\n\r\nexport const SetCookie = (cname, cvalue, exdays) => {\r\n const d = new Date();\r\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\r\n let expires = 'expires=' + d.toUTCString();\r\n document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';\r\n};\r\n\r\nexport const isCheckout = (): boolean => {\r\n return location.pathname.includes('checkout');\r\n};\r\n\r\nexport const isVisibleOnScreen = (element): boolean => {\r\n const rect = element.getBoundingClientRect();\r\n return (\r\n rect.top >= 0 &&\r\n rect.left >= 0 &&\r\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\r\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\r\n );\r\n};","import { Id } from './easyfy.utils';\r\n\r\nexport default class InjectorFactory {\r\n dependencies: Object = {};\r\n resolveOnload: Array = [];\r\n depends: Array;\r\n doneCallback: Function;\r\n\r\n constructor(dependencies: Array, finish?: Function, autoStart: boolean = true) {\r\n if (dependencies?.length > 0) {\r\n this.depends = dependencies;\r\n this.Transform();\r\n }\r\n\r\n if (finish) this.doneCallback = finish;\r\n\r\n if (autoStart) this.Resolve();\r\n }\r\n\r\n Transform() {\r\n this.depends.forEach((item) => {\r\n const id = Id(10);\r\n this.dependencies[id] = { name: id, func: new item.func(item.data || {}) };\r\n if (this.dependencies[id].func.hasOwnProperty('loaded')) this.resolveOnload.push(id);\r\n });\r\n }\r\n\r\n Resolve() {\r\n const _this = this;\r\n\r\n if (_this.resolveOnload.length > 0) {\r\n _this.resolveOnload.forEach((item, index) => {\r\n if (_this.dependencies[item].func.hasOwnProperty('loaded')) {\r\n const dependencyItem = _this.dependencies[item].func;\r\n let loadedVal = dependencyItem['loaded'];\r\n\r\n Object.defineProperty(dependencyItem, 'loaded', {\r\n get: () => {\r\n return loadedVal;\r\n },\r\n set: function (val) {\r\n if (val !== loadedVal) {\r\n if (val && dependencyItem) {\r\n _this.resolveOnload.splice(index, 1);\r\n delete dependencyItem['loaded'];\r\n\r\n if (_this.resolveOnload.length === 0 && _this.doneCallback) {\r\n let dependencyFunc: Array = [];\r\n for (const key in _this.dependencies) {\r\n if (_this.dependencies.hasOwnProperty(key)) {\r\n const item = _this.dependencies[key];\r\n dependencyFunc.push(item.func);\r\n }\r\n }\r\n\r\n _this.doneCallback.call(this, dependencyFunc);\r\n }\r\n }\r\n }\r\n loadedVal = val;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n }\r\n });\r\n\r\n return false;\r\n }\r\n this.doneCallback?.call(_this);\r\n }\r\n}\r\n\r\nexport interface Idependencies {\r\n func: { new (...args: any[]): {} };\r\n data?: any;\r\n}","import KeenSlider, { KeenSliderInstance, KeenSliderOptions } from 'keen-slider';\r\nimport { hide } from './easyfy.utils';\r\n\r\nexport interface ISlider {\r\n keenConfig?: KeenSliderOptions;\r\n thumbnailConfig?: IKeenThumbnailConfig;\r\n navigation?: boolean;\r\n}\r\n\r\nexport interface IKeenThumbnailConfig {\r\n container: string;\r\n}\r\n\r\nconst slideConfigdefault: KeenSliderOptions = {\r\n loop: false,\r\n breakpoints: {\r\n '(min-width: 400px)': {\r\n slides: { perView: 1.4, spacing: 5, origin: \"center\" },\r\n },\r\n '(min-width: 768px)': {\r\n slides: { perView: 3.2, spacing: 5 },\r\n },\r\n '(min-width: 1024px)': {\r\n slides: { perView: 3.2, spacing: 5 },\r\n },\r\n '(min-width: 1500px)': {\r\n slides: { perView: 4.2, spacing: 5 },\r\n },\r\n '(min-width: 1700px)': {\r\n slides: { perView: 4, spacing: 5 },\r\n },\r\n },\r\n mode: 'snap',\r\n dragSpeed: 1,\r\n renderMode: 'performance',\r\n slides: { perView: 2, spacing: 0},\r\n};\r\n\r\nexport const slider = (container: string, config?: ISlider, autoSlider: boolean = false) => {\r\n document.querySelectorAll(container)?.forEach((item) => {\r\n let initial = 0;\r\n\r\n if (item?.dataset?.sortorder == \"isRandom\") initial = Math.floor(Math.random() * item?.children?.length);\r\n if (container == \"[data-bannerslider]\") {\r\n config.keenConfig = {\r\n loop: true,\r\n initial: initial\r\n }\r\n }\r\n if (item?.querySelector('.keen-slider__slide')?.children?.length) {\r\n const keenSlider = new KeenSlider(\r\n item,\r\n config?.keenConfig ?? slideConfigdefault,\r\n config?.navigation ? autoSlider ? [KeenNavigationWithAutoSlider] : [KeenNavigation] : []\r\n );\r\n\r\n if (config?.thumbnailConfig && config?.thumbnailConfig?.container?.length > 0) {\r\n mountThumbnailSlider(config, keenSlider);\r\n }\r\n\r\n return keenSlider;\r\n } else {\r\n if (document?.body?.classList?.contains('admin-mode') && item.hasAttribute('data-productslider')) {\r\n return false;\r\n }\r\n\r\n if (item) hide(item);\r\n }\r\n });\r\n};\r\n\r\nconst mountThumbnailSlider = (config: ISlider, parentSlider: KeenSliderInstance) => {\r\n const item: HTMLElement = document.querySelector(config?.thumbnailConfig?.container) as HTMLElement;\r\n\r\n if (item?.querySelector('.keen-slider__slide')?.children?.length) {\r\n new KeenSlider(\r\n config?.thumbnailConfig?.container,\r\n {\r\n initial: 0,\r\n slides: {\r\n perView: 4,\r\n spacing: 10,\r\n },\r\n },\r\n [KeenThumbnailPlugin(parentSlider)]\r\n );\r\n } else {\r\n if (item) hide(item);\r\n }\r\n};\r\n\r\nconst KeenThumbnailPlugin = (main: KeenSliderInstance) => {\r\n return (slider) => {\r\n const removeActive = () => {\r\n slider.slides.forEach((slide) => {\r\n slide.classList.remove('active');\r\n });\r\n };\r\n const addActive = (idx) => {\r\n slider.slides[idx].classList.add('active');\r\n };\r\n\r\n const addClickEvents = () => {\r\n slider.slides.forEach((slide, idx) => {\r\n slide.addEventListener('click', () => {\r\n main.moveToIdx(idx);\r\n });\r\n });\r\n };\r\n\r\n slider.on('created', () => {\r\n addActive(slider.track.details.rel);\r\n addClickEvents();\r\n main.on('animationStarted', (main) => {\r\n removeActive();\r\n const next = main.animator.targetIdx || 0;\r\n addActive(main.track.absToRel(next));\r\n slider.moveToIdx(next);\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst KeenNavigationWithAutoSlider = (slider: KeenSliderInstance) => {\r\n return KeenNavigation(slider, true);\r\n}\r\n\r\nconst KeenNavigation = (slider: KeenSliderInstance, autoSlider: boolean = false) => {\r\n let wrapper, dots, arrowLeft, arrowRight;\r\n let timeout;\r\n if (slider.slides.length == 1) autoSlider = false;\r\n let isUpsellSection = slider.container.closest(\"[data-container='upsell']\") != null;\r\n\r\n const clearNextTimeout = () => {\r\n clearTimeout(timeout);\r\n }\r\n const nextTimeout = () => {\r\n let slideTime = 7000;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => {\r\n slider.next();\r\n }, slideTime);\r\n }\r\n\r\n const markup = (remove: boolean = false) => {\r\n wrapperMarkup(remove);\r\n dotMarkup(remove);\r\n arrowMarkup(remove);\r\n };\r\n\r\n const removeElement = (elment) => {\r\n elment?.parentNode?.removeChild(elment);\r\n };\r\n\r\n const createDiv = (className) => {\r\n var div = document.createElement('div');\r\n var classNames = className.split(' ');\r\n classNames.forEach((name) => div.classList.add(name));\r\n return div;\r\n };\r\n\r\n const arrowMarkup = (remove) => {\r\n if (remove) {\r\n removeElement(arrowLeft);\r\n removeElement(arrowRight);\r\n return;\r\n }\r\n let n = autoSlider ? 1 : 3;\r\n if (slider.slides.length <= n) return;\r\n arrowLeft = createDiv('arrow arrow--left');\r\n arrowLeft.addEventListener('click', () => slider.prev());\r\n arrowRight = createDiv('arrow arrow--right');\r\n arrowRight.addEventListener('click', () => slider.next());\r\n\r\n wrapper.appendChild(arrowLeft);\r\n wrapper.appendChild(arrowRight);\r\n };\r\n\r\n const wrapperMarkup = (remove) => {\r\n if (remove) {\r\n var parent = wrapper.parentNode;\r\n if (wrapper && parent) {\r\n while (wrapper.firstChild) parent.insertBefore(wrapper.firstChild, wrapper);\r\n removeElement(wrapper);\r\n }\r\n return;\r\n }\r\n\r\n wrapper = createDiv('navigation-wrapper');\r\n slider.container.parentNode.appendChild(wrapper);\r\n wrapper.appendChild(slider.container);\r\n };\r\n\r\n const dotMarkup = (remove) => {\r\n if (remove) {\r\n removeElement(dots);\r\n return;\r\n }\r\n if (slider.slides.length <= 1) return;\r\n dots = createDiv('dots');\r\n slider.track.details.slides.forEach((_e, idx) => {\r\n if (slider.track.details.maxIdx > 0 && (!isUpsellSection || idx <= slider.track.details.maxIdx) ) {\r\n var dot = createDiv('dot');\r\n dot.addEventListener('click', () => slider.moveToIdx(idx));\r\n dots.appendChild(dot);\r\n } \r\n });\r\n wrapper.appendChild(dots);\r\n };\r\n\r\n const updateClasses = () => {\r\n var slide = slider.track.details.rel;\r\n\r\n if (!autoSlider) {\r\n slide === 0 ? arrowLeft?.classList.add('arrow--disabled') : arrowLeft?.classList.remove('arrow--disabled');\r\n slide === slider.track.details.maxIdx\r\n ? arrowRight?.classList.add('arrow--disabled')\r\n : arrowRight?.classList.remove('arrow--disabled');\r\n\r\n }\r\n\r\n if (dots) {\r\n Array.from(dots.children).forEach((dot: HTMLElement, idx: number) => {\r\n idx === slide ? dot.classList.add('dot--active') : dot.classList.remove('dot--active');\r\n });\r\n }\r\n };\r\n\r\n slider.on('created', () => {\r\n markup();\r\n updateClasses();\r\n if (autoSlider) {\r\n nextTimeout();\r\n }\r\n });\r\n\r\n if (autoSlider) {\r\n slider.on(\"dragStarted\", clearNextTimeout);\r\n slider.on(\"animationEnded\", nextTimeout);\r\n slider.on(\"updated\", nextTimeout);\r\n }\r\n\r\n slider.on('optionsChanged', () => {\r\n if (autoSlider) {\r\n markup(true);\r\n markup();\r\n }\r\n\r\n updateClasses();\r\n });\r\n\r\n slider.on('slideChanged', () => {\r\n updateClasses();\r\n });\r\n\r\n slider.on('destroyed', () => {\r\n markup(true);\r\n });\r\n};\r\n"],"names":["defaults","headers","common","xsrfCookieName","undefined","baseURL","location","protocol","host","pathname","interceptors","request","use","config","url","startsWith","urlTenant","actionPathTenant","replace","element","query","document","querySelector","elements","querySelectorAll","elementsOf","addEventHandler","event","addEventListener","type","callback","mergeEventOptions","options","Object","assign","passive","on","action","ref","meta","split","forEach","t","Element","e","call","target","err","once","one","arg","events","item","actions","bind","HTMLElement","offAll","removeEventListener","eventChain","closestElement","eventTarget","attributes","value","parentNode","preventDefault","find","includes","dataName","dataTarget","closest","globalEventList","globalEvent","foundItem","actionFound","globalFindAction","eventFound","globalFindEvent","globalFound","globalFind","push","globalEventAdd","body","globalEventHandler","globalGetTargetAction","globalEventInvokeCallback","globalGetTargetEvent","globalMatchType","cbs","itemType","eventType","actionType","globalGetTarget","invoke","ctor","newClass","readyAfter","prototype","onInit","apply","error","init","resolves","hasOwnProperty","_target","_key","descriptor","actionEventHelper","decorated","defaultPrevented","this","Array","from","arguments","tenantRegex","mailRegexp","detector","window","navigator","userAgent","hasClass","el","className","classList","contains","isDisabled","getAttribute","length","isNullOrUndefined","val","isString","parseToBoolean","toLowerCase","replaceHtml","html","outerHTML","tmpElement","createElement","innerHTML","replaceChild","replaceELement","replaceElement","htmlToElement","template","trim","content","firstChild","scrollToTop","documentElement","scrollTop","scrollTo","scrollToElement","yCoords","offsetTop","x","y","showAll","displayType","style","display","hideAll","show","selector","hide","toggleShow","visible","removeCss","isArray","NodeList","remove","addCss","add","offsetWidth","offsetHeight","getClientRects","smoothScroll","scrollIntoView","behavior","toCurrency","n","curr","languageFormat","Intl","NumberFormat","currency","format","toggleClass","toggle","debounce","func","waitFor","timeout","args","Promise","resolve","clearTimeout","setTimeout","isFunction","f","toString","Id","len","Math","random","substr","winHeight","innerHeight","clientHeight","getSelectedValue","select","selectedOption","selectedIndex","text","truncateVisible","substring","viewWidth","max","clientWidth","innerWidth","viewPort","vw","mobile","tablet","desktop","getTenant","str","found","match","isEmail","email","test","pageReload","timeOut","reload","SetCookie","cname","cvalue","exdays","d","Date","setTime","getTime","expires","toUTCString","cookie","isCheckout","InjectorFactory","constructor","dependencies","finish","autoStart","resolveOnload","depends","Transform","doneCallback","Resolve","id","name","data","_this","index","dependencyItem","loadedVal","defineProperty","get","set","splice","dependencyFunc","key","enumerable","configurable","slideConfigdefault","loop","breakpoints","slides","perView","spacing","origin","mode","dragSpeed","renderMode","slider","container","autoSlider","initial","dataset","sortorder","floor","children","keenConfig","keenSlider","navigation","KeenNavigationWithAutoSlider","KeenNavigation","thumbnailConfig","mountThumbnailSlider","hasAttribute","parentSlider","KeenThumbnailPlugin","main","addActive","idx","track","details","rel","slide","moveToIdx","next","animator","targetIdx","absToRel","wrapper","dots","arrowLeft","arrowRight","isUpsellSection","clearNextTimeout","nextTimeout","markup","wrapperMarkup","dotMarkup","arrowMarkup","removeElement","elment","removeChild","createDiv","div","prev","appendChild","parent","insertBefore","_e","maxIdx","dot","updateClasses"],"sourceRoot":""}