/*! elementor - v3.23.0 - 05-08-2024 */ /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "../assets/dev/js/editor/container/container.js": /*!******************************************************!*\ !*** ../assets/dev/js/editor/container/container.js ***! \******************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; /* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"]; 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 _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js")); var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js")); var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js")); var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js")); var _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js")); var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js")); var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js")); var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js")); var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js")); var _argsObject = _interopRequireDefault(__webpack_require__(/*! ../../modules/imports/args-object */ "../assets/dev/js/modules/imports/args-object.js")); var _panel = _interopRequireDefault(__webpack_require__(/*! ./panel */ "../assets/dev/js/editor/container/panel.js")); var _childrenArray = _interopRequireDefault(__webpack_require__(/*! ./model/children-array */ "../assets/dev/js/editor/container/model/children-array.js")); function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /** * @typedef {import('../../../../lib/backbone/backbone.marionette')} Backbone * @typedef {import('../../../../lib/backbone/backbone.marionette')} Marionette * @typedef {import('../elements/views/base')} BaseElementView * @typedef {import('../elements/views/section')} SectionView * @typedef {import('../views/base-container')} BaseContainer * @typedef {import('../elements/models/base-element-model')} BaseElementModel */ /** * TODO: ViewsOptions * * @typedef {(Marionette.View|Marionette.CompositeView|BaseElementView|SectionView|BaseContainer)} ViewsOptions */ var Container = /*#__PURE__*/function (_ArgsObject) { (0, _inherits2.default)(Container, _ArgsObject); var _super = _createSuper(Container); /** * Function constructor(). * * Create container. * * @param {{}} args * * @throws {Error} */ function Container(args) { var _this; (0, _classCallCheck2.default)(this, Container); _this = _super.call(this, args); // Validate args. /** * Container type. * * @type {string} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "type", void 0); /** * Container id. * * @type {string} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "id", void 0); /** * Document Object. * * @type {{}} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "document", void 0); /** * Container model. * * @type {(Backbone.Model|BaseElementModel)} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "model", void 0); /** * Container settings. * * @type {Backbone.Model} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "settings", void 0); /** * Container view. * * @type {ViewsOptions} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "view", void 0); /** * Container parent. * * @type {Container} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "parent", void 0); /** * Container children(s). * * @type {ChildrenArray} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "children", new _childrenArray.default()); /** * Container dynamic. * * @type {Backbone.Model} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "dynamic", void 0); /** * Container globals. * * @type {Backbone.Model} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "globals", void 0); /** * Container label. * * @type {string} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "label", void 0); /** * Container controls. * * @type {{}} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "controls", {}); /** * Repeaters containers * * @type {{}} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "repeaters", {}); /** * Container renderer (The one who render). * * @type {Container} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderer", void 0); /** * Container panel. * * @type {Panel} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "panel", void 0); /** * Controls placeholders. * * @type {{}} */ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "placeholders", {}); _this.validateArgs(args); args = Object.entries(args); // If empty. if (0 === args.length) { throw Error('Container cannot be empty.'); } // Set properties, if not defined - keep the defaults. args.forEach(function (_ref) { var _ref2 = (0, _slicedToArray2.default)(_ref, 2), key = _ref2[0], value = _ref2[1]; _this[key] = 'undefined' === typeof value ? _this[key] : value; }); if ('undefined' === typeof _this.renderer) { _this.renderer = (0, _assertThisInitialized2.default)(_this); } if (!_this.document) { _this.document = elementor.documents.getCurrent(); } _this.dynamic = new Backbone.Model(_this.settings.get('__dynamic__')); _this.globals = new Backbone.Model(_this.settings.get('__globals__')); _this.panel = new _panel.default((0, _assertThisInitialized2.default)(_this)); _this.initialize(); return _this; } (0, _createClass2.default)(Container, [{ key: "initialize", value: function initialize() { if (this.isViewElement()) { this.addToParent(); this.handleChildrenRecursive(); this.view.on('destroy', this.removeFromParent.bind(this)); } this.handleRepeaterChildren(); } }, { key: "validateArgs", value: function validateArgs(args) { this.requireArgumentType('type', 'string', args); this.requireArgumentType('id', 'string', args); this.requireArgumentInstance('settings', Backbone.Model, args); this.requireArgumentInstance('model', Backbone.Model, args); // Require it, unless it's forced to be `false`. if (false !== args.parent) { this.requireArgumentInstance('parent', elementorModules.editor.Container, args); } } /** * Function getGroupRelatedControls(). * * Example: * Settings = { typography_typography: 'whatever', button_text_color: 'whatever' }; * Result { control_name: controlValue, ... - and so on }; * `Object.keys( Result ) = [ 'typography_typography', 'typography_font_family', 'typography_font_size', 'typography_font_size_tablet', 'typography_font_size_mobile', 'typography_font_weight', 'typography_text_transform', 'typography_font_style', 'typography_text_decoration', 'typography_line_height', 'typography_line_height_tablet', 'typography_line_height_mobile', 'typography_letter_spacing', 'typography_letter_spacing_tablet', 'typography_letter_spacing_mobile', 'button_text_color' ]`. * * @param {{}} settings * * @return {{}} result */ }, { key: "getGroupRelatedControls", value: function getGroupRelatedControls(settings) { var _this2 = this; var result = {}; Object.keys(settings).forEach(function (settingKey) { Object.values(_this2.controls).forEach(function (control) { var _this2$controls$setti; if (settingKey === control.name) { result[control.name] = control; } else if ((_this2$controls$setti = _this2.controls[settingKey]) !== null && _this2$controls$setti !== void 0 && _this2$controls$setti.groupPrefix) { var groupPrefix = _this2.controls[settingKey].groupPrefix; if (control.name.toString().startsWith(groupPrefix)) { result[control.name] = control; } } }); }); return result; } /** * Function getAffectingControls(). * * @return {{}} All controls that effecting the container. */ }, { key: "getAffectingControls", value: function getAffectingControls() { var _this3 = this; var result = {}, activeControls = this.settings.getActiveControls(); Object.entries(activeControls).forEach(function (_ref3) { var _ref4 = (0, _slicedToArray2.default)(_ref3, 2), controlName = _ref4[0], control = _ref4[1]; var controlValue = _this3.settings.get(control.name); if (control.global && !(controlValue !== null && controlValue !== void 0 && controlValue.length)) { var _this3$globals$get; if ((_this3$globals$get = _this3.globals.get(control.name)) !== null && _this3$globals$get !== void 0 && _this3$globals$get.length || _this3.getGlobalDefault(controlName).length) { control.global.utilized = true; result[controlName] = control; return; } } if (control.dynamic) { if (_this3.dynamic.get(controlName)) { control.dynamic.utilized = true; result[controlName] = control; return; } } if (controlValue === control.default) { return; } if (!controlValue) { return; } if ('object' === (0, _typeof2.default)(controlValue) && Object.values(controlValue).join() === Object.values(control.default).join()) { return; } result[controlName] = control; }); return result; } /** * Function getParentAncestry(). * * Recursively run over all parents from current container till the top * * @return {Array.} All parent as flat array. */ }, { key: "getParentAncestry", value: function getParentAncestry() { var result = []; var parent = this; while (parent) { result.push(parent); parent = parent.parent; } return result; } }, { key: "handleChildrenRecursive", value: function handleChildrenRecursive() { var _this$view$children; if ((_this$view$children = this.view.children) !== null && _this$view$children !== void 0 && _this$view$children.length) { Object.values(this.view.children._views).forEach(function (view) { if (!view.container) { return; } var container = view.container; // Since the way 'global-widget' rendered, it does not have parent sometimes. if (container.parent.children) { container.parent.children[view._index] = container; } container.handleChildrenRecursive(); }); } else { this.children.clear(); } } }, { key: "addToParent", value: function addToParent() { if (!this.parent.children || this.isRepeaterItem()) { return; } // On create container tell the parent where it was created. this.parent.children.splice(this.view._index, 0, this); } }, { key: "removeFromParent", value: function removeFromParent() { var _this4 = this; if (!this.parent.children || this.isRepeater()) { return; } // When delete container its should notify its parent, that his children is dead. this.parent.children = this.parent.children.filter(function (filtered) { return filtered.id !== _this4.id; }); } }, { key: "handleRepeaterChildren", value: function handleRepeaterChildren() { var _this5 = this; Object.values(this.controls).forEach(function (control) { if (!control.is_repeater) { return; } var model = new Backbone.Model({ name: control.name }); _this5.repeaters[control.name] = new elementorModules.editor.Container({ type: Container.TYPE_REPEATER, id: control.name, model: model, settings: model, view: _this5.view, parent: _this5, label: control.label || control.name, controls: {}, renderer: _this5.renderer }); _this5.settings.get(control.name).forEach(function (rowModel, index) { _this5.addRepeaterItem(control.name, rowModel, index); }); }); // Backwards Compatibility: if there is only one repeater (type=repeater), set it's children as current children. // Since 3.0.0. if (['widget', 'document'].includes(this.type)) { var repeaters = Object.values(this.controls).filter(function (control) { return 'repeater' === control.type; }); if (!this.model.get('supportRepeaterChildren') && 1 === repeaters.length) { Object.defineProperty(this, 'children', { get: function get() { elementorDevTools.deprecation.deprecated('children', '3.0.0', 'container.repeaters[ repeaterName ].children'); return this.repeaters[repeaters[0].name].children; } }); } } } /** * Function addRepeaterItem(). * * The method add repeater item, find the repeater control by it name, and create new container for the item. * * @param {string} repeaterName * @param {Backbone.Model} rowSettingsModel * @param {number} index * * @return {Container} container */ }, { key: "addRepeaterItem", value: function addRepeaterItem(repeaterName, rowSettingsModel, index) { var rowId = rowSettingsModel.get('_id'); // TODO: Temp backwards compatibility. since 2.8.0. if (!rowId) { rowId = 'bc-' + elementorCommon.helpers.getUniqueId(); rowSettingsModel.set('_id', rowId); } this.repeaters[repeaterName].children.splice(index, 0, new elementorModules.editor.Container({ type: Container.TYPE_REPEATER_ITEM, id: rowSettingsModel.get('_id'), model: new Backbone.Model({ name: repeaterName }), settings: rowSettingsModel, view: this.view, parent: this.repeaters[repeaterName], label: this.label + ' ' + __('Item', 'elementor'), controls: rowSettingsModel.options.controls, renderer: this.renderer })); return this.repeaters[repeaterName]; } /** * Function lookup(). * * If the view were destroyed, try to find it again if it exists. * * TODO: Refactor. * * @return {Container} container */ }, { key: "lookup", value: function lookup() { var _this$renderer$view; var result = this; if (!this.renderer) { return this; } if (this !== this.renderer && (_this$renderer$view = this.renderer.view) !== null && _this$renderer$view !== void 0 && _this$renderer$view.isDisconnected && this.renderer.view.isDisconnected()) { this.renderer = this.renderer.lookup(); } if (undefined === this.view || !this.view.lookup || !this.view.isDisconnected()) { // Hack For repeater item the result is the parent container. if (Container.TYPE_REPEATER_ITEM === this.type) { this.settings = this.parent.parent.settings.get(this.model.get('name')).findWhere({ _id: this.id }); } return result; } var lookup = this.view.lookup(); if (lookup) { result = lookup.getContainer(); // Hack For repeater item the result is the parent container. if (Container.REPEATER === this.type) { this.settings = result.settings.get(this.model.get('name')).findWhere({ _id: this.id }); return this; } // If lookup were done, new container were created and parent does not know about it. if (result.parent.children) { result.parent.children[result.view._index] = result; } } return result; } /** * @param {Function} callback - A callback function. * @deprecated since 3.5.0, use `container.children.findRecursive( callback )` instead. */ }, { key: "findChildrenRecursive", value: function findChildrenRecursive(callback) { elementorDevTools.deprecation.deprecated('container.findChildrenRecursive( callback )', '3.5.0', 'container.children.findRecursive( callback )'); return this.children.findRecursive(callback); } /** * @param {Function} callback - A callback function. * @deprecated since 3.5.0, use `container.children.forEachRecursive( callback )` instead. */ }, { key: "forEachChildrenRecursive", value: function forEachChildrenRecursive(callback) { elementorDevTools.deprecation.deprecated('container.forEachChildrenRecursive( callback )', '3.5.0', 'container.children.forEachRecursive( callback )'); return this.children.forEachRecursive(callback); } /** * Function render(). * * Call view render. * * Run's `this.renderer.view.renderOnChange( this.settings ) `. * When `this.renderer` exist. * */ }, { key: "render", value: function render() { if (!this.renderer) { return; } this.renderer.view.renderOnChange(this.settings); } }, { key: "renderUI", value: function renderUI() { if (!this.renderer) { return; } this.renderer.view.renderUI(); } }, { key: "isEditable", value: function isEditable() { return 'edit' === elementor.channels.dataEditMode.request('activeMode') && 'open' === this.document.editor.status; } }, { key: "isDesignable", value: function isDesignable() { return elementor.userCan('design') && this.isEditable(); } }, { key: "isGridContainer", value: function isGridContainer() { return 'grid' === this.parent.settings.get('container_type'); } /** * @return {boolean} */ }, { key: "isLocked", value: function isLocked() { return this.model.get('isLocked'); } }, { key: "isRepeater", value: function isRepeater() { return Container.TYPE_REPEATER === this.type; } }, { key: "isRepeaterItem", value: function isRepeaterItem() { return Container.TYPE_REPEATER_ITEM === this.type; } }, { key: "isViewElement", value: function isViewElement() { return this.view && this.model.get('elType'); } }, { key: "getSetting", value: function getSetting(name) { var localOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var localValue = this.settings.get(name); if (localOnly) { return localValue; } // Try to get the value in the order: Global, Local, Global default. var globalValue; if (this.getGlobalKey(name)) { globalValue = this.getGlobalValue(name); } return globalValue || localValue || this.getGlobalDefault(name); } }, { key: "getGlobalKey", value: function getGlobalKey(name) { return this.globals.get(name); } }, { key: "getGlobalValue", value: function getGlobalValue(name) { var control = this.controls[name], globalKey = this.getGlobalKey(name), globalArgs = $e.data.commandExtractArgs(globalKey), data = $e.data.getCache($e.components.get('globals'), globalArgs.command, globalArgs.args.query); if (!(data !== null && data !== void 0 && data.value)) { return; } var id = data.id; var value; // It's a global settings with additional controls in group. if (control.groupType) { // A regex containing all of the active breakpoints' prefixes ('_mobile', '_tablet' etc.). var responsivePrefixRegex = elementor.breakpoints.getActiveMatchRegex(); var propertyName = control.name.replace(control.groupPrefix, '').replace(responsivePrefixRegex, ''); if (!data.value[elementor.config.kit_config.typography_prefix + propertyName]) { return; } propertyName = propertyName.replace('_', '-'); value = "var( --e-global-".concat(control.groupType, "-").concat(id, "-").concat(propertyName, " )"); if (elementor.config.ui.defaultGenericFonts && control.groupPrefix + 'font_family' === control.name) { value += ", ".concat(elementor.config.ui.defaultGenericFonts); } } else { value = "var( --e-global-".concat(control.type, "-").concat(id, " )"); } return value; } /** * Determine if a control's global value is applied. * It actually checks if the local value is different than the global value. * * @param {string} controlName - Control name * @return {boolean} true if a control's global value is applied */ }, { key: "isGlobalApplied", value: function isGlobalApplied(controlName) { return this.getSetting(controlName) !== this.settings.get(controlName); } }, { key: "getGlobalDefault", value: function getGlobalDefault(controlName) { var _this$controls$contro; var controlGlobalArgs = (_this$controls$contro = this.controls[controlName]) === null || _this$controls$contro === void 0 ? void 0 : _this$controls$contro.global; if (controlGlobalArgs !== null && controlGlobalArgs !== void 0 && controlGlobalArgs.default) { // Temp fix. var controlType = this.controls[controlName].type; if ('color' === controlType) { controlType = 'colors'; } // End temp fix // If the control is a color/typography control and default colors/typography are disabled, don't return the global value. if (!elementor.config.globals.defaults_enabled[controlType]) { return ''; } var _$e$data$commandExtra = $e.data.commandExtractArgs(controlGlobalArgs.default), command = _$e$data$commandExtra.command, args = _$e$data$commandExtra.args, result = $e.data.getCache($e.components.get('globals'), command, args.query); return result === null || result === void 0 ? void 0 : result.value; } // No global default. return ''; } }]); return Container; }(_argsObject.default); exports["default"] = Container; // TODO: Swap those backwards compatibility is required. (0, _defineProperty2.default)(Container, "TYPE_REPEATER", 'repeater-control'); (0, _defineProperty2.default)(Container, "TYPE_REPEATER_ITEM", 'repeater'); /***/ }), /***/ "../assets/dev/js/editor/container/model/children-array.js": /*!*****************************************************************!*\ !*** ../assets/dev/js/editor/container/model/children-array.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; 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 _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js")); var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js")); var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js")); var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js")); var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js")); var _wrapNativeSuper2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/wrapNativeSuper */ "../node_modules/@babel/runtime/helpers/wrapNativeSuper.js")); function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /** * @typedef {import('../container')} Container */ var ChildrenArray = /*#__PURE__*/function (_Array) { (0, _inherits2.default)(ChildrenArray, _Array); var _super = _createSuper(ChildrenArray); function ChildrenArray() { (0, _classCallCheck2.default)(this, ChildrenArray); return _super.apply(this, arguments); } (0, _createClass2.default)(ChildrenArray, [{ key: "clear", value: function clear() { this.length = 0; } /** * Function findRecursive(). * * Will run over children recursively and pass the children to the callback till the callback returns positive value. * * @param {function(Container) : *} callback * * @return {Container|false} child */ }, { key: "findRecursive", value: function findRecursive(callback) { var _iterator = _createForOfIteratorHelper(this), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var container = _step.value; if (callback(container)) { return container; } if (container.children.length) { var foundChildren = container.children.findRecursive(callback); if (foundChildren) { return foundChildren; } } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return false; } /** * Function forEachRecursive(). * * Will run over children recursively. * * @param {function(Container) : *} callback * * @return {void} */ }, { key: "forEachRecursive", value: function forEachRecursive(callback) { var _iterator2 = _createForOfIteratorHelper(this), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var container = _step2.value; callback(container); if (container.children.length) { container.children.forEachRecursive(callback); } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } /** * Function someRecursive(). * * Will run over children recursively, breaks if the callback return true. * * @param {function(Container) : *} callback */ }, { key: "someRecursive", value: function someRecursive(callback) { var _iterator3 = _createForOfIteratorHelper(this), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var _container$children; var container = _step3.value; if (callback(container)) { return true; } if ((_container$children = container.children) !== null && _container$children !== void 0 && _container$children.length) { if (container.children.someRecursive(callback)) { return true; } } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } return false; } }]); return ChildrenArray; }( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Array)); exports["default"] = ChildrenArray; /***/ }), /***/ "../assets/dev/js/editor/container/panel.js": /*!**************************************************!*\ !*** ../assets/dev/js/editor/container/panel.js ***! \**************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; 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 _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js")); var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js")); /** * @typedef {import('./container')} Container */ var Panel = /*#__PURE__*/function () { /** * Function constructor(). * * Create constructor panel. * * @param {Container} container */ function Panel(container) { (0, _classCallCheck2.default)(this, Panel); this.container = container; } /** * Function refresh(). * * Refresh the panel. */ (0, _createClass2.default)(Panel, [{ key: "refresh", value: function refresh() { if ($e.routes.isPartOf('panel/editor')) { $e.routes.refreshContainer('panel'); } } /** * Function closeEditor(). * * Route to `panel/elements/categories` */ }, { key: "closeEditor", value: function closeEditor() { $e.route('panel/elements/categories'); } }, { key: "getControlView", value: function getControlView(name) { var editor = elementor.getPanelView().getCurrentPageView(); return editor.children.findByModelCid(this.getControlModel(name).cid); } }, { key: "getControlModel", value: function getControlModel(name) { var editor = elementor.getPanelView().getCurrentPageView(); return editor.collection.findWhere({ name: name }); } }]); return Panel; }(); exports["default"] = Panel; /***/ }), /***/ "../assets/dev/js/editor/elements/models/base-settings.js": /*!****************************************************************!*\ !*** ../assets/dev/js/editor/elements/models/base-settings.js ***! \****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); var _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js")); var BaseSettingsModel; /** * @name BaseSettingsModel */ BaseSettingsModel = Backbone.Model.extend({ options: {}, initialize: function initialize(data, options) { var self = this; // Keep the options for cloning self.options = options; self.controls = elementor.mergeControlsSettings(options.controls); self.validators = {}; if (!self.controls) { return; } var attrs = data || {}, defaults = {}; _.each(self.controls, function (control) { // Check features since they does not exist in tests. var isUIControl = control.features && -1 !== control.features.indexOf('ui'); if (isUIControl) { return; } var controlName = control.name; if ('object' === (0, _typeof2.default)(control.default)) { defaults[controlName] = structuredClone(control.default); } else { defaults[controlName] = control.default; } var isDynamicControl = control.dynamic && control.dynamic.active, hasDynamicSettings = isDynamicControl && attrs.__dynamic__ && attrs.__dynamic__[controlName]; if (isDynamicControl && !hasDynamicSettings && control.dynamic.default) { if (!attrs.__dynamic__) { attrs.__dynamic__ = {}; } attrs.__dynamic__[controlName] = control.dynamic.default; hasDynamicSettings = true; } // Check if the value is a plain object ( and not an array ) var isMultipleControl = jQuery.isPlainObject(control.default); if (undefined !== attrs[controlName] && isMultipleControl && !_.isObject(attrs[controlName]) && !hasDynamicSettings) { elementorCommon.debug.addCustomError(new TypeError('An invalid argument supplied as multiple control value'), 'InvalidElementData', 'Element `' + (self.get('widgetType') || self.get('elType')) + '` got <' + attrs[controlName] + '> as `' + controlName + '` value. Expected array or object.'); delete attrs[controlName]; } if (undefined === attrs[controlName]) { attrs[controlName] = defaults[controlName]; } }); self.defaults = defaults; self.handleRepeaterData(attrs); self.set(attrs); }, convertRepeaterValueToCollection: function convertRepeaterValueToCollection(attrs, repeaterControl) { return new Backbone.Collection(attrs[repeaterControl.name], { model: function model(attributes, options) { options = options || {}; options.controls = {}; Object.values(repeaterControl.fields).forEach(function (item) { options.controls[item.name] = item; }); // TODO: Cannot be deleted, since it handle repeater items after repeater widget creation. if (!attributes._id) { attributes._id = elementorCommon.helpers.getUniqueId(); } return new BaseSettingsModel(attributes, options); } }); }, handleRepeaterData: function handleRepeaterData(attrs) { var self = this; _.each(this.controls, function (field) { if (field.is_repeater) { // TODO: Apply defaults on each field in repeater fields if (!(attrs[field.name] instanceof Backbone.Collection)) { attrs[field.name] = self.convertRepeaterValueToCollection(attrs, field); } } }); }, getFontControls: function getFontControls() { return this.getControlsByType('font'); }, getIconsControls: function getIconsControls() { return this.getControlsByType('icons'); }, getControlsByType: function getControlsByType(type) { return _.filter(this.getActiveControls(), function (control) { return type === control.type; }); }, getStyleControls: function getStyleControls(controls, attributes) { var self = this; controls = structuredClone(self.getActiveControls(controls, attributes)); var styleControls = []; jQuery.each(controls, function () { var _control$dynamic; var control = this, controlDefaultSettings = elementor.config.controls[control.type]; control = jQuery.extend({}, controlDefaultSettings, control); if (control.fields) { var styleFields = []; if (!(self.attributes[control.name] instanceof Backbone.Collection)) { self.attributes[control.name] = self.convertRepeaterValueToCollection(self.attributes, control); } self.attributes[control.name].each(function (item) { styleFields.push(self.getStyleControls(control.fields, item.attributes)); }); control.styleFields = styleFields; } if (control.fields || (_control$dynamic = control.dynamic) !== null && _control$dynamic !== void 0 && _control$dynamic.active || self.isGlobalControl(control, controls) || self.isStyleControl(control.name, controls)) { styleControls.push(control); } }); return styleControls; }, isGlobalControl: function isGlobalControl(control, controls) { var _globalControl$global, _this$attributes$__gl; var controlGlobalKey = control.name; if (control.groupType) { controlGlobalKey = control.groupPrefix + control.groupType; } var globalControl = controls[controlGlobalKey]; if (!((_globalControl$global = globalControl.global) !== null && _globalControl$global !== void 0 && _globalControl$global.active)) { return false; } var globalValue = (_this$attributes$__gl = this.attributes.__globals__) === null || _this$attributes$__gl === void 0 ? void 0 : _this$attributes$__gl[controlGlobalKey]; return !!globalValue; }, isStyleControl: function isStyleControl(attribute, controls) { controls = controls || this.controls; var currentControl = _.find(controls, function (control) { return attribute === control.name; }); return currentControl && !_.isEmpty(currentControl.selectors); }, getClassControls: function getClassControls(controls) { controls = controls || this.controls; return _.filter(controls, function (control) { return !_.isUndefined(control.prefix_class); }); }, isClassControl: function isClassControl(attribute) { var currentControl = _.find(this.controls, function (control) { return attribute === control.name; }); return currentControl && !_.isUndefined(currentControl.prefix_class); }, getControl: function getControl(id) { return _.find(this.controls, function (control) { return id === control.name; }); }, getActiveControls: function getActiveControls(controls, attributes) { var activeControls = {}; if (!controls) { controls = this.controls; } if (!attributes) { attributes = this.attributes; } attributes = this.parseGlobalSettings(attributes, controls); jQuery.each(controls, function (controlKey, control) { if (elementor.helpers.isActiveControl(control, attributes, controls)) { activeControls[controlKey] = control; } }); return activeControls; }, clone: function clone() { return new BaseSettingsModel(elementorCommon.helpers.cloneObject(this.attributes), elementorCommon.helpers.cloneObject(this.options)); }, setExternalChange: function setExternalChange(key, value) { var self = this, settingsToChange; if ('object' === (0, _typeof2.default)(key)) { settingsToChange = key; } else { settingsToChange = {}; settingsToChange[key] = value; } self.set(settingsToChange); jQuery.each(settingsToChange, function (changedKey, changedValue) { self.trigger('change:external:' + changedKey, changedValue); }); }, parseDynamicSettings: function parseDynamicSettings(settings, options, controls) { var self = this; settings = elementorCommon.helpers.cloneObject(settings || self.attributes); options = options || {}; controls = controls || this.controls; jQuery.each(controls, function () { var control = this, valueToParse; if (control.is_repeater) { valueToParse = settings[control.name]; valueToParse.forEach(function (value, key) { valueToParse[key] = self.parseDynamicSettings(value, options, control.fields); }); return; } valueToParse = settings.__dynamic__ && settings.__dynamic__[control.name]; if (!valueToParse) { return; } var dynamicSettings = control.dynamic; if (undefined === dynamicSettings) { dynamicSettings = elementor.config.controls[control.type].dynamic; } if (!dynamicSettings || !dynamicSettings.active) { return; } var dynamicValue; try { dynamicValue = elementor.dynamicTags.parseTagsText(valueToParse, dynamicSettings, elementor.dynamicTags.getTagDataContent); } catch (error) { if (elementor.dynamicTags.CACHE_KEY_NOT_FOUND_ERROR !== error.message) { throw error; } dynamicValue = ''; if (options.onServerRequestStart) { options.onServerRequestStart(); } elementor.dynamicTags.refreshCacheFromServer(function () { if (options.onServerRequestEnd) { options.onServerRequestEnd(); } }); } if (dynamicSettings.property) { settings[control.name][dynamicSettings.property] = dynamicValue; } else { settings[control.name] = dynamicValue; } }); return settings; }, parseGlobalSettings: function parseGlobalSettings(settings, controls) { var _this = this; settings = elementorCommon.helpers.cloneObject(settings); controls = controls || this.controls; jQuery.each(controls, function (index, control) { var _settings$__globals__, _globalSettings; var valueToParse; if (control.is_repeater) { valueToParse = settings[control.name]; valueToParse.forEach(function (value, key) { valueToParse[key] = _this.parseGlobalSettings(value, control.fields); }); return; } valueToParse = (_settings$__globals__ = settings.__globals__) === null || _settings$__globals__ === void 0 ? void 0 : _settings$__globals__[control.name]; if (!valueToParse) { return; } var globalSettings = control.global; if (undefined === globalSettings) { globalSettings = elementor.config.controls[control.type].global; } if (!((_globalSettings = globalSettings) !== null && _globalSettings !== void 0 && _globalSettings.active)) { return; } var _$e$data$commandExtra = $e.data.commandExtractArgs(valueToParse), command = _$e$data$commandExtra.command, args = _$e$data$commandExtra.args, globalValue = $e.data.getCache($e.components.get('globals'), command, args.query); if (control.groupType) { settings[control.name] = 'custom'; } else { settings[control.name] = globalValue; } }); return settings; }, removeDataDefaults: function removeDataDefaults(data, controls) { var _this2 = this; jQuery.each(data, function (key) { var control = controls[key]; if (!control) { return; } // TODO: use `save_default` in text|textarea controls. if (control.save_default || ('text' === control.type || 'textarea' === control.type) && data[key]) { return; } if (control.is_repeater) { data[key].forEach(function (repeaterRow) { _this2.removeDataDefaults(repeaterRow, control.fields); }); return; } if (_.isEqual(data[key], control.default)) { delete data[key]; } }); }, toJSON: function toJSON(options) { var data = Backbone.Model.prototype.toJSON.call(this); options = options || {}; delete data.widgetType; delete data.elType; delete data.isInner; _.each(data, function (attribute, key) { if (attribute && attribute.toJSON) { data[key] = attribute.toJSON(); } }); if (options.remove && -1 !== options.remove.indexOf('default')) { this.removeDataDefaults(data, this.controls); } return structuredClone(data); } }); /** * @name BaseSettingsModel */ module.exports = BaseSettingsModel; /***/ }), /***/ "../assets/dev/js/editor/elements/views/behaviors/inner-tabs.js": /*!**********************************************************************!*\ !*** ../assets/dev/js/editor/elements/views/behaviors/inner-tabs.js ***! \**********************************************************************/ /***/ ((module) => { "use strict"; var InnerTabsBehavior; InnerTabsBehavior = Marionette.Behavior.extend({ onRenderCollection: function onRenderCollection() { this.handleInnerTabs(this.view); }, handleInnerTabs: function handleInnerTabs(parent) { var closedClass = 'e-tab-close', activeClass = 'e-tab-active', tabsWrappers = parent.children.filter(function (view) { return 'tabs' === view.model.get('type'); }); _.each(tabsWrappers, function (view) { view.$el.find('.elementor-control-content').remove(); var tabsId = view.model.get('name'), tabs = parent.children.filter(function (childView) { return 'tab' === childView.model.get('type') && childView.model.get('tabs_wrapper') === tabsId; }); _.each(tabs, function (childView, index) { view._addChildView(childView); var tabId = childView.model.get('name'), controlsUnderTab = parent.children.filter(function (controlView) { return tabId === controlView.model.get('inner_tab'); }); if (0 === index) { childView.$el.addClass(activeClass); } else { _.each(controlsUnderTab, function (controlView) { controlView.$el.addClass(closedClass); }); } }); }); }, onChildviewControlTabClicked: function onChildviewControlTabClicked(childView) { var closedClass = 'e-tab-close', activeClass = 'e-tab-active', tabClicked = childView.model.get('name'), childrenUnderTab = this.view.children.filter(function (view) { return 'tab' !== view.model.get('type') && childView.model.get('tabs_wrapper') === view.model.get('tabs_wrapper'); }), siblingTabs = this.view.children.filter(function (view) { return 'tab' === view.model.get('type') && childView.model.get('tabs_wrapper') === view.model.get('tabs_wrapper'); }); _.each(siblingTabs, function (view) { view.$el.removeClass(activeClass); }); childView.$el.addClass(activeClass); _.each(childrenUnderTab, function (view) { if (view.model.get('inner_tab') === tabClicked) { view.$el.removeClass(closedClass); } else { view.$el.addClass(closedClass); } }); elementor.getPanelView().updateScrollbar(); } }); module.exports = InnerTabsBehavior; /***/ }), /***/ "../assets/dev/js/editor/utils/is-instanceof.js": /*!******************************************************!*\ !*** ../assets/dev/js/editor/utils/is-instanceof.js ***! \******************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } /** * Some FileAPI objects such as FileList, DataTransferItem and DataTransferItemList has inconsistency with the retrieved * object (from events, etc.) and the actual JavaScript object so a regular instanceof doesn't work. This function can * check whether it's instanceof by using the objects constructor and prototype names. * * @param object * @param constructors * @return {boolean} */ var _default = function _default(object, constructors) { constructors = Array.isArray(constructors) ? constructors : [constructors]; var _iterator = _createForOfIteratorHelper(constructors), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var _constructor = _step.value; if (object.constructor.name === _constructor.prototype[Symbol.toStringTag]) { return true; } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return false; }; exports["default"] = _default; /***/ }), /***/ "../assets/dev/js/editor/utils/module.js": /*!***********************************************!*\ !*** ../assets/dev/js/editor/utils/module.js ***! \***********************************************/ /***/ ((module) => { "use strict"; var EditorModule = elementorModules.Module.extend({ onInit: function onInit() { var _this = this; var $window = jQuery(window); $window.on('elementor:init-components', this.onElementorInitComponents.bind(this)); $window.on('elementor:loaded', function () { _this.onElementorLoaded(); elementor.on('document:loaded', _this.onDocumentLoaded.bind(_this)); }); $window.on('elementor:init', this.onElementorReady); }, // TODO: Delete as soon as possible. getEditorControlView: function getEditorControlView(name) { var editor = elementor.getPanelView().getCurrentPageView(); return editor.children.findByModelCid(this.getEditorControlModel(name).cid); }, // TODO: Delete as soon as possible. getEditorControlModel: function getEditorControlModel(name) { var editor = elementor.getPanelView().getCurrentPageView(); return editor.collection.findWhere({ name: name }); }, onElementorReady: function onElementorReady() { this.onElementorInit(); elementor.on('frontend:init', this.onElementorFrontendInit.bind(this)).on('preview:loaded', this.onElementorPreviewLoaded.bind(this)); } }); EditorModule.prototype.onElementorLoaded = function () {}; EditorModule.prototype.onElementorInit = function () {}; EditorModule.prototype.onElementorPreviewLoaded = function () {}; EditorModule.prototype.onDocumentLoaded = function () {}; EditorModule.prototype.onElementorFrontendInit = function () {}; EditorModule.prototype.onElementorInitComponents = function () {}; module.exports = EditorModule; /***/ }), /***/ "../assets/dev/js/editor/views/controls-popover.js": /*!*********************************************************!*\ !*** ../assets/dev/js/editor/views/controls-popover.js ***! \*********************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; /* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"]; 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")); var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js")); var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js")); var ControlsPopover = /*#__PURE__*/function () { function ControlsPopover(child) { (0, _classCallCheck2.default)(this, ControlsPopover); this.child = child; this.$popover = jQuery('
', { class: 'elementor-controls-popover' }); child.$el.before(this.$popover); this.$popover.append(child.$el); this.popoverToggleView = child._parent.children.findByIndex(child._index - 1); // Add the "Typography" header to the popover if ('typography' === this.child.model.attributes.groupType) { this.createPopoverHeader(); } } (0, _createClass2.default)(ControlsPopover, [{ key: "addChild", value: function addChild(child) { this.$popover.append(child.$el); } }, { key: "createPopoverHeader", value: function createPopoverHeader() { var _this = this; var $popoverToggleControl = this.$popover.prev(), // Get the existing reset button. $resetLabel = $popoverToggleControl.find('.elementor-control-popover-toggle-reset-label'); this.$popoverHeader = jQuery('
', { class: 'e-group-control-header' }).html('' + __('Typography', 'elementor') + ''); this.$headerControlsWrapper = jQuery('
', { class: 'e-control-tools' }); // Give the reset button the control tool styling, and add a click event so clicking on it closes the popover. $resetLabel.addClass('e-control-tool').on('click', function () { return _this.onResetButtonClick(); }); // Move the popover toggle reset button into the popover header. this.$headerControlsWrapper.append($resetLabel); this.$popoverHeader.append(this.$headerControlsWrapper); var globalConfig = this.popoverToggleView.model.get('global'); if (globalConfig !== null && globalConfig !== void 0 && globalConfig.active) { this.createAddButton(); } this.$popover.prepend(this.$popoverHeader).addClass('e-controls-popover--typography'); } }, { key: "onResetButtonClick", value: function onResetButtonClick() { this.$popover.hide(); var groupControlName = this.child.model.get('groupPrefix') + 'typography', args = { container: this.child.options.container, settings: (0, _defineProperty2.default)({}, groupControlName, '') }; if (this.child.options.container.globals.get(groupControlName)) { // The Disable Globals command applies global settings locally, // so disabling the global shouldn't actually change the appearance of the widget. $e.run('document/globals/disable', args); } else { $e.run('document/elements/settings', args); } } }, { key: "onAddButtonClick", value: function onAddButtonClick() { this.popoverToggleView.onAddGlobalButtonClick(); } }, { key: "createAddButton", value: function createAddButton() { var _this2 = this; this.$addButton = jQuery('

Casino zonder vergunning in Nederland alles wat je moet weten

Fale com um Advogado

Preencha o formulário abaixo e receba nosso contato:

Casino zonder vergunning in Nederland alles wat je moet weten

Op zoek naar een casino zonder vergunning? Dat is begrijpelijk, want spelers kiezen steeds vaker voor online casino’s die niet gebonden zijn aan de Nederlandse Kansspelautoriteit. Toch kleven er flinke risico’s aan gokken bij een casino zonder CRUK-licentie, van uitbetalingsproblemen tot het ontbreken van rechtsbescherming.

Para facilitar sua compreensão, organizamos este artigo com os seguintes tópicos:

Wat betekent een online casino zonder licentie in Nederland?

Stel je voor: je opent ‘s avonds een website die eruitziet als een luxe casino, maar er ontbreekt iets cruciaals. Een online casino zonder licentie in Nederland betekent dat de Kansspelautoriteit geen toestemming heeft gegeven. Zulke sites opereren illegaal, bieden geen wettelijke bescherming en keeren winsten vaak niet uit. Spelers riskeren fraude, verslaving zonder hulplijnen en geen enkele garantie op eerlijk spel. De Kansspelautoriteit blokkeert zulke platforms actief. Kies dus altijd voor een vergund casino, want anders speel je met je geld én je veiligheid.

Het verschil tussen legale en illegale kansspelen

Een online casino zonder licentie in Nederland is een aanbieder die geen vergunning heeft van de Kansspelautoriteit en zich dus niet houdt aan de Nederlandse kansspelwet. Spelers lopen hierbij flinke risico’s: geen wettelijke bescherming, vaak onduidelijke uitbetalingen en geen toegang tot geschillencommissies. Bovendien kun je bij problemen nergens terecht voor hulp of compensatie.

Waarom de Kansspelautoriteit waarschuwt voor ongeoorloofde platforms

Een online casino zonder licentie in Nederland is een goksite die niet is goedgekeurd door de Kansspelautoriteit. Stel je voor: je logt in, hoopt op winst, maar er is geen toezicht. Zulke casino’s missen eerlijke spellencontrole, spelersbescherming en uitbetalingsgaranties. Je speelt er op eigen risico, zonder vangnet. De Autoriteit waarschuwt dat je geld kunt verliezen zonder verhaal, en dat verslavingszorg niet is geregeld. Bovendien is meedoen strafbaar noch beschermd. Kies daarom altijd een legaal casino met een Nederlandse vergunning, zodat je veilig en verantwoord kunt spelen.

Hoe herken je een aanbieder zonder CRUKS-koppeling?

Een online casino zonder licentie in Nederland is een aanbieder die niet is toegelaten door de Kansspelautoriteit en dus illegaal opereert. Dergelijke sites missen verplichte controles op leeftijd, speelgedrag en uitbetalingen. Spelers riskeren blokkades, verlies van tegoeden en geen rechtsbescherming bij geschillen.

casino zonder vergunning

Kies nooit online casinos zonder cruks voor een illegaal casino: je hebt geen enkele garantie op uitbetaling of eerlijke spellen.

  1. Geen vergunning van de Kansspelautoriteit.
  2. Geen verplichte verslavingspreventie.
  3. Geen juridische bescherming voor spelers.

De risico’s van gokken bij een niet-gereguleerde aanbieder

Bij een niet-gereguleerde gokaanbieder ontbreekt vaak het toezicht dat wettelijk verplicht is, waardoor spelers minder bescherming genieten. Er is geen garantie op eerlijke spellen, correcte uitbetalingen of een veilige omgang met persoonsgegevens. Ook kunnen verslavingspreventie en limietinstellingen ontbreken, wat het risico op problematisch gokgedrag vergroot. Zonder vergunning is er geen beroep mogelijk op een geschillencommissie of compensatieregeling bij conflicten. Daarnaast kunnen stortingen en winsten moeilijk terug te vorderen zijn, en bestaat het gevaar dat de aanbieder plotseling verdwijnt. Gebruikers doen er daarom verstandig aan alleen te spelen bij een vergunde aanbieder met duidelijk toezicht en naleving van de wet.

Geen bescherming van je saldo bij geschillen

Bij een niet-gereguleerde gokaanbieder ontbreekt elk toezicht op eerlijkheid en uitbetaling. Je hebt geen wettelijke bescherming bij geschillen, en je persoonsgegevens kunnen worden misbruikt of doorverkocht. Vaak zijn de winkansen gemanipuleerd en worden winsten zonder opgaaf van reden geweigerd.

Zonder vergunning is er geen onafhankelijke geschillencommissie, geen limiet op verlies, en geen garantie dat je je geld ooit terugziet.

Bovendien zijn stortingen vaak niet traceerbaar, wat witwassen en fraude in de hand werkt. Speel alleen bij aanbieders met een vergunning van de Kansspelautoriteit.

Uitbetalingsproblemen en onbereikbare klantenservice

Bij een niet-gereguleerde online gokaanbieder weet je nooit waar je aan toe bent. Je geld kan zomaar verdwijnen, uitbetalingen worden tegengehouden en er is geen enkele instantie waar je terechtkunt met een klacht. Vaak ontbreken eerlijke spelregels, staat de kansberekening niet vast en kun je verslavingsrisico’s niet goed inschatten. Ook je persoonsgegevens liggen op straat, want toezicht op privacy is er niet. Kortom: je speelt zonder vangnet, en dat kan je duur komen te staan.

Verslavingsrisico’s zonder verplichte limieten

Bij een niet-gereguleerde online aanbieder ontbreken vaak vergunningen en toezicht, waardoor je als speler minder bescherming geniet. Uitbetalingen kunnen worden vertraagd of geweigerd, en er is geen onafhankelijke geschillenbeslechting. Ook bestaat het risico op malafide praktijken zoals manipulatie van spellen of misbruik van persoonlijke gegevens.

Zonder toezicht is er geen garantie dat je je geld terugkrijgt of dat geschillen eerlijk worden opgelost.

  • Geen wettelijke bescherming bij geschillen
  • Onzekerheid over uitbetalingen
  • Verhoogd risico op fraude en dataverlies

Dataprivacy en malafide betaalmethoden

Bij een niet-gereguleerde gokaanbieder loop je grote risico’s. Je hebt geen wettelijke bescherming, dus uitbetalingen kunnen worden geweigerd en je geld verdwijnt mogelijk spoorloos. Er is geen toezicht op eerlijk spel, waardoor manipulatie van spellen vaak voorkomt.

Zonder vergunning is er niemand die je beschermt tegen oplichting of misbruik van je gegevens.

  • Geen garantie op uitbetaling
  • Geen verslavingspreventie of hulplijn
  • Grote kans op identiteitsfraude

Bovendien kun je bij illegale aanbieders niet terecht voor klachten of geschillen. Speel daarom alleen bij vergunde casino’s voor een veilige ervaring.

Juridische gevolgen voor spelers en exploitanten

Spelers en exploitanten van kansspelen in Nederland krijgen te maken met strikte juridische kaders onder de Wet op de kansspelen en de Kansspelautoriteit. Voor spelers kunnen deelname aan illegale kansspelen leiden tot het niet kunnen afdwingen van winsten, while exploitanten riskeren bestuurlijke boetes, intrekking van vergunningen en strafrechtelijke vervolging. Voor exploitanten gelden daarnaast verplichtingen rond verslavingspreventie, leeftijdsverificatie en het afdragen van kansspelbelasting.

Een cruciale juridische consequentie is dat overeenkomsten met illegale aanbieders doorgaans nietig zijn, waardoor spelers hun inleg of winst niet kunnen terugvorderen.

Handhaving gebeurt via toezicht, boetes en blokkering van websites, wat zowel spelers als exploitanten raakt in hun rechten en plichten.

Boetes en handhavingsacties van de toezichthouder

De juridische gevolgen voor spelers en exploitanten verschillen sterk per rol. Spelers riskeren bij illegale deelname doorgaans geen strafrechtelijke vervolging, maar kunnen wel hun inleg en winsten verliezen; exploitanten daarentegen staan bloot aan bestuursrechtelijke boetes, intrekking van de vergunning en strafrechtelijke aansprakelijkheid. Let op de volgende kernpunten:

  • Spelers: civiel verlies van uitbetalingen, geen recht op geschillenbeslechting.
  • Exploitanten: boetes tot zes cijfers, vervolging wegens overtreding van de Wet op de kansspelen.
  • Beide partijen: mogelijk verplichte deelname aan kansspelverslavingspreventie.

Strafrechtelijke aansprakelijkheid bij deelname

Spelers en exploitanten van kansspelen in Nederland krijgen te maken met strenge juridische gevolgen bij overtredingen. Voor spelers kan deelname aan illegale kansspelen leiden tot het verlies van rechtsbescherming en het niet kunnen terugvorderen van inzetten. Exploitanten riskeren daarentegen hoge boetes, dwangsommen of zelfs een verbod op hun activiteiten. Zonder de juiste vergunningen staat u juridisch met lege handen. De Kansspelautoriteit handhaaft actief en legt sancties op die financieel pijn doen.

Geldigheid van spelovereenkomsten en kans op verlies van inleg

De juridische gevolgen voor spelers en exploitanten kunnen flink oplopen. Spelers riskeren boetes of strafblad bij illegaal gokken, terwijl exploitanten te maken krijgen met dwangsommen, vergunningintrekking of zelfs celstraf. Denk aan:

  • Spelers: boetes tot €8.700, verlies van winsten
  • Exploitanten: boetes tot €87.000, sluiting van de site
  • Beide: civiele claims en reputatieschade

Kortom, zonder geldige vergunning hangt er altijd een juridisch risico boven je hoofd.

Waarom spelers toch kiezen voor een offshore platform

Spelers kiezen steeds vaker voor een offshore platform omdat het simpelweg meer vrijheid biedt dan de gemiddelde Nederlandse goksite. Denk aan ruimere bonussen, meer betaalmethodes en vaak ook spellen die hier niet eens worden aangeboden. Daarnaast speelt anonimiteit een grote rol: je hoeft niet meteen je hele hebben en houwen te delen. Natuurlijk, het is niet allemaal rozengeur en maneschijn, want je moet goed opletten of een site wel betrouwbaar is. Toch wegen de voordelen voor veel spelers zwaarder dan de nadelen, zeker als ze op zoek zijn naar een ruimer speelaanbod zonder al te veel gedoe.

Lokkende bonussen en hoge stortingslimieten

Spelers kiezen toch voor een offshore platform omdat het simpelweg meer voordelen biedt dan een reguliere site. Denk aan ruimere bonussen, minder strikte regels en vaak een groter spelaanbod. Bovendien zijn stortingen en opnames er vaak flexibeler, zonder al te veel gedoe. Dat maakt het aantrekkelijk voor wie vrijer wil spelen.

Afwezigheid van registratieplicht en entreeverificatie

Op een regenachtige vrijdagavond zat Mark met zijn laptop op de bank, starend naar de zoveelste advertentie voor een online casino. Hij had genoeg van de beperkte opties en trage uitbetalingen bij lokale aanbieders. Veel spelers kiezen daarom voor een offshore casino platform, omdat het hen toegang geeft tot een breder spelaanbod, hogere bonussen en minder strikte regels. Het voelt als een geheime speeltuin die nooit sluit. Bovendien waarderen ze de grotere financiële vrijheid en de mogelijkheid om anoniem te blijven, wat voor velen een doorslaggevende reden is.

Acceptatie van cryptovaluta en anonieme betalingen

Spelers kiezen voor een offshore platform vanwege de ruimere bonusvoorwaarden, hogere uitbetalingspercentages en een groter spelaanbod dan bij veel lokale casino’s. Ze waarderen de flexibiliteit om zonder beperkende stortingslimieten te spelen en profiteren van snelle uitbetalingen in meerdere valuta’s. Daarnaast biedt een offshore platform vaak meer privacy en anonimiteit, wat voor sommigen doorslaggevend is. Hoewel het om een bewuste afweging gaat, wegen de voordelen voor hen zwaarder dan de nadelen.

Alternatieven voor gokken zonder Nederlandse toestemming

Wie op zoek is naar alternatieven voor gokken zonder Nederlandse toestemming, vindt steeds vaker creatieve opties buiten het traditionele casino. Denk aan gratis online spellen, esports-toernooien of fantasy leagues waarbij je met punten speelt in plaats van geld. Ook sociale casino’s zonder inzet, puzzelwedstrijden en quizavonden in het café bieden spanning zonder juridische risico’s. Deze legale vormen van vermaak houden het spelplezier intact, maar vermijden bewust de Kansspelautoriteit. Zo blijft de sensatie van winnen voelbaar, terwijl je veilig en verantwoord bezig bent.

Legale online casino’s met een CRUKS-vergunning

casino zonder vergunning

Zoek je een alternatief voor gokken zonder Nederlandse toestemming? Er zijn genoeg leuke opties die geen cent kosten. Probeer eens gratis poker-apps, esports-toernooien of fantasy sports leagues. Ook quizzen met vrienden of online games met prijzen zijn populair. Je hoeft echt niet in te zetten om toch spanning te voelen. Denk aan:

  • Gratis sociale casino-apps
  • Esports en fantasy leagues
  • Lokale quizavonden

Fysieke speelhallen en staatsloterijen

Wie zonder Nederlandse toestemming toch wil gokken, kan uitwijken naar alternatieven voor online kansspelen zoals sociale casino-apps, fantasy sports of gratis pokertoernooien. Deze opties bieden vermaak zonder inzet van echt geld en vallen buiten de vergunningplicht. Let echter op: betaalde deelname of prijzen met geldwaarde kunnen alsnog onder de Wet op de kansspelen vallen. Kies daarom bij voorkeur platforms die expliciet geen inleg vragen en transparant zijn over hun voorwaarden. Raadpleeg bij twijfel altijd de Kansspelautoriteit, want de handhaving op illegale aanbieders is streng en de risico’s op verslaving en fraude blijven aanwezig.

Zelflimitering via het Centraal Register Uitsluiting Kansspelen

Illegale goksites zonder Nederlandse vergunning vormen een groeiend probleem. Spelers wenden zich tot alternatieven voor gokken zonder Nederlandse toestemming, zoals buitenlandse casino’s, crypto-gokplatforms en sociale casinospellen. Deze aanbieders vallen niet onder het toezicht van de Kansspelautoriteit, waardoor consumentenbescherming, verslavingspreventie en uitbetalingsgaranties ontbreken. De Rijksoverheid blokkeert dergelijke sites actief en waarschuwt voor financiële en juridische risico’s. Wie toch speelt via een niet-vergunde aanbieder, kan geen beroep doen op geschillenbeslechting of stortingslimieten.

  • Buitenlandse casino’s zonder NL-vergunning
  • Crypto-gokplatforms
  • Sociale casinospellen met virtuele munten

Vraag: Is gokken via een buitenlandse site strafbaar? Antwoord: Voor spelers niet, maar de aanbieder overtreedt de wet en de site kan worden geblokkeerd.

Hoe de Kansspelautoriteit illegale platforms opspoort

In de schaduw van het digitale goklandschap speurt de Kansspelautoriteit als een digitale detective naar illegale gokplatforms. Met geavanceerde crawlers en algoritmes scant de toezichthouder het web, van sociale media tot cryptoforums, op signalen van ongeoorloofde kansspelen. Meldingen van spelers en concurrenten vormen daarbij een belangrijke tipbron. Zodra een verdacht platform in beeld komt, analyseren onderzoekers het aanbod, de betaalmethoden en de toegankelijkheid voor Nederlandse gebruikers. Bij voldoende bewijs volgt een blokkadebevel of een boete, en wordt de site uit de lucht gehaald. Zo houdt de Kansspelautoriteit de gokmarkt veilig en eerlijk.

casino zonder vergunning

IP-blokkades en domeinnaamverboden

De Kansspelautoriteit spoort illegale kansspelplatforms op via online monitoring en handhaving. Het systeem scant websites, apps en sociale media op signalen zoals ontbrekende vergunningen of gerichte reclame naar kwetsbare groepen. Ook gebruiken onderzoekers geautomatiseerde crawlers en meldingen van het publiek. Na identificatie volgt een onderzoek naar eigenaarschap en betalingsstromen. Vervolgens legt de autoriteit dwangsommen of boetes op en verzoekt providers en betaaldiensten de toegang te blokkeren. Deze aanpak combineert technische opsporing met juridische stappen om het legale aanbod te beschermen.

Samenwerking met buitenlandse toezichthouders

De Kansspelautoriteit spoort illegale kansspelplatforms op met een combinatie van geavanceerde monitoring, datamining en slimme recherche. Door continue scans van websites, apps en crypto-transacties detecteert de toezichthouder verboden aanbod razendsnel. Ook speelt het meldingen van spelers en concurrenten direct door naar het onderzoeksteam.

Zodra een illegaal platform in beeld is, grijpt de Kansspelautoriteit genadeloos in met dwangsommen, blokkades en boetes.

casino zonder vergunning

  1. Geautomatiseerde crawlers scannen het internet op verdachte kansspelsites.
  2. Financiële stromen en betaalproviders worden geanalyseerd op illegale transacties.
  3. Na bewijs volgen lasten onder dwangsom en domeinblokkades.

Deze daadkrachtige aanpak ontmoedigt exploitanten en beschermt spelers effectief.

Meldingen van gedupeerde spelers als startpunt

casino zonder vergunning

De Kansspelautoriteit spoort illegale platforms op via geavanceerde monitoringtools, internationale samenwerking en anonieme testaankopen. Zodra een overtreding wordt vermoed, volgen waarschuwingen, dwangsommen of blokkades. Zo blijft het speelveld eerlijk en veilig.

Kenmerken van een betrouwbaar online casino

Een betrouwbaar online casino herken je aan een paar duidelijke dingen. Allereerst heeft het een geldige vergunning van een erkende autoriteit, zoals de Kansspelautoriteit. Daarnaast zijn veilige betaalmethoden en een transparant uitbetalingsproces essentieel. Lees ook de algemene voorwaarden: staan er geen vage regels over bonussen? Een echt betrouwbaar casino heeft klantenservice die snel reageert en geen verborgen kosten rekent. Tot slot: check reviews van andere spelers. Als iets te mooi lijkt om waar te zijn, is het dat meestal ook. Vertrouw op je gevoel, maar vooral op duidelijke keurmerken.

Zichtbare vergunninggegevens en toezichthouder

Een betrouwbaar online casino herken je aan een geldige vergunning van een erkende autoriteit, zoals de Kansspelautoriteit. Transparantie over uitbetalingen, heldere bonusvoorwaarden en een goede klantenservice zijn essentieel. Let ook op beveiligde betalingsmethoden en eerlijke spellen met gecertificeerde random number generators.

  • Erkende vergunning en toezicht
  • Duidelijke algemene voorwaarden
  • Snelle en veilige uitbetalingen
  • Responsieve klantenondersteuning
  • Eerlijke spellen en RNG-certificering

Transparante algemene voorwaarden en uitbetalingsbeleid

Toen Lisa voor het eerst een online casino probeerde, lette ze meteen op de kenmerken van een betrouwbaar online casino. Een echt betrouwbaar platform beschikt over een geldige vergunning, transparante uitbetalingsvoorwaarden en een uitstekende reputatie. Zonder die zekerheden voelt gokken als een gok te veel. Let daarom op de volgende punten:

  • Een Kansspelautoriteit-vergunning of gelijkwaardige Europese licentie
  • Duidelijke informatie over stortingen, opnames en eventuele kosten
  • Beveiligde verbindingen en gecertificeerde spellen van bekende providers
  • Snelle, vriendelijke klantenservice en verantwoorde speel tools

Aangesloten bij een erkend geschillenloket

Toen Lisa haar eerste storting deed, lette ze meteen op de signalen van een betrouwbaar online casino. Een legitieme goksite beschikt over een geldige vergunning van een erkende autoriteit, zoals de Kansspelautoriteit. Daarnaast zijn transparante bonusvoorwaarden, veilige betaalmethoden en een responsief klantenservice-team essentieel. Lisa controleerde ook of de spellen door onafhankelijke partijen worden gecontroleerd op eerlijkheid. Zo voorkwam ze verrassingen en speelde ze met een gerust hart.

Veelgestelde vragen over gokken zonder Nederlandse licentie

Steeds meer spelers zoeken naar online gokken zonder Nederlandse licentie, maar wat houdt dat precies in? Vaak gaat het om casino’s die niet bij de Kansspelautoriteit zijn geregistreerd en dus geen vergunning hebben om hier actief te zijn. Veelgestelde vragen gaan over de legaliteit, uitbetalingen en veiligheid van zulke platforms. Mag je er als Nederlander spelen? Wat als je niet wordt uitbetaald? En hoe zit het met belasting? Het antwoord is simpel: zonder licentie loop je flink risico. Je hebt geen bescherming, geen geschillencommissie en vaak ook geen garantie op je winst. Gokken zonder Nederlandse licentie lijkt aantrekkelijk, maar de keerzijde is groot.

Is spelen bij een buitenlandse site strafbaar?

Wie speelt bij een online casino zonder Nederlandse licentie, loopt flink risico. Gokken zonder Nederlandse licentie betekent geen bescherming van de Kansspelautoriteit, geen verplichte verslavingszorg en vaak lastige uitbetalingen.

Zonder vergunning heb je juridisch geen poot om op te staan bij geschillen over je inleg of winst.

Veelgestelde vragen gaan dan ook over veiligheid, uitbetaling en legaliteit. Kies daarom altijd voor een erkende aanbieder met een KSA-vergunning. Dat is niet alleen verstandig, maar ook de enige manier om zorgeloos te spelen.

Kun je je inleg terugvorderen van een illegaal platform?

Veelgestelde vragen over gokken zonder Nederlandse licentie richten zich vaak op de legaliteit en risico’s van offshore casino’s. Spelers willen weten of zij kunnen deelnemen aan kansspelen die niet door de Kansspelautoriteit zijn vergund. Gokken zonder Nederlandse licentie is voor aanbieders verboden, maar de handhaving richt zich vooral op operators, niet op individuele spelers. Consumenten lopen echter risico’s zoals uitbetalingsproblemen, gebrek aan verslavingspreventie en geen toegang tot geschillenbeslechting. De Nederlandse wet biedt geen bescherming bij deelname aan illegale kansspelen.

Wat doet de overheid tegen ongeoorloofde goksites?

Veelgestelde vragen over gokken zonder Nederlandse licentie richten zich vaak op de legaliteit en risico’s. Gokken zonder Nederlandse licentie is illegaal; de Kansspelautoriteit handhaaft actief en kan boetes opleggen aan zowel aanbieders als spelers.

  • Geen toegang tot geschillenbeslechting of verslavingszorg
  • Geen garantie op uitbetalingen
  • Risico op fraude en identiteitsdiefstal

Spelers hebben geen enkele wettelijke bescherming bij illegale gokwebsites.

Vaak vragen mensen of VPN-gebruik is toegestaan; dat doorbreekt de blokkade maar maakt deelname nog steeds strafbaar. Controleer altijd of een aanbieder een Nederlandse licentie van de Ksa heeft.

Hoe controleer je of een casino een geldige vergunning heeft?

Toen Mark hoorde dat sommige online casino’s geen Nederlandse kansspellicentie hebben, dook hij in de meestgestelde vragen. Spelers willen weten of zulke sites veilig zijn, of uitbetalingen gegarandeerd worden en welke risico’s ze lopen. Vaak blijkt dat er geen toezicht is, waardoor klachten moeilijk te verhalen zijn. Een gokverslaving wordt zo extra gevaarlijk, omdat hulp en bescherming ontbreken. Wie toch speelt, doet er goed aan eerst de voorwaarden en vergunningen te controleren. Zo voorkom je verrassingen achteraf.

Posts Recentes