/*! elementor-pro - v3.12.0 - 29-03-2023 */ "use strict"; (self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["preloaded-elements-handlers"],{ /***/ "../assets/dev/js/frontend/preloaded-elements-handlers.js": /*!****************************************************************!*\ !*** ../assets/dev/js/frontend/preloaded-elements-handlers.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); var _frontendLegacy = _interopRequireDefault(__webpack_require__(/*! modules/animated-headline/assets/js/frontend/frontend-legacy */ "../modules/animated-headline/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy2 = _interopRequireDefault(__webpack_require__(/*! modules/carousel/assets/js/frontend/frontend-legacy */ "../modules/carousel/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy3 = _interopRequireDefault(__webpack_require__(/*! modules/countdown/assets/js/frontend/frontend-legacy */ "../modules/countdown/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy4 = _interopRequireDefault(__webpack_require__(/*! modules/forms/assets/js/frontend/frontend-legacy */ "../modules/forms/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy5 = _interopRequireDefault(__webpack_require__(/*! modules/gallery/assets/js/frontend/frontend-legacy */ "../modules/gallery/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy6 = _interopRequireDefault(__webpack_require__(/*! modules/hotspot/assets/js/frontend/frontend-legacy */ "../modules/hotspot/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy7 = _interopRequireDefault(__webpack_require__(/*! modules/lottie/assets/js/frontend/frontend-legacy */ "../modules/lottie/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy8 = _interopRequireDefault(__webpack_require__(/*! modules/nav-menu/assets/js/frontend/frontend-legacy */ "../modules/nav-menu/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy9 = _interopRequireDefault(__webpack_require__(/*! modules/popup/assets/js/frontend/frontend-legacy */ "../modules/popup/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy10 = _interopRequireDefault(__webpack_require__(/*! modules/posts/assets/js/frontend/frontend-legacy */ "../modules/posts/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy11 = _interopRequireDefault(__webpack_require__(/*! modules/share-buttons/assets/js/frontend/frontend-legacy */ "../modules/share-buttons/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy12 = _interopRequireDefault(__webpack_require__(/*! modules/slides/assets/js/frontend/frontend-legacy */ "../modules/slides/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy13 = _interopRequireDefault(__webpack_require__(/*! modules/social/assets/js/frontend/frontend-legacy */ "../modules/social/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy14 = _interopRequireDefault(__webpack_require__(/*! modules/table-of-contents/assets/js/frontend/frontend-legacy */ "../modules/table-of-contents/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy15 = _interopRequireDefault(__webpack_require__(/*! modules/theme-builder/assets/js/frontend/frontend-legacy */ "../modules/theme-builder/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy16 = _interopRequireDefault(__webpack_require__(/*! modules/theme-elements/assets/js/frontend/frontend-legacy */ "../modules/theme-elements/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy17 = _interopRequireDefault(__webpack_require__(/*! modules/woocommerce/assets/js/frontend/frontend-legacy */ "../modules/woocommerce/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy18 = _interopRequireDefault(__webpack_require__(/*! modules/loop-builder/assets/js/frontend/frontend-legacy */ "../modules/loop-builder/assets/js/frontend/frontend-legacy.js")); var _frontendLegacy19 = _interopRequireDefault(__webpack_require__(/*! modules/mega-menu/assets/js/frontend/frontend-legacy */ "../modules/mega-menu/assets/js/frontend/frontend-legacy.js")); const extendDefaultHandlers = defaultHandlers => { const handlers = { animatedText: _frontendLegacy.default, carousel: _frontendLegacy2.default, countdown: _frontendLegacy3.default, form: _frontendLegacy4.default, gallery: _frontendLegacy5.default, hotspot: _frontendLegacy6.default, lottie: _frontendLegacy7.default, nav_menu: _frontendLegacy8.default, popup: _frontendLegacy9.default, posts: _frontendLegacy10.default, share_buttons: _frontendLegacy11.default, slides: _frontendLegacy12.default, social: _frontendLegacy13.default, themeBuilder: _frontendLegacy15.default, themeElements: _frontendLegacy16.default, woocommerce: _frontendLegacy17.default, tableOfContents: _frontendLegacy14.default, loopBuilder: _frontendLegacy18.default, megaMenu: _frontendLegacy19.default }; return { ...defaultHandlers, ...handlers }; }; elementorProFrontend.on('elementor-pro/modules/init:before', () => { elementorFrontend.hooks.addFilter('elementor-pro/frontend/handlers', extendDefaultHandlers); }); /***/ }), /***/ "../assets/dev/js/frontend/utils/icons/e-icons.js": /*!********************************************************!*\ !*** ../assets/dev/js/frontend/utils/icons/e-icons.js ***! \********************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports.close = void 0; var _manager = _interopRequireDefault(__webpack_require__(/*! ./manager */ "../assets/dev/js/frontend/utils/icons/manager.js")); // This file is automatically generated, please don't change anything in this file. const iconsManager = new _manager.default('eicon'); const close = { get element() { const svgData = { path: 'M742 167L500 408 258 167C246 154 233 150 217 150 196 150 179 158 167 167 154 179 150 196 150 212 150 229 154 242 171 254L408 500 167 742C138 771 138 800 167 829 196 858 225 858 254 829L496 587 738 829C750 842 767 846 783 846 800 846 817 842 829 829 842 817 846 804 846 783 846 767 842 750 829 737L588 500 833 258C863 229 863 200 833 171 804 137 775 137 742 167Z', width: 1000, height: 1000 }; return iconsManager.createSvgElement('close', svgData); } }; exports.close = close; /***/ }), /***/ "../assets/dev/js/frontend/utils/icons/manager.js": /*!********************************************************!*\ !*** ../assets/dev/js/frontend/utils/icons/manager.js ***! \********************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js")); class IconsManager { constructor(elementsPrefix) { this.prefix = `${elementsPrefix}-`; if (!IconsManager.symbolsContainer) { const symbolsContainerId = 'e-font-icon-svg-symbols'; IconsManager.symbolsContainer = document.getElementById(symbolsContainerId); if (!IconsManager.symbolsContainer) { IconsManager.symbolsContainer = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); IconsManager.symbolsContainer.setAttributeNS(null, 'style', 'display: none;'); IconsManager.symbolsContainer.setAttributeNS(null, 'class', symbolsContainerId); document.body.appendChild(IconsManager.symbolsContainer); } } } createSvgElement(name, _ref) { let { path, width, height } = _ref; const elementName = this.prefix + name, elementSelector = '#' + this.prefix + name; // Create symbol if not exist yet. if (!IconsManager.iconsUsageList.includes(elementName)) { if (!IconsManager.symbolsContainer.querySelector(elementSelector)) { const symbol = document.createElementNS('http://www.w3.org/2000/svg', 'symbol'); symbol.id = elementName; symbol.innerHTML = ''; symbol.setAttributeNS(null, 'viewBox', '0 0 ' + width + ' ' + height); IconsManager.symbolsContainer.appendChild(symbol); } IconsManager.iconsUsageList.push(elementName); } const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); svg.innerHTML = ''; svg.setAttributeNS(null, 'class', 'e-font-icon-svg e-' + elementName); return svg; } } exports["default"] = IconsManager; (0, _defineProperty2.default)(IconsManager, "symbolsContainer", void 0); (0, _defineProperty2.default)(IconsManager, "iconsUsageList", []); /***/ }), /***/ "../assets/dev/js/frontend/utils/scroll.js": /*!*************************************************!*\ !*** ../assets/dev/js/frontend/utils/scroll.js ***! \*************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; if (window.elementorCommon) { window.elementorCommon.helpers.softDeprecated('Scroll util from "/dev/js/frontend/utils/scroll"', '3.1.0', 'elementorModules.utils.Scroll'); } var _default = elementorModules.utils.Scroll; exports["default"] = _default; /***/ }), /***/ "../assets/dev/js/preview/utils/document-handle.js": /*!*********************************************************!*\ !*** ../assets/dev/js/preview/utils/document-handle.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { /* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"]; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SAVE_CONTEXT = exports.EDIT_CONTEXT = void 0; exports.createElement = createElement; exports["default"] = addDocumentHandle; const EDIT_HANDLE_CLASS_NAME = 'elementor-document-handle'; const EDIT_MODE_CLASS_NAME = 'elementor-edit-mode'; const EDIT_CONTEXT = 'edit'; exports.EDIT_CONTEXT = EDIT_CONTEXT; const SAVE_HANDLE_CLASS_NAME = 'elementor-document-save-back-handle'; const SAVE_CONTEXT = 'save'; /** * @param {Object} handleTarget * @param {HTMLElement} handleTarget.element * @param {string|number} handleTarget.id - Document ID. * @param {string} handleTarget.title * @param {string} context - Edit/Save * @param {Function|null} onCloseDocument - Callback to run when outgoing document is closed. * @param {string} selector */ exports.SAVE_CONTEXT = SAVE_CONTEXT; function addDocumentHandle(_ref) { let { element, id, title = __('Template', 'elementor-pro') } = _ref; let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EDIT_CONTEXT; let onCloseDocument = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; let selector = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; if (EDIT_CONTEXT === context) { if (!id || !element) { throw Error('`id` and `element` are required.'); } if (isCurrentlyEditing(element) || hasHandle(element)) { return; } } const handleElement = createHandleElement({ title, onClick: () => onDocumentClick(id, context, onCloseDocument, selector) }, context); element.prepend(handleElement); if (EDIT_CONTEXT === context) { element.dataset.editableElementorDocument = id; } } /** * @param {HTMLElement} element * * @return {boolean} Whether the element is currently being edited. */ function isCurrentlyEditing(element) { return element.classList.contains(EDIT_MODE_CLASS_NAME); } /** * @param {HTMLElement} element * * @return {boolean} Whether the element has a handle. */ function hasHandle(element) { return !!element.querySelector(`:scope > .${EDIT_HANDLE_CLASS_NAME}`); } /** * @param {Object} handleProperties * @param {string} handleProperties.title * @param {Function} handleProperties.onClick * @param {string} context * * @return {HTMLElement} The newly generated Handle element */ function createHandleElement(_ref2, context) { let { title, onClick } = _ref2; const element = createElement({ tag: 'div', classNames: EDIT_CONTEXT === context ? [EDIT_HANDLE_CLASS_NAME] : [EDIT_HANDLE_CLASS_NAME, SAVE_HANDLE_CLASS_NAME], children: [createElement({ tag: 'i', classNames: [getHandleIcon(context)] }), createElement({ tag: 'div', classNames: [`${EDIT_CONTEXT === context ? EDIT_HANDLE_CLASS_NAME : SAVE_HANDLE_CLASS_NAME}__title`], children: [document.createTextNode(EDIT_CONTEXT === context ? __('Edit %s', 'elementor-pro').replace('%s', title) : __('Save %s', 'elementor-pro').replace('%s', title))] })] }); element.addEventListener('click', onClick); return element; } function getHandleIcon(context) { let icon = 'eicon-edit'; if (SAVE_CONTEXT === context) { icon = elementorFrontend.config.is_rtl ? 'eicon-arrow-right' : 'eicon-arrow-left'; } return icon; } /** * Util for creating HTML element. * * @param {Object} elementProperties * @param {string} elementProperties.tag * @param {string[]} elementProperties.classNames * @param {HTMLElement[]} elementProperties.children * * @return {HTMLElement} Generated Element */ function createElement(_ref3) { let { tag, classNames = [], children = [] } = _ref3; const element = document.createElement(tag); element.classList.add(...classNames); children.forEach(child => element.appendChild(child)); return element; } /** * @param {string|number} id * @param {string} context * @param {Function|null} onCloseDocument * @param {string} selector * @return {Promise} */ async function onDocumentClick(id, context) { let onCloseDocument = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; let selector = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; if (EDIT_CONTEXT === context) { window.top.$e.internal('panel/state-loading'); await window.top.$e.run('editor/documents/switch', { id: parseInt(id), onClose: onCloseDocument, selector }); window.top.$e.internal('panel/state-ready'); } else { elementorCommon.api.internal('panel/state-loading'); elementorCommon.api.run('editor/documents/switch', { id: elementor.config.initial_document.id, mode: 'save', shouldScroll: false, selector }).finally(() => elementorCommon.api.internal('panel/state-ready')); } } /***/ }), /***/ "../modules/animated-headline/assets/js/frontend/frontend-legacy.js": /*!**************************************************************************!*\ !*** ../modules/animated-headline/assets/js/frontend/frontend-legacy.js ***! \**************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _animatedHeadlines = _interopRequireDefault(__webpack_require__(/*! ./handlers/animated-headlines */ "../modules/animated-headline/assets/js/frontend/handlers/animated-headlines.js")); class _default extends elementorModules.Module { constructor() { super(); elementorFrontend.elementsHandler.attachHandler('animated-headline', _animatedHeadlines.default); } } exports["default"] = _default; /***/ }), /***/ "../modules/animated-headline/assets/js/frontend/handlers/animated-headlines.js": /*!**************************************************************************************!*\ !*** ../modules/animated-headline/assets/js/frontend/handlers/animated-headlines.js ***! \**************************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _scroll = _interopRequireDefault(__webpack_require__(/*! elementor-pro/frontend/utils/scroll */ "../assets/dev/js/frontend/utils/scroll.js")); var _default = elementorModules.frontend.handlers.Base.extend({ svgPaths: { circle: ['M325,18C228.7-8.3,118.5,8.3,78,21C22.4,38.4,4.6,54.6,5.6,77.6c1.4,32.4,52.2,54,142.6,63.7 c66.2,7.1,212.2,7.5,273.5-8.3c64.4-16.6,104.3-57.6,33.8-98.2C386.7-4.9,179.4-1.4,126.3,20.7'], underline_zigzag: ['M9.3,127.3c49.3-3,150.7-7.6,199.7-7.4c121.9,0.4,189.9,0.4,282.3,7.2C380.1,129.6,181.2,130.6,70,139 c82.6-2.9,254.2-1,335.9,1.3c-56,1.4-137.2-0.3-197.1,9'], x: ['M497.4,23.9C301.6,40,155.9,80.6,4,144.4', 'M14.1,27.6c204.5,20.3,393.8,74,467.3,111.7'], strikethrough: ['M3,75h493.5'], curly: ['M3,146.1c17.1-8.8,33.5-17.8,51.4-17.8c15.6,0,17.1,18.1,30.2,18.1c22.9,0,36-18.6,53.9-18.6 c17.1,0,21.3,18.5,37.5,18.5c21.3,0,31.8-18.6,49-18.6c22.1,0,18.8,18.8,36.8,18.8c18.8,0,37.5-18.6,49-18.6c20.4,0,17.1,19,36.8,19 c22.9,0,36.8-20.6,54.7-18.6c17.7,1.4,7.1,19.5,33.5,18.8c17.1,0,47.2-6.5,61.1-15.6'], diagonal: ['M13.5,15.5c131,13.7,289.3,55.5,475,125.5'], double: ['M8.4,143.1c14.2-8,97.6-8.8,200.6-9.2c122.3-0.4,287.5,7.2,287.5,7.2', 'M8,19.4c72.3-5.3,162-7.8,216-7.8c54,0,136.2,0,267,7.8'], double_underline: ['M5,125.4c30.5-3.8,137.9-7.6,177.3-7.6c117.2,0,252.2,4.7,312.7,7.6', 'M26.9,143.8c55.1-6.1,126-6.3,162.2-6.1c46.5,0.2,203.9,3.2,268.9,6.4'], underline: ['M7.7,145.6C109,125,299.9,116.2,401,121.3c42.1,2.2,87.6,11.8,87.3,25.7'] }, getDefaultSettings() { const iterationDelay = this.getElementSettings('rotate_iteration_delay'), settings = { animationDelay: iterationDelay || 2500, // Letters effect lettersDelay: iterationDelay * 0.02 || 50, // Typing effect typeLettersDelay: iterationDelay * 0.06 || 150, selectionDuration: iterationDelay * 0.2 || 500, // Clip effect revealDuration: iterationDelay * 0.24 || 600, revealAnimationDelay: iterationDelay * 0.6 || 1500, // Highlighted headline highlightAnimationDuration: this.getElementSettings('highlight_animation_duration') || 1200, highlightAnimationDelay: this.getElementSettings('highlight_iteration_delay') || 8000 }; settings.typeAnimationDelay = settings.selectionDuration + 800; settings.selectors = { headline: '.elementor-headline', dynamicWrapper: '.elementor-headline-dynamic-wrapper', dynamicText: '.elementor-headline-dynamic-text' }; settings.classes = { dynamicText: 'elementor-headline-dynamic-text', dynamicLetter: 'elementor-headline-dynamic-letter', textActive: 'elementor-headline-text-active', textInactive: 'elementor-headline-text-inactive', letters: 'elementor-headline-letters', animationIn: 'elementor-headline-animation-in', typeSelected: 'elementor-headline-typing-selected', activateHighlight: 'e-animated', hideHighlight: 'e-hide-highlight' }; return settings; }, getDefaultElements() { var selectors = this.getSettings('selectors'); return { $headline: this.$element.find(selectors.headline), $dynamicWrapper: this.$element.find(selectors.dynamicWrapper), $dynamicText: this.$element.find(selectors.dynamicText) }; }, getNextWord($word) { return $word.is(':last-child') ? $word.parent().children().eq(0) : $word.next(); }, switchWord($oldWord, $newWord) { $oldWord.removeClass('elementor-headline-text-active').addClass('elementor-headline-text-inactive'); $newWord.removeClass('elementor-headline-text-inactive').addClass('elementor-headline-text-active'); this.setDynamicWrapperWidth($newWord); }, singleLetters() { var classes = this.getSettings('classes'); this.elements.$dynamicText.each(function () { var $word = jQuery(this), letters = $word.text().split(''), isActive = $word.hasClass(classes.textActive); $word.empty(); letters.forEach(function (letter) { var $letter = jQuery('', { class: classes.dynamicLetter }).text(letter); if (isActive) { $letter.addClass(classes.animationIn); } $word.append($letter); }); $word.css('opacity', 1); }); }, showLetter($letter, $word, bool, duration) { var self = this, classes = this.getSettings('classes'); $letter.addClass(classes.animationIn); if (!$letter.is(':last-child')) { setTimeout(function () { self.showLetter($letter.next(), $word, bool, duration); }, duration); } else if (!bool) { setTimeout(function () { self.hideWord($word); }, self.getSettings('animationDelay')); } }, hideLetter($letter, $word, bool, duration) { var self = this, settings = this.getSettings(); $letter.removeClass(settings.classes.animationIn); if (!$letter.is(':last-child')) { setTimeout(function () { self.hideLetter($letter.next(), $word, bool, duration); }, duration); } else if (bool) { setTimeout(function () { self.hideWord(self.getNextWord($word)); }, self.getSettings('animationDelay')); } }, showWord($word, $duration) { var self = this, settings = self.getSettings(), animationType = self.getElementSettings('animation_type'); if ('typing' === animationType) { self.showLetter($word.find('.' + settings.classes.dynamicLetter).eq(0), $word, false, $duration); $word.addClass(settings.classes.textActive).removeClass(settings.classes.textInactive); } else if ('clip' === animationType) { self.elements.$dynamicWrapper.animate({ width: $word.width() + 10 }, settings.revealDuration, function () { setTimeout(function () { self.hideWord($word); }, settings.revealAnimationDelay); }); } }, hideWord($word) { var self = this, settings = self.getSettings(), classes = settings.classes, letterSelector = '.' + classes.dynamicLetter; if (!this.isLoopMode && $word.is(':last-child')) { return; } var animationType = self.getElementSettings('animation_type'), nextWord = self.getNextWord($word); if ('typing' === animationType) { self.elements.$dynamicWrapper.addClass(classes.typeSelected); setTimeout(function () { self.elements.$dynamicWrapper.removeClass(classes.typeSelected); $word.addClass(settings.classes.textInactive).removeClass(classes.textActive).children(letterSelector).removeClass(classes.animationIn); }, settings.selectionDuration); setTimeout(function () { self.showWord(nextWord, settings.typeLettersDelay); }, settings.typeAnimationDelay); } else if (self.elements.$headline.hasClass(classes.letters)) { var bool = $word.children(letterSelector).length >= nextWord.children(letterSelector).length; self.hideLetter($word.find(letterSelector).eq(0), $word, bool, settings.lettersDelay); self.showLetter(nextWord.find(letterSelector).eq(0), nextWord, bool, settings.lettersDelay); self.setDynamicWrapperWidth(nextWord); } else if ('clip' === animationType) { self.elements.$dynamicWrapper.animate({ width: '2px' }, settings.revealDuration, function () { self.switchWord($word, nextWord); self.showWord(nextWord); }); } else { self.switchWord($word, nextWord); setTimeout(function () { self.hideWord(nextWord); }, settings.animationDelay); } }, setDynamicWrapperWidth($word) { const animationType = this.getElementSettings('animation_type'); if ('clip' !== animationType && 'typing' !== animationType) { this.elements.$dynamicWrapper.css('width', $word.width()); } }, animateHeadline() { var self = this, animationType = self.getElementSettings('animation_type'), $dynamicWrapper = self.elements.$dynamicWrapper; if ('clip' === animationType) { $dynamicWrapper.width($dynamicWrapper.width() + 10); } else if ('typing' !== animationType) { self.setDynamicWrapperWidth(self.elements.$dynamicText); } // Trigger animation setTimeout(function () { self.hideWord(self.elements.$dynamicText.eq(0)); }, self.getSettings('animationDelay')); }, getSvgPaths(pathName) { var pathsInfo = this.svgPaths[pathName], $paths = jQuery(); pathsInfo.forEach(function (pathInfo) { $paths = $paths.add(jQuery('', { d: pathInfo })); }); return $paths; }, addHighlight() { const elementSettings = this.getElementSettings(), $svg = jQuery('', { xmlns: 'http://www.w3.org/2000/svg', viewBox: '0 0 500 150', preserveAspectRatio: 'none' }).html(this.getSvgPaths(elementSettings.marker)); this.elements.$dynamicWrapper.append($svg[0].outerHTML); }, rotateHeadline() { var settings = this.getSettings(); // Insert for each letter of a changing word if (this.elements.$headline.hasClass(settings.classes.letters)) { this.singleLetters(); } // Initialise headline animation this.animateHeadline(); }, initHeadline() { const headlineStyle = this.getElementSettings('headline_style'); if ('rotate' === headlineStyle) { this.rotateHeadline(); } else if ('highlight' === headlineStyle) { this.addHighlight(); this.activateHighlightAnimation(); } this.deactivateScrollListener(); }, activateHighlightAnimation() { const settings = this.getSettings(), classes = settings.classes, $headline = this.elements.$headline; $headline.removeClass(classes.hideHighlight).addClass(classes.activateHighlight); if (!this.isLoopMode) { return; } setTimeout(() => { $headline.removeClass(classes.activateHighligh).addClass(classes.hideHighlight); }, settings.highlightAnimationDuration + settings.highlightAnimationDelay * .8); setTimeout(() => { this.activateHighlightAnimation(false); }, settings.highlightAnimationDuration + settings.highlightAnimationDelay); }, activateScrollListener() { const scrollBuffer = -100; this.intersectionObservers.startAnimation.observer = _scroll.default.scrollObserver({ offset: `0px 0px ${scrollBuffer}px`, callback: event => { if (event.isInViewport) { this.initHeadline(); } } }); this.intersectionObservers.startAnimation.element = this.elements.$headline[0]; this.intersectionObservers.startAnimation.observer.observe(this.intersectionObservers.startAnimation.element); }, deactivateScrollListener() { this.intersectionObservers.startAnimation.observer.unobserve(this.intersectionObservers.startAnimation.element); }, onInit() { elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); this.intersectionObservers = { startAnimation: { observer: null, element: null } }; this.isLoopMode = 'yes' === this.getElementSettings('loop'); this.activateScrollListener(); } }); exports["default"] = _default; /***/ }), /***/ "../modules/carousel/assets/js/frontend/frontend-legacy.js": /*!*****************************************************************!*\ !*** ../modules/carousel/assets/js/frontend/frontend-legacy.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _mediaCarousel = _interopRequireDefault(__webpack_require__(/*! ./handlers/media-carousel */ "../modules/carousel/assets/js/frontend/handlers/media-carousel.js")); var _testimonialCarousel = _interopRequireDefault(__webpack_require__(/*! ./handlers/testimonial-carousel */ "../modules/carousel/assets/js/frontend/handlers/testimonial-carousel.js")); class _default extends elementorModules.Module { constructor() { super(); elementorFrontend.elementsHandler.attachHandler('media-carousel', _mediaCarousel.default); elementorFrontend.elementsHandler.attachHandler('testimonial-carousel', _testimonialCarousel.default); elementorFrontend.elementsHandler.attachHandler('reviews', _testimonialCarousel.default); } } exports["default"] = _default; /***/ }), /***/ "../modules/carousel/assets/js/frontend/handlers/base.js": /*!***************************************************************!*\ !*** ../modules/carousel/assets/js/frontend/handlers/base.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class CarouselBase extends elementorModules.frontend.handlers.SwiperBase { getDefaultSettings() { return { selectors: { swiperContainer: '.elementor-main-swiper', swiperSlide: '.swiper-slide' }, slidesPerView: { widescreen: 3, desktop: 3, laptop: 3, tablet_extra: 3, tablet: 2, mobile_extra: 2, mobile: 1 } }; } getDefaultElements() { const selectors = this.getSettings('selectors'), elements = { $swiperContainer: this.$element.find(selectors.swiperContainer) }; elements.$slides = elements.$swiperContainer.find(selectors.swiperSlide); return elements; } getEffect() { return this.getElementSettings('effect'); } getDeviceSlidesPerView(device) { const slidesPerViewKey = 'slides_per_view' + ('desktop' === device ? '' : '_' + device); return Math.min(this.getSlidesCount(), +this.getElementSettings(slidesPerViewKey) || this.getSettings('slidesPerView')[device]); } getSlidesPerView(device) { if ('slide' === this.getEffect()) { return this.getDeviceSlidesPerView(device); } return 1; } getDeviceSlidesToScroll(device) { const slidesToScrollKey = 'slides_to_scroll' + ('desktop' === device ? '' : '_' + device); return Math.min(this.getSlidesCount(), +this.getElementSettings(slidesToScrollKey) || 1); } getSlidesToScroll(device) { if ('slide' === this.getEffect()) { return this.getDeviceSlidesToScroll(device); } return 1; } getSpaceBetween(device) { let propertyName = 'space_between'; if (device && 'desktop' !== device) { propertyName += '_' + device; } return this.getElementSettings(propertyName).size || 0; } getSwiperOptions() { const elementSettings = this.getElementSettings(); const swiperOptions = { grabCursor: true, initialSlide: this.getInitialSlide(), slidesPerView: this.getSlidesPerView('desktop'), slidesPerGroup: this.getSlidesToScroll('desktop'), spaceBetween: this.getSpaceBetween(), loop: 'yes' === elementSettings.loop, speed: elementSettings.speed, effect: this.getEffect(), preventClicksPropagation: false, slideToClickedSlide: true, handleElementorBreakpoints: true }; if ('yes' === elementSettings.lazyload) { swiperOptions.lazy = { loadPrevNext: true, loadPrevNextAmount: 1 }; } if (elementSettings.show_arrows) { swiperOptions.navigation = { prevEl: '.elementor-swiper-button-prev', nextEl: '.elementor-swiper-button-next' }; } if (elementSettings.pagination) { swiperOptions.pagination = { el: '.swiper-pagination', type: elementSettings.pagination, clickable: true }; } if ('cube' !== this.getEffect()) { const breakpointsSettings = {}, breakpoints = elementorFrontend.config.responsive.activeBreakpoints; Object.keys(breakpoints).forEach(breakpointName => { breakpointsSettings[breakpoints[breakpointName].value] = { slidesPerView: this.getSlidesPerView(breakpointName), slidesPerGroup: this.getSlidesToScroll(breakpointName), spaceBetween: this.getSpaceBetween(breakpointName) }; }); swiperOptions.breakpoints = breakpointsSettings; } if (!this.isEdit && elementSettings.autoplay) { swiperOptions.autoplay = { delay: elementSettings.autoplay_speed, disableOnInteraction: !!elementSettings.pause_on_interaction }; } return swiperOptions; } getDeviceBreakpointValue(device) { if (!this.breakpointsDictionary) { const breakpoints = elementorFrontend.config.responsive.activeBreakpoints; this.breakpointsDictionary = {}; Object.keys(breakpoints).forEach(breakpointName => { this.breakpointsDictionary[breakpointName] = breakpoints[breakpointName].value; }); } return this.breakpointsDictionary[device]; } updateSpaceBetween(propertyName) { const deviceMatch = propertyName.match('space_between_(.*)'), device = deviceMatch ? deviceMatch[1] : 'desktop', newSpaceBetween = this.getSpaceBetween(device); if ('desktop' !== device) { this.swiper.params.breakpoints[this.getDeviceBreakpointValue(device)].spaceBetween = newSpaceBetween; } else { this.swiper.params.spaceBetween = newSpaceBetween; } this.swiper.params.spaceBetween = newSpaceBetween; this.swiper.update(); } async onInit() { elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); if (1 >= this.getSlidesCount()) { return; } const Swiper = elementorFrontend.utils.swiper; this.swiper = await new Swiper(this.elements.$swiperContainer, this.getSwiperOptions()); const elementSettings = this.getElementSettings(); if ('yes' === elementSettings.pause_on_hover) { this.togglePauseOnHover(true); } // Expose the swiper instance in the frontend this.elements.$swiperContainer.data('swiper', this.swiper); } getChangeableProperties() { return { autoplay: 'autoplay', pause_on_hover: 'pauseOnHover', pause_on_interaction: 'disableOnInteraction', autoplay_speed: 'delay', speed: 'speed', width: 'width' }; } updateSwiperOption(propertyName) { if (0 === propertyName.indexOf('width')) { this.swiper.update(); return; } const elementSettings = this.getElementSettings(), newSettingValue = elementSettings[propertyName], changeableProperties = this.getChangeableProperties(); let propertyToUpdate = changeableProperties[propertyName], valueToUpdate = newSettingValue; // Handle special cases where the value to update is not the value that the Swiper library accepts switch (propertyName) { case 'autoplay': if (newSettingValue) { valueToUpdate = { delay: elementSettings.autoplay_speed, disableOnInteraction: 'yes' === elementSettings.pause_on_interaction }; } else { valueToUpdate = false; } break; case 'autoplay_speed': propertyToUpdate = 'autoplay'; valueToUpdate = { delay: newSettingValue, disableOnInteraction: 'yes' === elementSettings.pause_on_interaction }; break; case 'pause_on_hover': this.togglePauseOnHover('yes' === newSettingValue); break; case 'pause_on_interaction': valueToUpdate = 'yes' === newSettingValue; break; } // 'pause_on_hover' is implemented by the handler with event listeners, not the Swiper library if ('pause_on_hover' !== propertyName) { this.swiper.params[propertyToUpdate] = valueToUpdate; } this.swiper.update(); } onElementChange(propertyName) { if (1 >= this.getSlidesCount()) { return; } if (0 === propertyName.indexOf('width')) { this.swiper.update(); // If there is another thumbs slider, like in the Media Carousel widget. if (this.thumbsSwiper) { this.thumbsSwiper.update(); } return; } // This is for handling the responsive control 'space_between'. // Responsive controls require a separate way of handling, and some currently don't work // (Swiper bug, currently exists in v5.3.6) TODO: update Swiper when bug is fixed and handle responsive controls if (0 === propertyName.indexOf('space_between')) { this.updateSpaceBetween(propertyName); return; } const changeableProperties = this.getChangeableProperties(); if (Object.prototype.hasOwnProperty.call(changeableProperties, propertyName)) { this.updateSwiperOption(propertyName); } } onEditSettingsChange(propertyName) { if (1 >= this.getSlidesCount()) { return; } if ('activeItemIndex' === propertyName) { this.swiper.slideToLoop(this.getEditSettings('activeItemIndex') - 1); } } } exports["default"] = CarouselBase; /***/ }), /***/ "../modules/carousel/assets/js/frontend/handlers/media-carousel.js": /*!*************************************************************************!*\ !*** ../modules/carousel/assets/js/frontend/handlers/media-carousel.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _base = _interopRequireDefault(__webpack_require__(/*! ./base */ "../modules/carousel/assets/js/frontend/handlers/base.js")); class MediaCarousel extends _base.default { isSlideshow() { return 'slideshow' === this.getElementSettings('skin'); } getDefaultSettings() { const defaultSettings = super.getDefaultSettings(...arguments); if (this.isSlideshow()) { defaultSettings.selectors.thumbsSwiper = '.elementor-thumbnails-swiper'; defaultSettings.slidesPerView = { widescreen: 5, desktop: 5, laptop: 5, tablet_extra: 5, tablet: 4, mobile_extra: 4, mobile: 3 }; } return defaultSettings; } getSlidesPerViewSettingNames() { if (!this.slideshowElementSettings) { this.slideshowElementSettings = ['slides_per_view']; const activeBreakpoints = elementorFrontend.config.responsive.activeBreakpoints; Object.keys(activeBreakpoints).forEach(breakpointName => { this.slideshowElementSettings.push('slides_per_view_' + breakpointName); }); } return this.slideshowElementSettings; } getElementSettings(setting) { if (-1 !== this.getSlidesPerViewSettingNames().indexOf(setting) && this.isSlideshow()) { setting = 'slideshow_' + setting; } return super.getElementSettings(setting); } getDefaultElements() { const selectors = this.getSettings('selectors'), defaultElements = super.getDefaultElements(...arguments); if (this.isSlideshow()) { defaultElements.$thumbsSwiper = this.$element.find(selectors.thumbsSwiper); } return defaultElements; } getEffect() { if ('coverflow' === this.getElementSettings('skin')) { return 'coverflow'; } return super.getEffect(); } getSlidesPerView(device) { if (this.isSlideshow()) { return 1; } if ('coverflow' === this.getElementSettings('skin')) { return this.getDeviceSlidesPerView(device); } return super.getSlidesPerView(device); } getSwiperOptions() { const options = super.getSwiperOptions(); if (this.isSlideshow()) { options.loopedSlides = this.getSlidesCount(); delete options.pagination; delete options.breakpoints; } return options; } async onInit() { await super.onInit(); const slidesCount = this.getSlidesCount(); if (!this.isSlideshow() || 1 >= slidesCount) { return; } const elementSettings = this.getElementSettings(), loop = 'yes' === elementSettings.loop, breakpointsSettings = {}, breakpoints = elementorFrontend.config.responsive.activeBreakpoints, desktopSlidesPerView = this.getDeviceSlidesPerView('desktop'); Object.keys(breakpoints).forEach(breakpointName => { breakpointsSettings[breakpoints[breakpointName].value] = { slidesPerView: this.getDeviceSlidesPerView(breakpointName), spaceBetween: this.getSpaceBetween(breakpointName) }; }); const thumbsSliderOptions = { slidesPerView: desktopSlidesPerView, initialSlide: this.getInitialSlide(), centeredSlides: elementSettings.centered_slides, slideToClickedSlide: true, spaceBetween: this.getSpaceBetween(), loopedSlides: slidesCount, loop, breakpoints: breakpointsSettings, handleElementorBreakpoints: true }; if ('yes' === elementSettings.lazyload) { thumbsSliderOptions.lazy = { loadPrevNext: true, loadPrevNextAmount: 1 }; } const Swiper = elementorFrontend.utils.swiper; this.swiper.controller.control = this.thumbsSwiper = await new Swiper(this.elements.$thumbsSwiper, thumbsSliderOptions); // Expose the swiper instance in the frontend this.elements.$thumbsSwiper.data('swiper', this.thumbsSwiper); this.thumbsSwiper.controller.control = this.swiper; } } exports["default"] = MediaCarousel; /***/ }), /***/ "../modules/carousel/assets/js/frontend/handlers/testimonial-carousel.js": /*!*******************************************************************************!*\ !*** ../modules/carousel/assets/js/frontend/handlers/testimonial-carousel.js ***! \*******************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _base = _interopRequireDefault(__webpack_require__(/*! ./base */ "../modules/carousel/assets/js/frontend/handlers/base.js")); class TestimonialCarousel extends _base.default { getDefaultSettings() { const defaultSettings = super.getDefaultSettings(); defaultSettings.slidesPerView = { desktop: 1 }; Object.keys(elementorFrontend.config.responsive.activeBreakpoints).forEach(breakpointName => { defaultSettings.slidesPerView[breakpointName] = 1; }); if (defaultSettings.loop) { defaultSettings.loopedSlides = this.getSlidesCount(); } return defaultSettings; } getEffect() { return 'slide'; } } exports["default"] = TestimonialCarousel; /***/ }), /***/ "../modules/countdown/assets/js/frontend/frontend-legacy.js": /*!******************************************************************!*\ !*** ../modules/countdown/assets/js/frontend/frontend-legacy.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _countdown = _interopRequireDefault(__webpack_require__(/*! ./handlers/countdown */ "../modules/countdown/assets/js/frontend/handlers/countdown.js")); class _default extends elementorModules.Module { constructor() { super(); elementorFrontend.elementsHandler.attachHandler('countdown', _countdown.default); } } exports["default"] = _default; /***/ }), /***/ "../modules/countdown/assets/js/frontend/handlers/countdown.js": /*!*********************************************************************!*\ !*** ../modules/countdown/assets/js/frontend/handlers/countdown.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _default = elementorModules.frontend.handlers.Base.extend({ cache: null, cacheElements() { const $countDown = this.$element.find('.elementor-countdown-wrapper'); this.cache = { $countDown, timeInterval: null, elements: { $countdown: $countDown.find('.elementor-countdown-wrapper'), $daysSpan: $countDown.find('.elementor-countdown-days'), $hoursSpan: $countDown.find('.elementor-countdown-hours'), $minutesSpan: $countDown.find('.elementor-countdown-minutes'), $secondsSpan: $countDown.find('.elementor-countdown-seconds'), $expireMessage: $countDown.parent().find('.elementor-countdown-expire--message') }, data: { id: this.$element.data('id'), endTime: new Date($countDown.data('date') * 1000), actions: $countDown.data('expire-actions'), evergreenInterval: $countDown.data('evergreen-interval') } }; }, onInit() { elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments); this.cacheElements(); if (0 < this.cache.data.evergreenInterval) { this.cache.data.endTime = this.getEvergreenDate(); } this.initializeClock(); }, updateClock() { const self = this, timeRemaining = this.getTimeRemaining(this.cache.data.endTime); jQuery.each(timeRemaining.parts, function (timePart) { const $element = self.cache.elements['$' + timePart + 'Span']; let partValue = this.toString(); if (1 === partValue.length) { partValue = 0 + partValue; } if ($element.length) { $element.text(partValue); } }); if (timeRemaining.total <= 0) { clearInterval(this.cache.timeInterval); this.runActions(); } }, initializeClock() { const self = this; this.updateClock(); this.cache.timeInterval = setInterval(function () { self.updateClock(); }, 1000); }, runActions() { const self = this; // Trigger general event for 3rd patry actions self.$element.trigger('countdown_expire', self.$element); if (!this.cache.data.actions) { return; } this.cache.data.actions.forEach(function (action) { switch (action.type) { case 'hide': self.cache.$countDown.hide(); break; case 'redirect': if (action.redirect_url) { window.location.href = action.redirect_url; } break; case 'message': self.cache.elements.$expireMessage.show(); break; } }); }, getTimeRemaining(endTime) { const timeRemaining = endTime - new Date(); let seconds = Math.floor(timeRemaining / 1000 % 60), minutes = Math.floor(timeRemaining / 1000 / 60 % 60), hours = Math.floor(timeRemaining / (1000 * 60 * 60) % 24), days = Math.floor(timeRemaining / (1000 * 60 * 60 * 24)); if (days < 0 || hours < 0 || minutes < 0) { seconds = minutes = hours = days = 0; } return { total: timeRemaining, parts: { days, hours, minutes, seconds } }; }, getEvergreenDate() { const self = this, id = this.cache.data.id, interval = this.cache.data.evergreenInterval, dueDateKey = id + '-evergreen_due_date', intervalKey = id + '-evergreen_interval', localData = { dueDate: localStorage.getItem(dueDateKey), interval: localStorage.getItem(intervalKey) }, initEvergreen = function () { var evergreenDueDate = new Date(); self.cache.data.endTime = evergreenDueDate.setSeconds(evergreenDueDate.getSeconds() + interval); localStorage.setItem(dueDateKey, self.cache.data.endTime); localStorage.setItem(intervalKey, interval); return self.cache.data.endTime; }; if (null === localData.dueDate && null === localData.interval) { return initEvergreen(); } if (null !== localData.dueDate && interval !== parseInt(localData.interval, 10)) { return initEvergreen(); } if (localData.dueDate > 0 && parseInt(localData.interval, 10) === interval) { return localData.dueDate; } } }); exports["default"] = _default; /***/ }), /***/ "../modules/forms/assets/js/frontend/frontend-legacy.js": /*!**************************************************************!*\ !*** ../modules/forms/assets/js/frontend/frontend-legacy.js ***! \**************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _formSteps = _interopRequireDefault(__webpack_require__(/*! ./handlers/form-steps */ "../modules/forms/assets/js/frontend/handlers/form-steps.js")); var _formSender = _interopRequireDefault(__webpack_require__(/*! ./handlers/form-sender */ "../modules/forms/assets/js/frontend/handlers/form-sender.js")); var _formRedirect = _interopRequireDefault(__webpack_require__(/*! ./handlers/form-redirect */ "../modules/forms/assets/js/frontend/handlers/form-redirect.js")); var _recaptcha = _interopRequireDefault(__webpack_require__(/*! ./handlers/recaptcha */ "../modules/forms/assets/js/frontend/handlers/recaptcha.js")); var _date = _interopRequireDefault(__webpack_require__(/*! ./handlers/fields/date */ "../modules/forms/assets/js/frontend/handlers/fields/date.js")); var _time = _interopRequireDefault(__webpack_require__(/*! ./handlers/fields/time */ "../modules/forms/assets/js/frontend/handlers/fields/time.js")); class _default extends elementorModules.Module { constructor() { super(); const formHandlers = [_formSteps.default, _formSender.default, _formRedirect.default]; elementorFrontend.elementsHandler.attachHandler('form', [...formHandlers, _recaptcha.default, _date.default, _time.default]); elementorFrontend.elementsHandler.attachHandler('subscribe', formHandlers); } } exports["default"] = _default; /***/ }), /***/ "../modules/forms/assets/js/frontend/handlers/fields/data-time-field-base.js": /*!***********************************************************************************!*\ !*** ../modules/forms/assets/js/frontend/handlers/fields/data-time-field-base.js ***! \***********************************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class DataTimeFieldBase extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { fields: this.getFieldsSelector() }, classes: { useNative: 'elementor-use-native' } }; } getDefaultElements() { const { selectors } = this.getDefaultSettings(); return { $fields: this.$element.find(selectors.fields) }; } addPicker(element) { const { classes } = this.getDefaultSettings(), $element = jQuery(element); if ($element.hasClass(classes.useNative)) { return; } element.flatpickr(this.getPickerOptions(element)); } onInit() { super.onInit(...arguments); this.elements.$fields.each((index, element) => this.addPicker(element)); } } exports["default"] = DataTimeFieldBase; /***/ }), /***/ "../modules/forms/assets/js/frontend/handlers/fields/date.js": /*!*******************************************************************!*\ !*** ../modules/forms/assets/js/frontend/handlers/fields/date.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _dataTimeFieldBase = _interopRequireDefault(__webpack_require__(/*! ./data-time-field-base */ "../modules/forms/assets/js/frontend/handlers/fields/data-time-field-base.js")); class DateField extends _dataTimeFieldBase.default { getFieldsSelector() { return '.elementor-date-field'; } getPickerOptions(element) { const $element = jQuery(element); return { minDate: $element.attr('min') || null, maxDate: $element.attr('max') || null, allowInput: true }; } } exports["default"] = DateField; /***/ }), /***/ "../modules/forms/assets/js/frontend/handlers/fields/time.js": /*!*******************************************************************!*\ !*** ../modules/forms/assets/js/frontend/handlers/fields/time.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _dataTimeFieldBase = _interopRequireDefault(__webpack_require__(/*! ./data-time-field-base */ "../modules/forms/assets/js/frontend/handlers/fields/data-time-field-base.js")); class TimeField extends _dataTimeFieldBase.default { getFieldsSelector() { return '.elementor-time-field'; } getPickerOptions() { return { noCalendar: true, enableTime: true, allowInput: true }; } } exports["default"] = TimeField; /***/ }), /***/ "../modules/forms/assets/js/frontend/handlers/form-redirect.js": /*!*********************************************************************!*\ !*** ../modules/forms/assets/js/frontend/handlers/form-redirect.js ***! \*********************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _default = elementorModules.frontend.handlers.Base.extend({ getDefaultSettings() { return { selectors: { form: '.elementor-form' } }; }, getDefaultElements() { var selectors = this.getSettings('selectors'), elements = {}; elements.$form = this.$element.find(selectors.form); return elements; }, bindEvents() { this.elements.$form.on('form_destruct', this.handleSubmit); }, handleSubmit(event, response) { if ('undefined' !== typeof response.data.redirect_url) { location.href = response.data.redirect_url; } } }); exports["default"] = _default; /***/ }), /***/ "../modules/forms/assets/js/frontend/handlers/form-sender.js": /*!*******************************************************************!*\ !*** ../modules/forms/assets/js/frontend/handlers/form-sender.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _default = elementorModules.frontend.handlers.Base.extend({ getDefaultSettings() { return { selectors: { form: '.elementor-form', submitButton: '[type="submit"]' }, action: 'elementor_pro_forms_send_form', ajaxUrl: elementorProFrontend.config.ajaxurl }; }, getDefaultElements() { const selectors = this.getSettings('selectors'), elements = {}; elements.$form = this.$element.find(selectors.form); elements.$submitButton = elements.$form.find(selectors.submitButton); return elements; }, bindEvents() { this.elements.$form.on('submit', this.handleSubmit); const $fileInput = this.elements.$form.find('input[type=file]'); if ($fileInput.length) { $fileInput.on('change', this.validateFileSize); } }, validateFileSize(event) { const $field = jQuery(event.currentTarget), files = $field[0].files; if (!files.length) { return; } const maxSize = parseInt($field.attr('data-maxsize')) * 1024 * 1024, maxSizeMessage = $field.attr('data-maxsize-message'); const filesArray = Array.prototype.slice.call(files); filesArray.forEach(file => { if (maxSize < file.size) { $field.parent().addClass('elementor-error').append('' + maxSizeMessage + '').find(':input').attr('aria-invalid', 'true'); this.elements.$form.trigger('error'); } }); }, beforeSend() { const $form = this.elements.$form; $form.animate({ opacity: '0.45' }, 500).addClass('elementor-form-waiting'); $form.find('.elementor-message').remove(); $form.find('.elementor-error').removeClass('elementor-error'); $form.find('div.elementor-field-group').removeClass('error').find('span.elementor-form-help-inline').remove().end().find(':input').attr('aria-invalid', 'false'); this.elements.$submitButton.attr('disabled', 'disabled').find('> span').prepend(' '); }, getFormData() { const formData = new FormData(this.elements.$form[0]); formData.append('action', this.getSettings('action')); formData.append('referrer', location.toString()); return formData; }, onSuccess(response) { const $form = this.elements.$form; this.elements.$submitButton.removeAttr('disabled').find('.elementor-form-spinner').remove(); $form.animate({ opacity: '1' }, 100).removeClass('elementor-form-waiting'); if (!response.success) { if (response.data.errors) { jQuery.each(response.data.errors, function (key, title) { $form.find('#form-field-' + key).parent().addClass('elementor-error').append('' + title + '').find(':input').attr('aria-invalid', 'true'); }); $form.trigger('error'); } $form.append(''); } else { $form.trigger('submit_success', response.data); // For actions like redirect page $form.trigger('form_destruct', response.data); $form.trigger('reset'); if ('undefined' !== typeof response.data.message && '' !== response.data.message) { $form.append(''); } } }, onError(xhr, desc) { const $form = this.elements.$form; $form.append(''); this.elements.$submitButton.html(this.elements.$submitButton.text()).removeAttr('disabled'); $form.animate({ opacity: '1' }, 100).removeClass('elementor-form-waiting'); $form.trigger('error'); }, handleSubmit(event) { const self = this, $form = this.elements.$form; event.preventDefault(); if ($form.hasClass('elementor-form-waiting')) { return false; } this.beforeSend(); jQuery.ajax({ url: self.getSettings('ajaxUrl'), type: 'POST', dataType: 'json', data: self.getFormData(), processData: false, contentType: false, success: self.onSuccess, error: self.onError }); } }); exports["default"] = _default; /***/ }), /***/ "../modules/forms/assets/js/frontend/handlers/form-steps.js": /*!******************************************************************!*\ !*** ../modules/forms/assets/js/frontend/handlers/form-steps.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class FormSteps extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { form: '.elementor-form', fieldsWrapper: '.elementor-form-fields-wrapper', fieldGroup: '.elementor-field-group', stepWrapper: '.elementor-field-type-step', stepField: '.e-field-step', submitWrapper: '.elementor-field-type-submit', submitButton: '[type="submit"]', buttons: '.e-form__buttons', buttonWrapper: '.e-form__buttons__wrapper', button: '.e-form__buttons__wrapper__button', indicator: '.e-form__indicators__indicator', indicatorProgress: '.e-form__indicators__indicator__progress', indicatorProgressMeter: '.e-form__indicators__indicator__progress__meter', formHelpInline: '.elementor-form-help-inline' }, classes: { hidden: 'elementor-hidden', column: 'elementor-column', fieldGroup: 'elementor-field-group', elementorButton: 'elementor-button', step: 'e-form__step', buttons: 'e-form__buttons', buttonWrapper: 'e-form__buttons__wrapper', button: 'e-form__buttons__wrapper__button', indicators: 'e-form__indicators', indicator: 'e-form__indicators__indicator', indicatorIcon: 'e-form__indicators__indicator__icon', indicatorNumber: 'e-form__indicators__indicator__number', indicatorLabel: 'e-form__indicators__indicator__label', indicatorProgress: 'e-form__indicators__indicator__progress', indicatorProgressMeter: 'e-form__indicators__indicator__progress__meter', indicatorSeparator: 'e-form__indicators__indicator__separator', indicatorInactive: 'e-form__indicators__indicator--state-inactive', indicatorActive: 'e-form__indicators__indicator--state-active', indicatorCompleted: 'e-form__indicators__indicator--state-completed', indicatorShapeCircle: 'e-form__indicators__indicator--shape-circle', indicatorShapeSquare: 'e-form__indicators__indicator--shape-square', indicatorShapeRounded: 'e-form__indicators__indicator--shape-rounded', indicatorShapeNone: 'e-form__indicators__indicator--shape-none' } }; } getDefaultElements() { const { selectors } = this.getSettings(), elements = { $form: this.$element.find(selectors.form) }; elements.$fieldsWrapper = elements.$form.children(selectors.fieldsWrapper); elements.$stepWrapper = elements.$fieldsWrapper.children(selectors.stepWrapper); elements.$stepField = elements.$stepWrapper.children(selectors.stepField); elements.$fieldGroup = elements.$fieldsWrapper.children(selectors.fieldGroup); elements.$submitWrapper = elements.$fieldsWrapper.children(selectors.submitWrapper); elements.$submitButton = elements.$submitWrapper.children(selectors.submitButton); return elements; } onInit() { super.onInit(...arguments); if (!this.isStepsExist()) { return; } this.data = { steps: [], indicatorsWithObjectTags: [] }; this.state = { currentStep: 0, stepsType: '', stepsShape: '' }; this.buildSteps(); this.elements = { ...this.elements, ...this.createStepsIndicators(), ...this.createStepsButtons() }; this.initProgressBar(); this.extractResponsiveSizeFromSubmitWrapper(); } bindEvents() { if (!this.isStepsExist()) { return; } this.elements.$form.on({ submit: () => this.resetForm(), keydown: e => { if (13 === e.keyCode && !this.isLastStep() && 'textarea' !== e.target.localName) { e.preventDefault(); this.applyStep('next'); } }, error: () => this.onFormError() }); } isStepsExist() { return this.elements.$stepWrapper.length; } initProgressBar() { const stepsSettings = this.getElementSettings(); if ('progress_bar' === stepsSettings.step_type) { this.setProgressBar(); } } buildSteps() { this.elements.$stepWrapper.each((index, el) => { const { selectors, classes } = this.getSettings(), $currentStep = jQuery(el); $currentStep.addClass(classes.step).removeClass(classes.fieldGroup, classes.column); if (index) { $currentStep.addClass(classes.hidden); } this.setStepData($currentStep.children(selectors.stepField)); $currentStep.append($currentStep.nextUntil(this.elements.$stepWrapper).not(this.elements.$submitWrapper)); }); } setStepData($stepElement) { const dataAttributes = ['label', 'previousButton', 'nextButton', 'iconUrl', 'iconLibrary', 'icon'], stepData = {}; dataAttributes.forEach(attr => { const attrValue = $stepElement.attr('data-' + attr); if (attrValue) { stepData[attr] = attrValue; } }); this.data.steps.push(stepData); } createStepsIndicators() { const stepsSettings = this.getElementSettings(), stepsElements = {}; if ('none' !== stepsSettings.step_type) { const { selectors, classes } = this.getSettings(), indicatorsTypeClass = classes.indicators + '--type-' + stepsSettings.step_type, indicatorsClasses = [classes.indicators, indicatorsTypeClass]; stepsElements.$indicatorsWrapper = jQuery('
', { class: indicatorsClasses.join(' ') }); stepsElements.$indicatorsWrapper.append(this.buildIndicators()); this.elements.$fieldsWrapper.before(stepsElements.$indicatorsWrapper); if ('progress_bar' === stepsSettings.step_type) { stepsElements.$progressBar = stepsElements.$indicatorsWrapper.find(selectors.indicatorProgress); stepsElements.$progressBarMeter = stepsElements.$indicatorsWrapper.find(selectors.indicatorProgressMeter); } else { stepsElements.$indicators = stepsElements.$indicatorsWrapper.find(selectors.indicator); stepsElements.$currentIndicator = stepsElements.$indicators.eq(this.state.currentStep); } } this.saveIndicatorsState(); return stepsElements; } buildIndicators() { const stepsSettings = this.getElementSettings(); return 'progress_bar' === stepsSettings.step_type ? this.buildProgressBar() : this.buildIndicatorsFromStepsData(); } buildProgressBar() { const { classes } = this.getSettings(), $progressBar = jQuery('
', { class: classes.indicatorProgress }), $progressBarMeter = jQuery('
', { class: classes.indicatorProgressMeter }); $progressBar.append($progressBarMeter); return $progressBar; } getProgressBarValue() { const totalSteps = this.data.steps.length, currentStep = this.state.currentStep, percentage = currentStep ? (currentStep + 1) / totalSteps * 100 : 100 / totalSteps; return Math.floor(percentage) + '%'; } setProgressBar() { const progressBarValue = this.getProgressBarValue(); this.updateProgressMeterCSSVariable(progressBarValue); this.elements.$progressBarMeter.text(progressBarValue); } updateProgressMeterCSSVariable(value) { this.$element[0].style.setProperty('--e-form-steps-indicator-progress-meter-width', value); } saveIndicatorsState() { const stepsSettings = this.getElementSettings(); this.state.stepsType = stepsSettings.step_type; if (!['none', 'text', 'progress_bar'].includes(stepsSettings.step_type)) { this.state.stepsShape = stepsSettings.step_icon_shape; } } buildIndicatorsFromStepsData() { const indicators = []; this.data.steps.forEach((stepObj, index) => { if (index) { indicators.push(this.getStepSeparator()); } indicators.push(this.getStepIndicatorElement(stepObj, index)); }); return indicators; } getStepIndicatorElement(stepObj, index) { const { classes } = this.getSettings(), stepsSettings = this.getElementSettings(), indicatorStateClass = this.getIndicatorStateClass(index), indicatorClasses = [classes.indicator, indicatorStateClass], $stepIndicator = jQuery('
', { class: indicatorClasses.join(' ') }); if (stepsSettings.step_type.includes('icon')) { $stepIndicator.append(this.getStepIconElement(stepObj)); } if (stepsSettings.step_type.includes('number')) { $stepIndicator.append(this.getStepNumberElement(index)); } if (stepsSettings.step_type.includes('text')) { $stepIndicator.append(this.getStepLabelElement(stepObj.label)); } return $stepIndicator; } getIndicatorStateClass(index) { const { classes } = this.getSettings(); if (index < this.state.currentStep) { return classes.indicatorCompleted; } else if (index > this.state.currentStep) { return classes.indicatorInactive; } return classes.indicatorActive; } getIndicatorShapeClass() { const stepsSettings = this.getElementSettings(), { classes } = this.getSettings(); return classes['indicatorShape' + this.firstLetterToUppercase(stepsSettings.step_icon_shape)]; } firstLetterToUppercase(str) { return str.charAt(0).toUpperCase() + str.slice(1); } getStepNumberElement(index) { const { classes } = this.getSettings(), numberClasses = [classes.indicatorNumber, this.getIndicatorShapeClass()]; return jQuery('
', { class: numberClasses.join(' '), text: index + 1 }); } getStepIconElement(stepObj) { const { classes } = this.getSettings(), iconClasses = [classes.indicatorIcon, this.getIndicatorShapeClass()], $icon = jQuery('
', { class: iconClasses.join(' ') }); if (stepObj.icon) { $icon.html(stepObj.icon); } else { let $iconElement; if (stepObj.iconLibrary) { $iconElement = jQuery('', { class: stepObj.iconLibrary }); } else { // Using the attributes inline when creating the object, otherwise the data attribute will not work. $iconElement = jQuery(``); // Updating an indicator svg fill color, when loaded inside an object tag with a separated scope. $iconElement.on('load', event => { event.target.contentDocument.querySelector('svg').style.fill = $iconElement.css('fill'); }); // Storing the indicators elements that contain object tags in order to change their fill color on steps change. this.data.indicatorsWithObjectTags.push($iconElement); } $icon.append($iconElement); } return $icon; } getStepLabelElement(label) { const { classes } = this.getSettings(); return jQuery('

Ενδιαφέρουσες επιλογές και https://pistoloscasino-greece.com για απαιτητικούς παίκτες σε όλη την Ελλάδα

Ενδιαφέρουσες επιλογές και https://pistoloscasino-greece.com για απαιτητικούς παίκτες σε όλη την Ελλάδα

Στον κόσμο των διαδικτυακών καζίνο, η επιλογή της πλατφόρμας μπορεί να είναι μια δύσκολη απόφαση. Η ανάγκη για ασφάλεια, αξιοπιστία και ποικιλία παιχνιδιών είναι υψίστης σημασίας για κάθε παίκτη. Μια πλατφόρμα που ξεχωρίζει και προσφέρει μια μοναδική εμπειρία είναι η https://pistoloscasino-greece.com, η οποία απευθύνεται σε απαιτητικούς παίκτες σε όλη την Ελλάδα. Προσφέρει μια ευρεία γκάμα παιχνιδιών, ασφαλείς συναλλαγές και άριστη εξυπηρέτηση πελατών.

Η δημοτικότητα των διαδικτυακών καζίνο αυξάνεται ραγδαία, με πολλούς παίκτες να αναζητούν την άνεση και την ευκολία του παιχνιδιού από το σπίτι τους. Ωστόσο, είναι σημαντικό να επιλέξετε μια πλατφόρμα που να είναι αδειοδοτημένη και να λειτουργεί νόμιμα. Αυτό διασφαλίζει την ασφάλεια των προσωπικών σας δεδομένων και των χρημάτων σας. Επιπλέον, μια ποιοτική πλατφόρμα θα προσφέρει μια ποικιλία μεθόδων πληρωμής και γρήγορες αναλήψεις χρημάτων.

Κατανόηση των Διαφόρων Τύπων Παιχνιδιών Καζίνο

Στον κόσμο των διαδικτυακών καζίνο, υπάρχει μια τεράστια ποικιλία παιχνιδιών για να επιλέξετε, καθένα με τους δικούς του μοναδικούς κανόνες και στρατηγικές. Τα φρουτοαυτόματα, για παράδειγμα, είναι δημοφιλή λόγω της απλότητάς τους και της δυνατότητας για μεγάλα κέρδη. Υπάρχουν κλασικά φρουτοαυτόματα με τρεις κυλίνδρους, αλλά και πιο σύγχρονα βιντεοφρουτοαυτόματα με πολλές γραμμές πληρωμής και ειδικά χαρακτηριστικά. Για τους λάτρεις των επιτραπέζιων παιχνιδιών, το blackjack, η ρουλέτα και το πόκερ είναι πάντα δημοφιλείς επιλογές. Αυτά τα παιχνίδια απαιτούν περισσότερη στρατηγική και δεξιότητα, και προσφέρουν μια πιο απαιτητική εμπειρία.

Στρατηγικές για την Επιλογή του Κατάλληλου Παιχνιδιού

Η επιλογή του κατάλληλου παιχνιδιού καζίνο εξαρτάται από τις προσωπικές σας προτιμήσεις και το επίπεδο κινδύνου που είστε διατεθειμένοι να αναλάβετε. Εάν είστε αρχάριος, είναι καλύτερο να ξεκινήσετε με απλά παιχνίδια, όπως τα φρουτοαυτόματα, και να μάθετε τους βασικούς κανόνες. Εάν είστε πιο έμπειρος παίκτης, μπορείτε να δοκιμάσετε πιο σύνθετα παιχνίδια, όπως το blackjack ή το πόκερ, όπου μπορείτε να χρησιμοποιήσετε στρατηγικές για να αυξήσετε τις πιθανότητές σας να κερδίσετε. Είναι επίσης σημαντικό να ορίσετε ένα προϋπολογισμό και να μην τον υπερβείτε, καθώς και να γνωρίζετε πότε να σταματήσετε.

Παιχνίδι Πλεονεκτήματα Μειονεκτήματα Επίπεδο Δυσκολίας
Φρουτοαυτόματα Απλότητα, γρήγορο παιχνίδι, δυνατότητα μεγάλων κερδών Μεγάλη τύχη, μικρότερος έλεγχος Χαμηλό
Blackjack Στρατηγικό παιχνίδι, καλές πιθανότητες κέρδους Απαιτεί γνώση των κανόνων και στρατηγικής Μέτριο
Ρουλέτα Εύκολο στην κατανόηση, ποικιλία στοιχημάτων Υψηλό πλεονέκτημα του καζίνο Χαμηλό
Πόκερ Απαιτεί δεξιότητα, στρατηγική και ψυχολογία Υψηλός ανταγωνισμός, απαιτεί χρόνο για να μάθετε Υψηλό

Η επιλογή του κατάλληλου παιχνιδιού είναι το πρώτο βήμα για μια επιτυχημένη εμπειρία στο καζίνο. Με την κατάλληλη γνώση και στρατηγική, μπορείτε να αυξήσετε τις πιθανότητές σας να κερδίσετε και να απολαύσετε το παιχνίδι.

Οι Πρωτοποριακές Προσφορές και Μπόνους

Τα διαδικτυακά καζίνο προσφέρουν συνήθως μια ποικιλία προσφορών και μπόνους για να προσελκύσουν νέους παίκτες και να διατηρήσουν τους υπάρχοντες. Αυτά τα μπόνους μπορεί να περιλαμβάνουν μπόνους καλωσορίσματος, δωρεάν περιστροφές, μπόνους επαναφόρτισης και προγράμματα αφοσίωσης. Είναι σημαντικό να διαβάσετε προσεκτικά τους όρους και τις προϋποθέσεις κάθε μπόνους πριν το διεκδικήσετε, καθώς συνήθως υπάρχουν απαιτήσεις στοιχηματισμού που πρέπει να πληροίτε πριν μπορέσετε να αποσύρετε τα κέρδη σας. Η https://pistoloscasino-greece.com φημίζεται για τις γενναιόδωρες προσφορές της, οι οποίες καθιστούν την εμπειρία παιχνιδιού ακόμα πιο συναρπαστική.

Η Σημασία των Απαιτήσεων Στοιχηματισμού

Οι απαιτήσεις στοιχηματισμού αναφέρονται στο ποσό των χρημάτων που πρέπει να στοιχηματίσετε πριν μπορέσετε να αποσύρετε τα κέρδη σας από ένα μπόνους. Για παράδειγμα, εάν λάβετε ένα μπόνους 100€ με απαίτηση στοιχηματισμού 30x, θα πρέπει να στοιχηματίσετε 3000€ (100€ x 30) πριν μπορέσετε να αποσύρετε τα κέρδη σας. Είναι σημαντικό να υπολογίσετε τις απαιτήσεις στοιχηματισμού πριν διεκδικήσετε ένα μπόνους, ώστε να βεβαιωθείτε ότι είναι εφικτό να τις πληροίτε.

  • Μπόνους καλωσορίσματος: Προσφέρεται στους νέους παίκτες κατά την πρώτη τους κατάθεση.
  • Δωρεάν περιστροφές: Επιτρέπουν στους παίκτες να παίξουν σε φρουτοαυτόματα χωρίς να ξοδέψουν τα δικά τους χρήματα.
  • Μπόνους επαναφόρτισης: Προσφέρεται στους υπάρχοντες παίκτες όταν πραγματοποιούν μια νέα κατάθεση.
  • Πρόγραμμα αφοσίωσης: Επιβραβεύει τους παίκτες για τη συνεχή τους δραστηριότητα στην πλατφόρμα.

Η αξιοποίηση των προσφορών και των μπόνους μπορεί να αυξήσει σημαντικά τις πιθανότητές σας να κερδίσετε, αλλά είναι σημαντικό να είστε προσεκτικοί και να διαβάζετε προσεκτικά τους όρους και τις προϋποθέσεις.

Ασφάλεια και Αδειοδότηση: Εξασφαλίζοντας ένα Ασφαλές Περιβάλλον Παιχνιδιού

Η ασφάλεια είναι υψίστης σημασίας όταν παίζετε σε ένα διαδικτυακό καζίνο. Είναι σημαντικό να επιλέξετε μια πλατφόρμα που να είναι αδειοδοτημένη και να ρυθμίζεται από μια αξιόπιστη αρχή. Αυτό διασφαλίζει ότι η πλατφόρμα λειτουργεί νόμιμα και ότι τα παιχνίδια είναι δίκαια. Επιπλέον, ένα ασφαλές καζίνο θα χρησιμοποιεί τεχνολογία κρυπτογράφησης για να προστατεύσει τα προσωπικά σας δεδομένα και τις οικονομικές σας συναλλαγές. Η https://pistoloscasino-greece.com δίνει μεγάλη έμφαση στην ασφάλεια των παικτών της και χρησιμοποιεί τα πιο σύγχρονα μέτρα προστασίας.

Πώς να Αναγνωρίσετε ένα Αξιόπιστο Καζίνο

Για να αναγνωρίσετε ένα αξιόπιστο καζίνο, αναζητήστε τις ακόλουθες ενδείξεις: άδεια από μια αξιόπιστη αρχή, τεχνολογία κρυπτογράφησης SSL, θετικές κριτικές από άλλους παίκτες, μια ποικιλία μεθόδων πληρωμής και γρήγορες αναλήψεις χρημάτων. Επίσης, ελέγξτε εάν το καζίνο προσφέρει υπεύθυνο παιχνίδι και εργαλεία για τον αυτοπεριορισμό.

  1. Ελέγξτε την άδεια του καζίνο.
  2. Βεβαιωθείτε ότι το καζίνο χρησιμοποιεί τεχνολογία κρυπτογράφησης SSL.
  3. Διαβάστε κριτικές από άλλους παίκτες.
  4. Ελέγξτε τις μεθόδους πληρωμής και τις αναλήψεις.
  5. Ελέγξτε τις πολιτικές υπεύθυνου παιχνιδιού.

Η επιλογή ενός αξιόπιστου καζίνο είναι το κλειδί για μια ασφαλή και ευχάριστη εμπειρία παιχνιδιού.

Εξυπηρέτηση Πελατών και Υποστήριξη

Μια άριστη εξυπηρέτηση πελατών είναι απαραίτητη για κάθε διαδικτυακό καζίνο. Όταν αντιμετωπίζετε ένα πρόβλημα ή έχετε μια ερώτηση, θέλετε να είστε σίγουροι ότι μπορείτε να λάβετε βοήθεια γρήγορα και αποτελεσματικά. Ένα καλό καζίνο θα προσφέρει μια ποικιλία επιλογών υποστήριξης, όπως ζωντανή συνομιλία, email και τηλέφωνο. Η https://pistoloscasino-greece.com διαθέτει μια εξαιρετική ομάδα υποστήριξης πελατών που είναι διαθέσιμη 24/7 για να βοηθήσει τους παίκτες της.

Η γρήγορη και αποτελεσματική εξυπηρέτηση πελατών είναι ένδειξη μιας αξιόπιστης πλατφόρμας που εκτιμά τους παίκτες της. Μια φιλική και εξυπηρετική ομάδα υποστήριξης μπορεί να κάνει τη διαφορά στην εμπειρία σας.

Εξελίξεις στην Τεχνολογία των Διαδικτυακών Καζίνο

Η τεχνολογία έχει φέρει επανάσταση στον κόσμο των διαδικτυακών καζίνο, με νέες καινοτομίες να εμφανίζονται συνεχώς. Η ζωντανή κλήρωση, για παράδειγμα, προσφέρει μια ρεαλιστική εμπειρία καζίνο από την άνεση του σπιτιού σας. Η εικονική πραγματικότητα (VR) και η επαυξημένη πραγματικότητα (AR) υπόσχονται να βελτιώσουν ακόμα περισσότερο την εμπειρία παιχνιδιού, προσφέροντας στους παίκτες μια πιο καθηλωτική και διαδραστική εμπειρία. Η χρήση της τεχνητής νοημοσύνης (AI) βοηθά επίσης στην εξατομίκευση της εμπειρίας παιχνιδιού και στην πρόληψη της απάτης.

Οι τεχνολογικές εξελίξεις συνεχίζουν να διαμορφώνουν το μέλλον των διαδικτυακών καζίνο, προσφέροντας στους παίκτες νέες και συναρπαστικές εμπειρίες παιχνιδιού. Η προσαρμογή στις νέες τεχνολογίες είναι ζωτικής σημασίας για τις πλατφόρμες που θέλουν να παραμείνουν ανταγωνιστικές στην αγορά.

شرکت تولیدی دالینکوه پارسه

شرکت دانش بنیان صنعتی دالینکوه پارسه فعالیت خود را در سال 1394 با طراحی و ساخت قطعات صنعتی آغاز نمود. این شرکت با تکیه بر تجارب به دست آمده در این سال ها و دیدگاه حل مسئله در صنعت کشور با استفاده از ماشین آلات روزآمد و متخصصین توانمند اقدام به تولید نوع خاصی از دوزینگ پمپ، گیربکس های صنعتی و شیرآلات صنعتی برای صنایع مختلف می نماید.

تماس با ما

آدرس : سپیدان، کیلومتر 40 جاده شیراز-سپیدان، جاده هرایجان، شرکت دالینکوه پارسه

تلفن شرکت: 07132193216

کدپستی: 

فکس: 07132272697

ایمیل: info[@]dalinco[.]com

ایمیل: marketing[@]dalinco[.]com

آدرس : شیراز، خیابان ارم، کوچه22، پلاک 249

تلفن شرکت: 07132193216

کدپستی: 7143746448

فکس: 07132272697

ایمیل: info[@]dalinco[.]com

ایمیل: marketing[@]dalinco[.]com