/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "../modules/element-manager/assets/js/api.js":
/*!***************************************************!*\
!*** ../modules/element-manager/assets/js/api.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.saveDisabledWidgets = exports.markNoticeViewed = exports.getUsageWidgets = exports.getAdminAppData = void 0;
var _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ "../node_modules/@babel/runtime/regenerator/index.js"));
var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "../node_modules/@babel/runtime/helpers/asyncToGenerator.js"));
var saveDisabledWidgets = exports.saveDisabledWidgets = /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(widgetsDisabled) {
var elementsRestriction,
bodyData,
_args = arguments,
_t;
return _regenerator.default.wrap(function (_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
elementsRestriction = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
_context.prev = 1;
bodyData = {
action: 'elementor_element_manager_save_disabled_elements',
nonce: eElementManagerConfig.nonce,
widgets: JSON.stringify(widgetsDisabled)
};
if (null !== elementsRestriction) {
bodyData.elements_restriction = JSON.stringify(elementsRestriction);
}
_context.next = 2;
return fetch(eElementManagerConfig.ajaxurl, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams(bodyData)
});
case 2:
_context.next = 4;
break;
case 3:
_context.prev = 3;
_t = _context["catch"](1);
console.error(_t); // eslint-disable-line no-console
case 4:
case "end":
return _context.stop();
}
}, _callee, null, [[1, 3]]);
}));
return function saveDisabledWidgets(_x) {
return _ref.apply(this, arguments);
};
}();
var getAdminAppData = exports.getAdminAppData = /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
var response, data, _t2;
return _regenerator.default.wrap(function (_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
_context2.next = 1;
return fetch(eElementManagerConfig.ajaxurl, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
action: 'elementor_element_manager_get_admin_app_data',
nonce: eElementManagerConfig.nonce
})
});
case 1:
response = _context2.sent;
_context2.next = 2;
return response.json();
case 2:
data = _context2.sent;
if (!data.success) {
_context2.next = 3;
break;
}
return _context2.abrupt("return", data.data);
case 3:
_context2.next = 5;
break;
case 4:
_context2.prev = 4;
_t2 = _context2["catch"](0);
console.error(_t2); // eslint-disable-line no-console
case 5:
case "end":
return _context2.stop();
}
}, _callee2, null, [[0, 4]]);
}));
return function getAdminAppData() {
return _ref2.apply(this, arguments);
};
}();
var getUsageWidgets = exports.getUsageWidgets = /*#__PURE__*/function () {
var _ref3 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
var response, data, _t3;
return _regenerator.default.wrap(function (_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
_context3.prev = 0;
_context3.next = 1;
return fetch(eElementManagerConfig.ajaxurl, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
action: 'elementor_element_manager_get_widgets_usage',
nonce: eElementManagerConfig.nonce
})
});
case 1:
response = _context3.sent;
_context3.next = 2;
return response.json();
case 2:
data = _context3.sent;
if (!data.success) {
_context3.next = 3;
break;
}
return _context3.abrupt("return", data.data);
case 3:
_context3.next = 5;
break;
case 4:
_context3.prev = 4;
_t3 = _context3["catch"](0);
console.error(_t3); // eslint-disable-line no-console
case 5:
case "end":
return _context3.stop();
}
}, _callee3, null, [[0, 4]]);
}));
return function getUsageWidgets() {
return _ref3.apply(this, arguments);
};
}();
var markNoticeViewed = exports.markNoticeViewed = /*#__PURE__*/function () {
var _ref4 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4(noticeId, nonce) {
var _t4;
return _regenerator.default.wrap(function (_context4) {
while (1) switch (_context4.prev = _context4.next) {
case 0:
_context4.prev = 0;
_context4.next = 1;
return fetch(eElementManagerConfig.ajaxurl, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
action: 'elementor_set_admin_notice_viewed',
notice_id: noticeId,
_wpnonce: nonce
})
});
case 1:
_context4.next = 3;
break;
case 2:
_context4.prev = 2;
_t4 = _context4["catch"](0);
console.error(_t4); // eslint-disable-line no-console
case 3:
case "end":
return _context4.stop();
}
}, _callee4, null, [[0, 2]]);
}));
return function markNoticeViewed(_x2, _x3) {
return _ref4.apply(this, arguments);
};
}();
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/App.js":
/*!******************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/App.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.App = void 0;
var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react"));
var _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ "../node_modules/@babel/runtime/regenerator/index.js"));
var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "../node_modules/@babel/runtime/helpers/asyncToGenerator.js"));
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
var _hooks = __webpack_require__(/*! ./hooks */ "../modules/element-manager/assets/js/app-editor-one/hooks/index.js");
var _components = __webpack_require__(/*! ./components */ "../modules/element-manager/assets/js/app-editor-one/components/index.js");
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
var App = exports.App = function App() {
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
isConfirmDialogOpen = _useState2[0],
setIsConfirmDialogOpen = _useState2[1];
var _useElementManager = (0, _hooks.useElementManager)(),
isLoading = _useElementManager.isLoading,
widgets = _useElementManager.widgets,
promotionWidgets = _useElementManager.promotionWidgets,
plugins = _useElementManager.plugins,
roles = _useElementManager.roles,
widgetsDisabled = _useElementManager.widgetsDisabled,
widgetsRoleRestrictions = _useElementManager.widgetsRoleRestrictions,
setWidgetsRoleRestrictions = _useElementManager.setWidgetsRoleRestrictions,
promotionData = _useElementManager.promotionData,
noticeData = _useElementManager.noticeData,
usageWidgets = _useElementManager.usageWidgets,
changeProgress = _useElementManager.changeProgress,
isSnackbarOpen = _useElementManager.isSnackbarOpen,
setIsSnackbarOpen = _useElementManager.setIsSnackbarOpen,
getWidgetUsage = _useElementManager.getWidgetUsage,
scanUsageElements = _useElementManager.scanUsageElements,
saveChanges = _useElementManager.saveChanges,
deactivateAllUnusedWidgets = _useElementManager.deactivateAllUnusedWidgets,
enableAllWidgets = _useElementManager.enableAllWidgets,
toggleWidget = _useElementManager.toggleWidget,
dismissNotice = _useElementManager.dismissNotice;
var _useWidgetFilters = (0, _hooks.useWidgetFilters)(widgets, widgetsDisabled, getWidgetUsage),
searchKeyword = _useWidgetFilters.searchKeyword,
setSearchKeyword = _useWidgetFilters.setSearchKeyword,
filterByPlugin = _useWidgetFilters.filterByPlugin,
setFilterByPlugin = _useWidgetFilters.setFilterByPlugin,
filterByStatus = _useWidgetFilters.filterByStatus,
setFilterByStatus = _useWidgetFilters.setFilterByStatus,
sortedAndFilteredWidgets = _useWidgetFilters.sortedAndFilteredWidgets,
getSortingIndicatorClasses = _useWidgetFilters.getSortingIndicatorClasses,
onSortingClicked = _useWidgetFilters.onSortingClicked,
setSortByUsage = _useWidgetFilters.setSortByUsage;
var handleScanUsage = (0, _react.useCallback)(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
return _regenerator.default.wrap(function (_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 1;
return scanUsageElements();
case 1:
setSortByUsage();
case 2:
case "end":
return _context.stop();
}
}, _callee);
})), [scanUsageElements, setSortByUsage]);
var handleSaveClick = (0, _react.useCallback)(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
return _regenerator.default.wrap(function (_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
setIsConfirmDialogOpen(false);
_context2.next = 1;
return saveChanges();
case 1:
case "end":
return _context2.stop();
}
}, _callee2);
})), [saveChanges]);
if (isLoading) {
return /*#__PURE__*/_react.default.createElement(_ui.Stack, {
justifyContent: "center",
sx: {
margin: 12
}
}, /*#__PURE__*/_react.default.createElement(_ui.CircularProgress, {
size: 80
}));
}
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ui.Typography, {
variant: "body2",
color: "text.secondary",
sx: {
marginBlockEnd: 2.5,
maxWidth: 800
}
}, (0, _i18n.__)('Here\'s where you can fine-tune Elementor to your workflow. Disable elements you don\'t use for a cleaner interface, more focused creative experience, and improved performance.', 'elementor'), ' ', /*#__PURE__*/_react.default.createElement(_ui.Link, {
href: "https://go.elementor.com/wp-dash-element-manager/",
rel: "noreferrer",
target: "_blank",
color: "info.light"
}, (0, _i18n.__)('Learn More', 'elementor'))), noticeData && !noticeData.is_viewed && /*#__PURE__*/_react.default.createElement(_components.NoticeAlert, {
onDismiss: dismissNotice
}), /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_components.SearchFilters, {
searchKeyword: searchKeyword,
onSearchChange: setSearchKeyword,
filterByPlugin: filterByPlugin,
onPluginFilterChange: setFilterByPlugin,
filterByStatus: filterByStatus,
onStatusFilterChange: setFilterByStatus,
plugins: plugins,
usageIsLoading: usageWidgets.isLoading,
usageData: usageWidgets.data,
widgetsDisabledCount: widgetsDisabled.length,
onScanUsage: handleScanUsage,
onDeactivateUnused: deactivateAllUnusedWidgets,
onEnableAll: enableAllWidgets,
onSaveChanges: function onSaveChanges() {
return setIsConfirmDialogOpen(true);
},
isSaving: changeProgress.isSaving,
hasUnsavedChanges: changeProgress.isUnsavedChanges
}), /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_components.WidgetsTable, {
widgets: sortedAndFilteredWidgets,
widgetsDisabled: widgetsDisabled,
widgetsRoleRestrictions: widgetsRoleRestrictions,
setWidgetsRoleRestrictions: setWidgetsRoleRestrictions,
roles: roles,
promotionWidgets: promotionWidgets,
promotionData: promotionData,
usageWidgets: usageWidgets,
getWidgetUsage: getWidgetUsage,
onScanUsage: handleScanUsage,
onToggleWidget: toggleWidget,
getSortingIndicatorClasses: getSortingIndicatorClasses,
onSortingClicked: onSortingClicked
})), /*#__PURE__*/_react.default.createElement(_components.PromotionWidgetsTable, {
widgets: promotionWidgets,
promotionData: promotionData
})), /*#__PURE__*/_react.default.createElement(_components.ConfirmDialog, {
isOpen: isConfirmDialogOpen,
onClose: function onClose() {
return setIsConfirmDialogOpen(false);
},
onConfirm: handleSaveClick
}), /*#__PURE__*/_react.default.createElement(_ui.Snackbar, {
open: isSnackbarOpen,
autoHideDuration: 6000,
onClose: function onClose() {
return setIsSnackbarOpen(false);
},
message: (0, _i18n.__)('We saved your changes.', 'elementor'),
anchorOrigin: {
vertical: 'bottom',
horizontal: 'center'
}
}));
};
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/components/ConfirmDialog.js":
/*!***************************************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/components/ConfirmDialog.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.ConfirmDialog = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
var ConfirmDialog = exports.ConfirmDialog = function ConfirmDialog(_ref) {
var isOpen = _ref.isOpen,
onClose = _ref.onClose,
onConfirm = _ref.onConfirm;
return /*#__PURE__*/_react.default.createElement(_ui.Dialog, {
open: isOpen,
onClose: onClose,
maxWidth: "sm"
}, /*#__PURE__*/_react.default.createElement(_ui.DialogTitle, null, (0, _i18n.__)('Sure you want to save these changes?', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.DialogContent, null, /*#__PURE__*/_react.default.createElement(_ui.DialogContentText, null, (0, _i18n.__)('Turning widgets off will hide them from the editor panel, and can potentially affect your layout or front-end.', 'elementor'), /*#__PURE__*/_react.default.createElement(_ui.Box, {
component: "span",
sx: {
display: 'block',
mt: 2.5
}
}, (0, _i18n.__)('If you\'re adding widgets back in, enjoy them!', 'elementor')))), /*#__PURE__*/_react.default.createElement(_ui.DialogActions, null, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
direction: "row",
gap: 2,
justifyContent: "flex-end"
}, /*#__PURE__*/_react.default.createElement(_ui.Button, {
variant: "outlined",
color: "secondary",
onClick: onClose,
className: "e-id-elementor-element-manager-modal-button-cancel"
}, (0, _i18n.__)('Cancel', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.Button, {
variant: "contained",
onClick: onConfirm,
className: "e-id-elementor-element-manager-modal-button-save"
}, (0, _i18n.__)('Save', 'elementor')))));
};
ConfirmDialog.propTypes = {
isOpen: _propTypes.default.bool.isRequired,
onClose: _propTypes.default.func.isRequired,
onConfirm: _propTypes.default.func.isRequired
};
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/components/NoticeAlert.js":
/*!*************************************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/components/NoticeAlert.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.NoticeAlert = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
var NoticeAlert = exports.NoticeAlert = function NoticeAlert(_ref) {
var onDismiss = _ref.onDismiss;
return /*#__PURE__*/_react.default.createElement(_ui.Box, {
sx: {
mb: 2
}
}, /*#__PURE__*/_react.default.createElement(_ui.Alert, {
severity: "warning",
onClose: onDismiss
}, /*#__PURE__*/_react.default.createElement(_ui.Typography, {
component: "strong",
variant: "body2",
sx: {
fontWeight: 700
}
}, (0, _i18n.__)('Before you continue:', 'elementor')), ' ', (0, _i18n.__)('Deactivating widgets here will remove them from both the Elementor Editor and your website, which can cause changes to your overall layout, design and what visitors see.', 'elementor')));
};
NoticeAlert.propTypes = {
onDismiss: _propTypes.default.func.isRequired
};
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/components/PromotionWidgetsTable.js":
/*!***********************************************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/components/PromotionWidgetsTable.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.PromotionWidgetsTable = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _icons = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
var _upgradeButton = __webpack_require__(/*! ../../upgrade-button */ "../modules/element-manager/assets/js/upgrade-button.js");
var _RolePermissions = __webpack_require__(/*! ./RolePermissions */ "../modules/element-manager/assets/js/app-editor-one/components/RolePermissions.js");
var PromotionWidgetsTable = exports.PromotionWidgetsTable = function PromotionWidgetsTable(_ref) {
var widgets = _ref.widgets,
promotionData = _ref.promotionData;
var elementManager = promotionData.element_manager;
if (!widgets.length) {
return null;
}
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ui.Box, {
sx: {
mt: 5,
mb: 2.5
}
}, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
direction: "row",
justifyContent: "space-between",
alignItems: "center"
}, /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_ui.Typography, {
variant: "h6",
component: "h3"
}, (0, _i18n.__)('Elementor Pro Elements', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.Typography, {
variant: "body2",
component: "p"
}, (0, _i18n.__)('Unleash the full power of Elementor\'s features and web creation tools.', 'elementor'))), /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_upgradeButton.UpgradeButton, {
href: elementManager.url,
text: elementManager.text,
className: "e-id-elementor-element-manager-button-upgrade-pro-elements"
})))), /*#__PURE__*/_react.default.createElement(_ui.TableContainer, {
component: _ui.Paper,
variant: "outlined"
}, /*#__PURE__*/_react.default.createElement(_ui.Table, {
size: "small"
}, /*#__PURE__*/_react.default.createElement(_ui.TableHead, null, /*#__PURE__*/_react.default.createElement(_ui.TableRow, null, /*#__PURE__*/_react.default.createElement(_ui.TableCell, {
sx: function sx(theme) {
return {
width: theme.spacing(25)
};
}
}, (0, _i18n.__)('Element', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.TableCell, {
sx: function sx(theme) {
return {
width: theme.spacing(10)
};
}
}, (0, _i18n.__)('Status', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, (0, _i18n.__)('Usage', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, (0, _i18n.__)('Plugin', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
direction: "row",
justifyContent: "flex-start",
alignItems: "center",
gap: 1
}, /*#__PURE__*/_react.default.createElement(_ui.Box, null, (0, _i18n.__)('Permission', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_ui.Tooltip, {
placement: "top",
title: (0, _i18n.__)('Choose which role will have access to a specific widget.', 'elementor')
}, /*#__PURE__*/_react.default.createElement(_ui.IconButton, {
size: "small"
}, /*#__PURE__*/_react.default.createElement(_icons.HelpIcon, {
fontSize: "small"
})))))))), /*#__PURE__*/_react.default.createElement(_ui.TableBody, null, widgets.map(function (widget) {
return /*#__PURE__*/_react.default.createElement(_ui.TableRow, {
key: widget.name,
hover: true
}, /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, /*#__PURE__*/_react.default.createElement(_ui.Box, {
sx: {
display: 'flex',
alignItems: 'center'
}
}, /*#__PURE__*/_react.default.createElement("i", {
style: {
marginInlineEnd: 8
},
className: widget.icon
}), widget.title)), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, /*#__PURE__*/_react.default.createElement(_ui.Switch, {
checked: false,
disabled: true,
size: "small",
"data-id": "e-id-elementor-element-manager-toggle-".concat(widget.name)
})), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, (0, _i18n.__)('Elementor Pro', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, /*#__PURE__*/_react.default.createElement(_RolePermissions.EditButtonDisabled, {
widgetName: widget.name
})));
})))));
};
PromotionWidgetsTable.propTypes = {
widgets: _propTypes.default.arrayOf(_propTypes.default.shape({
name: _propTypes.default.string.isRequired,
title: _propTypes.default.string.isRequired,
icon: _propTypes.default.string
})).isRequired,
promotionData: _propTypes.default.shape({
element_manager: _propTypes.default.shape({
url: _propTypes.default.string,
text: _propTypes.default.string
})
}).isRequired
};
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/components/RolePermissions.js":
/*!*****************************************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/components/RolePermissions.js ***!
\*****************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.RolePermissions = exports.EditButtonDisabled = void 0;
var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react"));
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"));
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"));
var _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var toggleRoleRestrictions = function toggleRoleRestrictions(widgetName, roleId, widgetsRoleRestrictions, setWidgetsRoleRestrictions) {
var widgetRoleRestrictions = (0, _toConsumableArray2.default)(widgetsRoleRestrictions[widgetName] || []);
if (widgetRoleRestrictions.includes(roleId)) {
widgetRoleRestrictions.splice(widgetRoleRestrictions.indexOf(roleId), 1);
} else {
widgetRoleRestrictions.push(roleId);
}
setWidgetsRoleRestrictions(_objectSpread(_objectSpread({}, widgetsRoleRestrictions), {}, (0, _defineProperty2.default)({}, widgetName, widgetRoleRestrictions)));
};
var RolesList = function RolesList(_ref) {
var roles = _ref.roles,
widgetRoleRestrictions = _ref.widgetRoleRestrictions;
var rolesEnabled = roles.filter(function (role) {
return !widgetRoleRestrictions.includes(role.id);
});
if (!rolesEnabled.length) {
return /*#__PURE__*/_react.default.createElement(_ui.Typography, {
component: "span",
variant: "body2",
color: "text.primary"
}, "(", (0, _i18n.__)('Admin', 'elementor'), ")");
}
if (rolesEnabled.length === roles.length) {
return /*#__PURE__*/_react.default.createElement(_ui.Typography, {
component: "span",
variant: "body2",
color: "text.primary"
}, "(", (0, _i18n.__)('All Roles', 'elementor'), ")");
}
return /*#__PURE__*/_react.default.createElement(_ui.Typography, {
component: "span",
variant: "body2",
color: "text.primary"
}, "(", rolesEnabled.map(function (role) {
return role.name;
}).join(', '), ")");
};
RolesList.propTypes = {
roles: _propTypes.default.arrayOf(_propTypes.default.shape({
id: _propTypes.default.string.isRequired,
name: _propTypes.default.string.isRequired
})).isRequired,
widgetRoleRestrictions: _propTypes.default.arrayOf(_propTypes.default.string).isRequired
};
var RolePermissions = exports.RolePermissions = function RolePermissions(_ref2) {
var roles = _ref2.roles,
widgetName = _ref2.widgetName,
widgetsRoleRestrictions = _ref2.widgetsRoleRestrictions,
setWidgetsRoleRestrictions = _ref2.setWidgetsRoleRestrictions;
var _useState = (0, _react.useState)(null),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
anchorEl = _useState2[0],
setAnchorEl = _useState2[1];
var isOpen = Boolean(anchorEl);
var widgetRoleRestrictions = widgetsRoleRestrictions[widgetName] || [];
var handleClick = (0, _react.useCallback)(function (event) {
setAnchorEl(event.currentTarget);
}, []);
var handleClose = (0, _react.useCallback)(function () {
setAnchorEl(null);
}, []);
var isAllChecked = roles.every(function (role) {
return !widgetRoleRestrictions.includes(role.id);
});
var isIndeterminate = !isAllChecked && roles.some(function (role) {
return !widgetRoleRestrictions.includes(role.id);
});
var handleAllChange = (0, _react.useCallback)(function (event) {
if (event.target.checked) {
setWidgetsRoleRestrictions(_objectSpread(_objectSpread({}, widgetsRoleRestrictions), {}, (0, _defineProperty2.default)({}, widgetName, [])));
} else {
setWidgetsRoleRestrictions(_objectSpread(_objectSpread({}, widgetsRoleRestrictions), {}, (0, _defineProperty2.default)({}, widgetName, roles.map(function (role) {
return role.id;
}))));
}
}, [widgetName, widgetsRoleRestrictions, setWidgetsRoleRestrictions, roles]);
return /*#__PURE__*/_react.default.createElement(_ui.Box, {
sx: {
display: 'inline-flex',
alignItems: 'center',
gap: 0.5
}
}, /*#__PURE__*/_react.default.createElement(_ui.Button, {
variant: "text",
color: "secondary",
size: "small",
onClick: handleClick,
"aria-expanded": isOpen,
"aria-haspopup": "true",
className: "e-id-elementor-element-manager-button-edit-permissions-".concat(widgetName)
}, (0, _i18n.__)('Edit', 'elementor')), /*#__PURE__*/_react.default.createElement(RolesList, {
roles: roles,
widgetRoleRestrictions: widgetRoleRestrictions
}), /*#__PURE__*/_react.default.createElement(_ui.Menu, {
anchorEl: anchorEl,
open: isOpen,
onClose: handleClose,
anchorOrigin: {
vertical: 'bottom',
horizontal: 'left'
},
transformOrigin: {
vertical: 'top',
horizontal: 'left'
}
}, /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
sx: {
py: 0.5
}
}, /*#__PURE__*/_react.default.createElement(_ui.FormControlLabel, {
control: /*#__PURE__*/_react.default.createElement(_ui.Checkbox, {
checked: isAllChecked,
indeterminate: isIndeterminate,
onChange: handleAllChange,
size: "small",
color: "secondary"
}),
label: (0, _i18n.__)('All', 'elementor')
})), roles.map(function (role) {
return /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
key: role.id,
sx: {
py: 0.5
}
}, /*#__PURE__*/_react.default.createElement(_ui.FormControlLabel, {
control: /*#__PURE__*/_react.default.createElement(_ui.Checkbox, {
color: "secondary",
checked: !widgetRoleRestrictions.includes(role.id),
onChange: function onChange() {
toggleRoleRestrictions(widgetName, role.id, widgetsRoleRestrictions, setWidgetsRoleRestrictions);
},
size: "small"
}),
label: role.name
}));
})));
};
RolePermissions.propTypes = {
roles: _propTypes.default.arrayOf(_propTypes.default.shape({
id: _propTypes.default.string.isRequired,
name: _propTypes.default.string.isRequired
})).isRequired,
widgetName: _propTypes.default.string.isRequired,
widgetsRoleRestrictions: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.array]).isRequired,
setWidgetsRoleRestrictions: _propTypes.default.func.isRequired
};
var EditButtonDisabled = exports.EditButtonDisabled = function EditButtonDisabled(_ref3) {
var _ref3$widgetName = _ref3.widgetName,
widgetName = _ref3$widgetName === void 0 ? 'unknown' : _ref3$widgetName;
return /*#__PURE__*/_react.default.createElement(_ui.Button, {
variant: "text",
color: "secondary",
size: "small",
disabled: true,
className: "e-id-elementor-element-manager-button-edit-permissions-".concat(widgetName)
}, (0, _i18n.__)('Edit', 'elementor'));
};
EditButtonDisabled.propTypes = {
widgetName: _propTypes.default.string
};
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/components/SearchFilters.js":
/*!***************************************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/components/SearchFilters.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.SearchFilters = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
var FIELD_HEIGHT = 28;
var FONT_SIZE = 12;
var ICON_SIZE = 16;
var StyledTextField = (0, _ui.styled)(_ui.TextField)({
'& .MuiInputBase-root': {
height: FIELD_HEIGHT,
fontSize: FONT_SIZE
}
});
var StyledFormControl = (0, _ui.styled)(_ui.FormControl)({
'& .MuiInputBase-root': {
height: FIELD_HEIGHT,
fontSize: FONT_SIZE
},
'& .MuiSelect-icon': {
width: ICON_SIZE,
height: ICON_SIZE,
top: 'calc(50% - 8px)'
}
});
var StyledButton = (0, _ui.styled)(_ui.Button)({
height: FIELD_HEIGHT,
fontSize: FONT_SIZE,
minWidth: 'auto',
whiteSpace: 'nowrap'
});
var SearchFilters = exports.SearchFilters = function SearchFilters(_ref) {
var searchKeyword = _ref.searchKeyword,
onSearchChange = _ref.onSearchChange,
filterByPlugin = _ref.filterByPlugin,
onPluginFilterChange = _ref.onPluginFilterChange,
filterByStatus = _ref.filterByStatus,
onStatusFilterChange = _ref.onStatusFilterChange,
plugins = _ref.plugins,
usageIsLoading = _ref.usageIsLoading,
usageData = _ref.usageData,
widgetsDisabledCount = _ref.widgetsDisabledCount,
onScanUsage = _ref.onScanUsage,
onDeactivateUnused = _ref.onDeactivateUnused,
onEnableAll = _ref.onEnableAll,
onSaveChanges = _ref.onSaveChanges,
isSaving = _ref.isSaving,
hasUnsavedChanges = _ref.hasUnsavedChanges;
return /*#__PURE__*/_react.default.createElement(_ui.Stack, {
direction: {
xs: 'column',
sm: 'row'
},
alignItems: {
xs: 'stretch',
sm: 'flex-start'
},
gap: 1.5,
sx: function sx(theme) {
return {
position: 'sticky',
top: 0,
'@media screen and (max-width: 782px)': {
top: 'calc(var(--e-admin-bar-height, 0px) + var(--e-top-bar-header-height, 0px))'
},
backgroundColor: 'var(--e-one-palette-background-default)',
zIndex: 10,
paddingBlock: 2,
paddingInline: 2,
boxShadow: 'rgba(0, 0, 0, 0.15) 0 5px 10px 0',
marginBottom: theme.spacing(1)
};
}
}, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
direction: "row",
alignItems: "center",
flexWrap: "wrap",
gap: 1.5,
sx: {
flex: 1
}
}, /*#__PURE__*/_react.default.createElement(StyledTextField, {
color: "secondary",
value: searchKeyword,
size: "small",
placeholder: (0, _i18n.__)('Search', 'elementor'),
onChange: function onChange(e) {
return onSearchChange(e.target.value);
},
sx: function sx(theme) {
return {
minWidth: theme.spacing(14)
};
}
}), /*#__PURE__*/_react.default.createElement(StyledFormControl, {
size: "small",
sx: function sx(theme) {
return {
width: theme.spacing(20)
};
},
color: "secondary"
}, /*#__PURE__*/_react.default.createElement(_ui.Select, {
placeholder: (0, _i18n.__)('Plugin', 'elementor'),
value: filterByPlugin,
onChange: function onChange(event) {
return onPluginFilterChange(event.target.value);
},
"data-id": "elementor-element-manager-select-filter-by-plugin",
displayEmpty: true,
renderValue: function renderValue(value) {
if ('' === value) {
return (0, _i18n.__)('All Plugins', 'elementor');
}
var selectedPlugin = plugins.find(function (p) {
return p.value === value;
});
return selectedPlugin ? selectedPlugin.label : value;
}
}, /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
value: ""
}, (0, _i18n.__)('All Plugins', 'elementor')), plugins.map(function (plugin) {
return /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
key: plugin.value,
value: plugin.value
}, plugin.label);
}))), /*#__PURE__*/_react.default.createElement(StyledFormControl, {
size: "small",
sx: function sx(theme) {
return {
width: theme.spacing(20)
};
},
color: "secondary"
}, /*#__PURE__*/_react.default.createElement(_ui.Select, {
value: filterByStatus,
onChange: function onChange(event) {
return onStatusFilterChange(event.target.value);
},
"data-id": "elementor-element-manager-select-filter-by-status",
placeholder: (0, _i18n.__)('Status', 'elementor')
}, /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
value: "all"
}, (0, _i18n.__)('All Statuses', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
value: "active"
}, (0, _i18n.__)('Active', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.MenuItem, {
value: "inactive"
}, (0, _i18n.__)('Inactive', 'elementor')))), /*#__PURE__*/_react.default.createElement(_ui.Divider, {
orientation: "vertical",
flexItem: true,
sx: {
height: FIELD_HEIGHT,
marginBlock: 0,
marginInline: 0.5,
alignSelf: 'center',
display: {
xs: 'none',
md: 'block'
}
}
}), /*#__PURE__*/_react.default.createElement(StyledButton, {
variant: "outlined",
color: "secondary",
size: "small",
disabled: usageIsLoading,
onClick: onScanUsage,
"data-id": "e-id-elementor-element-manager-button-scan-element-usage",
loading: usageIsLoading
}, (0, _i18n.__)('Scan Element Usage', 'elementor')), /*#__PURE__*/_react.default.createElement(StyledButton, {
variant: "outlined",
color: "secondary",
size: "small",
onClick: onDeactivateUnused,
disabled: null === usageData,
"data-id": "e-id-elementor-element-manager-button-deactivate-unused-elements"
}, (0, _i18n.__)('Deactivate Unused Elements', 'elementor')), /*#__PURE__*/_react.default.createElement(StyledButton, {
variant: "outlined",
color: "secondary",
size: "small",
disabled: !widgetsDisabledCount,
onClick: onEnableAll,
"data-id": "e-id-elementor-element-manager-button-enable-all"
}, (0, _i18n.__)('Enable All', 'elementor'))), /*#__PURE__*/_react.default.createElement(StyledButton, {
variant: "contained",
size: "small",
disabled: isSaving || !hasUnsavedChanges,
onClick: onSaveChanges,
"data-id": "e-id-elementor-element-manager-button-save-changes",
loading: isSaving,
sx: {
alignSelf: 'flex-start'
}
}, (0, _i18n.__)('Save Changes', 'elementor')));
};
SearchFilters.propTypes = {
searchKeyword: _propTypes.default.string.isRequired,
onSearchChange: _propTypes.default.func.isRequired,
filterByPlugin: _propTypes.default.string.isRequired,
onPluginFilterChange: _propTypes.default.func.isRequired,
filterByStatus: _propTypes.default.string.isRequired,
onStatusFilterChange: _propTypes.default.func.isRequired,
plugins: _propTypes.default.arrayOf(_propTypes.default.shape({
label: _propTypes.default.string.isRequired,
value: _propTypes.default.string.isRequired
})).isRequired,
usageIsLoading: _propTypes.default.bool,
usageData: _propTypes.default.object,
widgetsDisabledCount: _propTypes.default.number.isRequired,
onScanUsage: _propTypes.default.func.isRequired,
onDeactivateUnused: _propTypes.default.func.isRequired,
onEnableAll: _propTypes.default.func.isRequired,
onSaveChanges: _propTypes.default.func.isRequired,
isSaving: _propTypes.default.bool,
hasUnsavedChanges: _propTypes.default.bool
};
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/components/UsageTimesColumn.js":
/*!******************************************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/components/UsageTimesColumn.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.UsageTimesColumn = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
var UsageTimesColumn = exports.UsageTimesColumn = function UsageTimesColumn(_ref) {
var widgetName = _ref.widgetName,
usageData = _ref.usageData,
isLoading = _ref.isLoading,
getWidgetUsage = _ref.getWidgetUsage,
onScanClick = _ref.onScanClick;
if (null !== usageData) {
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, getWidgetUsage(widgetName), " ", (0, _i18n.__)('times', 'elementor'));
}
if (isLoading) {
return /*#__PURE__*/_react.default.createElement(_ui.CircularProgress, {
color: "secondary",
size: 20
});
}
return /*#__PURE__*/_react.default.createElement(_ui.Button, {
onClick: onScanClick,
size: "small",
variant: "outlined",
color: "secondary",
className: "e-id-elementor-element-manager-button-show-usage",
sx: {
minWidth: function minWidth(theme) {
return theme.spacing(6);
},
height: 26
}
}, (0, _i18n.__)('Show', 'elementor'));
};
UsageTimesColumn.propTypes = {
widgetName: _propTypes.default.string.isRequired,
usageData: _propTypes.default.object,
isLoading: _propTypes.default.bool,
getWidgetUsage: _propTypes.default.func.isRequired,
onScanClick: _propTypes.default.func.isRequired
};
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/components/WidgetsTable.js":
/*!**************************************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/components/WidgetsTable.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.WidgetsTable = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _icons = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
var _upgradeButton = __webpack_require__(/*! ../../upgrade-button */ "../modules/element-manager/assets/js/upgrade-button.js");
var _RolePermissions = __webpack_require__(/*! ./RolePermissions */ "../modules/element-manager/assets/js/app-editor-one/components/RolePermissions.js");
var _UsageTimesColumn = __webpack_require__(/*! ./UsageTimesColumn */ "../modules/element-manager/assets/js/app-editor-one/components/UsageTimesColumn.js");
var StyledSwitch = (0, _ui.styled)(_ui.Switch)({
'& .MuiSwitch-track': {
backgroundColor: 'rgba(0, 0, 0, 0.12);'
},
'& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track': {
backgroundColor: '#000'
},
'& .MuiSwitch-switchBase:not(.Mui-checked) .MuiSwitch-thumb': {
backgroundColor: '#D5D8DC'
},
'& .MuiSwitch-switchBase.Mui-checked .MuiSwitch-thumb': {
backgroundColor: '#fff'
}
});
var WidgetsTable = exports.WidgetsTable = function WidgetsTable(_ref) {
var widgets = _ref.widgets,
widgetsDisabled = _ref.widgetsDisabled,
widgetsRoleRestrictions = _ref.widgetsRoleRestrictions,
setWidgetsRoleRestrictions = _ref.setWidgetsRoleRestrictions,
roles = _ref.roles,
promotionWidgets = _ref.promotionWidgets,
promotionData = _ref.promotionData,
usageWidgets = _ref.usageWidgets,
getWidgetUsage = _ref.getWidgetUsage,
onScanUsage = _ref.onScanUsage,
onToggleWidget = _ref.onToggleWidget,
getSortingIndicatorClasses = _ref.getSortingIndicatorClasses,
onSortingClicked = _ref.onSortingClicked;
var managerPermissions = promotionData.manager_permissions;
var sortingClasses = getSortingIndicatorClasses('widget');
var isWidgetSorted = sortingClasses.includes('sorted');
var widgetSortDirection = sortingClasses.includes('asc') ? 'asc' : 'desc';
var usageSortingClasses = getSortingIndicatorClasses('usage');
var isUsageSorted = usageSortingClasses.includes('sorted');
var usageSortDirection = usageSortingClasses.includes('asc') ? 'asc' : 'desc';
if (!widgets.length) {
return /*#__PURE__*/_react.default.createElement(_ui.Typography, {
color: "text.secondary"
}, (0, _i18n.__)('No elements found.', 'elementor'));
}
return /*#__PURE__*/_react.default.createElement(_ui.TableContainer, {
component: _ui.Paper,
variant: "outlined"
}, /*#__PURE__*/_react.default.createElement(_ui.Table, {
size: "small"
}, /*#__PURE__*/_react.default.createElement(_ui.TableHead, null, /*#__PURE__*/_react.default.createElement(_ui.TableRow, null, /*#__PURE__*/_react.default.createElement(_ui.TableCell, {
sx: function sx(theme) {
return {
width: theme.spacing(25)
};
}
}, /*#__PURE__*/_react.default.createElement(_ui.TableSortLabel, {
active: isWidgetSorted,
direction: isWidgetSorted ? widgetSortDirection : 'asc',
onClick: function onClick() {
return onSortingClicked('widget');
},
"data-id": "e-id-elementor-element-manager-button-sort-by-element"
}, (0, _i18n.__)('Element', 'elementor'))), /*#__PURE__*/_react.default.createElement(_ui.TableCell, {
sx: function sx(theme) {
return {
width: theme.spacing(10)
};
}
}, (0, _i18n.__)('Status', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, /*#__PURE__*/_react.default.createElement(_ui.TableSortLabel, {
active: isUsageSorted,
direction: isUsageSorted ? usageSortDirection : 'asc',
onClick: function onClick() {
return onSortingClicked('usage');
},
"data-id": "e-id-elementor-element-manager-button-sort-by-usage"
}, (0, _i18n.__)('Usage', 'elementor'))), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, (0, _i18n.__)('Plugin', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
direction: "row",
justifyContent: "flex-start",
alignItems: "center",
gap: 1
}, /*#__PURE__*/_react.default.createElement(_ui.Box, null, (0, _i18n.__)('Permission', 'elementor')), /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_ui.Tooltip, {
placement: "top",
title: (0, _i18n.__)('Choose which users will have access to each widget.', 'elementor')
}, /*#__PURE__*/_react.default.createElement(_ui.IconButton, {
size: "small"
}, /*#__PURE__*/_react.default.createElement(_icons.HelpIcon, {
fontSize: "small"
})))), null === widgetsRoleRestrictions && /*#__PURE__*/_react.default.createElement(_ui.Box, {
sx: {
marginInlineStart: 1
}
}, /*#__PURE__*/_react.default.createElement(_upgradeButton.UpgradeButton, {
href: promotionWidgets.length ? managerPermissions.pro.url : managerPermissions.advanced.url,
size: "small",
text: promotionWidgets.length ? managerPermissions.pro.text : managerPermissions.advanced.text,
className: "go-pro",
"data-id": "e-id-elementor-element-manager-button-upgrade-permissions"
})))))), /*#__PURE__*/_react.default.createElement(_ui.TableBody, null, widgets.map(function (widget) {
return /*#__PURE__*/_react.default.createElement(_ui.TableRow, {
key: widget.name,
"data-key-id": widget.name,
hover: true
}, /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, /*#__PURE__*/_react.default.createElement(_ui.Box, {
sx: {
display: 'flex',
alignItems: 'center'
}
}, /*#__PURE__*/_react.default.createElement("i", {
style: {
marginInlineEnd: 8,
marginInlineStart: 0,
display: 'inline-block'
},
className: widget.icon
}), widget.title)), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, /*#__PURE__*/_react.default.createElement(StyledSwitch, {
color: "secondary",
checked: !widgetsDisabled.includes(widget.name),
onChange: function onChange(event, checked) {
return onToggleWidget(widget.name, checked);
},
size: "small",
"data-id": "e-id-elementor-element-manager-toggle-".concat(widget.name)
})), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, /*#__PURE__*/_react.default.createElement(_UsageTimesColumn.UsageTimesColumn, {
widgetName: widget.name,
usageData: usageWidgets.data,
isLoading: usageWidgets.isLoading,
getWidgetUsage: getWidgetUsage,
onScanClick: onScanUsage
})), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, widget.plugin), /*#__PURE__*/_react.default.createElement(_ui.TableCell, null, null !== widgetsRoleRestrictions && !widgetsDisabled.includes(widget.name) ? /*#__PURE__*/_react.default.createElement(_RolePermissions.RolePermissions, {
widgetName: widget.name,
roles: roles,
widgetsRoleRestrictions: widgetsRoleRestrictions,
setWidgetsRoleRestrictions: setWidgetsRoleRestrictions
}) : /*#__PURE__*/_react.default.createElement(_RolePermissions.EditButtonDisabled, null)));
}))));
};
var widgetShape = _propTypes.default.shape({
name: _propTypes.default.string.isRequired,
title: _propTypes.default.string.isRequired,
icon: _propTypes.default.string,
plugin: _propTypes.default.string
});
WidgetsTable.propTypes = {
widgets: _propTypes.default.arrayOf(widgetShape).isRequired,
widgetsDisabled: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
widgetsRoleRestrictions: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.array]),
setWidgetsRoleRestrictions: _propTypes.default.func.isRequired,
roles: _propTypes.default.array.isRequired,
promotionWidgets: _propTypes.default.arrayOf(widgetShape).isRequired,
promotionData: _propTypes.default.shape({
manager_permissions: _propTypes.default.shape({
pro: _propTypes.default.shape({
url: _propTypes.default.string,
text: _propTypes.default.string
}),
advanced: _propTypes.default.shape({
url: _propTypes.default.string,
text: _propTypes.default.string
})
})
}).isRequired,
usageWidgets: _propTypes.default.shape({
isLoading: _propTypes.default.bool,
data: _propTypes.default.object
}).isRequired,
getWidgetUsage: _propTypes.default.func.isRequired,
onScanUsage: _propTypes.default.func.isRequired,
onToggleWidget: _propTypes.default.func.isRequired,
getSortingIndicatorClasses: _propTypes.default.func.isRequired,
onSortingClicked: _propTypes.default.func.isRequired
};
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/components/index.js":
/*!*******************************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/components/index.js ***!
\*******************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
Object.defineProperty(exports, "ConfirmDialog", ({
enumerable: true,
get: function get() {
return _ConfirmDialog.ConfirmDialog;
}
}));
Object.defineProperty(exports, "EditButtonDisabled", ({
enumerable: true,
get: function get() {
return _RolePermissions.EditButtonDisabled;
}
}));
Object.defineProperty(exports, "NoticeAlert", ({
enumerable: true,
get: function get() {
return _NoticeAlert.NoticeAlert;
}
}));
Object.defineProperty(exports, "PromotionWidgetsTable", ({
enumerable: true,
get: function get() {
return _PromotionWidgetsTable.PromotionWidgetsTable;
}
}));
Object.defineProperty(exports, "RolePermissions", ({
enumerable: true,
get: function get() {
return _RolePermissions.RolePermissions;
}
}));
Object.defineProperty(exports, "SearchFilters", ({
enumerable: true,
get: function get() {
return _SearchFilters.SearchFilters;
}
}));
Object.defineProperty(exports, "UsageTimesColumn", ({
enumerable: true,
get: function get() {
return _UsageTimesColumn.UsageTimesColumn;
}
}));
Object.defineProperty(exports, "WidgetsTable", ({
enumerable: true,
get: function get() {
return _WidgetsTable.WidgetsTable;
}
}));
var _UsageTimesColumn = __webpack_require__(/*! ./UsageTimesColumn */ "../modules/element-manager/assets/js/app-editor-one/components/UsageTimesColumn.js");
var _NoticeAlert = __webpack_require__(/*! ./NoticeAlert */ "../modules/element-manager/assets/js/app-editor-one/components/NoticeAlert.js");
var _ConfirmDialog = __webpack_require__(/*! ./ConfirmDialog */ "../modules/element-manager/assets/js/app-editor-one/components/ConfirmDialog.js");
var _SearchFilters = __webpack_require__(/*! ./SearchFilters */ "../modules/element-manager/assets/js/app-editor-one/components/SearchFilters.js");
var _WidgetsTable = __webpack_require__(/*! ./WidgetsTable */ "../modules/element-manager/assets/js/app-editor-one/components/WidgetsTable.js");
var _PromotionWidgetsTable = __webpack_require__(/*! ./PromotionWidgetsTable */ "../modules/element-manager/assets/js/app-editor-one/components/PromotionWidgetsTable.js");
var _RolePermissions = __webpack_require__(/*! ./RolePermissions */ "../modules/element-manager/assets/js/app-editor-one/components/RolePermissions.js");
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/hooks/index.js":
/*!**************************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/hooks/index.js ***!
\**************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
Object.defineProperty(exports, "useElementManager", ({
enumerable: true,
get: function get() {
return _useElementManager.useElementManager;
}
}));
Object.defineProperty(exports, "useWidgetFilters", ({
enumerable: true,
get: function get() {
return _useWidgetFilters.useWidgetFilters;
}
}));
var _useElementManager = __webpack_require__(/*! ./useElementManager */ "../modules/element-manager/assets/js/app-editor-one/hooks/useElementManager.js");
var _useWidgetFilters = __webpack_require__(/*! ./useWidgetFilters */ "../modules/element-manager/assets/js/app-editor-one/hooks/useWidgetFilters.js");
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/hooks/useElementManager.js":
/*!**************************************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/hooks/useElementManager.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.useElementManager = void 0;
var _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ "../node_modules/@babel/runtime/regenerator/index.js"));
var _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js"));
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"));
var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "../node_modules/@babel/runtime/helpers/asyncToGenerator.js"));
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"));
var _react = __webpack_require__(/*! react */ "react");
var _api = __webpack_require__(/*! ../../api */ "../modules/element-manager/assets/js/api.js");
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var useElementManager = exports.useElementManager = function useElementManager() {
var isInitialMount = (0, _react.useRef)(true);
var _useState = (0, _react.useState)(true),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
isLoading = _useState2[0],
setIsLoading = _useState2[1];
var _useState3 = (0, _react.useState)([]),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
widgets = _useState4[0],
setWidgets = _useState4[1];
var _useState5 = (0, _react.useState)([]),
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
promotionWidgets = _useState6[0],
setPromotionWidgets = _useState6[1];
var _useState7 = (0, _react.useState)([]),
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
plugins = _useState8[0],
setPlugins = _useState8[1];
var _useState9 = (0, _react.useState)([]),
_useState0 = (0, _slicedToArray2.default)(_useState9, 2),
roles = _useState0[0],
setRoles = _useState0[1];
var _useState1 = (0, _react.useState)([]),
_useState10 = (0, _slicedToArray2.default)(_useState1, 2),
widgetsDisabled = _useState10[0],
setWidgetsDisabled = _useState10[1];
var _useState11 = (0, _react.useState)(null),
_useState12 = (0, _slicedToArray2.default)(_useState11, 2),
widgetsRoleRestrictions = _useState12[0],
setWidgetsRoleRestrictions = _useState12[1];
var _useState13 = (0, _react.useState)([]),
_useState14 = (0, _slicedToArray2.default)(_useState13, 2),
promotionData = _useState14[0],
setPromotionData = _useState14[1];
var _useState15 = (0, _react.useState)(null),
_useState16 = (0, _slicedToArray2.default)(_useState15, 2),
noticeData = _useState16[0],
setNoticeData = _useState16[1];
var _useState17 = (0, _react.useState)({
isLoading: false,
data: null
}),
_useState18 = (0, _slicedToArray2.default)(_useState17, 2),
usageWidgets = _useState18[0],
setUsageWidgets = _useState18[1];
var _useState19 = (0, _react.useState)({
isSaving: false,
isUnsavedChanges: false
}),
_useState20 = (0, _slicedToArray2.default)(_useState19, 2),
changeProgress = _useState20[0],
setChangeProgress = _useState20[1];
var _useState21 = (0, _react.useState)(false),
_useState22 = (0, _slicedToArray2.default)(_useState21, 2),
isSnackbarOpen = _useState22[0],
setIsSnackbarOpen = _useState22[1];
var getWidgetUsage = (0, _react.useCallback)(function (widgetName) {
if (!usageWidgets.data || !usageWidgets.data.hasOwnProperty(widgetName)) {
return 0;
}
return usageWidgets.data[widgetName];
}, [usageWidgets.data]);
var scanUsageElements = (0, _react.useCallback)(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
var data;
return _regenerator.default.wrap(function (_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
setUsageWidgets(function (prev) {
return _objectSpread(_objectSpread({}, prev), {}, {
isLoading: true
});
});
_context.next = 1;
return (0, _api.getUsageWidgets)();
case 1:
data = _context.sent;
setUsageWidgets({
data: data,
isLoading: false
});
return _context.abrupt("return", data);
case 2:
case "end":
return _context.stop();
}
}, _callee);
})), []);
var saveChanges = (0, _react.useCallback)(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
return _regenerator.default.wrap(function (_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
setChangeProgress(function (prev) {
return _objectSpread(_objectSpread({}, prev), {}, {
isSaving: true
});
});
_context2.next = 1;
return (0, _api.saveDisabledWidgets)(widgetsDisabled, widgetsRoleRestrictions);
case 1:
setChangeProgress({
isSaving: false,
isUnsavedChanges: false
});
setIsSnackbarOpen(true);
case 2:
case "end":
return _context2.stop();
}
}, _callee2);
})), [widgetsDisabled, widgetsRoleRestrictions]);
var deactivateAllUnusedWidgets = (0, _react.useCallback)(function () {
if (!usageWidgets.data) {
return;
}
var widgetsToDeactivate = widgets.filter(function (widget) {
return !usageWidgets.data.hasOwnProperty(widget.name) || widgetsDisabled.includes(widget.name);
});
setWidgetsDisabled(widgetsToDeactivate.map(function (widget) {
return widget.name;
}));
}, [widgets, usageWidgets.data, widgetsDisabled]);
var enableAllWidgets = (0, _react.useCallback)(function () {
setWidgetsDisabled([]);
}, []);
var toggleWidget = (0, _react.useCallback)(function (widgetName, isEnabled) {
if (isEnabled) {
setWidgetsDisabled(function (prev) {
return prev.filter(function (item) {
return item !== widgetName;
});
});
} else {
setWidgetsDisabled(function (prev) {
return [].concat((0, _toConsumableArray2.default)(prev), [widgetName]);
});
}
}, []);
var dismissNotice = (0, _react.useCallback)(function () {
if (noticeData) {
(0, _api.markNoticeViewed)(noticeData.notice_id, noticeData.nonce);
setNoticeData(function (prev) {
return _objectSpread(_objectSpread({}, prev), {}, {
is_viewed: true
});
});
}
}, [noticeData]);
(0, _react.useEffect)(function () {
var loadData = /*#__PURE__*/function () {
var _ref3 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
var _appData$additional_d, _appData$additional_d2;
var appData, pluginsData;
return _regenerator.default.wrap(function (_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 1;
return (0, _api.getAdminAppData)();
case 1:
appData = _context3.sent;
setNoticeData(appData.notice_data);
setWidgetsDisabled(appData.disabled_elements);
setWidgets(appData.widgets);
setPromotionWidgets(appData.promotion_widgets);
setPromotionData(appData.promotion_data);
if ((_appData$additional_d = appData.additional_data) !== null && _appData$additional_d !== void 0 && _appData$additional_d.roles) {
setRoles(appData.additional_data.roles);
}
if ((_appData$additional_d2 = appData.additional_data) !== null && _appData$additional_d2 !== void 0 && _appData$additional_d2.role_restrictions) {
setWidgetsRoleRestrictions(appData.additional_data.role_restrictions);
}
pluginsData = appData.plugins.map(function (plugin) {
return {
label: plugin,
value: plugin
};
});
pluginsData.unshift({
label: 'All Plugins',
value: ''
});
setPlugins(pluginsData);
setIsLoading(false);
setChangeProgress(function (prev) {
return _objectSpread(_objectSpread({}, prev), {}, {
isUnsavedChanges: false
});
});
case 2:
case "end":
return _context3.stop();
}
}, _callee3);
}));
return function loadData() {
return _ref3.apply(this, arguments);
};
}();
loadData();
}, []);
(0, _react.useEffect)(function () {
if (isLoading) {
return;
}
if (isInitialMount.current) {
isInitialMount.current = false;
return;
}
setChangeProgress(function (prev) {
return _objectSpread(_objectSpread({}, prev), {}, {
isUnsavedChanges: true
});
});
}, [widgetsDisabled, widgetsRoleRestrictions, isLoading]);
(0, _react.useEffect)(function () {
var handleBeforeUnload = function handleBeforeUnload(event) {
event.preventDefault();
event.returnValue = '';
};
if (changeProgress.isUnsavedChanges) {
window.addEventListener('beforeunload', handleBeforeUnload);
} else {
window.removeEventListener('beforeunload', handleBeforeUnload);
}
return function () {
window.removeEventListener('beforeunload', handleBeforeUnload);
};
}, [changeProgress.isUnsavedChanges]);
return {
isLoading: isLoading,
widgets: widgets,
promotionWidgets: promotionWidgets,
plugins: plugins,
roles: roles,
widgetsDisabled: widgetsDisabled,
widgetsRoleRestrictions: widgetsRoleRestrictions,
setWidgetsRoleRestrictions: setWidgetsRoleRestrictions,
promotionData: promotionData,
noticeData: noticeData,
usageWidgets: usageWidgets,
changeProgress: changeProgress,
isSnackbarOpen: isSnackbarOpen,
setIsSnackbarOpen: setIsSnackbarOpen,
getWidgetUsage: getWidgetUsage,
scanUsageElements: scanUsageElements,
saveChanges: saveChanges,
deactivateAllUnusedWidgets: deactivateAllUnusedWidgets,
enableAllWidgets: enableAllWidgets,
toggleWidget: toggleWidget,
dismissNotice: dismissNotice
};
};
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/hooks/useWidgetFilters.js":
/*!*************************************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/hooks/useWidgetFilters.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.useWidgetFilters = void 0;
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"));
var _react = __webpack_require__(/*! react */ "react");
var useWidgetFilters = exports.useWidgetFilters = function useWidgetFilters(widgets, widgetsDisabled, getWidgetUsage) {
var _useState = (0, _react.useState)(''),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
searchKeyword = _useState2[0],
setSearchKeyword = _useState2[1];
var _useState3 = (0, _react.useState)('widget'),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
sortingColumn = _useState4[0],
setSortingColumn = _useState4[1];
var _useState5 = (0, _react.useState)('asc'),
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
sortingDirection = _useState6[0],
setSortingDirection = _useState6[1];
var _useState7 = (0, _react.useState)(''),
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
filterByPlugin = _useState8[0],
setFilterByPlugin = _useState8[1];
var _useState9 = (0, _react.useState)('all'),
_useState0 = (0, _slicedToArray2.default)(_useState9, 2),
filterByStatus = _useState0[0],
setFilterByStatus = _useState0[1];
var sortedAndFilteredWidgets = (0, _react.useMemo)(function () {
var filteredWidgets = widgets.filter(function (widget) {
return widget.title.toLowerCase().includes(searchKeyword.toLowerCase());
});
if ('' !== filterByPlugin) {
filteredWidgets = filteredWidgets.filter(function (widget) {
return widget.plugin.toLowerCase() === filterByPlugin.toLowerCase();
});
}
if ('all' !== filterByStatus) {
filteredWidgets = filteredWidgets.filter(function (widget) {
if ('active' === filterByStatus) {
return !widgetsDisabled.includes(widget.name);
}
return widgetsDisabled.includes(widget.name);
});
}
filteredWidgets.sort(function (a, b) {
var aValue;
var bValue;
if ('widget' === sortingColumn) {
aValue = a.title;
bValue = b.title;
}
if ('usage' === sortingColumn) {
aValue = getWidgetUsage(a.name);
bValue = getWidgetUsage(b.name);
}
if (aValue === bValue) {
return 0;
}
if ('asc' === sortingDirection) {
return aValue < bValue ? -1 : 1;
}
return aValue > bValue ? -1 : 1;
});
return filteredWidgets;
}, [widgets, searchKeyword, sortingColumn, sortingDirection, filterByPlugin, filterByStatus, widgetsDisabled, getWidgetUsage]);
var getSortingIndicatorClasses = (0, _react.useCallback)(function (column) {
if (sortingColumn !== column) {
return '';
}
return 'asc' === sortingDirection ? 'sorted asc' : 'sorted desc';
}, [sortingColumn, sortingDirection]);
var onSortingClicked = (0, _react.useCallback)(function (column) {
if (sortingColumn === column) {
setSortingDirection(function (prev) {
return 'asc' === prev ? 'desc' : 'asc';
});
} else {
setSortingColumn(column);
setSortingDirection('asc');
}
}, [sortingColumn]);
var setSortByUsage = (0, _react.useCallback)(function () {
setSortingColumn('usage');
setSortingDirection('desc');
}, []);
return {
searchKeyword: searchKeyword,
setSearchKeyword: setSearchKeyword,
filterByPlugin: filterByPlugin,
setFilterByPlugin: setFilterByPlugin,
filterByStatus: filterByStatus,
setFilterByStatus: setFilterByStatus,
sortedAndFilteredWidgets: sortedAndFilteredWidgets,
getSortingIndicatorClasses: getSortingIndicatorClasses,
onSortingClicked: onSortingClicked,
setSortByUsage: setSortByUsage
};
};
/***/ }),
/***/ "../modules/element-manager/assets/js/app-editor-one/index.js":
/*!********************************************************************!*\
!*** ../modules/element-manager/assets/js/app-editor-one/index.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.AppModern = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _App = __webpack_require__(/*! ./App */ "../modules/element-manager/assets/js/app-editor-one/App.js");
var AppModern = exports.AppModern = function AppModern() {
var _elementorCommon$conf;
var isRTL = typeof elementorCommon !== 'undefined' && (_elementorCommon$conf = elementorCommon.config) !== null && _elementorCommon$conf !== void 0 && _elementorCommon$conf.isRTL ? elementorCommon.config.isRTL : 'rtl' === document.documentElement.dir || document.body.classList.contains('rtl');
return /*#__PURE__*/_react.default.createElement(_ui.DirectionProvider, {
rtl: isRTL
}, /*#__PURE__*/_react.default.createElement(_ui.ThemeProvider, {
colorScheme: "light"
}, /*#__PURE__*/_react.default.createElement(_App.App, null)));
};
/***/ }),
/***/ "../modules/element-manager/assets/js/upgrade-button.js":
/*!**************************************************************!*\
!*** ../modules/element-manager/assets/js/upgrade-button.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.UpgradeButton = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "../node_modules/@babel/runtime/helpers/extends.js"));
var _components = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
var _propTypes = _interopRequireDefault(__webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js"));
var UpgradeButton = exports.UpgradeButton = function UpgradeButton(props) {
var trackingClass = props.className || 'e-id-elementor-element-manager-button-upgrade';
return /*#__PURE__*/_react.default.createElement(_components.Button, (0, _extends2.default)({}, props, {
variant: "primary",
target: "_blank",
rel: 'noreferrer',
style: {
background: 'var(--e-a-btn-bg-accent, #93003f)'
},
className: trackingClass
}));
};
UpgradeButton.propTypes = {
className: _propTypes.default.string
};
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/OverloadYield.js":
/*!***************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/OverloadYield.js ***!
\***************************************************************/
/***/ ((module) => {
function _OverloadYield(e, d) {
this.v = e, this.k = d;
}
module.exports = _OverloadYield, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js":
/*!******************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***!
\******************************************************************/
/***/ ((module) => {
function _arrayLikeToArray(r, a) {
(null == a || a > r.length) && (a = r.length);
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
return n;
}
module.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js":
/*!****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/arrayWithHoles.js ***!
\****************************************************************/
/***/ ((module) => {
function _arrayWithHoles(r) {
if (Array.isArray(r)) return r;
}
module.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js":
/*!*******************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***!
\*******************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js");
function _arrayWithoutHoles(r) {
if (Array.isArray(r)) return arrayLikeToArray(r);
}
module.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/asyncToGenerator.js":
/*!******************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/asyncToGenerator.js ***!
\******************************************************************/
/***/ ((module) => {
function asyncGeneratorStep(n, t, e, r, o, a, c) {
try {
var i = n[a](c),
u = i.value;
} catch (n) {
return void e(n);
}
i.done ? t(u) : Promise.resolve(u).then(r, o);
}
function _asyncToGenerator(n) {
return function () {
var t = this,
e = arguments;
return new Promise(function (r, o) {
var a = n.apply(t, e);
function _next(n) {
asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
}
function _throw(n) {
asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
}
_next(void 0);
});
};
}
module.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/defineProperty.js":
/*!****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/defineProperty.js ***!
\****************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ "../node_modules/@babel/runtime/helpers/toPropertyKey.js");
function _defineProperty(e, r, t) {
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
value: t,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[r] = t, e;
}
module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/extends.js":
/*!*********************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/extends.js ***!
\*********************************************************/
/***/ ((module) => {
function _extends() {
return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {
for (var e = 1; e < arguments.length; e++) {
var t = arguments[e];
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
}
return n;
}, module.exports.__esModule = true, module.exports["default"] = module.exports, _extends.apply(null, arguments);
}
module.exports = _extends, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js":
/*!***********************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!
\***********************************************************************/
/***/ ((module) => {
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
"default": e
};
}
module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/iterableToArray.js":
/*!*****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/iterableToArray.js ***!
\*****************************************************************/
/***/ ((module) => {
function _iterableToArray(r) {
if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
}
module.exports = _iterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js":
/*!**********************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***!
\**********************************************************************/
/***/ ((module) => {
function _iterableToArrayLimit(r, l) {
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
if (null != t) {
var e,
n,
i,
u,
a = [],
f = !0,
o = !1;
try {
if (i = (t = t.call(r)).next, 0 === l) {
if (Object(t) !== t) return;
f = !1;
} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
} catch (r) {
o = !0, n = r;
} finally {
try {
if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
} finally {
if (o) throw n;
}
}
return a;
}
}
module.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/nonIterableRest.js":
/*!*****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/nonIterableRest.js ***!
\*****************************************************************/
/***/ ((module) => {
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
module.exports = _nonIterableRest, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/nonIterableSpread.js":
/*!*******************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/nonIterableSpread.js ***!
\*******************************************************************/
/***/ ((module) => {
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
module.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/regenerator.js":
/*!*************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/regenerator.js ***!
\*************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var regeneratorDefine = __webpack_require__(/*! ./regeneratorDefine.js */ "../node_modules/@babel/runtime/helpers/regeneratorDefine.js");
function _regenerator() {
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
var e,
t,
r = "function" == typeof Symbol ? Symbol : {},
n = r.iterator || "@@iterator",
o = r.toStringTag || "@@toStringTag";
function i(r, n, o, i) {
var c = n && n.prototype instanceof Generator ? n : Generator,
u = Object.create(c.prototype);
return regeneratorDefine(u, "_invoke", function (r, n, o) {
var i,
c,
u,
f = 0,
p = o || [],
y = !1,
G = {
p: 0,
n: 0,
v: e,
a: d,
f: d.bind(e, 4),
d: function d(t, r) {
return i = t, c = 0, u = e, G.n = r, a;
}
};
function d(r, n) {
for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {
var o,
i = p[t],
d = G.p,
l = i[2];
r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));
}
if (o || r > 1) return a;
throw y = !0, n;
}
return function (o, p, l) {
if (f > 1) throw TypeError("Generator is already running");
for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {
i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);
try {
if (f = 2, i) {
if (c || (o = "next"), t = i[o]) {
if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object");
if (!t.done) return t;
u = t.value, c < 2 && (c = 0);
} else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1);
i = e;
} else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;
} catch (t) {
i = e, c = 1, u = t;
} finally {
f = 1;
}
}
return {
value: t,
done: y
};
};
}(r, o, i), !0), u;
}
var a = {};
function Generator() {}
function GeneratorFunction() {}
function GeneratorFunctionPrototype() {}
t = Object.getPrototypeOf;
var c = [][n] ? t(t([][n]())) : (regeneratorDefine(t = {}, n, function () {
return this;
}), t),
u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);
function f(e) {
return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, regeneratorDefine(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e;
}
return GeneratorFunction.prototype = GeneratorFunctionPrototype, regeneratorDefine(u, "constructor", GeneratorFunctionPrototype), regeneratorDefine(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", regeneratorDefine(GeneratorFunctionPrototype, o, "GeneratorFunction"), regeneratorDefine(u), regeneratorDefine(u, o, "Generator"), regeneratorDefine(u, n, function () {
return this;
}), regeneratorDefine(u, "toString", function () {
return "[object Generator]";
}), (module.exports = _regenerator = function _regenerator() {
return {
w: i,
m: f
};
}, module.exports.__esModule = true, module.exports["default"] = module.exports)();
}
module.exports = _regenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/regeneratorAsync.js":
/*!******************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/regeneratorAsync.js ***!
\******************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var regeneratorAsyncGen = __webpack_require__(/*! ./regeneratorAsyncGen.js */ "../node_modules/@babel/runtime/helpers/regeneratorAsyncGen.js");
function _regeneratorAsync(n, e, r, t, o) {
var a = regeneratorAsyncGen(n, e, r, t, o);
return a.next().then(function (n) {
return n.done ? n.value : a.next();
});
}
module.exports = _regeneratorAsync, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/regeneratorAsyncGen.js":
/*!*********************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/regeneratorAsyncGen.js ***!
\*********************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var regenerator = __webpack_require__(/*! ./regenerator.js */ "../node_modules/@babel/runtime/helpers/regenerator.js");
var regeneratorAsyncIterator = __webpack_require__(/*! ./regeneratorAsyncIterator.js */ "../node_modules/@babel/runtime/helpers/regeneratorAsyncIterator.js");
function _regeneratorAsyncGen(r, e, t, o, n) {
return new regeneratorAsyncIterator(regenerator().w(r, e, t, o), n || Promise);
}
module.exports = _regeneratorAsyncGen, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/regeneratorAsyncIterator.js":
/*!**************************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/regeneratorAsyncIterator.js ***!
\**************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var OverloadYield = __webpack_require__(/*! ./OverloadYield.js */ "../node_modules/@babel/runtime/helpers/OverloadYield.js");
var regeneratorDefine = __webpack_require__(/*! ./regeneratorDefine.js */ "../node_modules/@babel/runtime/helpers/regeneratorDefine.js");
function AsyncIterator(t, e) {
function n(r, o, i, f) {
try {
var c = t[r](o),
u = c.value;
return u instanceof OverloadYield ? e.resolve(u.v).then(function (t) {
n("next", t, i, f);
}, function (t) {
n("throw", t, i, f);
}) : e.resolve(u).then(function (t) {
c.value = t, i(c);
}, function (t) {
return n("throw", t, i, f);
});
} catch (t) {
f(t);
}
}
var r;
this.next || (regeneratorDefine(AsyncIterator.prototype), regeneratorDefine(AsyncIterator.prototype, "function" == typeof Symbol && Symbol.asyncIterator || "@asyncIterator", function () {
return this;
})), regeneratorDefine(this, "_invoke", function (t, o, i) {
function f() {
return new e(function (e, r) {
n(t, i, e, r);
});
}
return r = r ? r.then(f, f) : f();
}, !0);
}
module.exports = AsyncIterator, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/regeneratorDefine.js":
/*!*******************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/regeneratorDefine.js ***!
\*******************************************************************/
/***/ ((module) => {
function _regeneratorDefine(e, r, n, t) {
var i = Object.defineProperty;
try {
i({}, "", {});
} catch (e) {
i = 0;
}
module.exports = _regeneratorDefine = function regeneratorDefine(e, r, n, t) {
function o(r, n) {
_regeneratorDefine(e, r, function (e) {
return this._invoke(r, n, e);
});
}
r ? i ? i(e, r, {
value: n,
enumerable: !t,
configurable: !t,
writable: !t
}) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
}, module.exports.__esModule = true, module.exports["default"] = module.exports, _regeneratorDefine(e, r, n, t);
}
module.exports = _regeneratorDefine, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/regeneratorKeys.js":
/*!*****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/regeneratorKeys.js ***!
\*****************************************************************/
/***/ ((module) => {
function _regeneratorKeys(e) {
var n = Object(e),
r = [];
for (var t in n) r.unshift(t);
return function e() {
for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e;
return e.done = !0, e;
};
}
module.exports = _regeneratorKeys, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/regeneratorRuntime.js":
/*!********************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/regeneratorRuntime.js ***!
\********************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var OverloadYield = __webpack_require__(/*! ./OverloadYield.js */ "../node_modules/@babel/runtime/helpers/OverloadYield.js");
var regenerator = __webpack_require__(/*! ./regenerator.js */ "../node_modules/@babel/runtime/helpers/regenerator.js");
var regeneratorAsync = __webpack_require__(/*! ./regeneratorAsync.js */ "../node_modules/@babel/runtime/helpers/regeneratorAsync.js");
var regeneratorAsyncGen = __webpack_require__(/*! ./regeneratorAsyncGen.js */ "../node_modules/@babel/runtime/helpers/regeneratorAsyncGen.js");
var regeneratorAsyncIterator = __webpack_require__(/*! ./regeneratorAsyncIterator.js */ "../node_modules/@babel/runtime/helpers/regeneratorAsyncIterator.js");
var regeneratorKeys = __webpack_require__(/*! ./regeneratorKeys.js */ "../node_modules/@babel/runtime/helpers/regeneratorKeys.js");
var regeneratorValues = __webpack_require__(/*! ./regeneratorValues.js */ "../node_modules/@babel/runtime/helpers/regeneratorValues.js");
function _regeneratorRuntime() {
"use strict";
var r = regenerator(),
e = r.m(_regeneratorRuntime),
t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor;
function n(r) {
var e = "function" == typeof r && r.constructor;
return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name));
}
var o = {
"throw": 1,
"return": 2,
"break": 3,
"continue": 3
};
function a(r) {
var e, t;
return function (n) {
e || (e = {
stop: function stop() {
return t(n.a, 2);
},
"catch": function _catch() {
return n.v;
},
abrupt: function abrupt(r, e) {
return t(n.a, o[r], e);
},
delegateYield: function delegateYield(r, o, a) {
return e.resultName = o, t(n.d, regeneratorValues(r), a);
},
finish: function finish(r) {
return t(n.f, r);
}
}, t = function t(r, _t, o) {
n.p = e.prev, n.n = e.next;
try {
return r(_t, o);
} finally {
e.next = n.n;
}
}), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n;
try {
return r.call(this, e);
} finally {
n.p = e.prev, n.n = e.next;
}
};
}
return (module.exports = _regeneratorRuntime = function _regeneratorRuntime() {
return {
wrap: function wrap(e, t, n, o) {
return r.w(a(e), t, n, o && o.reverse());
},
isGeneratorFunction: n,
mark: r.m,
awrap: function awrap(r, e) {
return new OverloadYield(r, e);
},
AsyncIterator: regeneratorAsyncIterator,
async: function async(r, e, t, o, u) {
return (n(e) ? regeneratorAsyncGen : regeneratorAsync)(a(r), e, t, o, u);
},
keys: regeneratorKeys,
values: regeneratorValues
};
}, module.exports.__esModule = true, module.exports["default"] = module.exports)();
}
module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/regeneratorValues.js":
/*!*******************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/regeneratorValues.js ***!
\*******************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
function _regeneratorValues(e) {
if (null != e) {
var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"],
r = 0;
if (t) return t.call(e);
if ("function" == typeof e.next) return e;
if (!isNaN(e.length)) return {
next: function next() {
return e && r >= e.length && (e = void 0), {
value: e && e[r++],
done: !e
};
}
};
}
throw new TypeError(_typeof(e) + " is not iterable");
}
module.exports = _regeneratorValues, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/slicedToArray.js":
/*!***************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/slicedToArray.js ***!
\***************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles.js */ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js");
var iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit.js */ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js");
var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js");
var nonIterableRest = __webpack_require__(/*! ./nonIterableRest.js */ "../node_modules/@babel/runtime/helpers/nonIterableRest.js");
function _slicedToArray(r, e) {
return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();
}
module.exports = _slicedToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/toConsumableArray.js":
/*!*******************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/toConsumableArray.js ***!
\*******************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles.js */ "../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js");
var iterableToArray = __webpack_require__(/*! ./iterableToArray.js */ "../node_modules/@babel/runtime/helpers/iterableToArray.js");
var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js");
var nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread.js */ "../node_modules/@babel/runtime/helpers/nonIterableSpread.js");
function _toConsumableArray(r) {
return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();
}
module.exports = _toConsumableArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/toPrimitive.js":
/*!*************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/toPrimitive.js ***!
\*************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
function toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
module.exports = toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/toPropertyKey.js":
/*!***************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/toPropertyKey.js ***!
\***************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
var toPrimitive = __webpack_require__(/*! ./toPrimitive.js */ "../node_modules/@babel/runtime/helpers/toPrimitive.js");
function toPropertyKey(t) {
var i = toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
module.exports = toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/typeof.js":
/*!********************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/typeof.js ***!
\********************************************************/
/***/ ((module) => {
function _typeof(o) {
"@babel/helpers - typeof";
return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o);
}
module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js":
/*!****************************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***!
\****************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js");
function _unsupportedIterableToArray(r, a) {
if (r) {
if ("string" == typeof r) return arrayLikeToArray(r, a);
var t = {}.toString.call(r).slice(8, -1);
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;
}
}
module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/regenerator/index.js":
/*!***********************************************************!*\
!*** ../node_modules/@babel/runtime/regenerator/index.js ***!
\***********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// TODO(Babel 8): Remove this file.
var runtime = __webpack_require__(/*! ../helpers/regeneratorRuntime */ "../node_modules/@babel/runtime/helpers/regeneratorRuntime.js")();
module.exports = runtime;
// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=
try {
regeneratorRuntime = runtime;
} catch (accidentalStrictMode) {
if (typeof globalThis === "object") {
globalThis.regeneratorRuntime = runtime;
} else {
Function("r", "regeneratorRuntime = r")(runtime);
}
}
/***/ }),
/***/ "../node_modules/@wordpress/element/build-module/create-interpolate-element.js":
/*!*************************************************************************************!*\
!*** ../node_modules/@wordpress/element/build-module/create-interpolate-element.js ***!
\*************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./react */ "react");
/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_react__WEBPACK_IMPORTED_MODULE_0__);
/**
* Internal dependencies
*/
/**
* Object containing a React element.
*
* @typedef {import('react').ReactElement} Element
*/
let indoc, offset, output, stack;
/**
* Matches tags in the localized string
*
* This is used for extracting the tag pattern groups for parsing the localized
* string and along with the map converting it to a react element.
*
* There are four references extracted using this tokenizer:
*
* match: Full match of the tag (i.e. , ,
)
* isClosing: The closing slash, if it exists.
* name: The name portion of the tag (strong, br) (if )
* isSelfClosed: The slash on a self closing tag, if it exists.
*
* @type {RegExp}
*/
const tokenizer = /<(\/)?(\w+)\s*(\/)?>/g;
/**
* The stack frame tracking parse progress.
*
* @typedef Frame
*
* @property {Element} element A parent element which may still have
* @property {number} tokenStart Offset at which parent element first
* appears.
* @property {number} tokenLength Length of string marking start of parent
* element.
* @property {number} [prevOffset] Running offset at which parsing should
* continue.
* @property {number} [leadingTextStart] Offset at which last closing element
* finished, used for finding text between
* elements.
* @property {Element[]} children Children.
*/
/**
* Tracks recursive-descent parse state.
*
* This is a Stack frame holding parent elements until all children have been
* parsed.
*
* @private
* @param {Element} element A parent element which may still have
* nested children not yet parsed.
* @param {number} tokenStart Offset at which parent element first
* appears.
* @param {number} tokenLength Length of string marking start of parent
* element.
* @param {number} [prevOffset] Running offset at which parsing should
* continue.
* @param {number} [leadingTextStart] Offset at which last closing element
* finished, used for finding text between
* elements.
*
* @return {Frame} The stack frame tracking parse progress.
*/
function createFrame(element, tokenStart, tokenLength, prevOffset, leadingTextStart) {
return {
element,
tokenStart,
tokenLength,
prevOffset,
leadingTextStart,
children: []
};
}
/**
* This function creates an interpolated element from a passed in string with
* specific tags matching how the string should be converted to an element via
* the conversion map value.
*
* @example
* For example, for the given string:
*
* "This is a string with a link and a self-closing
*
Для пользователей букмекерской конторы Мостбет актуальный вход в зеркало — это важный вопрос, который требует внимания. Этот софт позволяет обходить блокировки и продолжать делать ставки даже в условиях ограничений. В данной статье мы рассмотрим, как легко и быстро найти актуальные зеркала Мостбет, чтобы вы могли наслаждаться любимыми играми и ставками без прерываний.
Зеркало Мостбет — это альтернативный адрес сайта, который предоставляет пользователям доступ к функционалу букмекерской конторы. Данный сайт имеет те же функции, что и основной, включая возможность регистраций, входа в аккаунт, внесения депозитов и вывода средств. Зеркала создаются для того, чтобы обойти блокировки, которые могут возникнуть в разных регионах. Это особенно актуально, учитывая постоянно меняющиеся законодательные нормы в сфере азартных игр.
Нахождение актуальных зеркал может быть затруднительно, особенно если вы не знаете, на что обратить внимание. Вот несколько способов, которые помогут вам найти рабочие ссылки:
Если вы испытываете сложности с нахождением актуальных зеркал, использование VPN может стать отличным решением. Это программное обеспечение помогает скрыть ваше реальное местоположение и обойти блокировки, тем самым предоставляя доступ к основному сайту Мостбет. Вот несколько полезных советов по выбору VPN:
Ситуации, когда зеркало перестает работать, не редкость. Если вы столкнулись с подобной проблемой, выполните следующие действия:
Нахождение актуального входа в Мостбет зеркало не должно быть сложной задачей. Используйте предложенные методы, чтобы оставаться на связи с любимой букмекерской конторой. Если у вас возникли дополнительные вопросы или трудности, сервис помощи клиентов всегда доступен для поддержки. Следуя рекомендациям, вы сможете без труда обходить блокировки и наслаждаться игрой в любое время mostbet официальный сайт.
Да, если источник ссылки надежен. Старайтесь использовать только подтвержденные сайты и форумы.
Зеркала могут обновляться ежедневно, поэтому важно следить за актуальной информацией на форумах.
Нет, вы можете использовать свои прежние учетные данные для доступа к зеркалу.
Просто попробуйте зайти на сайт. Если он открывается, значит, он работает.
В таком случае стоит обратиться в службу поддержки Мостбет для получения актуальной информации.
]]>Živijo, moje ime je Marko Novak in danes vam bom predstavil, zakaj je Playamo najboljša izbira med izkušenimi igralci. Playamo je ena izmed najpopularnejših spletnih igralnic, ki ponuja široko izbiro iger, privlačne bonuse in odlično uporabniško izkušnjo. Igralci, ki iščejo različne možnosti iger in vrhunsko podporo, bodo zagotovo našli svoje mesto tukaj.
Playamo je spletna igralnica, ki deluje pod okriljem podjetja Direx N.V., kar je eden od glavnih razlogov, zakaj je Playamo najboljša izbira med izkušenimi igralci. Njihova spletna stran je zasnovana tako, da je enostavna za navigacijo in omogoča hitro iskanje iger. Registracija je hitra in enostavna, kar omogoča novim igralcem, da se takoj vključijo v akcijo. Igralci lahko enostavno dostopajo do svojega računa preko prijavnega obrazca, ki je jasno označen na domači strani. Zaradi preprostosti in učinkovitosti je Playamo priljubljena izbira med mnogimi izkušenimi igralci.
Če ste izkušen igralec, veste, kako pomembni so bonusi v spletnih igralnicah. Playamo ponuja različne ugodnosti, ki so zasnovane posebej za igralce, ki se vračajo. Seznam najpomembnejših bonusov vključuje:
Priporočam, da redno preverjate razdelek s promocijami, saj se nenehno posodabljajo, kar zagotavlja, da ne zamudite neverjetnih priložnosti. Bonusne kode niso potrebne, saj so bonusi samodejno dodani ob prvem depozitu, kar je zelo priročno za izkušene igralce.
Playamo je znan po svoji široki izbiri iger, ki zajema vse, kar si lahko želite. Najdete lahko:
Vse igre so dostopne na mobilnih napravah, kar pomeni, da lahko igrate kjerkoli, kadarkoli. Igralnica je zasnovana za optimizacijo mobilne izkušnje, kar je še dodatni razlog, zakaj je Playamo najboljša izbira med izkušenimi igralci playamo bonus.
Postopek deponiranja in umika je enostaven in varen. Playamo ponuja številne možnosti za transakcije, vključno z:
Minimalni zneski za depozite in umike so razumni, kar pomeni, da so dostopni širokemu spektru igralcev. Vse transakcije so hitre, večinoma pa bodo vaša sredstva na računu takoj vidna. Postopek overitve, ki vključuje predložitev nekaterih identifikacijskih dokumentov, zagotavlja varnost vaših transakcij.
Playamo deluje pod licenco, ki jo izdaja vlada Curacao, kar zagotavlja, da igralnica deluje v skladu z mednarodnimi standardi. Licenca pomeni, da so zaščitene pravice igralcev, kar je izredno pomembno za tiste, ki iščejo zanesljivo in varno spletno igralnico. Njihove varnostne funkcije vključujejo šifriranje podatkov, ki varuje vaše osebne in finančne informacije ter zagotavlja zaščito pred goljufijami.
Poleg tega ima Playamo urejen sistem za reševanje pritožb, kar še dodatno pomeni, da boste imeli podporo v primeru težav. Ko govorimo o tem, zakaj je Playamo najboljša izbira med izkušenimi igralci, je varnost in zaščita prav gotovo eden od ključnih dejavnikov, ki ga ne smete spregledati.
Na podlagi vseh navedenih dejavnikov lahko trdno trdim, da je Playamo ena izmed najboljših opcij za izkušene igralce. S svojo široko izbiro iger, privlačnimi bonusi, enostavno navigacijo in varno igralniško okolje je težko najti boljšo alternativno možnost. Vsekakor priporočam, da preizkusite Playamo in se prepričate sami, zakaj je Playamo najboljša izbira med izkušenimi igralci.
Hello, my name is Michael Thompson, and today I’m diving deep into the world of online gaming by reviewing VegasNow Casino Australia. This casino stands out as an enticing option for Australian players, offering an impressive array of bonuses and promotions tailored to enhance the gaming experience. In this article, I will unfold the many facets of VegasNow Casino, covering everything from its wide game selection to the safety measures it embraces, ensuring that you have all the information you need about Understanding Bonuses at VegasNow Casino Australia.
VegasNow Casino is a well-established platform that caters to players from Australia and beyond, specializing in online gambling entertainment. The casino boasts a highly user-friendly website that is easy to navigate, making it suitable for both seasoned gamblers and newcomers looking to explore their options. Users need to know that VegasNow operates with a solid reputation and offers a plethora of gaming options, including slots, table games, and live dealer experiences. The website showcases a vibrant design that mirrors the thrill of Las Vegas, providing an engaging atmosphere right from your home.
Getting started at VegasNow Casino is a breeze, thanks to its straightforward registration process. To join, simply follow these steps:
Once you are registered, logging in is equally simple. Enter your credentials on the home page to access your account and start exploring the games and bonuses available. As you set up your account, remember that Understanding Bonuses at VegasNow Casino Australia is key to making the most of your experience, with various incentives waiting for you upon registration vegasnowaussie.com.
One of the most exciting aspects of VegasNow Casino is its range of bonuses designed to attract and retain players. To facilitate you in understanding these bonuses, here’s a breakdown of the primary offerings:
Understanding Bonuses at VegasNow Casino Australia is crucial, as maximizing these offers can significantly enhance your gaming capital and overall fun. Be sure to read the terms and conditions attached to each bonus to fully understand any wagering requirements and other stipulations.
When it comes to gaming variety, VegasNow Casino does not disappoint. The platform collaborates with several leading software developers, ensuring a rich catalogue of games. Players will find:
Whether you’re into the flashing lights of slots or the strategic gameplay of table games, VegasNow Casino has got you covered, making it a prime choice for Australian players keen on a diverse gaming experience.
Making transactions at VegasNow Casino is user-friendly, supporting various payment methods that cater to all players. The accepted options typically include:
Deposits are instantly reflected in your account, while withdrawals may take a few days depending on your chosen method. It’s crucial to verify your account by providing requisite documents, including a government-issued ID and proof of address, ensuring compliance with legal standards. This process contributes to the overall safety and security of Understanding Bonuses at VegasNow Casino Australia, further enhancing player trust.
Player safety is paramount at VegasNow Casino, which operates under a license from a reputable authority, adding a layer of trust for gamblers. The licensing body ensures that the casino adheres to strict regulations concerning fair gaming, player confidentiality, and responsible gambling practices. Furthermore, VegasNow employs advanced SSL encryption technology to protect financial transactions and personal information, ensuring a safe gaming environment. Understanding the licensing and security measures is an essential part of Understanding Bonuses at VegasNow Casino Australia, as it provides peace of mind for players using the platform VegasNow welcome bonus.
In summary, VegasNow Casino Australia presents a fantastic platform for both new and experienced players. With its attractive bonuses, substantial game selection, and robust safety features, it stands out as a go-to destination for Australian gamblers seeking an exhilarating gaming experience. Remember to fully understand the bonuses to maximize your experience and enjoy all that this entertaining online casino has to offer VegasNow pokies vegas now withdrawal VegasNow mobile VegasNow sign in VegasNow Responsible Gambling.
Jmenuji se Petr Novák a v tomto článku se s vámi podělím o moji zkušenost s online kasinem Casino Bingo, které se proslavilo svými atraktivními nabídkami a možností hraní bez nutnosti vkladu. Casino bez vkladu: How to get started online, to je téma, kterému se budu věnovat, abych vám pomohl objevit, jak začít hrát v tomto fantastickém kasinu, které je ideální pro nováčky i zkušené hráče. Casino Bingo nabízí široký výběr her, štědré bonusy a intuitivní rozhraní, které potěší každého. Pojďme se tedy podívat, co všechno toto online kasino nabízí.
Registrace v Casino Bingo je velmi jednoduchá a rychlá. Zde je návod, jak na to:
Celý proces registrace netrvá déle než 10 minut, což je skvélé pro všechny, kteří chtějí začít hrát co nejdříve. Po úspěšném přihlášení můžete využívat všechny funkce kasina a začít sbírat bonusy.
Jedním z nejatraktivnějších aspektů Casino Bingo jsou jeho bonusy. Kasino nabízí různé možnosti, včetně bezvkladových bonusů, což je to, co zajímá mnoho nových hráčů. Hlavní bonusy zahrnují:
Doporučuji sledovat sekci “Akce” na webových stránkách, abyste nezmeškali žádné výhodné nabídky.
Casino Bingo disponuje širokou nabídkou her, která zahrnuje nejen oblíbené sloty, ale také živé kasinové hry. Mezi nejvýznamnější kategorie her patří:
Herní rozhraní je uživatelsky přívětivé a přehledné, což usnadňuje orientaci a vyhledávání her. Všechny hry jsou přístupné jak na webu, tak i na mobilních zařízeních, což je perfektní pro hráče, kteří preferují hrát na cestách.
Bezpečnost hráčských údajů a transparentnost jsou v Casino Bingo na prvním místě. Kasino je provozováno společností Bingo Entertainment, která je licencována českým Ministerstvem financí. Tato licence zajišťuje, že kasino funguje v souladu se zákony a poskytuje hráčům spravedlivé herní podmínky. Mezi zabezpečovací prvky patří: casino bez vkladu
Hráči mohou mít jistotu, že jejich peníze i údaje jsou v absolutním bezpečí.
Casino Bingo nabízí výbornou zákaznickou podporu, která je dostupná prostřednictvím chatu naživo, e-mailu a telefonické linky. Já osobně jsem měl pozitivní zkušenosti s rychlostí odpovědí a profesionalitou pracovníků. Rozhraní webu je moderní a uživatelsky přívětivé, což znamená, že se v něm snadno orientujete. Rychlost načítání stránek je také velmi dobrá, což oceníte při hraní her online.
Casino Bingo je vynikající volbou pro všechny, kteří hledají kvalitní online kasino bez nutnosti vkladu. Casino bez vkladu: How to get started online se stává čím dál tím atraktivnějším díky bonusovým nabídkám a širokému výběru her. Tento komplexní přehled vám pomůže snadno se zorientovat v této herní platformě a začít si užívat vzrušení, které online kasino nabízí.
Jmenuji se Jakub Novák a rád bych vám přiblížil online kasino BetAlice Casino CZ, které se těší velké popularitě mezi českými hráči. BetAlice Casino je ideálním místem pro ty, kdo hledají bohatou nabídku her, zajímavé bonusy, a především pestré festivní propagace. V tomto článku se podělím o své zkušenosti, ať už se jedná o registraci, bonusy, nebo bezpečnostní opatření, aby bylo jasné, proč byste měli zvážit BetAlice Casino jako svou další herní destinaci.
BetAlice Casino CZ má přehlednou a atraktivní webovou stránku, která je navržena tak, aby usnadnila orientaci pro všechny typy hráčů. Hlavní stránka je vysoce vizuální a intuitivní, což znamená, že se s ní snadno seznámíte. Nabídka her je rozdělena do různých kategorií, jako jsou sloty, stolní hry, a živé kasino. Při prvním pohledu na web jsem ocenil jeho moderní design a snadnou navigaci. Je tu také sekce se zprávami o festivních propagačních akcích, které jsou aktualizovány pravidelně.
Registrace v BetAlice Casino je jednoduchá a nezabere více než pár minut. Celý proces je následující:
Je nutné mít na paměti, že BetAlice Casino vyžaduje ověření identity při prvním výběru, což je standardní postup pro zajištění bezpečnosti hráčů. Po přihlášení máte snadný přístup k všem herním možnostem a propagačním akcím, včetně těch festivních, které BetAlice Casino CZ nabízí.
Jedním z nejvíce lákavých aspektů BetAlice Casino CZ jsou jejich festivní propagace, které platí po celý rok. Kasino je známé svými štědrými bonusy. Zde je několik typů bonusů, které hráči mohou očekávat: BetAlice CZ
Abychom se nezapomněli na festivity, BetAlice Casino CZ během svátků organizuje zvláštní akcí a promo kódy, které mohou hráčům přinést skvělé odměny. Tyto festivní propagace v BetAlice Casino CZ po celý rok jsou důvodem, proč se sem hráči stále vracejí.
BetAlice Casino nabízí široký výběr her, které potěší jak nováčky, tak zkušené hráče. V nabídce najdete:
Jedním z nejvýznamnějších faktorů pro mě při výběru online kasina je různorodost her, a BetAlice Casino CZ to zcela splňuje. Vzhledem k pravidelným aktualizacím her a přidávání novinek si hráči v BetAlice Casino opravdu přijdou na své.
BetAlice Casino je provozováno společností ZXY Gaming, která je známá svými kvalitními online herními službami. Kasino je držitelem licence od renomovaného úřadu, což znamená, že splňuje vysoké standardy pro ochranu hráčů a fair play. Licence zaručuje, že hry jsou testovány a kontrolovány, aby zajišťovaly náhodnost a spravedlivé výsledky.
Bezpečnostní opatření zahrnují šifrování dat a ochranu osobních údajů podle standardů GDPR. BetAlice Casino také implementuje přísné pravidla pro verifikaci hráčů, což vyžaduje doložení identity při výběrech. To vše přispívá k pocitu bezpečí a důvěry pro všechny hráče.
Na závěr mohu říct, že BetAlice Casino CZ je skvělou volbou pro ty, kteří hledají kvalitní online hraní podložené skvělými festivními propagacemi v BetAlice Casino CZ po celý rok. Od širokého výběru her, přes štědré bonusy, až po bezpečnostní záruky, BetAlice Casino v sobě kombinujesílu a zkušenost. Určitě vám doporučuji se zaregistrovat a zažít to sami! BetAlice welcome bonus BetAlice pokies BetAlice withdrawal BetAlice mobile BetAlice sign in BetAlice Responsible Gambling
Goldex Casino Australia is a premier online gambling platform that caters to Australian players seeking a thrilling gaming experience with generous bonuses and a wide array of games. As an avid player who has explored various online casinos, I can confidently say that Goldex Casino is an excellent choice for both newcomers and seasoned gamers alike. In this article, I will provide an in-depth review of Goldex Casino Australia, offering insights on how to develop a winning mindset while sharing essential information about the site, its features, and what users need to know to maximize their gaming experience.
The Goldex Casino Australia website boasts a sleek and modern interface that is user-friendly and visually appealing. Navigation is seamless, allowing players to easily access different sections such as games, promotions, and account settings. To get started, new users must complete a simple registration process:
This straightforward registration process ensures that players can quickly set up their accounts and begin their gaming adventures. Goldex Casino Australia: How to Develop a Winning Mindset starts with familiarizing oneself with the platform and all it has to offer.
One of the standout features of Goldex Casino Australia is its impressive array of bonuses and promotions designed to boost player engagement and encourage a winning mindset. Upon signing up, new players can take advantage of a generous welcome bonus, which typically includes a match deposit bonus and free spins. Additionally, the casino regularly hosts promotions such as: goldexaussie.com
Each promotion comes with its own terms and conditions, typically requiring a specific promo code, so players should ensure they understand the qualifying requirements. By strategically utilizing these bonuses, players can enhance their bankroll and increase the chances of a significant win. Remember, Goldex Casino Australia: How to Develop a Winning Mindset includes making the most of these promotional offers.
Goldex Casino Australia offers an extensive library of games, ensuring that every type of player finds something they enjoy. Their game selection includes:
The slots at Goldex Casino are powered by some of the industry’s leading software developers, ensuring high-quality graphics and immersive gameplay. The live casino section adds another layer of excitement, with professional dealers facilitating the action in real-time. Players are encouraged to explore different genres and styles of games to discover what suits their winning mindset best.
In today’s fast-paced world, mobile compatibility is essential for online gaming. Goldex Casino Australia offers a fully optimized mobile version of its site, providing players with easy access to their favorite games on the go. The mobile interface is just as smooth as the desktop version, ensuring that navigation remains simple and intuitive. Currently, Goldex Casino does not offer a dedicated app, but players can enjoy a seamless experience through their mobile browsers. This convenience allows players to manage their accounts, make deposits, and play games from anywhere, empowering them to develop a winning mindset even while away from their computers Goldex free spins.
Goldex Casino Australia facilitates easy transactions with multiple payment options for both deposits and withdrawals. Players can choose from options such as credit and debit cards, e-wallets like PayPal and Neteller, and even cryptocurrency options. The minimum deposit amount is friendly for casual players, while the site guarantees rapid withdrawals, typically processing within 24-48 hours. To ensure a hassle-free experience during withdrawals, players must undergo a verification process, which may include:
Goldex Casino understands the importance of customer support and offers a robust support structure through live chat, email, and a comprehensive FAQ section. The customer support team is prompt and knowledgeable, ready to assist players with any inquiries or issues that may arise.
Trust and safety are paramount for online players, and Goldex Casino Australia takes these concerns seriously. The casino operates under a valid gambling license issued by a reputable authority, ensuring that it adheres to strict regulations and standards. This licensing means that players can expect fair gaming practices, protection of their personal data, and secure transactions. The casino employs advanced encryption technology and firewall systems to safeguard player information against unauthorized access. Understanding this safety framework allows players to engage confidently in their gaming experience and focus better on developing a winning mindset.
In conclusion, Goldex Casino Australia stands out as an excellent online gambling destination that caters to a wide range of players. With its diverse game selection, lucrative bonuses, user-friendly interface, and exceptional customer support, it’s easy to see why it has gained popularity among Australian players. Developing a winning mindset involves understanding the platform, utilizing available bonuses, and approaching gaming strategically. I highly recommend checking out Goldex Casino Australia and experiencing all it has to offer for yourself Goldex live casino Goldex deposits Goldex mobile Goldex sign in Responsible Gambling at Goldex.
Mitt namn är Anton Eriksson, och som en erfaren casinospelare har jag stött på en mängd olika plattformar som erbjuder spännande spelupplevelser. När det kommer till att välja de bästa sidorna för att njuta av de “Top games to enjoy at casino utan spelpaus platforms”, är det viktigt att tänka på flera faktorer. Användare bör överväga spelutbud, användarvänlighet, betalningsalternativ och hur varje plattform hanterar spelpaus. I denna artikel kommer jag att jämföra några av de främsta plattformarna på marknaden och ge insikter som hjälper dig att göra ett informerat val.
Det första steget i valet av en plattform är att undersöka spelutbudet. Här är en lista över populära spelkategorier som ofta finns på dessa plattformar:
För att underlätta din beslutprocess har jag sammanställt en tabell som jämför de mest populära casinona utan spelpaus och deras spelutbud:
| Plattform | Slotmaskiner | Livecasino | Bordsspel |
|---|---|---|---|
| Casinostore | 500+ | 20+ olika spel | 15+ |
| Mr Green | 600+ | 30+ olika spel | 20+ |
| LeoVegas | 700+ | 40+ olika spel | 25+ |
Som vi kan se, erbjuder LeoVegas det bredaste utbudet av spel, vilket gör dem till ett utmärkt val för spelentusiaster som letar efter variation. Casinostore och Mr Green erbjuder också konkurrenskraftiga alternativ, beroende på vad du föredrar.
En annan kritisk faktor när man väljer en plattform för att njuta av de “Top games to enjoy at casino utan spelpaus platforms” är betalningsalternativen. Det är viktigt att se till att plattformen erbjuder säkra och effektiva betalningsmetoder. Här är de vanligaste alternativen:
Här är en sammanfattande tabell över betalningsalternativ på de jämförda plattformarna:
| Plattform | Kreditkort | Swish | Trustly |
|---|---|---|---|
| Casinostore | Ja | Nej | Ja |
| Mr Green | Ja | Ja | Ja |
| LeoVegas | Ja | Ja | Ja |
Som vi ser erbjuder både Mr Green och LeoVegas flexiblare betalningsalternativ, vilket kan vara avgörande för många spelare. Casinostore, å sin sida, begränsar några av sina alternativ, vilket kan påverka användarvänligheten negativt casino utan svensk licens.
Varje plattform har sina unika styrkor och svagheter. Här är en kort sammanfattning:
Casinostore: Styrkor: Bra spelutbud, användarvänlig design. Svagheter: Begränsade betalningsalternativ.
Mr Green: Styrkor: Många betalningsmetoder och bra support. Svagheter: Spelutbudet är något begränsat i kvalitet.
LeoVegas: Styrkor: Störst spelutbud och bra bonusar. Svagheter: Hög konkurrens kan leda till en mättad marknad.
Det finns också lagar och regionala begränsningar att ta hänsyn till. Att spela på en plattform som har licens och följer reglerna är viktigt för ditt skydd som spelare. I Sverige är det viktigt att se till att plattformar har en svensk spellicens, vilket innebär att de följer strikta riktlinjer för säkerhet och rättvist spelande. Plattformar utan spelpaus är ofta lättare att vidare utforska men kom ihåg risken med spelberoende och alltid spela ansvarsfullt.
Valet av den rätta plattformen för att njuta av de “Top games to enjoy at casino utan spelpaus platforms” beror på faktorer som spelutbud, användarvänlighet, betalningsalternativ och efterlevnad av lagar. Bland de jämförda plattformarna är LeoVegas det bästa alternativet för den som vill ha ett stort spelutbud, medan Mr Green är perfekt för dem som värderar betalningsalternativ och kundsupport.
Den senaste tiden har det skett en markant ökning av esports betting på online casinon, särskilt efter att stora turneringar och evenemang inom esports har ökat i popularitet. Detta fenomen engagerar inte bara redan etablerade spelare utan lockar även nya besökare som är intresserade av att satsa på sina favoritspelare och lag. Med den snabba tillväxten av digitale evenemang, såsom Dota 2 International och League of Legends World Championship, är det viktigt att förstå hur denna utveckling påverkar spelarna och casinon.
Ett flertal faktorer bidrar till den ökande populariteten för esports betting. För det första har esports blivit mer mainstream, med stora tävlingar som sänds på plattformar som Twitch och YouTube, vilket ger dem stor medieexponering. Dessutom erbjuder nätcasinon mer varierade och innovativa bettingalternativ, inklusive live betting och olika typer av odds. Genom att anpassa sig till spelarnas efterfrågan kan online casinon maximera sina vinster och skapa en mer engagerande spelupplevelse.
Dessa faktorer skapar tillsammans en gynnsam miljö för esports betting, vilket gör det svårare för traditionella sportsbettare att ignorera denna nya trend. Idag kan spelare enkelt följa sina favoritturneringar och samtidigt delta aktivt i bettingen, vilket ökar deras engagemang och intresse för esports.
Marknaden för esports betting uppskattas växa snabbt, med prognoser som visar att den kan nå över 13 miljarder USD till 2025 enligt rapporter från Eilers & Krejcik Gaming. För spelarna innebär detta en större variation av alternativ och en högre konkurrens mellan bookmakers, vilket kan resultera i mer förmånliga odds. Det är även värt att notera att det finns en stor och ung målgrupp som är mer bekväm med online betting än äldre generationer, vilket skapar en dynamisk marknad casino utan svensk licens.
Online casinon har anpassat sina affärsmodeller för att dra nytta av denna växande trend. Många företag investerar i teknik och plattformar som stödjer högkvalitativa esports bettingupplevelser. Genom att erbjuda detaljerad statistik och analyser av spelare och lag får användarna verktygen de behöver för att fatta informerade beslut. Dessutom, samarbetar casinon med välkända esportsliga och evenemang för att skapa mer intressanta bettingmöjligheter.
Det är tydligt att tillväxten av esports betting på online casinon är en viktig trend inom den digitala spelvärlden. Med de pågående förändringarna i hur spelare interagerar med sina favoritspel och lag, kan vi förvänta oss att denna marknad kommer fortsätta att växa. Casinon som snabbt anpassar sig till dessa förändringar och erbjuder innovativa lösningar kommer sannolikt att dra nytta av den ökande efterfrågan och få en starkare position på marknaden.
Denna artikel har belyst den snabba utvecklingen av esports betting på online casinon, och hur detta påverkar både spelare och casinon. Genom att förstå denna trend kan spelarna göra mer informerade val i sina bettingaktiviteter.
]]>Den senaste tiden har det skett en markant ökning av esports betting på online casinon, särskilt efter att stora turneringar och evenemang inom esports har ökat i popularitet. Detta fenomen engagerar inte bara redan etablerade spelare utan lockar även nya besökare som är intresserade av att satsa på sina favoritspelare och lag. Med den snabba tillväxten av digitale evenemang, såsom Dota 2 International och League of Legends World Championship, är det viktigt att förstå hur denna utveckling påverkar spelarna och casinon.
Ett flertal faktorer bidrar till den ökande populariteten för esports betting. För det första har esports blivit mer mainstream, med stora tävlingar som sänds på plattformar som Twitch och YouTube, vilket ger dem stor medieexponering. Dessutom erbjuder nätcasinon mer varierade och innovativa bettingalternativ, inklusive live betting och olika typer av odds. Genom att anpassa sig till spelarnas efterfrågan kan online casinon maximera sina vinster och skapa en mer engagerande spelupplevelse.
Dessa faktorer skapar tillsammans en gynnsam miljö för esports betting, vilket gör det svårare för traditionella sportsbettare att ignorera denna nya trend. Idag kan spelare enkelt följa sina favoritturneringar och samtidigt delta aktivt i bettingen, vilket ökar deras engagemang och intresse för esports.
Marknaden för esports betting uppskattas växa snabbt, med prognoser som visar att den kan nå över 13 miljarder USD till 2025 enligt rapporter från Eilers & Krejcik Gaming. För spelarna innebär detta en större variation av alternativ och en högre konkurrens mellan bookmakers, vilket kan resultera i mer förmånliga odds. Det är även värt att notera att det finns en stor och ung målgrupp som är mer bekväm med online betting än äldre generationer, vilket skapar en dynamisk marknad casino utan svensk licens.
Online casinon har anpassat sina affärsmodeller för att dra nytta av denna växande trend. Många företag investerar i teknik och plattformar som stödjer högkvalitativa esports bettingupplevelser. Genom att erbjuda detaljerad statistik och analyser av spelare och lag får användarna verktygen de behöver för att fatta informerade beslut. Dessutom, samarbetar casinon med välkända esportsliga och evenemang för att skapa mer intressanta bettingmöjligheter.
Det är tydligt att tillväxten av esports betting på online casinon är en viktig trend inom den digitala spelvärlden. Med de pågående förändringarna i hur spelare interagerar med sina favoritspel och lag, kan vi förvänta oss att denna marknad kommer fortsätta att växa. Casinon som snabbt anpassar sig till dessa förändringar och erbjuder innovativa lösningar kommer sannolikt att dra nytta av den ökande efterfrågan och få en starkare position på marknaden.
Denna artikel har belyst den snabba utvecklingen av esports betting på online casinon, och hur detta påverkar både spelare och casinon. Genom att förstå denna trend kan spelarna göra mer informerade val i sina bettingaktiviteter.
]]>My name is James Parker, and today, I’m diving into a detailed review of N1 Casino, a vibrant online gaming platform that has been gaining traction among players worldwide. If you’re curious about understanding the house edge at N1 Casino, you’re in the right place. This casino is suited for both beginners and seasoned players alike, offering a unique blend of entertainment and competitive gaming opportunities. Whether you’re looking to enjoy a thrilling slot or challenge a dealer in a live casino game, there’s something here for everyone. Let’s explore what makes N1 Casino tick, its offerings, and crucially, what you need to know about its house edge.
N1 Casino entered the online gaming scene with a clear mission: to provide players with a diverse range of games and a user-friendly experience. Operated by N1 Interactive Ltd, this casino is fully licensed by the Malta Gaming Authority, which is one of the most respected gaming regulators. This ensures that players can expect a fair, safe, and secure gaming environment. N1 Casino’s website features an intuitive layout, making it easy for players to navigate through various game categories like slots, table games, and live dealer options. The overall aesthetic is sleek and modern, enhancing the user experience right from the start.
Creating an account at N1 Casino is straightforward and user-friendly. Players need to follow these steps to get started:
This simple process allows you to start exploring the fantastic selection of games without unnecessary delays. Additionally, keep in mind that verifying your account can streamline future transactions, making withdrawals quicker and hassle-free playn1bet.com.
An appealing aspect of N1 Casino is its generous bonuses and promotions designed to enhance your gaming experience. New players can benefit from a welcome package, which includes a first deposit bonus along with free spins on selected slot games. Ongoing promotions and seasonal offers frequently pop up, ensuring that loyal players have plenty of opportunities to boost their bankrolls. It’s important to pay attention to the terms attached to these offers, including wagering requirements, to get the most out of these deals. Using promo codes can further amplify your bonuses and is well worth checking out on the promotions page.
Understanding the house edge at N1 Casino involves exploring the broad selection of games they offer. The library comprises a plethora of slots, table games, and live dealer options from leading software providers. Key highlights include:
This extensive game library not only adds to the entertainment but also comes with different house edges, making it essential for players to understand how these affect their chances of winning.
Making transactions at N1 Casino is both secure and convenient, thanks to a variety of payment methods. You can use traditional methods like credit cards (Visa, Mastercard) or opt for e-wallets (Skrill, Neteller). Here’s a quick look at the deposit and withdrawal process:
Note that the withdrawal time might vary based on the method selected, and it’s wise to verify your account before requesting payouts to avoid any delays.
N1 Casino operates under the strict regulations set forth by the Malta Gaming Authority, which is well-known for upholding high industry standards. This licensing means players can expect a safe gaming environment, as it ensures fairness, security, and transparency within all operations. Additionally, N1 Casino employs advanced encryption technology to protect personal and financial information, preventing unauthorized access to your data. Their commitment to responsible gaming is also evident through self-exclusion options and links to relevant resources, which further promotes a safe gaming culture.
In conclusion, understanding the house edge at N1 Casino is essential for anyone looking to make the most out of their online gaming experience. The platform’s strong licensing, diverse game selection, and generous bonuses paint it as an excellent choice for new and seasoned players alike. With a user-friendly interface and several safety features in place, players can indulge in their favorite games with peace of mind. I highly recommend giving N1 Casino a spin, as it offers a delightful experience that balances entertainment with strategic gameplay.