/*! 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('

Anspruchsvolle Angebote und casinacho-deutschland.com.de für lukrative Spielautomaten Chancen ermöglichen

Anspruchsvolle Angebote und casinacho-deutschland.com.de für lukrative Spielautomaten Chancen ermöglichen

casinacho-deutschland.com.de. Die Welt der Online-Casinos ist dynamisch und bietet eine Vielzahl von Möglichkeiten für Spieler. Für viele ist die Suche nach einer vertrauenswürdigen und unterhaltsamen Plattform entscheidend, um das bestmögliche Spielerlebnis zu gewährleisten. Hier kommt ins Spiel, eine Webseite, die sich darauf konzentriert, umfassende Informationen und Ressourcen für Glücksspielfans in Deutschland bereitzustellen. Es geht nicht nur um das Spielen selbst, sondern auch um das Verständnis der Regeln, Strategien und der damit verbundenen Risiken.

Das Online-Glücksspiel hat sich in den letzten Jahren rasant entwickelt, und es ist wichtig, auf dem Laufenden zu bleiben, um fundierte Entscheidungen treffen zu können. Benutzerfreundlichkeit, eine breite Auswahl an Spielen, sichere Zahlungsmethoden und ein zuverlässiger Kundenservice sind nur einige der Aspekte, die ein gutes Online-Casino auszeichnen. möchte dazu beitragen, die Auswahl des richtigen Anbieters zu erleichtern und transparenten Einblick in die verschiedenen Angebote zu bieten, um so ein sicheres und unterhaltsames Spielerlebnis zu fördern.

Die Vielfalt der Spielautomaten und ihre Funktionsweise

Spielautomaten, oft auch als "Slots" bezeichnet, sind zweifellos die beliebtesten Spiele in Online-Casinos. Ihre Anziehungskraft liegt in ihrer Einfachheit und dem Potenzial für hohe Gewinne. Moderne Spielautomaten sind jedoch weit mehr als nur einfache Glücksspiele. Sie basieren auf komplexen Algorithmen und Zufallsgeneratoren, die sicherstellen, dass jedes Spielergebnis zufällig und fair ist. Die Entwicklung der Technologie hat zu einer enormen Vielfalt an Spielautomaten geführt, die sich in Themen, Funktionen und Gewinnmöglichkeiten unterscheiden. Es gibt klassische Spielautomaten, die an die traditionellen Automaten in Spielhallen erinnern, sowie Video-Slots mit aufwendigen Grafiken, Animationen und Soundeffekten. Viele Spielautomaten bieten auch zusätzliche Funktionen wie Freispiele, Bonusspiele und progressive Jackpots, die das Spielerlebnis noch spannender gestalten.

Themen und Designs von Spielautomaten

Die Themenvielfalt bei Spielautomaten ist nahezu unbegrenzt. Von klassischen Frucht-Slots über Abenteuer-, Fantasy- und Film-basierte Automaten ist für jeden Geschmack etwas dabei. Die Designs sind oft sehr detailliert und ansprechend gestaltet, und die Spieleentwickler legen großen Wert darauf, eine immersive Spielerfahrung zu schaffen. Die Themenwahl beeinflusst nicht nur das Aussehen des Spielautomaten, sondern auch die Symbole, Soundeffekte und Bonusfunktionen. So können beispielsweise Spielautomaten mit einem ägyptischen Thema Symbole wie Skarabäus, Pyramiden und Pharaonen enthalten, während Spielautomaten mit einem Superhelden-Thema entsprechende Charaktere und Elemente aufweisen.

Spielautomat Thema Besondere Merkmale
Starburst Kosmos / Edelsteine Wilds, Scatter-Symbole, beidseitige Auszahlungen
Book of Ra Ägypten Freispiele mit expandierenden Symbolen
Mega Moolah Safari Progressiver Jackpot
Gonzo's Quest Inka-Kultur Avalanche-Feature

Die Auswahl des richtigen Spielautomaten hängt letztendlich von den persönlichen Vorlieben des Spielers ab. Es ist ratsam, verschiedene Spiele auszuprobieren, um herauszufinden, welche Themen und Funktionen am besten gefallen.

Bonusangebote und Promotionen in Online-Casinos

Ein wichtiger Faktor bei der Wahl eines Online-Casinos sind die angebotenen Bonusangebote und Promotionen. Diese können in verschiedenen Formen auftreten, darunter Willkommensboni, Einzahlungsboni, Freispiele und Cashback-Aktionen. Ein Willkommensbonus ist ein Anreiz für neue Spieler, sich anzumelden und eine erste Einzahlung zu tätigen. Einzahlungsboni werden als Prozentsatz der Einzahlungssumme gewährt, während Freispiele es den Spielern ermöglichen, bestimmte Spielautomaten kostenlos zu spielen. Cashback-Aktionen erstatten einen Teil der Verluste des Spielers. Es ist wichtig, die Bonusbedingungen sorgfältig zu lesen, bevor man ein Angebot annimmt, da diese oft an Umsatzbedingungen geknüpft sind. Umsatzbedingungen geben an, wie oft der Bonusbetrag umgesetzt werden muss, bevor er ausgezahlt werden kann. Ein gutes Online-Casino bietet faire und transparente Bonusbedingungen.

Die Bedeutung der Umsatzbedingungen

Umsatzbedingungen sind ein entscheidender Aspekt bei Bonusangeboten. Sie legen fest, wie viel Geld ein Spieler setzen muss, bevor er einen Bonus oder die damit erzielten Gewinne auszahlen kann. Hohe Umsatzbedingungen können es schwierig machen, den Bonus tatsächlich zu nutzen, während niedrige Bedingungen vorteilhafter sind. Es ist auch wichtig zu beachten, welche Spiele zur Erfüllung der Umsatzbedingungen zählen. Oftmals sind Tischspiele und Live-Casino-Spiele weniger gewichtet oder sogar ausgeschlossen. Daher ist es ratsam, Spiele zu wählen, die zu 100% zur Erfüllung der Bedingungen beitragen.

  • Willkommensbonus: Ein Bonus für neue Spieler bei der ersten Einzahlung.
  • Einzahlungsbonus: Ein Bonus, der auf eine bestimmte Einzahlung gewährt wird.
  • Freispiele: Ermöglichen das Spielen bestimmter Spielautomaten ohne Einsatz von Echtgeld.
  • Cashback-Bonus: Erstattet einen Teil der verlorenen Einsätze.
  • Loyalitätsprogramme: Belohnen regelmäßige Spieler mit exklusiven Boni und Prämien.

Die Nutzung von Bonusangeboten kann die Gewinnchancen erheblich verbessern, aber es ist wichtig, die Bedingungen sorgfältig zu prüfen und verantwortungsbewusst zu spielen.

Zahlungsmethoden und Sicherheit im Online-Casino

Sichere und zuverlässige Zahlungsmethoden sind ein wesentliches Kriterium für ein gutes Online-Casino. Es gibt eine Vielzahl von Optionen, darunter Kreditkarten, E-Wallets, Banküberweisungen und Kryptowährungen. Kreditkarten wie Visa und Mastercard sind weit verbreitet, aber es ist wichtig, dass das Casino über eine sichere Verschlüsselungstechnologie verfügt, um die Kreditkarteninformationen der Spieler zu schützen. E-Wallets wie PayPal, Skrill und Neteller bieten eine zusätzliche Sicherheitsebene, da die Bankdaten der Spieler nicht direkt an das Casino weitergegeben werden. Banküberweisungen sind eine traditionelle Methode, die jedoch etwas länger dauern kann als andere Optionen. Kryptowährungen wie Bitcoin und Ethereum gewinnen zunehmend an Bedeutung, da sie anonyme und schnelle Transaktionen ermöglichen. beleuchtet auch die verschiedenen Aspekte der Zahlungsabwicklung.

Sicherheitsstandards und Lizenzierung

Die Sicherheit eines Online-Casinos ist von größter Bedeutung. Ein seriöses Casino verfügt über eine gültige Glücksspiellizenz, die von einer renommierten Regulierungsbehörde ausgestellt wurde. Diese Lizenzen stellen sicher, dass das Casino bestimmte Sicherheitsstandards einhält und die Spieler fair behandelt werden. Darüber hinaus verwendet ein sicheres Casino eine SSL-Verschlüsselungstechnologie, um alle sensiblen Daten, wie z. B. persönliche Informationen und Zahlungsinformationen, zu schützen. Es ist auch wichtig, dass das Casino eine verantwortungsbewusste Glücksspielpolitik verfolgt und Spielern die Möglichkeit bietet, Limits zu setzen oder sich selbst auszuschließen.

  1. Überprüfen Sie die Glücksspiellizenz des Casinos.
  2. Stellen Sie sicher, dass das Casino eine SSL-Verschlüsselung verwendet.
  3. Lesen Sie die Datenschutzbestimmungen des Casinos sorgfältig durch.
  4. Informieren Sie sich über die verantwortungsbewusste Glücksspielpolitik des Casinos.
  5. Nutzen Sie sichere Zahlungsmethoden.

Indem man diese Tipps befolgt, kann man sicherstellen, dass man in einem sicheren und vertrauenswürdigen Online-Casino spielt.

Mobile Casinos und die Zukunft des Glücksspiels

Mobile Casinos haben das Glücksspiel revolutioniert, indem sie es den Spielern ermöglichen, ihre Lieblingsspiele jederzeit und überall zu spielen. Die meisten Online-Casinos bieten heutzutage mobile Apps oder optimierte Websites an, die auf Smartphones und Tablets genutzt werden können. Mobile Casinos bieten den gleichen Komfort und die gleiche Auswahl an Spielen wie Desktop-Casinos, aber sie sind noch flexibler und zugänglicher. Die Entwicklung von HTML5-Technologie hat es ermöglicht, Casino-Spiele direkt im Browser zu spielen, ohne dass eine zusätzliche App heruntergeladen werden muss. Darüber hinaus haben mobile Casinos oft exklusive Bonusangebote und Promotionen für mobile Spieler. Die Zukunft des Glücksspiels liegt zweifellos im mobilen Bereich.

Innovative Technologien und virtuelle Realität im Glücksspiel

Die Glücksspielindustrie ist ständig auf der Suche nach neuen Technologien, um das Spielerlebnis zu verbessern. Virtuelle Realität (VR) und Augmented Reality (AR) haben das Potenzial, das Glücksspiel grundlegend zu verändern. VR ermöglicht es den Spielern, in eine immersive virtuelle Casino-Umgebung einzutauchen, während AR virtuelle Elemente in die reale Welt einblendet. Diese Technologien können verwendet werden, um realistische Casinospiele zu simulieren oder interaktive Bonusfunktionen zu erstellen. Auch Blockchain-Technologie und Kryptowährungen spielen eine immer größere Rolle im Online-Glücksspiel, da sie sichere und transparente Transaktionen ermöglichen. Die Kombination dieser Technologien wird das Glücksspiel in Zukunft noch spannender und interaktiver gestalten. verfolgt diese Entwicklungen aufmerksam und wird seine Leser über die neuesten Trends informieren.

Die stetige Weiterentwicklung der Technologie verspricht ein noch aufregenderes und zugänglicheres Spielerlebnis in der Zukunft. Die Integration von künstlicher Intelligenz zur Personalisierung von Angeboten und zur frühzeitigen Erkennung von problematischem Spielverhalten ist ein weiterer vielversprechender Ansatz, um die Spielerbasis verantwortungsbewusst zu unterstützen und eine nachhaltige Entwicklung der Branche zu fördern. Die Verknüpfung von Online- und Offline-Welten, beispielsweise durch Live-Dealer-Spiele mit einer noch höheren Immersion, wird ebenfalls eine wichtige Rolle spielen.

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

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

تماس با ما

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

تلفن شرکت: 07132193216

کدپستی: 

فکس: 07132272697

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

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

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

تلفن شرکت: 07132193216

کدپستی: 7143746448

فکس: 07132272697

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

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