/*! elementor - v3.27.0 - 03-02-2025 */
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "../assets/dev/js/utils/react.js":
/*!***************************************!*\
!*** ../assets/dev/js/utils/react.js ***!
\***************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "react"));
var ReactDOM = _interopRequireWildcard(__webpack_require__(/*! react-dom */ "react-dom"));
var _client = __webpack_require__(/*! react-dom/client */ "../node_modules/react-dom/client.js");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
/**
* Support conditional rendering of a React App to the DOM, based on the React version.
* We use `createRoot` when available, but fallback to `ReactDOM.render` for older versions.
*
* @param { React.ReactElement } app The app to render.
* @param { HTMLElement } domElement The DOM element to render the app into.
*
* @return {{ unmount: () => void }} The unmount function.
*/
function render(app, domElement) {
var unmountFunction;
try {
var root = (0, _client.createRoot)(domElement);
root.render(app);
unmountFunction = function unmountFunction() {
root.unmount();
};
} catch (e) {
// eslint-disable-next-line react/no-deprecated
ReactDOM.render(app, domElement);
unmountFunction = function unmountFunction() {
// eslint-disable-next-line react/no-deprecated
ReactDOM.unmountComponentAtNode(domElement);
};
}
return {
unmount: unmountFunction
};
}
var _default = exports["default"] = {
render: render
};
/***/ }),
/***/ "../modules/home/assets/js/components/addons-section.js":
/*!**************************************************************!*\
!*** ../modules/home/assets/js/components/addons-section.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
/* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js");
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _objectDestructuringEmpty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectDestructuringEmpty */ "../node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js"));
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "../node_modules/@babel/runtime/helpers/extends.js"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _List = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/List */ "@elementor/ui/List"));
var _Link = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/Link */ "@elementor/ui/Link"));
var _Button = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/Button */ "@elementor/ui/Button"));
var _Card = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/Card */ "@elementor/ui/Card"));
var _CardActions = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/CardActions */ "@elementor/ui/CardActions"));
var _CardContent = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/CardContent */ "@elementor/ui/CardContent"));
var _CardMedia = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/CardMedia */ "@elementor/ui/CardMedia"));
var Addons = function Addons(_ref) {
var props = (0, _extends2.default)({}, ((0, _objectDestructuringEmpty2.default)(_ref), _ref));
var domain = props.adminUrl.replace('wp-admin/', '');
var addonsArray = props.addonsData.repeater;
var cardsPerRow = 3 === addonsArray.length ? 3 : 2;
return /*#__PURE__*/_react.default.createElement(_ui.Paper, {
elevation: 0,
sx: {
p: 3,
display: 'flex',
flexDirection: 'column',
gap: 2
}
}, /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_ui.Typography, {
variant: "h6"
}, props.addonsData.header.title), /*#__PURE__*/_react.default.createElement(_ui.Typography, {
variant: "body2",
color: "text.secondary"
}, props.addonsData.header.description)), /*#__PURE__*/_react.default.createElement(_List.default, {
sx: {
display: 'grid',
gridTemplateColumns: {
md: "repeat(".concat(cardsPerRow, ", 1fr)"),
xs: 'repeat(1, 1fr)'
},
gap: 2
}
}, addonsArray.map(function (item) {
var linkTarget = item.hasOwnProperty('target') ? item.target : '_blank';
return /*#__PURE__*/_react.default.createElement(_Card.default, {
key: item.title,
elevation: 0,
sx: {
display: 'flex',
border: 1,
borderRadius: 1,
borderColor: 'action.focus'
}
}, /*#__PURE__*/_react.default.createElement(_CardContent.default, {
sx: {
display: 'flex',
flexDirection: 'column',
justifyContent: 'space-between',
gap: 3,
p: 3
}
}, /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_CardMedia.default, {
image: item.image,
sx: {
height: '58px',
width: '58px',
mb: 2
}
}), /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_ui.Typography, {
variant: "subtitle2"
}, item.title), /*#__PURE__*/_react.default.createElement(_ui.Typography, {
variant: "body2",
color: "text.secondary"
}, item.description))), /*#__PURE__*/_react.default.createElement(_CardActions.default, {
sx: {
p: 0
}
}, /*#__PURE__*/_react.default.createElement(_Button.default, {
variant: "outlined",
size: "small",
color: "promotion",
href: item.url,
target: linkTarget
}, item.button_label))));
})), /*#__PURE__*/_react.default.createElement(_Link.default, {
variant: "body2",
color: "info.main",
underline: "none",
href: "".concat(domain).concat(props.addonsData.footer.file_path)
}, props.addonsData.footer.label));
};
var _default = exports["default"] = Addons;
Addons.propTypes = {
addonsData: PropTypes.object.isRequired,
adminUrl: PropTypes.string.isRequired
};
/***/ }),
/***/ "../modules/home/assets/js/components/create-new-page-dialog.js":
/*!**********************************************************************!*\
!*** ../modules/home/assets/js/components/create-new-page-dialog.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
/* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"];
/* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js");
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["default"] = 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 _DialogHeader = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/DialogHeader */ "@elementor/ui/DialogHeader"));
var _DialogHeaderGroup = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/DialogHeaderGroup */ "@elementor/ui/DialogHeaderGroup"));
var _DialogTitle = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/DialogTitle */ "@elementor/ui/DialogTitle"));
var _DialogContent = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/DialogContent */ "@elementor/ui/DialogContent"));
var _DialogContentText = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/DialogContentText */ "@elementor/ui/DialogContentText"));
var _TextField = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/TextField */ "@elementor/ui/TextField"));
var _DialogActions = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/DialogActions */ "@elementor/ui/DialogActions"));
var _Button = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/Button */ "@elementor/ui/Button"));
var _Dialog = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/Dialog */ "@elementor/ui/Dialog"));
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
var CreateNewPageDialog = function CreateNewPageDialog(_ref) {
var url = _ref.url,
isOpen = _ref.isOpen,
closedDialogCallback = _ref.closedDialogCallback;
var _React$useState = _react.default.useState(false),
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
open = _React$useState2[0],
setOpen = _React$useState2[1];
var _React$useState3 = _react.default.useState(''),
_React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
pageName = _React$useState4[0],
setPageName = _React$useState4[1];
(0, _react.useEffect)(function () {
setOpen(isOpen);
}, [isOpen]);
var handleDialogClose = function handleDialogClose() {
setOpen(false);
closedDialogCallback();
};
var handleChange = function handleChange(event) {
var urlParams = new URLSearchParams();
urlParams.append('post_data[post_title]', event.target.value);
setPageName(urlParams.toString());
};
return /*#__PURE__*/_react.default.createElement(_Dialog.default, {
open: open,
onClose: handleDialogClose,
maxWidth: "xs",
width: "xs",
fullWidth: true
}, /*#__PURE__*/_react.default.createElement(_DialogHeader.default, null, /*#__PURE__*/_react.default.createElement(_DialogHeaderGroup.default, null, /*#__PURE__*/_react.default.createElement(_DialogTitle.default, null, __('Name your page', 'elementor')))), /*#__PURE__*/_react.default.createElement(_DialogContent.default, {
dividers: true
}, /*#__PURE__*/_react.default.createElement(_DialogContentText.default, {
sx: {
mb: 2
}
}, __('To proceed, please name your first page,', 'elementor'), /*#__PURE__*/_react.default.createElement("br", null), __('or rename it later.', 'elementor')), /*#__PURE__*/_react.default.createElement(_TextField.default, {
onChange: handleChange,
fullWidth: true,
placeholder: __('New Page', 'elementor')
})), /*#__PURE__*/_react.default.createElement(_DialogActions.default, null, /*#__PURE__*/_react.default.createElement(_Button.default, {
onClick: handleDialogClose,
color: "secondary"
}, __('Cancel', 'elementor')), /*#__PURE__*/_react.default.createElement(_Button.default, {
variant: "contained",
href: pageName ? url + '&' + pageName : url,
target: "_blank"
}, __('Save', 'elementor'))));
};
var _default = exports["default"] = CreateNewPageDialog;
CreateNewPageDialog.propTypes = {
url: PropTypes.string.isRequired,
isOpen: PropTypes.bool.isRequired,
closedDialogCallback: PropTypes.func.isRequired
};
/***/ }),
/***/ "../modules/home/assets/js/components/external-links-section.js":
/*!**********************************************************************!*\
!*** ../modules/home/assets/js/components/external-links-section.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
/* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js");
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _objectDestructuringEmpty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectDestructuringEmpty */ "../node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js"));
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "../node_modules/@babel/runtime/helpers/extends.js"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _List = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/List */ "@elementor/ui/List"));
var _ListItemButton = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/ListItemButton */ "@elementor/ui/ListItemButton"));
var _ListItemText = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/ListItemText */ "@elementor/ui/ListItemText"));
var _Divider = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/Divider */ "@elementor/ui/Divider"));
var ExternalLinksSection = function ExternalLinksSection(_ref) {
var props = (0, _extends2.default)({}, ((0, _objectDestructuringEmpty2.default)(_ref), _ref));
return /*#__PURE__*/_react.default.createElement(_ui.Paper, {
elevation: 0,
sx: {
px: 3
}
}, /*#__PURE__*/_react.default.createElement(_List.default, null, props.externalLinksData.map(function (item, index) {
return /*#__PURE__*/_react.default.createElement(_ui.Box, {
key: item.label
}, /*#__PURE__*/_react.default.createElement(_ListItemButton.default, {
href: item.url,
target: "_blank",
sx: {
'&:hover': {
backgroundColor: 'initial'
},
gap: 2,
px: 0,
py: 2
}
}, /*#__PURE__*/_react.default.createElement(_ui.Box, {
component: "img",
src: item.image,
sx: {
width: '38px'
}
}), /*#__PURE__*/_react.default.createElement(_ListItemText.default, {
sx: {
color: 'text.secondary'
},
primary: item.label
})), index < props.externalLinksData.length - 1 && /*#__PURE__*/_react.default.createElement(_Divider.default, null));
})));
};
var _default = exports["default"] = ExternalLinksSection;
ExternalLinksSection.propTypes = {
externalLinksData: PropTypes.array.isRequired
};
/***/ }),
/***/ "../modules/home/assets/js/components/get-started-list-item.js":
/*!*********************************************************************!*\
!*** ../modules/home/assets/js/components/get-started-list-item.js ***!
\*********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
/* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js");
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"));
var _ListItem = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/ListItem */ "@elementor/ui/ListItem"));
var _ListItemText = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/ListItemText */ "@elementor/ui/ListItemText"));
var _Link = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/Link */ "@elementor/ui/Link"));
var _Box = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/Box */ "@elementor/ui/Box"));
var _createNewPageDialog = _interopRequireDefault(__webpack_require__(/*! ./create-new-page-dialog */ "../modules/home/assets/js/components/create-new-page-dialog.js"));
var GetStartedListItem = function GetStartedListItem(_ref) {
var item = _ref.item,
image = _ref.image,
adminUrl = _ref.adminUrl;
var url = item.is_relative_url ? adminUrl + item.url : item.url;
var _React$useState = _react.default.useState(false),
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
isOpen = _React$useState2[0],
openDialog = _React$useState2[1];
var handleLinkClick = function handleLinkClick(event) {
if (!item.new_page) {
return;
}
event.preventDefault();
openDialog(true);
};
return /*#__PURE__*/_react.default.createElement(_ListItem.default, {
alignItems: "flex-start",
sx: {
gap: 1,
p: 0,
maxWidth: '150px'
}
}, /*#__PURE__*/_react.default.createElement(_Box.default, {
component: "img",
src: image
}), /*#__PURE__*/_react.default.createElement(_Box.default, null, /*#__PURE__*/_react.default.createElement(_ListItemText.default, {
primary: item.title,
primaryTypographyProps: {
variant: 'subtitle1'
},
sx: {
my: 0
}
}), /*#__PURE__*/_react.default.createElement(_Link.default, {
variant: "body2",
color: item.title_small_color ? item.title_small_color : 'text.tertiary',
underline: "hover",
href: url,
target: "_blank",
onClick: handleLinkClick
}, item.title_small)), item.new_page && /*#__PURE__*/_react.default.createElement(_createNewPageDialog.default, {
url: url,
isOpen: isOpen,
closedDialogCallback: function closedDialogCallback() {
return openDialog(false);
}
}));
};
var _default = exports["default"] = GetStartedListItem;
GetStartedListItem.propTypes = {
item: PropTypes.shape({
title: PropTypes.string.isRequired,
title_small: PropTypes.string.isRequired,
url: PropTypes.string.isRequired,
new_page: PropTypes.bool,
is_relative_url: PropTypes.bool,
title_small_color: PropTypes.string
}).isRequired,
adminUrl: PropTypes.string.isRequired,
image: PropTypes.string
};
/***/ }),
/***/ "../modules/home/assets/js/components/get-started-section.js":
/*!*******************************************************************!*\
!*** ../modules/home/assets/js/components/get-started-section.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
/* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js");
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _objectDestructuringEmpty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectDestructuringEmpty */ "../node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js"));
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "../node_modules/@babel/runtime/helpers/extends.js"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _List = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/List */ "@elementor/ui/List"));
var _getStartedListItem = _interopRequireDefault(__webpack_require__(/*! ./get-started-list-item */ "../modules/home/assets/js/components/get-started-list-item.js"));
var GetStarted = function GetStarted(_ref) {
var props = (0, _extends2.default)({}, ((0, _objectDestructuringEmpty2.default)(_ref), _ref));
return /*#__PURE__*/_react.default.createElement(_ui.Paper, {
elevation: 0,
sx: {
p: 3,
display: 'flex',
flexDirection: 'column',
gap: 2
}
}, /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_ui.Typography, {
variant: "h6"
}, props.getStartedData.header.title), /*#__PURE__*/_react.default.createElement(_ui.Typography, {
variant: "body2",
color: "text.secondary"
}, props.getStartedData.header.description)), /*#__PURE__*/_react.default.createElement(_List.default, {
sx: {
display: 'grid',
gridTemplateColumns: {
md: 'repeat(4, 1fr)',
xs: 'repeat(2, 1fr)'
},
columnGap: {
md: 9,
xs: 7
},
rowGap: 3
}
}, props.getStartedData.repeater.map(function (item) {
return /*#__PURE__*/_react.default.createElement(_getStartedListItem.default, {
key: item.title,
item: item,
image: item.image,
adminUrl: props.adminUrl
});
})));
};
var _default = exports["default"] = GetStarted;
GetStarted.propTypes = {
getStartedData: PropTypes.object.isRequired,
adminUrl: PropTypes.string.isRequired
};
/***/ }),
/***/ "../modules/home/assets/js/components/home-screen.js":
/*!***********************************************************!*\
!*** ../modules/home/assets/js/components/home-screen.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
/* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js");
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _topSection = _interopRequireDefault(__webpack_require__(/*! ./top-section */ "../modules/home/assets/js/components/top-section.js"));
var _sidebarPromotion = _interopRequireDefault(__webpack_require__(/*! ./sidebar-promotion */ "../modules/home/assets/js/components/sidebar-promotion.js"));
var _addonsSection = _interopRequireDefault(__webpack_require__(/*! ./addons-section */ "../modules/home/assets/js/components/addons-section.js"));
var _externalLinksSection = _interopRequireDefault(__webpack_require__(/*! ./external-links-section */ "../modules/home/assets/js/components/external-links-section.js"));
var _getStartedSection = _interopRequireDefault(__webpack_require__(/*! ./get-started-section */ "../modules/home/assets/js/components/get-started-section.js"));
var HomeScreen = function HomeScreen(props) {
var hasSidebarUpgrade = props.homeScreenData.hasOwnProperty('sidebar_upgrade');
return /*#__PURE__*/ /* Box wrapper around the Container is needed to neutralize wp-content area left-padding */_react.default.createElement(_ui.Box, {
sx: {
pr: 1
}
}, /*#__PURE__*/_react.default.createElement(_ui.Container, {
disableGutters: true,
maxWidth: "lg",
sx: {
display: 'flex',
flexDirection: 'column',
gap: {
xs: 1,
md: 3
},
pt: {
xs: 2,
md: 6
},
pb: 2
}
}, /*#__PURE__*/_react.default.createElement(_topSection.default, {
topData: props.homeScreenData.top_with_licences,
createNewPageUrl: props.homeScreenData.create_new_page_url
}), /*#__PURE__*/_react.default.createElement(_ui.Box, {
sx: {
display: 'flex',
flexDirection: {
xs: 'column',
sm: 'row'
},
justifyContent: 'space-between',
gap: 3
}
}, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
sx: {
flex: 1,
gap: 3
}
}, /*#__PURE__*/_react.default.createElement(_getStartedSection.default, {
getStartedData: props.homeScreenData.get_started,
adminUrl: props.adminUrl
}), /*#__PURE__*/_react.default.createElement(_addonsSection.default, {
addonsData: props.homeScreenData.add_ons,
adminUrl: props.adminUrl
})), /*#__PURE__*/_react.default.createElement(_ui.Container, {
maxWidth: "xs",
disableGutters: true,
sx: {
width: {
sm: '305px'
},
display: 'flex',
flexDirection: 'column',
gap: 3
}
}, hasSidebarUpgrade && /*#__PURE__*/_react.default.createElement(_sidebarPromotion.default, {
sideData: props.homeScreenData.sidebar_upgrade
}), /*#__PURE__*/_react.default.createElement(_externalLinksSection.default, {
externalLinksData: props.homeScreenData.external_links
})))));
};
HomeScreen.propTypes = {
homeScreenData: PropTypes.object,
adminUrl: PropTypes.string
};
var _default = exports["default"] = HomeScreen;
/***/ }),
/***/ "../modules/home/assets/js/components/sidebar-promotion.js":
/*!*****************************************************************!*\
!*** ../modules/home/assets/js/components/sidebar-promotion.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
/* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js");
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _objectDestructuringEmpty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectDestructuringEmpty */ "../node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js"));
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "../node_modules/@babel/runtime/helpers/extends.js"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _Button = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/Button */ "@elementor/ui/Button"));
var _List = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/List */ "@elementor/ui/List"));
var _ListItem = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/ListItem */ "@elementor/ui/ListItem"));
var _ListItemText = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/ListItemText */ "@elementor/ui/ListItemText"));
var _sideBarCheckIcon = _interopRequireDefault(__webpack_require__(/*! ../icons/side-bar-check-icon */ "../modules/home/assets/js/icons/side-bar-check-icon.js"));
var SideBarPromotion = function SideBarPromotion(_ref) {
var props = (0, _extends2.default)({}, ((0, _objectDestructuringEmpty2.default)(_ref), _ref));
return /*#__PURE__*/_react.default.createElement(_ui.Paper, {
elevation: 0,
sx: {
p: 3
}
}, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
gap: 1.5,
sx: {
alignItems: 'center',
textAlign: 'center',
pb: 4
}
}, /*#__PURE__*/_react.default.createElement(_ui.Box, {
component: "img",
src: props.sideData.header.image
}), /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_ui.Typography, {
variant: "h6"
}, props.sideData.header.title), /*#__PURE__*/_react.default.createElement(_ui.Typography, {
variant: "body2",
color: "text.secondary"
}, props.sideData.header.description)), /*#__PURE__*/_react.default.createElement(_Button.default, {
variant: "contained",
size: "medium",
color: "promotion",
href: props.sideData.cta.url,
startIcon: /*#__PURE__*/_react.default.createElement(_ui.Box, {
component: "img",
src: props.sideData.cta.image,
sx: {
width: '16px'
}
}),
target: "_blank",
sx: {
maxWidth: 'fit-content'
}
}, props.sideData.cta.label)), /*#__PURE__*/_react.default.createElement(_List.default, {
sx: {
p: 0
}
}, props.sideData.repeater.map(function (item, index) {
return /*#__PURE__*/_react.default.createElement(_ListItem.default, {
key: index,
sx: {
p: 0,
gap: 1
}
}, /*#__PURE__*/_react.default.createElement(_sideBarCheckIcon.default, null), /*#__PURE__*/_react.default.createElement(_ListItemText.default, {
primaryTypographyProps: {
variant: 'body2'
},
primary: item.title
}));
})));
};
var _default = exports["default"] = SideBarPromotion;
SideBarPromotion.propTypes = {
sideData: PropTypes.object.isRequired
};
/***/ }),
/***/ "../modules/home/assets/js/components/top-section.js":
/*!***********************************************************!*\
!*** ../modules/home/assets/js/components/top-section.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
/* provided dependency */ var PropTypes = __webpack_require__(/*! prop-types */ "../node_modules/prop-types/index.js");
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
var _objectDestructuringEmpty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectDestructuringEmpty */ "../node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js"));
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "../node_modules/@babel/runtime/helpers/extends.js"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
var _Typography = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/Typography */ "@elementor/ui/Typography"));
var _Button = _interopRequireDefault(__webpack_require__(/*! @elementor/ui/Button */ "@elementor/ui/Button"));
var _youtubeIcon = _interopRequireDefault(__webpack_require__(/*! ../icons/youtube-icon */ "../modules/home/assets/js/icons/youtube-icon.js"));
var TopSection = function TopSection(_ref) {
var props = (0, _extends2.default)({}, ((0, _objectDestructuringEmpty2.default)(_ref), _ref));
return /*#__PURE__*/_react.default.createElement(_ui.Paper, {
elevation: 0,
sx: {
display: 'flex',
flexDirection: {
xs: 'column',
sm: 'row'
},
justifyContent: 'space-between',
py: {
xs: 3,
md: 3
},
px: {
xs: 3,
md: 4
},
gap: {
xs: 2,
sm: 3,
lg: 22
}
}
}, /*#__PURE__*/_react.default.createElement(_ui.Stack, {
gap: 3,
justifyContent: "center"
}, /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_Typography.default, {
variant: "h6"
}, props.topData.title), /*#__PURE__*/_react.default.createElement(_Typography.default, {
variant: "body2",
color: "secondary"
}, props.topData.description)), /*#__PURE__*/_react.default.createElement(_ui.Box, {
sx: {
display: 'flex',
gap: 1
}
}, /*#__PURE__*/_react.default.createElement(_Button.default, {
variant: "contained",
size: "small",
href: props.createNewPageUrl,
target: "_blank"
}, props.topData.button_create_page_title), /*#__PURE__*/_react.default.createElement(_Button.default, {
variant: "outlined",
color: "secondary",
size: "small",
startIcon: /*#__PURE__*/_react.default.createElement(_youtubeIcon.default, null),
href: props.topData.button_watch_url,
target: "_blank"
}, props.topData.button_watch_title))), /*#__PURE__*/_react.default.createElement(_ui.Box, {
component: "iframe",
src: "https://www.youtube.com/embed/".concat(props.topData.youtube_embed_id),
title: "YouTube video player",
frameBorder: "0",
allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
allowFullScreen: true,
sx: {
aspectRatio: '16/9',
borderRadius: 1,
display: 'flex',
width: '100%',
maxWidth: '365px'
}
}));
};
TopSection.propTypes = {
topData: PropTypes.object.isRequired,
createNewPageUrl: PropTypes.string.isRequired
};
var _default = exports["default"] = TopSection;
/***/ }),
/***/ "../modules/home/assets/js/icons/side-bar-check-icon.js":
/*!**************************************************************!*\
!*** ../modules/home/assets/js/icons/side-bar-check-icon.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["default"] = void 0;
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "../node_modules/@babel/runtime/helpers/extends.js"));
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "react"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
var SideBarCheckIcon = function SideBarCheckIcon(props) {
return /*#__PURE__*/React.createElement(_ui.SvgIcon, (0, _extends2.default)({
viewBox: "0 0 24 24"
}, props), /*#__PURE__*/React.createElement("path", {
fillRule: "evenodd",
clipRule: "evenodd",
d: "M9.09013 3.69078C10.273 3.2008 11.5409 2.94861 12.8213 2.94861C14.1017 2.94861 15.3695 3.2008 16.5525 3.69078C17.7354 4.18077 18.8102 4.89895 19.7156 5.80432C20.621 6.70969 21.3391 7.78452 21.8291 8.96744C22.3191 10.1504 22.5713 11.4182 22.5713 12.6986C22.5713 13.979 22.3191 15.2468 21.8291 16.4298C21.3391 17.6127 20.621 18.6875 19.7156 19.5929C18.8102 20.4983 17.7354 21.2165 16.5525 21.7064C15.3695 22.1964 14.1017 22.4486 12.8213 22.4486C11.5409 22.4486 10.2731 22.1964 9.09013 21.7064C7.9072 21.2165 6.83237 20.4983 5.927 19.5929C5.02163 18.6875 4.30345 17.6127 3.81346 16.4298C3.32348 15.2468 3.07129 13.979 3.07129 12.6986C3.07129 11.4182 3.32348 10.1504 3.81346 8.96744C4.30345 7.78452 5.02163 6.70969 5.927 5.80432C6.83237 4.89895 7.9072 4.18077 9.09013 3.69078ZM12.8213 4.44861C11.7379 4.44861 10.6651 4.662 9.66415 5.0766C8.66321 5.4912 7.75374 6.09889 6.98766 6.86498C6.22157 7.63106 5.61388 8.54053 5.19928 9.54147C4.78468 10.5424 4.57129 11.6152 4.57129 12.6986C4.57129 13.782 4.78468 14.8548 5.19928 15.8557C5.61388 16.8567 6.22157 17.7662 6.98766 18.5322C7.75374 19.2983 8.66322 19.906 9.66415 20.3206C10.6651 20.7352 11.7379 20.9486 12.8213 20.9486C13.9047 20.9486 14.9775 20.7352 15.9784 20.3206C16.9794 19.906 17.8888 19.2983 18.6549 18.5322C19.421 17.7662 20.0287 16.8567 20.4433 15.8557C20.8579 14.8548 21.0713 13.782 21.0713 12.6986C21.0713 11.6152 20.8579 10.5424 20.4433 9.54147C20.0287 8.54053 19.421 7.63106 18.6549 6.86498C17.8888 6.09889 16.9794 5.4912 15.9784 5.0766C14.9775 4.662 13.9047 4.44861 12.8213 4.44861Z",
fill: "#93003F"
}), /*#__PURE__*/React.createElement("path", {
fillRule: "evenodd",
clipRule: "evenodd",
d: "M17.3213 9.69424C17.6142 9.98713 17.6142 10.462 17.3213 10.7549L12.3732 15.703C12.0803 15.9959 11.6054 15.9959 11.3125 15.703L8.83851 13.2289C8.54562 12.936 8.54562 12.4612 8.83851 12.1683C9.1314 11.8754 9.60628 11.8754 9.89917 12.1683L11.8429 14.112L16.2606 9.69424C16.5535 9.40135 17.0284 9.40135 17.3213 9.69424Z",
fill: "#93003F"
}));
};
var _default = exports["default"] = SideBarCheckIcon;
/***/ }),
/***/ "../modules/home/assets/js/icons/youtube-icon.js":
/*!*******************************************************!*\
!*** ../modules/home/assets/js/icons/youtube-icon.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["default"] = void 0;
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "../node_modules/@babel/runtime/helpers/extends.js"));
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "react"));
var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
var YoutubeIcon = function YoutubeIcon(props) {
return /*#__PURE__*/React.createElement(_ui.SvgIcon, (0, _extends2.default)({
viewBox: "0 0 24 24"
}, props), /*#__PURE__*/React.createElement("path", {
fillRule: "evenodd",
clipRule: "evenodd",
d: "M7 5.75C5.20507 5.75 3.75 7.20507 3.75 9V15C3.75 16.7949 5.20507 18.25 7 18.25H17C18.7949 18.25 20.25 16.7949 20.25 15V9C20.25 7.20507 18.7949 5.75 17 5.75H7ZM2.25 9C2.25 6.37665 4.37665 4.25 7 4.25H17C19.6234 4.25 21.75 6.37665 21.75 9V15C21.75 17.6234 19.6234 19.75 17 19.75H7C4.37665 19.75 2.25 17.6234 2.25 15V9ZM9.63048 8.34735C9.86561 8.21422 10.1542 8.21786 10.3859 8.35688L15.3859 11.3569C15.6118 11.4924 15.75 11.7366 15.75 12C15.75 12.2634 15.6118 12.5076 15.3859 12.6431L10.3859 15.6431C10.1542 15.7821 9.86561 15.7858 9.63048 15.6526C9.39534 15.5195 9.25 15.2702 9.25 15V9C9.25 8.7298 9.39534 8.48048 9.63048 8.34735ZM10.75 10.3246V13.6754L13.5423 12L10.75 10.3246Z"
}));
};
var _default = exports["default"] = YoutubeIcon;
/***/ }),
/***/ "../node_modules/object-assign/index.js":
/*!**********************************************!*\
!*** ../node_modules/object-assign/index.js ***!
\**********************************************/
/***/ ((module) => {
"use strict";
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/
/* eslint-disable no-unused-vars */
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
var hasOwnProperty = Object.prototype.hasOwnProperty;
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
function toObject(val) {
if (val === null || val === undefined) {
throw new TypeError('Object.assign cannot be called with null or undefined');
}
return Object(val);
}
function shouldUseNative() {
try {
if (!Object.assign) {
return false;
}
// Detect buggy property enumeration order in older V8 versions.
// https://bugs.chromium.org/p/v8/issues/detail?id=4118
var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
test1[5] = 'de';
if (Object.getOwnPropertyNames(test1)[0] === '5') {
return false;
}
// https://bugs.chromium.org/p/v8/issues/detail?id=3056
var test2 = {};
for (var i = 0; i < 10; i++) {
test2['_' + String.fromCharCode(i)] = i;
}
var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
return test2[n];
});
if (order2.join('') !== '0123456789') {
return false;
}
// https://bugs.chromium.org/p/v8/issues/detail?id=3056
var test3 = {};
'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
test3[letter] = letter;
});
if (Object.keys(Object.assign({}, test3)).join('') !==
'abcdefghijklmnopqrst') {
return false;
}
return true;
} catch (err) {
// We don't expect any of the above to throw, but better to be safe.
return false;
}
}
module.exports = shouldUseNative() ? Object.assign : function (target, source) {
var from;
var to = toObject(target);
var symbols;
for (var s = 1; s < arguments.length; s++) {
from = Object(arguments[s]);
for (var key in from) {
if (hasOwnProperty.call(from, key)) {
to[key] = from[key];
}
}
if (getOwnPropertySymbols) {
symbols = getOwnPropertySymbols(from);
for (var i = 0; i < symbols.length; i++) {
if (propIsEnumerable.call(from, symbols[i])) {
to[symbols[i]] = from[symbols[i]];
}
}
}
}
return to;
};
/***/ }),
/***/ "../node_modules/prop-types/checkPropTypes.js":
/*!****************************************************!*\
!*** ../node_modules/prop-types/checkPropTypes.js ***!
\****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var printWarning = function() {};
if (true) {
var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "../node_modules/prop-types/lib/ReactPropTypesSecret.js");
var loggedTypeFailures = {};
var has = __webpack_require__(/*! ./lib/has */ "../node_modules/prop-types/lib/has.js");
printWarning = function(text) {
var message = 'Warning: ' + text;
if (typeof console !== 'undefined') {
console.error(message);
}
try {
// --- Welcome to debugging React ---
// This error was thrown as a convenience so that you can use this stack
// to find the callsite that caused this warning to fire.
throw new Error(message);
} catch (x) { /**/ }
};
}
/**
* Assert that the values match with the type specs.
* Error messages are memorized and will only be shown once.
*
* @param {object} typeSpecs Map of name to a ReactPropType
* @param {object} values Runtime values that need to be type-checked
* @param {string} location e.g. "prop", "context", "child context"
* @param {string} componentName Name of the component for error messages.
* @param {?Function} getStack Returns the component stack.
* @private
*/
function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
if (true) {
for (var typeSpecName in typeSpecs) {
if (has(typeSpecs, typeSpecName)) {
var error;
// Prop type validation may throw. In case they do, we don't want to
// fail the render phase where it didn't fail before. So we log it.
// After these have been cleaned up, we'll let them throw.
try {
// This is intentionally an invariant that gets caught. It's the same
// behavior as without this statement except with a better message.
if (typeof typeSpecs[typeSpecName] !== 'function') {
var err = Error(
(componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +
'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'
);
err.name = 'Invariant Violation';
throw err;
}
error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
} catch (ex) {
error = ex;
}
if (error && !(error instanceof Error)) {
printWarning(
(componentName || 'React class') + ': type specification of ' +
location + ' `' + typeSpecName + '` is invalid; the type checker ' +
'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
'You may have forgotten to pass an argument to the type checker ' +
'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
'shape all require an argument).'
);
}
if (error instanceof Error && !(error.message in loggedTypeFailures)) {
// Only monitor this failure once because there tends to be a lot of the
// same error.
loggedTypeFailures[error.message] = true;
var stack = getStack ? getStack() : '';
printWarning(
'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
);
}
}
}
}
}
/**
* Resets warning cache when testing.
*
* @private
*/
checkPropTypes.resetWarningCache = function() {
if (true) {
loggedTypeFailures = {};
}
}
module.exports = checkPropTypes;
/***/ }),
/***/ "../node_modules/prop-types/factoryWithTypeCheckers.js":
/*!*************************************************************!*\
!*** ../node_modules/prop-types/factoryWithTypeCheckers.js ***!
\*************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var ReactIs = __webpack_require__(/*! react-is */ "../node_modules/prop-types/node_modules/react-is/index.js");
var assign = __webpack_require__(/*! object-assign */ "../node_modules/object-assign/index.js");
var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "../node_modules/prop-types/lib/ReactPropTypesSecret.js");
var has = __webpack_require__(/*! ./lib/has */ "../node_modules/prop-types/lib/has.js");
var checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ "../node_modules/prop-types/checkPropTypes.js");
var printWarning = function() {};
if (true) {
printWarning = function(text) {
var message = 'Warning: ' + text;
if (typeof console !== 'undefined') {
console.error(message);
}
try {
// --- Welcome to debugging React ---
// This error was thrown as a convenience so that you can use this stack
// to find the callsite that caused this warning to fire.
throw new Error(message);
} catch (x) {}
};
}
function emptyFunctionThatReturnsNull() {
return null;
}
module.exports = function(isValidElement, throwOnDirectAccess) {
/* global Symbol */
var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
/**
* Returns the iterator method function contained on the iterable object.
*
* Be sure to invoke the function with the iterable as context:
*
* var iteratorFn = getIteratorFn(myIterable);
* if (iteratorFn) {
* var iterator = iteratorFn.call(myIterable);
* ...
* }
*
* @param {?object} maybeIterable
* @return {?function}
*/
function getIteratorFn(maybeIterable) {
var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
if (typeof iteratorFn === 'function') {
return iteratorFn;
}
}
/**
* Collection of methods that allow declaration and validation of props that are
* supplied to React components. Example usage:
*
* var Props = require('ReactPropTypes');
* var MyArticle = React.createClass({
* propTypes: {
* // An optional string prop named "description".
* description: Props.string,
*
* // A required enum prop named "category".
* category: Props.oneOf(['News','Photos']).isRequired,
*
* // A prop named "dialog" that requires an instance of Dialog.
* dialog: Props.instanceOf(Dialog).isRequired
* },
* render: function() { ... }
* });
*
* A more formal specification of how these methods are used:
*
* type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
* decl := ReactPropTypes.{type}(.isRequired)?
*
* Each and every declaration produces a function with the same signature. This
* allows the creation of custom validation functions. For example:
*
* var MyLink = React.createClass({
* propTypes: {
* // An optional string or URI prop named "href".
* href: function(props, propName, componentName) {
* var propValue = props[propName];
* if (propValue != null && typeof propValue !== 'string' &&
* !(propValue instanceof URI)) {
* return new Error(
* 'Expected a string or an URI for ' + propName + ' in ' +
* componentName
* );
* }
* }
* },
* render: function() {...}
* });
*
* @internal
*/
var ANONYMOUS = '<
La diversité et la flexibilité des options de paiement sont cruciales pour offrir aux joueurs une expérience transparente et sécurisée. Découvrons ensemble les choix variés qui s’offrent aux joueurs pour effectuer des dépôts et des retraits en toute simplicité sur cette plateforme de jeu en ligne captivante. Au sein du Casino Casombie, vous aurez accès à plusieurs bonus supplémentaires.
En dehors des Cryptommonaies, il est possible de déposer de l’argent et de faire des retraits de plusieurs autres façons. En optant notamment pour une carte bancaire, un virement bancaire, ou par le biais d’un portefeuille électronique. Toutes les méthodes de paiement montrent à quel point Casombie est flexible et fiable. Il s’agit donc d’une marge et d’un taux de redistribution très variable en fonction des jeux, disponibles, et des jeux en direct. Casombie casino propose également des cotes en fonction du type de pari, qu’il soit intérieur ou extérieur. Puisque les paris intérieurs sont essentiellement basés sur des numéros uniques, ces derniers sont très variables.
Vous pouvez choisir parmi plusieurs offres selon votre profil de joueur. Néanmoins, les avantages offerts aux joueurs fidèles sont substantiels, notamment en termes de limites de retrait et de cashback. Les bonus sont généreux, notamment un package de bienvenue pouvant atteindre 750 € + 200 free spins, avec des conditions de mise raisonnables (x35). Pour toute requête ou question, nous avons établi le contact avec le service client de Casombie Casino à travers plusieurs canaux de communication. Notre choix s’est principalement orienté vers le chat en direct, en raison de sa rapidité pour joindre les agents de soutien.
Cette richesse de la ludothèque est rendue possible grâce à la collaboration avec 70 fournisseurs de renom. Casombie Casino utilise un logiciel RNG ou générateur de nombre aléatoire pour permettre une équité complète de son catalogue de jeux. Les résultats sont garantis aléatoires et aucune possibilité de triche n’est possible. Jouez uniquement pour le divertissement, et ne misez que des sommes que vous pouvez vous permettre de perdre. Si vous sentez que vous perdez le contrôle, n’hésitez pas à demander de l’aide.
Le Casino Casombie, une destination de jeu en ligne innovante, offre une expérience captivante pour les amateurs de casino. Retrouvez Casombie Casino où les opportunités de maximiser votre expérience de jeu affluent grâce à une variété de bonus attractifs. Pour profiter pleinement de ces avantages supplémentaires, suivez ces étapes simples pour utiliser un bonus sur la plateforme.
Pour s’inscrire, il suffit de remplir un formulaire classique avec des informations personnelles valides. La bibliothèque de jeux sur Casombie Casino est l’un de ses principaux atouts. Ce Casino propose une large sélection de machines à sous, jeux de table et contenus en ligne.
Le dépôt minimum est de 20€, avec un wager compris entre 25x et 40x selon le bonus. Les machines à sous contribuent à 100% au wagering, et tu ne pourras pas miser plus de 5€ par tour tant qu’un bonus est actif. Disponible tous les jours et très facile d’accès, il suffit de cliquer sur la bulle en bas à droite de la page. J’apprécie qu’il ne soit pas obligatoire d’être connecté ou d’avoir un compte pour y accéder. La plateforme propose suffisamment d’outils pour t’aider en cas de besoin.
Sans vérification, le casino peut suspendre un paiement, même si le solde est déjà disponible. Nous avons lancé une vérification de compte après notre première demande de retrait. Casombie laisse jusqu’à 30 jours pour envoyer les documents, ce qui reste raisonnable.
Ensuite, entrez la somme que vous souhaitez récupérer, fournissez les informations complémentaires et validez. Rassurez-vous le casino propose des bonus pour augmenter vos chances de gagner au casino. Des bonus sur dépôt aux tours gratuits, tenez-vous prêts pour une monstrueuse dose de fun. Pour pimenter votre survie ludique, Casombie vous invite à participer à des compétitions. Affrontez d’autres survivants dans des tournois palpitants sur les jeux de casino et les paris sportifs. Seuls les plus acharnés et les plus chanceux repartiront avec le butin ultime.
Chaque plateforme répertoriée ici a été rigoureusement évaluée et validée par notre équipe d’experts, assurant ainsi les meilleurs bonus, promotions et avantages exclusifs. Casombie Casino est une plateforme de jeu en ligne qui a su se démarquer dans l’industrie des casinos en ligne grâce à son thème unique et immersif inspiré des zombies. Et licencié par la Curaçao eGaming Authority offre une expérience ludique qui combine frissons et divertissement. Conçu pour les amateurs de jeux d’argent en quête d’une aventure hors du commun, Casombie Casino propose une interface graphique captivante, des jeux variés et des promotions généreuses. Que vous soyez un joueur occasionnel ou un passionné, ce casino promet une immersion totale dans un univers apocalyptique où les gains sont à portée de main. La version mobile de Casombie Casino est parfaitement adaptée aux smartphones et tablettes.
Il s’agit d’un bonus de dépôt de 100% jusqu’à 500 euros accompagné de 200 free spins, accessible dès un dépôt minimum de 20 euros. Le wagering requis pour ce bonus est de x35, obligeant les joueurs à miser le montant du bonus 35 fois avant de pouvoir retirer leurs gains. Casombie Casino organise régulièrement des tournois qui ajoutent une dimension compétitive et excitante à l’expérience de jeu. Ces événements permettent aux joueurs de s’affronter pour remporter des prix en argent, des tours gratuits ou des points de fidélité. Les tournois sont souvent centrés sur des machines à sous spécifiques ou des jeux de table, avec des classements basés sur les gains ou les mises. Le casino en direct de Casombie Casino offre une expérience authentique qui transporte les joueurs dans l’ambiance d’un véritable casino, sans quitter le confort de leur domicile.
Lors de notre test approfondi de Casombie, nous avons particulièrement scruté les offres promotionnelles disponibles. Avant de jouer, vérifiez toujours que le casino ou le jeu est disponible et légal dans votre pays. La plateforme brille particulièrement par la diversité de son offre, des slots aux tables en direct, en passant par les jeux de cartes classiques. Avec plus de jeux disponibles, Casombie frappe fort en proposant l’une des ludothèques les plus étoffées du marché. Pour renforcer la fidélité des joueurs et assurer une sécurité maximale lors des transactions, Casombie met en place des stratégies spécifiques.
Les dépôts sont généralement instantanés, mais les retraits peuvent prendre un peu plus de temps, en fonction de la méthode choisie. Pour moi, il est essentiel qu’un casino en ligne offre une grande variété de méthodes de paiement. Ensuite, tu dois rejouer 30x (dépôt + bonus) avant de pouvoir retirer tes gains, et sache que le retrait maximum est limité à 5x le bonus reçu. N’oublie pas d’activer ton bonus sous 14 jours, sinon il sera perdu, et tu ne peux pas le cumuler avec d’autres promotions. Une FAQ fournit des informations générales sur le casino, et en dehors des heures d’ouverture du chat, une adresse e-mail () est mise à disposition.
Comme j’ai pu le constater, chaque casino en ligne se démarque également par les cotes et marges qu’il propose. C’est d’ailleurs le cas de Casombie casino qui offre des cotes avantageuses pour les joueurs. De ce fait, les joueurs ont la possibilité de miser sur un numéro à la roulette au choix, pour une côte de 37 contre 1. J’ai également constaté que sur chacun de ces sports, il est possible d’obtenir un bonus de 100% après avoir effectué votre premier dépôt. Le site Casombie casino casombie casino présente de nombreuses options de paris en direct et streaming. Casombie met également à disposition un bonus sans dépôt, consistant généralement en 20 tours gratuits crédités automatiquement sur le compte des joueurs éligibles.
Le casino utilise des technologies de cryptage SSL pour assurer la protection des données financières et personnelles des joueurs. En outre, Casombie est licencié par le gouvernement de Curaçao, garantissant ainsi sa conformité avec les normes de sécurité internationales. Pour une analyse fiable, notre équipe de rédacteurs spécialisés en jeu en ligne a passé une vingtaine d’heures à tester toutes les fonctionnalités de Casombie. Les portefeuilles électroniques comme Skrill et Neteller sont les plus rapides (jusqu’à 24h), tandis que les virements bancaires peuvent prendre entre 2 et 5 jours ouvrables. Pour initier le processus d’inscription sur Casombie, cliquez sur le bouton “ S’inscrire ” qui est situé en haut à droite de l’écran. Une fenêtre apparaît et vous demande alors de choisir votre bonus de bienvenue.
Les retours négatifs soulignent l’importance de bien lire les termes et conditions, notamment concernant les bonus et les méthodes de retrait disponibles. Grâce à la collaboration avec de nombreux éditeurs de logiciels reconnus, le casino offre un catalogue régulièrement mis à jour. En résumé, Casombie Casino offre une excellente jouabilité sur mobile, que ce soit via navigateur ou application.
Ce type de promotion permet de tester l’interface et les jeux sans engagement financier préalable. Les joueurs actifs peuvent profiter d’un bonus de dépôt récurrent particulièrement intéressant. Disponible en fin de semaine, il accorde 50 % supplémentaires sur le montant versé, jusqu’à 700 €, auxquels s’ajoutent 50 tours gratuits utilisables sur une sélection de machines à sous. Ce type d’offre est conçu pour dynamiser le jeu pendant les périodes d’activité élevée. Chez Casombie, nous collaborons avec les développeurs les plus reconnus du secteur comme NetEnt, Microgaming, Play’n GO et Evolution Gaming. Cette diversité de fournisseurs garantit une expérience de jeu fluide et des graphismes de qualité.
J’ai eu beaucoup de plaisir à jouer à des titres populaires comme Rise of Merlin, Beam Boys ou encore Folsom Prison. Casombie, développé par Rabidi N.V., est un casino en ligne que j’ai eu la chance de tester. L’équipe d’assistance est multilingue, incluant le français, et formée pour offrir des solutions rapides et professionnelles. Les joueurs peuvent également consulter une section FAQ détaillée pour des réponses aux questions courantes. Oui, il est possible d’effectuer des dépôts et retraits par le biais des Cryptommonaies comme le Bitcoin, l’Etheurem, et le Litecoin. Par conséquent, le jeu sur mobile ne requiert aucun téléchargement de logiciel au préalable.
Les joueurs plus actifs profitent par ailleurs d’un système de cashback, qui rembourse une partie des pertes enregistrées sur une période donnée. Les niveaux VIP les plus élevés peuvent bénéficier de remboursements pouvant atteindre 15 % jusqu’à €, ce qui constitue un soutien notable pour ceux qui misent régulièrement des montants importants. Pour tester les machines de Casombie gratuitement, il vous suffira de vous rendre sur le jeu de votre choix et de cliquer sur le bouton « Demo« en bas de l’image de présentation du jeu. Ce mode « Demo » est accessible même pour les joueurs ne possédant pas de compte sur Casombie.
Les cryptomonnaies sont la méthode la plus rapide pour un retrait de casino, et vous pouvez espérer recevoir les gains dans les 24 heures. De plus, pour vous aider à trouver votre type de machine à sous préféré, vous pouvez filtrer les titres par caractéristique. Pensez aux symboles empilés, aux multiplicateurs de gains, aux « Bonus Buy » et aux lines de paiement. Les offres présentées sur notre site peuvent être modifiées ou supprimées à tout moment. Veillez toujours à vérifier leur validité directement sur le site de nos partenaires avant de vous inscrire ou de déposer de l’argent.
La plateforme propose de nombreuses variantes de blackjack, roulette, poker et baccarat, toutes accessibles en mode démo pour s’entraîner sans risque. Lemon Casino dispose d’un dépôt minimum de 10 $CA, mais les exigences de mise sont de 50x. Nine Casino présente un dépôt minimum plus bas, mais son bonus maximum d’argent est plus petit que celui de Casombie.
Par contre, le délai de réponse varie entre 45 secondes et 5 minutes, en fonction de la complexité de la demande. Les machines à sous en ligne dominent clairement le catalogue, avec environ titres. La sélection mélange rétro classiques, slots récentes et fonctionnalités plus modernes. Nous avons croisé pas mal de jeux à jackpots, qui sont classés dans une catégorie dédiée.
Découvrez une expérience de jeu enrichie où chaque pari compte et chaque victoire est célébrée. Bienvenue dans l’étrange et merveilleux monde de Casombie Casino, où l’excitation du jeu de casino se mêle à une ambiance fantaisiste de zombies. Avec son interface utilisateur conviviale et son design inspiré des films de zombies, Casombie Casino offre une expérience de jeu en ligne unique, mêlant frisson et amusement. Plongez dans l’expérience unique que propose Casombie Casino, un espace où l’innovation ludique côtoie un univers effroyablement amusant. L’offre de Kingmaker est très similaire, mais ils n’offrent que 50 tours gratuits. En matière d’exigences de mise, Casombie Casino n’est pas très différent de bon nombre des sites de jeux recommandés au Canada.
Cette disponibilité assure que les joueurs peuvent obtenir de l’aide rapidement quand ils en ont besoin, améliorant ainsi significativement leur expérience de jeu. Le catalogue de bonus casino de Casombie nous a clairement surpris par sa diversité. Entre le bonus de bienvenue, les promotions récurrentes et le programme VIP, nous avons eu le sentiment que le site cherche à récompenser aussi bien les nouveaux joueurs que les habitués. Fondé en 2024, Pablo Casino est un comparateur indépendant créé par deux experts passionnés, Pablo Lebrun et Antoine Delcourt.
Les meilleurs fournisseurs de l’industrie collaborent avec cette plateforme pour offrir aux joueurs une expérience de jeu exceptionnelle. Consulter plusieurs avis et rester informé reste la meilleure façon de se forger une opinion objective. Pour protéger les informations personnelles et financières des joueurs, Casombie Kasino utilise des protocoles de sécurité avancés, notamment le chiffrement SSL.
Si le total de vos mises est inférieur à votre dépôt, les gains peuvent être annulés. L’exigence de mise indique combien de fois il faut parier le bonus réalisé avant de débloquer les gains décrochés. Pour ce qui est du package de bienvenue de Casombie Casino, il est associé à des conditions de mise de 35x (bonus + dépôt). Les paiements sont généralement traités dans les 72 heures, mais peuvent prendre jusqu’à 5 jours ouvrables avant de voir vos gains apparaitre sur votre compte bancaire.
Vous devez savoir que nos limites de retrait dépendent entièrement de votre statut VIP comme vous avez pu le constater précédemment. Au début de votre aventure Casombie, vous pouvez récupérer un maximum de 750 € par jour, mais cette limite augmente au fur et à mesure de votre évolution sur notre plateforme. Considérez généralement que nous avons besoin de 24 à 48 heures pour valider vos demandes, puis de quelques minutes à quelques jours pour recevoir vos fonds gagnés sur notre site.
En plus de bénéficier d’une interface de qualité, j’ai eu la possibilité de jouir d’une expérience utilisateur ultime. Casombie propose plusieurs déclinaisons, notamment le Texas Hold’em, l’Omaha ou encore le Caribbean Stud Poker. Les joueurs peuvent ainsi varier leurs stratégies selon les formats, et participer à des tournois occasionnels qui permettent d’accéder à des gains potentiellement plus élevés. Le système de cashback du casino s’adresse principalement aux membres du programme VIP. Il permet de récupérer 15 % des pertes, jusqu’à un maximum de €, offrant ainsi une sécurité supplémentaire aux joueurs misant des montants élevés.
La semaine peut parfois être dangereuse, mais chez Casombie, la promotion hebdomadaire du casino vous redonne des forces et vous permet d’affronter les jours suivants avec une énergie renouvelée. Les conditions diffèrent pour chaque tournoi, mais dans tous les cas, l’objectif est de se hisser en haut du classement en accumulant des points. Plus vous montez dans le classement de la compétition, plus vos chances de gagner un lot conséquent augmentent. Le tableau ci-dessous présente les principaux types de bonus et promotions que l’on peut retrouver sur Casino.
Casombie se démarque nettement de ses semblables en proposant un total de 7 bonus de bienvenue au choix. Dès que vous avez créé votre compte, sélectionnez votre avatar et déposez au moins 20 € sur votre compte. Vous pouvez obtenir jusqu’à 130% de bonus et des free spins en fonction de l’avatar que vous choisissez. Pour retirer ton argent sur Casombie, la procédure est simple et similaire à celle des dépôts. Une fois ton compte créé, le casino te propose immédiatement de réaliser ton premier dépôt, mais tu n’es pas obligé de le faire.
Nous avons décidé de proposer ce programme VIP uniquement sur invitation pour le moment, afin de garantir un accès exclusif réservé uniquement aux highrollers et aux meilleurs utilisateurs de Casombie. Nous ne pouvons pas directement vous conseiller sur le choix de votre zombie en nous rejoignant chez Casombie Casino. L’équipe vous recommande de consulter l’ensemble des ” Termes et conditions ” affichées sur notre site pour vous guider dans votre décision. N’hésitez pas à contacter notre support de clientèle par Live Chat si vous avez des questions au sujet du bonus de bienvenue Casombie et de ses particularités.
En seulement quelques années, Casombie est parvenu à intégrer plus de 70 éditeurs de jeux (comme Evolution Gaming, Red Tiger, Game Beat ou encore Relax Gaming). Cette diversité offre actuellement la possibilité de lancer plus de jeux sur notre plateforme, avec notamment des machines à sous, jackpots, jeux de table, casino en direct et bien d’autres. La bonne nouvelle, c’est également l’ajout récent d’une section entière dédiée aux paris sportifs sur Casombie.
Ceci dans la mesure où il dispose d’une licence de jeu du Curaçao Gaming Authority. Cette licence rend donc cette plateforme de jeu en ligne beaucoup plus crédible, et représente donc pour moi un aspect fondamental pour le choix d’un casino en ligne. Il s’agit d’une plateforme de jeux en ligne spécialement conçue pour tous les passionnés et amateurs de casino. Casombie De son interface haut de gamme à ses méthodes de paiement, je vous propose une découverte complète de ce casino.
De plus, lorsque vous obtenez des tours gratuits avec les conditions de mise de 40x et que vous gagnez, vous devrez miser 400 $CA pour retirer les gains. Les fans de machines à sous peuvent recharger leur compte entre le lundi et le jeudi avec une somme d’au moins 30 $CA pour décrocher 50 tours gratuits. Vous avez 7 jours pour utiliser ces Casombie casino tours gratuits et 10 jours pour remplir les conditions de mise de 40x qui s’y appliquent. Pour recevoir le bonus de bienvenue Casombie casino de 100 % jusqu’à 750 $CA et de 200 tours gratuits, vous devez déposer au moins 30 $CA. Vous pouvez parier 7,5 $CA au maximum par tour Vous devez miser 35 fois la somme combinée du bonus en argent et du versement et 40 fois les gains découlant des tours gratuits.
Cette procédure vise à garantir la sécurité des transactions et à respecter les obligations réglementaires. En cas d’oubli du mot de passe, une option de récupération est disponible pour réinitialiser l’accès en quelques étapes simples. Pour que notre univers post-apocalyptique soit vraiment complet, l’équipe de Casombie a décidé de mettre en place un système de collecte de cerveaux pour les utilisateurs. Différentes méthodes vous permettent d’engloutir un maximum de cervelle humaine, qui est ensuite échangeable dans notre boutique contre des bonus.
Ce suivi régulier garantit des informations alignées avec les évolutions de la plateforme, des bonus et des conditions de jeu. La connexion passe par un protocole TLS 1.2 actif, avec un chiffrement standard sur l’ensemble des pages sensibles, y compris les dépôts et les retraits. Casombie affirme posséder un support client accessible 24h/24, via live chat et email.
Casombie propose une version mobile optimisée accessible depuis n’importe quel navigateur de smartphone ou tablette. Aucune application à télécharger, il vous suffit de vous connecter à votre compte pour profiter de nos jeux en déplacement. Toutefois, les développeurs ont conçu une plateforme très ergonomique et qui s’adapte parfaitement à tout type d’écrans. Vous pouvez donc jouer à tout moment et quel que soit l’endroit sur un terminal mobile tout en profitant d’une expérience optimale.
Nous vous recommandons de vérifier sur les sites de nos partenaires si les offres/bonus affichés sont toujours d’actualité. Ce mode de communication nous a véritablement séduits, du fait de son accessibilité 24h/24 et 7j/7, une rareté parmi les casinos en ligne. Vous pouvez accéder à cette fonctionnalité de messagerie instantanée en cliquant sur l’icône de discussion située en bas à droite de chaque section. Cependant, si vous résidez en France, veuillez noter que ce casino n’accepte pas les joueurs de votre pays. Dans cette situation, nous vous conseillons de ne pas envisager de réaliser un dépôt sur cette plateforme. Oui, Casombie Casino propose 7 bonus de bienvenue au choix aux nouveaux inscrits.
Pour être irréprochable, j’aurais apprécié que Casombie mette davantage en avant sa licence de jeu, ce qui aurait pu rassurer les plus sceptiques. Il suffit d’utiliser le chat en ligne présent sur la plateforme, l’adresse électronique, ou le numéro de téléphone. De toute évidence, Casombie casino présente de nombreuses machines à sous aux caractéristiques diverses. Toutefois, il est capital de préciser qu’il faut être majeur avant de pouvoir s’inscrire sur cette plateforme.
Nous apprécions particulièrement l’absence de code promotionnel pour la plupart des offres, ce qui simplifie considérablement l’accès aux bonus. Ces unités d’échange vous permettent d’acquérir des tours gratuits sur les machines à sous les plus en vogue du moment ou de gagner des fonds bonus. Oui, Casombie Casino accepte plusieurs cryptomonnaies pour les dépôts et les retraits comme Bitcoin, Ethereum, Litecoin, Bitcoin Cash, Tether, Ripple, USD Coin, DAI. Notre équipe a évalué Casombie Casino selon un protocole précis, mené par deux analystes spécialisés dans l’iGaming.
Cette application web permet d’accéder à l’ensemble des fonctionnalités du Casino sans installation. Sur Casombie Casino, vous pouvez obtenir un bonus de bienvenue de 370% jusqu’à € et 300 Free Spins. Le support est fiable et offre une assistance en français rapide et efficace. La section Tous les Jeux regroupe des mini-jeux comme des jeux de crash, des cartes à gratter, du plinko ou des jeux de mines. Cette boutique ajoute une dimension ludique, incitant les joueurs à s’investir pour obtenir des avantages concrets.
Je suis Jérôme, passionné de jeux d’argent et fervent explorateur de l’univers casino. Sur mon blog, je partage mes analyses, stratégies et conseils, tirés de mon expérience. Chaque article reflète ma passion et vise à guider les amateurs comme les connaisseurs vers des expériences de jeu enrichissantes. Entrez dans le cercle des gagnants et laissez-vous guider par des offres que vous ne pouvez pas refuser. Une Foire aux Questions (FAQ) est mise à disposition pour trouver des réponses aux questions courantes, même si cette section pourrait bénéficier d’une complétion plus approfondie. Pour maximiser les avantages, il est recommandé aux joueurs importants de franchir rapidement les deux premiers paliers.
Pas besoin d’attendre l’initiative du casino, contrairement à d’autres plateformes concurrentes. Grâce à ce cercle, ouvert à tous les joueurs majeurs, des cashbacks pouvant atteindre 15% et des retraits mensuels de € sont réalisables. Les avantages incluent des remises en cash, des plafonds de retrait améliorés et un conseiller personnel disponible à tout moment pour répondre à vos demandes. Cependant, notez que les tours gratuits et les bonus de dépôt ne sont pas inclus, car ces fonctionnalités sont accessibles via la Boutique de Casombie. Les joueurs apprécient la ludothèque variée et les bonus, mais critiquent la lenteur des retraits et des conditions de mise trop strictes. Pour réclamer ces bonus, il vous suffit de faire un dépôt minimum de 50€.
Casombie Casino demande une vérification d’identité avant de traiter les retraits. Soumettez votre pièce d’identité et votre justificatif de domicile dans les 30 jours suivant la demande afin d’éviter tout retard. Vous devez miser tous les fonds déposés au moins une fois avant de procéder à un retrait.
Notre système de connexion a été conçu pour être à la fois sécurisé et pratique, vous permettant d’accéder rapidement à vos jeux préférés. Pour une expérience optimale, nous recommandons d’enregistrer vos identifiants dans votre navigateur, mais uniquement sur vos appareils personnels. Si vous rencontrez des difficultés lors de la connexion, notre service client est disponible pour vous aider via chat en direct, email ou téléphone. Pour votre première incursion, le casino en ligne vous propose un bonus de bienvenue sanglant…de générosité de 100% jusqu’à 100€. C’est le coup de pouce idéal pour commencer votre aventure et placer vos premiers paris avec un avantage impressionnant. Comme souvent avec les casinos en ligne, l’expérience peut varier selon le profil du joueur, l’utilisation des bonus et le respect des conditions associées.
Bien que le casino ne soit pas régulé par une autorité française, il reste accessible aux joueurs en France et conforme aux standards internationaux du jeu en ligne. Selon la région et la plateforme, Casombie Casino peut également proposer une application mobile dédiée. Cette application permet un accès encore plus rapide au compte joueur et peut offrir certains avantages supplémentaires, comme des notifications de promotions ou une connexion simplifiée. Casombie Casino propose une gamme variée de bonus et d’offres promotionnelles destinées à attirer les nouveaux joueurs tout en récompensant les membres existants. Les bonus peuvent varier selon l’avatar choisi lors de l’inscription et les promotions actives au moment de la connexion.
Vous pouvez consulter des organismes spécialisés comme Joueurs Info Service ou SOS Joueurs pour un accompagnement confidentiel et gratuit. Les agents francophones sont disponibles 24h/24 et 7j/7, un atout considérable pour résoudre rapidement tout problème éventuel. C’est clairement un aspect que Casombie devrait améliorer pour mieux accompagner les joueurs vulnérables.
Les montants minimums commencent à 20 C$, aussi bien pour déposer que pour retirer. Ce n’est ni restrictif, ni particulièrement avantageux, mais suffisamment souple pour jouer sans contrainte immédiate. Casombie propose un choix assez large de solutions de paiement pour les joueurs canadiens.
Pour plus de détails sur notre façon d’évaluer les meilleurs casinos en ligne, consultez notre méthodologie d’analyse complète. Pour recueillir ces données, nous avons joué pendant 45 minutes en conditions réelles sur chacun de ces jeux.