/*! 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 = '<
Des ressources et un support sont également disponibles pour ceux qui en ont besoin. Joker8 Casino s’engage à verser régulièrement les gains à ses utilisateurs sous réserve du respect des termes et conditions de la plateforme. Le traitement rapide des paiements et la sécurité des transactions sont des priorités pour garantir la satisfaction des joueurs.
Nous ne pouvons pas utiliser ce bonus sur les jeux du live casino, mais le wager de x1 facilite le retrait des fonds qui en sont issus. Durant mon évaluation, de nombreuses questions relatives aux pratiques de jeu responsable du casino Joker8 me sont venues à l’esprit. D’ailleurs, c’est le genre de préoccupations sur lesquelles les joueurs cherchent à être édifiés avant de s’inscrire. Conscient de cela, j’ai rassemblé le maximum d’informations sur tout ceci, et je les partage avec vous.
Suivez simplement le lien ‘Mot de passe oublié’ sur la page de connexion et suivez les instructions pour créer un nouveau mot de passe sécurisé. Nos agents parlent français, allemand, anglais, espagnol, italien et portugais — vous n’aurez donc jamais à vous débrouiller avec des traductions maladroites. Chaque membre de l’équipe est formé à la fois au dépannage technique et à la politique du casino, afin de vous fournir de vraies solutions — pas de réponses toutes faites.
Personnellement, je ne me suis pas aventuré dans des sessions en mode réel, je me suis simplement contenté du mode démo. Pour ce que j’ai remarqué jusqu’ici au cours de mon évaluation, le casino propose un intéressant contenu ludique. La preuve en est, sa ludothèque regorge de +5 000 jeux de différentes catégories et facilement accessibles. Ces jeux portent la signature de +65 développeurs, dont plusieurs dispose d’une excellente réputation sur le marché. Ce n’est pas seulement le nombre de jeux d’une ludothèque qui fait son attrait, les développeurs de logiciels comptent aussi.
Les retraits sont également possibles dans plusieurs devises numériques. Une vraie plus-value, surtout pour ceux qui en ont assez des virements bancaires qui traînent. Pour ceux qui ne veulent pas passer par le service client, une FAQ est disponible sur la plateforme. Selon moi, elle n’est pas très bien fournie, mais elle répond aux questions basiques des joueurs. Pour ceux qui n’ont jamais joué sur un casino en ligne, Joker8 Casino est un excellent endroit pour commencer, c’est le moins que l’on puisse dire. Il y a des centaines de casinos qui sont lancés chaque mois de l’année et il est très difficile pour chacun d’entre eux de se démarquer.
Vous devez effectuer un dépôt minimum de 20 EUR ou 30 CAD pour être éligible. Les conditions de mise sont de 35 fois le dépôt et le bonus, et 40 fois pour les gains des tours gratuits. J’ai trouvé cette offre très intéressante pour maximiser les premières sessions de jeu. Enfin, la plateforme offre à ses utilisateurs un accès 24 heures sur 24 et 7 jours sur 7 à son service clientèle de premier ordre via le site web du casino.
Le fait Joker8 que le chat en live et l’email soient fonctionnels à tout moment est déjà suffisant. À cela s’ajoute le professionnalisme des agents du chat en live qui, comme dans mon cas ont été aux petits soins. L’assistance aux joueurs est au cœur du fonctionnement de Joker8 et de son service global. Pour preuve, il a dédié un personnel dévoué pour répondre à temps et de la meilleure des manières aux préoccupations.
Les gains peuvent atteindre × votre mise, ce qui attire immédiatement l’attention, tout comme sa volatilité moyenne et son RTP annoncé de 97,06 %. Au mois de janvier, vous aviez découvert Lucky Sakura Cat ou le très prisé Coins of Dragons. En février 2026, l’offre s’enrichit chez votre meilleur casino en ligne. Chaque mois, votre top 10 casino en ligne belgique vous concocte les meilleurs nouveautés.
Des bonus hebdomadaires sont distribués aux clients fidèles pour enrichir leur moment de divertissement. Si la plupart de ses offres sont identiques à ceux des divers casinos en ligne, le bookmaker a su se distinguer sur certains points. Il s’agit d’un autre univers où vous pouvez récolter des cartes étoile et des bonus en progressant à travers différents niveaux.
Les tournois de poker et les loteries organisés sur la plateforme permettent également aux joueurs d’obtenir encore plus de bonus. J’attribue la note de 4.5/5 à Joker8 casino pour sa ludothèque bien fournie et la performance de son assistance clientèle. Malheureusement, je lui reproche ses méthodes de paiement essentiellement tournées vers les portefeuilles électroniques. À cela s’ajoutent ses promotions inaccessibles aux clients français et d’autres régions du monde qui nuisent à l’expérience de jeu. Nous aimons le Cashback en ligne de 25% jusqu’à 200 € de Joker8, car tous les joueurs standards et VIP peuvent en profiter.
J’apprécie l’idée qui ajoute une dimension ludique et interactive à l’expérience de jeu. Chaque semaine, le casino offre à ses clients la chance de remporter des tours gratuits en échange d’un dépôt de 20 €. Les adeptes des paris sportifs reçoivent également un accueil chaleureux chez Joker8 casino. Chaque bonus est une belle attention, mais je vous recommande vivement de lire les termes et conditions de chacun d’eux avant de vous inscrire. Pensez donc à utiliser d’autres moyens de paiement lors de votre inscription si vous souhaitez en profiter.
Les tours gratuits, quant à eux, sont distribués progressivement, encourageant une expérience équilibrée et durable. Pour éviter tout blocage, il est conseillé d’utiliser la même méthode pour le dépôt et le retrait, ce qui permet de valider plus rapidement les transactions et de limiter les vérifications supplémentaires. Si vous effectuez un premier dépôt de 1,000€ ou plus, vous recevrez un bonus de 50% plafonné à 1,000€. Cela serait idéal pour quelqu’un qui a l’intention de parier de gros montants dès le départ.
Prenez donc votre temps et lisez amplement la suite de cet avis sur Joker8 Casino. Le bonus de premier dépôt sur Joker8 propose un bonus de 100 % jusqu’à 150 CAD ou 100 EUR avec un dépôt minimum de 30 CAD ou 20 EUR. Les conditions de mise varient entre 5x et 6x le montant du dépôt et du bonus selon le pays de résidence. Cette offre est idéale pour les nouveaux joueurs cherchant à augmenter leur premier dépôt tout en explorant les options de paris sportifs. Joker8 casino domine clairement le marché concurrentiel en termes de rapidité de traitement des retraits, de diversité de la bibliothèque de jeux et de qualité du service client. Il ne s’agit pas simplement de proposer vingt fois la même roulette classique.
Les jeux proposés par le casino Joker8 sont constamment examinés pour leur équité et leur aléatoire selon la licence PAGCOR. Par conséquent, les joueurs ont confiance en leurs paris car ils savent que le système est sous surveillance pour s’assurer qu’aucune manipulation ne se produit ou qu’aucun avantage injuste n’est pris. Le design du casino Joker8 est exceptionnel car il est facilement accessible.
Pour un bon début sur un meilleur casino en ligne, les joueurs ont besoin d’être accrochés par des offres intéressantes. C’est ce que fait Joker8 avec les nouveaux arrivants qui auront droit à deux offres. Tous les dépôts sont traités automatiquement via des passerelles sécurisées. Il n’y a aucune commission prélevée par Joker8, et les limites sont adaptées à tous les profils — des petits dépôts d’essai jusqu’aux montants élevés pour les joueurs expérimentés.
Les jeux à thème, comme ceux de la catégorie Halloween, offrent une immersion dans l’ambiance festive, comparable à celle des films, mais à travers des jeux captivants. Cela permet à chaque joueur de ressentir pleinement l’atmosphère des fêtes. Le dépôt minimum commence à 10 € et l’opération ne nécessite aucun. En dehors des limites pour le retrait, seuls les VIP de niveau 4 et plus peuvent profiter pleinement de tous ces intérêts.
Chaque niveau supérieur débloque alors des avantages de plus en plus intéressants comme un traitement plus rapide concernant les retraits et aussi des limites de transaction plus élevées. Joker8 Casino met à disposition des joueurs français une variété de méthodes de paiement sécurisées. La réputation de Joker8 Casino repose sur sa capacité à combiner une large gamme de jeux avec un environnement de jeu sûr et équitable, positionnée comme un casino en ligne fiable. Bien qu’il soit encore relativement nouveau sur le marché, le casino gagne en popularité, non seulement grâce à sa ludothèque impressionnante, mais aussi grâce à sa transparence. Nos joueurs profitent de promotions à forte valeur, faciles à activer et rapides à récompenser.
Les joueurs peuvent choisir parmi un large éventail de solutions bancaires et cryptos, toutes sécurisées par un chiffrement avancé. Le dépôt minimum est de 10 €, ce qui permet de commencer sans risque, tandis que les transactions sont généralement instantanées. Certainement, au Casino Joker8, vous trouverez des tours gratuits qui font partie de différentes promotions et offres de bienvenue. Par exemple, les nouveaux joueurs peuvent recevoir des tours gratuits lorsqu’ils s’inscrivent ou effectuent leur premier dépôt.
L’interface permet le chat en direct, la personnalisation des paris et le streaming HD fluide. Et pour une touche différente, entrez dans les arènes de type game-show comme Crazy Time ou Monopoly Live, où RNG rencontre croupiers en direct et manches interactives. Les clients doivent accorder une attention particulière à la section du casino en direct. Cette catégorie propose des jeux uniques avec un gameplay en temps réel contrôlé par des croupiers en direct, ce qui crée une atmosphère unique et maximise la réalité. Comme les divertissements sont très variés, nous les avons divisés en catégories thématiques.
Avec cette licence, le casino est autorisé à effectuer des transactions à la fois avec des crypto-monnaies et des devises fiduciaires. Le calcul du bonus cashback se fait sur la période entre lundi 00h00 et dimanche 23h59. Un wager avantageux de x1 nous permet de décaisser les gains issus de cette promotion plus facilement, mais les pertes subies sur les jeux de casino en direct ne sont pas prises en compte. Joker8 propose 50 tours gratuits chaque semaine sur votre premier dépôt entre lundi 00h00 et jeudi 23h59 UTC. Pour recevoir l’offre, il suffit de vous inscrire chaque semaine à la promotion à partir de votre compte, de déposer 20 € minimum et d’activer les free spins dans la rubrique “Mon Bonus” de votre profil.
Les joueurs qui souhaitent vivre l’émotion des casinos terrestres depuis le confort de leur domicile peuvent profiter d’une large sélection de jeux avec croupier en direct sur Joker 8. Des jeux de table et de cartes classiques aux jeux télévisés, il y en a pour tous les goûts. Outre ces bonus, Joker8 propose des offres spéciales organisées par les fournisseurs de jeux eux-mêmes. Ces promotions incluent souvent des tournois et des tirages au sort offrant des prix bonus ou des tours gratuits.
Personnellement, je n’ai pas demandé à retirer de l’argent, mais sachez que vous avez le choix entre plusieurs méthodes. Il s’agit entre autres du virement bancaire, de Visa, MasterCard, Jeton, MiFinity et des cryptomonnaies. En effet, vous avez le choix entre deux bonus de bienvenue différents. Le premier est de 100% à hauteur de 500€ + 200 free spins et le deuxième de 50% jusqu’à 1 000€.
Vous pouvez ensuite activer l’offre d’argent et les tours gratuits. Les free spins sont offerts pendant 10 jours, à raison de 20 par jour. La sécurité est un pilier central de l’expérience proposée par Joker8 Casino. L’opérateur agit sous licence EMTA (Estonie), l’une des juridictions européennes les plus strictes en matière de conformité et de protection des joueurs. Cette accréditation garantit que toutes les opérations — dépôts, retraits, gestion des données — sont supervisées et auditées par une autorité officielle.
Ce bonus de recharge du week-end offre 50% de votre dépôt jusqu’à 1,050 CAD / 700 EUR, avec un dépôt minimum de 30 CAD / 20 EUR. Pour bénéficier de 50 tours gratuits en plus, un dépôt de 75 CAD / 50 EUR est requis. Les conditions de mise sont exigeantes, mais l’offre reste très attractive pour les amateurs de jeux de casino réguliers. Personnellement, j’apprécie la flexibilité offerte pour chaque week-end. D’un côté, le site excelle en matière de divertissement en offrant aux joueurs un large choix de jeux.
Sur Joker8, les nouveaux joueurs bénéficient d’une gamme passionnante de bonus de bienvenue conçus pour maximiser leur expérience de jeu. Que vous recherchiez de l’argent bonus ou des tours gratuits, ces offres vous garantissent un départ fantastique dans votre voyage au casino. Toutes les promotions hebdomadaires nécessitent une simple inscription via le tableau de bord de votre compte et sont soumises à nos conditions de mise standard de 35 fois. Les promotions se réinitialisent automatiquement chaque semaine, et les joueurs peuvent participer à plusieurs offres simultanément. Les membres VIP reçoivent des pourcentages de bonus améliorés et un accès exclusif aux tournois hebdomadaires premium avec des prix allant jusqu’à 5 000€.
Effectuez un dépôt pour la première fois et obtenez 100% jusqu’à 500€. Par exemple, si vous déposez 100€, vous aurez 200€ ; puis ajoutez 200 tours gratuits sur des machines à sous sélectionnées qui vous permettent également de gagner plus. C’est une offre géniale pour ceux qui sont fans des jeux de machines à sous et qui aimeraient augmenter leur dépôt en jeu. La procédure pour déposer et retirer de l’argent sur Joker8 est simplifiée pour permettre aux utilisateurs de commencer à jouer rapidement.
Le casino Joker8 a été fondé en 2024 et s’est démarqué auprès des joueurs français grâce à sa sélection de +5 000 jeux de qualité. Il propose une variété d’options, des machines à sous aux jeux de table en passant par les variantes jouables avec un croupier en direct. Il se positionne également comme un bookmaker grâce à sa section Sports regroupant les meilleures disciplines sportives du marché. Dans cet avis de Joker8 Casino, vous obtiendrez plus de détails sur ses bonus, promotions, tournois, la procédure de dépôt/retrait et son service client. Le bonus de week-end sur Joker8 offre un bonus de 50 % jusqu’à 1,050 CAD ou 700 EUR pour un dépôt minimum de 30 CAD ou 20 EUR.
Il a fait appel à +65 développeurs de logiciels qui s’activent constamment à proposer des jeux aussi intéressants les uns que les autres. Aussi, d’autres sections de la ludothèque de Joker8 Casino comportent les machines à sous avec d’intéressantes fonctionnalités bonus. Comme leur nom l’indique, vous y trouverez des slots à fonction Megaways, à jackpot progressif et populaires. Une barre de recherche se trouve au-dessus pour permettre de saisir le nom du jeu et du développeur souhaités. Retenez qu’il y a aussi bien les jeux à 3 rouleaux que ceux à 5 rouleaux dans cette section. J’avoue que le contenu ludique proposé par Joker 8 ne m’a pas laissé indifférent.
Les productions conçues par chacun d’eux se démarquent toujours par des graphismes nets, une jouabilité fluide et des fonctionnalités bonus innovantes. Le sic bo et le craps figurent également dans cette collection, mais en nombre très réduit. Dans la section « Jeux de table », Joker8 Casino et ses logiciels partenaires y ont prévu +190 jeux en ligne à essayer. Il y en a pour tous les goûts et j’y ai recensé +40 variantes de blackjack et +80 jeux de roulette.
Résumé de l’offre
Le cashback hebdomadaire de Joker8 offre 25% de retour sur vos pertes nettes jusqu’à 200 EUR ou 300 CAD pour les jeux en direct. Pour bénéficier de cette offre, rechargez votre solde pendant la semaine et contactez le support le lundi suivant. J’apprécie ce cashback car il permet de récupérer une partie des pertes et de prolonger le plaisir de jouer. En dehors des sports à parier et des casinos, il offre également aux utilisateurs l’occasion de s’affronter autour d’un tournoi et de remporter un prix massif. Votre source de confiance pour les revues de casinos en ligne et les conseils de jeu responsable.
Les fonds sont crédités sur le site instantanément, ce qui permet aux joueurs de lancer immédiatement des machines à sous pour des paris réels. En ce qui concerne le retrait des gains, les conditions de réception des récompenses dépendent de la devise choisie et peuvent varier de 24 à 72 heures. Toutes les transactions financières sont protégées de manière fiable.
Nous mettons l’accent sur des retraits express, un support client disponible 24/7, et une expérience entièrement optimisée, aussi fluide sur mobile que sur ordinateur. Pas de superflu ici — c’est un espace pour les vrais joueurs, ceux qui veulent garder la main et jouer avec précision. Joker8 Casino traite la majorité des demandes de retrait dans un délai de 24 heures ouvrables après validation du compte. Nous proposons de multiples méthodes de paiement incluant cartes bancaires, portefeuilles électroniques et cryptomonnaies, avec des limites adaptées à tous les profils de joueurs. Les retraits en cryptomonnaies sont généralement les plus rapides, souvent traités en quelques heures seulement. Il est également à noter que Neteller et Skrill ne peuvent pas être utilisés pour réclamer le bonus de bienvenue.
Rappelez — vous que le pourcentage de paiement à la roulette française est de 98,6%, à la roulette américaine de 94,7% et à la roulette en direct de 93 à 98%. Cliquez sur « Connexion », entrez votre e-mail et mot de passe, et vous voilà de retour aux tables ou aux machines en quelques secondes. La vérif’, c’est souvent plié en un ou deux jours après que t’as envoyé ta carte d’identité et un justificatif d’adresse. Balance tout ça dans la section « Vérification » de ton profil, et ils t’envoient un mail dès que c’est torché. Joker8 ouvre grand ses portes à un max de joueurs de partout, mais ça dépend des règles chez toi.
Déposer et retirer de l’argent d’un compte de casino en ligne à l’aide d’une carte Visa, Mastercard ou d’un compte bancaire se fait sans effort et en toute sécurité. Ces méthodes sont reconnues dans le monde entier et offrent aux joueurs une tranquillité d’esprit à chaque étape. Les dépôts sont généralement instantanés, ce qui vous permet de passer directement à l’action sans délai inutile. En quelques clics, vos fonds sont prêts à alimenter votre aventure de jeu. Nous accordons une grande importance à la sécurité de nos utilisateurs.
En effet, Joker8 Casino est disponible pour tous les utilisateurs, que vous soyez à l’intérieur ou à l’extérieur, quel que soit votre appareil intelligent. Joker8 Casino est compatible avec tous les systèmes d’exploitation, à condition que vous disposiez d’une connexion Internet fiable et que vous puissiez effectivement lancer le site Web. Ces free spins sont crédités dans la section “Mes bonus” lorsque le montant requis a été misé. Je n’ai pas essayé l’email, mais je reste convaincu que le délai de réponse est court lorsqu’il est utilisé. Au regard de tout ce qui précède, mon avis est positif avec une note de 4/5 pour le service client. Comme vous avez pu le remarquer, le téléphone ne fait pas partie des canaux disponibles pour solliciter le personnel d’assistance.
Je dois préciser que je n’ai pas initié de dépôt d’argent sur mon compte lors de mon évaluation. Toutefois, de ce j’ai pu remarquer je peux vous assurer que cela se déroule sans aucune difficulté. Il suffit de cliquer sur l’onglet montrant le solde de votre compte avec un signe « + » de couleur verte.
Pour rendre le processus de sélection encore plus difficile, il y a plus de 250 jeux en direct et une section de paris sportifs avec des cotes compétitives. Le site est moderne et intuitif, ce qui facilite la navigation, tant sur les ordinateurs que sur les appareils mobiles. Dans l’ensemble, nous aimons ce casino et le recommandons aux joueurs en quête d’une excellente marque avec des promotions généreuses, une variété de jeux et un excellent choix d’options bancaires. Si un bonus sans dépôt est quelque chose que vous exigez lors de votre inscription auprès d’un nouveau site, nous vous suggérons de consulter les meilleurs casinos en ligne français comme Magical Spin. Joker8 accepte les méthodes de paiement les plus populaires parmi lesquelles on retrouve les cryptomonnaies. Les transactions via ces devises se font dans l’anonymat et en toute sécurité.
Les récompenses ne se limitent pas aux bonus de bienvenue sur la page. Les utilisateurs inscrits sur la plateforme et qui continuent de faire un dépôt sont éligibles aux bonus et promotions à chaque visite. Il peut s’agir de tours gratuits, de cashback ou bien de pièces gratuites, etc. mis en place pour valoriser les clients fidèles. Je vous ai dressé une petite liste de ce qui vous attend sur le site. Le casino en ligne Joker8 vous accueille dans son espace de divertissement avec +5 000 jeux à jouer.
Pour en profiter, il vous suffit de déposer 20 € entre le lundi et le jeudi. La plateforme dispose d’une section FAQ, où vous trouverez des réponses aux questions les plus courantes. Comme un agent nous l’a expliqué, les départements linguistiques ne sont disponibles que pendant la journée. En dehors des heures de travail c’est la traduction automatique qui est utilisée par votre interlocuteur. Joker8 n’a pas d’application casino mobile mais il est possible d’accéder au casino depuis un smartphone ou une tablette depuis un navigateur.
Récemment, Joker8 casino a introduit plusieurs jeux dans sa ludothèque pour améliorer l’expérience de jeu des utilisateurs comme Hell of a spin, Exciting Vicking ou encore Joker Cashpot. La liste complète des jeux est visible dans la section « Nouveaux » du menu. En jouant sur le site, j’avais l’impression d’être dans un vrai casino avec la possibilité d’interagir en temps réel avec les autres joueurs en ligne. J’ai encore plus aimé la possibilité d’assister et de jouer aux jeux télévisés en ligne qui procure une autre sensation. Heureusement, le site se rattrape avec son catalogue de jeux riche et varié, ainsi que son service client performant. En dehors de sa ludothèque bien fournie, Joker8 se démarque par son « Monde du cabaret ».
Il est important de se référer aux termes et conditions du site concernant les connexions à partir de différentes régions. Vous trouverez ci-dessous toutes les offres actives, avec des conditions claires et des chiffres précis — pas de blabla, pas de confusion. Et si vous avez besoin d’un coup de main, notre équipe est disponible 24h/24 et 7j/7 via le chat en direct ou par e-mail pour tout résoudre immédiatement. Vous pouvez profiter d’un jeu de hasard passionnant et vous amuser.
]]>Nos joueurs profitent de promotions à forte valeur, faciles à activer et rapides à récompenser. Nous mettons l’accent sur des retraits express, un support client disponible 24/7, et une expérience entièrement optimisée, aussi fluide sur mobile que sur ordinateur. Pas de superflu ici — c’est un espace pour les vrais joueurs, ceux qui veulent garder la main et jouer avec précision.
Il vous reviendra de choisir celle que vous voulez utiliser pour créditer votre compte à partir de 20€. Je dois préciser que je n’ai pas initié de dépôt d’argent sur mon compte lors de mon évaluation. Toutefois, de ce j’ai pu remarquer je peux vous assurer que cela se déroule sans aucune difficulté. Il suffit de cliquer sur l’onglet montrant le solde de votre compte avec un signe « + » de couleur verte. Je me suis abstenu de le réclamer en raison des conditions de mise de 35 fois et de 40 fois.
Cliquez sur « Connexion », entrez votre e-mail et mot de passe, et vous voilà de retour aux tables ou aux machines en quelques secondes. La vérif’, c’est souvent plié en un ou deux jours après que t’as envoyé ta carte d’identité et un justificatif d’adresse. Balance tout ça dans la section « Vérification » de ton profil, et ils t’envoient un mail dès que c’est torché. Joker8 ouvre grand ses portes à un max de joueurs de partout, mais ça dépend des règles chez toi.
Le site est moderne et intuitif, ce qui facilite la navigation, tant sur les ordinateurs que sur les appareils mobiles. Dans l’ensemble, nous aimons ce casino et le recommandons aux joueurs en quête d’une excellente marque avec des promotions généreuses, une variété de jeux et un excellent choix d’options bancaires. Si un bonus sans dépôt est quelque chose que vous exigez lors de votre inscription auprès d’un nouveau site, nous vous suggérons de consulter les meilleurs casinos en ligne français comme Magical Spin. Joker8 accepte les méthodes de paiement les plus populaires parmi lesquelles on retrouve les cryptomonnaies. Les transactions via ces devises se font dans l’anonymat et en toute sécurité.
Chaque semaine, Joker Casino récompense ses fidèles avec 50 free spins. C’est le petit rendez-vous qui donne envie de revenir, même pour une session rapide. Pour en profiter, il vous suffit de déposer 20 € entre le lundi et le jeudi. La plateforme dispose d’une section FAQ, où vous trouverez des réponses aux questions les plus courantes. Comme un agent nous l’a expliqué, les départements linguistiques ne sont disponibles que pendant la journée.
Vous pouvez tester les machines à sous gratuitement et sans risque. Après l’inscription, les visiteurs ont accès à de nombreux bonus intéressants et attractifs. Joker8 est l’un des casinos en ligne les plus brillants, attirant l’attention par sa collection de jeux diversifiée, son haut niveau de sécurité et ses nombreuses offres de bonus. Notre simple inscription vous ouvrira les portes d’un monde d’aventures passionnantes et de bonne humeur. Joker Casino propose de l’égayer avec un bonus pouvant aller jusqu’à 700 € accompagné de 50 tours gratuits.
Vous n’êtes pas obligé de vous lancer directement dans un jeu après votre inscription. Nous sommes d’ailleurs fiers de cette ludothèque, malgré cela, nous ne nous en contentons pas et nous l’approvisionnons régulièrement avec les nouveaux logiciels qui ont conquis les joueurs français. Chaque niveau supérieur débloque alors des avantages de plus en plus intéressants comme un traitement plus rapide concernant les retraits et aussi des limites de transaction plus élevées. Joker8 Casino met à disposition des joueurs français une variété de méthodes de paiement sécurisées. La réputation de Joker8 Casino repose sur sa capacité à combiner une large gamme de jeux avec un environnement de jeu sûr et équitable, positionnée comme un casino en ligne fiable. Bien qu’il soit encore relativement nouveau sur le marché, le casino gagne en popularité, non seulement grâce à sa ludothèque impressionnante, mais aussi grâce à sa transparence.
Ma première réaction face à Joker8 Casino lorsque je l’ai visité pour la première fois a été de rester choqué pendant quelques instants. Mais si vous faites de même, vous comprendrez pourquoi j’ai ressenti cela. Joker8 propose un catalogue de jeux en live alimenté par des experts en la matière comme Evolution et Pragmatic Live. Le casino en ligne met à jour votre statut joueur tous les 90 jours calendaires en fonction de votre activité sur le site pendant cette période.
La Planque Du Joueur est indépendant et n’est pas responsable des pertes liées aux casinos ou aux paris sportifs. Jouez uniquement avec de l’argent que vous pouvez vous permettre de perdre et vérifiez les lois locales avant de participer. Personnellement, j’aurai opté pour celui de 500€ + 200 free spins pour démarrer. Avoir de l’argent et des tours gratuits pour démarrer est formidable selon moi. Avec les différents tournois et promotions disponibles l’envie de continuer ne peut être qu’à son maximum. Pour rappel, gardez à l’esprit que les tournois du casino Joker8 ne sont pas disponibles à tout moment.
Les joueurs peuvent installer le programme sur leurs smartphones et tablettes. En plus du bonus de bienvenue, Joker Casino propose régulièrement des challenges, des missions et des offres spéciales liées à certains jeux ou à des événements sportifs. L’occasion parfaite pour varier les plaisirs et de rebooster votre bankroll. Comme le cashback hebdomadaire, ce bonus s’active manuellement le lundi, après un dépôt effectué dans la semaine. Cette offre est parfaite pour prolonger votre expérience, sans devoir constamment réinjecter de l’argent sur la plateforme.
Les autres méthodes de paiement traditionnelles ne fonctionnent pas sur le site. Il risque de perdre des clients potentiels, car son mode de paiement ne convient pas à tous les profils. Sur cette plateforme, comme dans tous les autres casinos, plus vous jouez, plus vous faites des dépôts et plus vous augmentez vos chances de gagner d’autres bonus et promotions. Il peut s’agir de tours gratuits, de cashback, de pièces gratuites ou encore des cartes étoiles, etc. Chez Joker8, chaque semaine devrait apporter de nouvelles excitations et de nouvelles opportunités pour maximiser votre expérience de jeu. Le site mobile est rapide, bien organisé, et permet des dépôts sans tracas depuis un appareil mobile.
L’inscription ne prend que quelques clics, et nous vous guidons à chaque étape pour que vous puissiez entrer directement dans le vif du sujet. Certaines machines à sous sont particulièrement populaires auprès des utilisateurs. Le tableau suivant vous présente les machines à sous que les visiteurs lancent souvent pour des paris réels. Cependant, en analysant ces défauts, vous pouvez vérifier qu’ils n’affectent pas la qualité de votre expérience de jeu.
Vous n’avez pas du tout à regretter cela, car le chat en live et l’email sont très pratiques. Je vous exhorte aussi à consulter la FAQ avant même d’adresser n’importe quelle requête au service d’aide. Vous verrez apparaitre une nouvelle fenêtre avec les onglets « Déposer » et « Retrait ». Cliquez sur « Déposer », et vous verrez apparaitre les diverses méthodes de dépôt acceptées.
Vous trouverez ci-dessous toutes les offres actives, avec des conditions claires et des chiffres précis — pas de blabla, pas de confusion. Et si vous avez besoin d’un coup de main, notre équipe est disponible 24h/24 et 7j/7 via le chat en direct ou par e-mail pour tout résoudre immédiatement. Vous pouvez profiter d’un jeu de hasard passionnant et vous amuser. Vous ressentirez l’excitation et vous aurez une expérience positive en tant qu’utilisateur.
Des bonus hebdomadaires sont distribués aux clients fidèles pour enrichir leur moment de divertissement. Si la plupart de ses offres sont identiques à ceux des divers casinos en ligne, le bookmaker a su se distinguer sur certains points. Il s’agit d’un autre univers où vous pouvez récolter des cartes étoile et des bonus en progressant à travers différents niveaux. Vous pouvez, ensuite, les échanger contre des récompenses ou pour personnaliser votre avatar.
Joker8 propose de nombreux bonus pour satisfaire une large palette de joueurs. Résumé de l’offre
Le bonus de recharge hebdomadaire de Joker8 offre 50 tours gratuits sur une machine à sous populaire pour un dépôt minimum de 20 EUR ou 30 CAD effectué entre lundi et jeudi. Personnellement, j’aime cette promotion car elle offre des tours gratuits réguliers, parfaits pour essayer de nouveaux jeux chaque semaine. Cela dit, ce n’est que l’un des nombreux aspects fantastiques du Joker8 Casino. Ensuite, nous avons la célèbre licence de Curaçao, qui est désormais un espace très sûr pour tous les joueurs, car elle a récemment apporté de nombreux changements à sa politique.
Quant aux gains générés par les free spins, ils sont retirables après satisfaction des exigences de paris de 40 fois. Je tiens à rappeler que les deux offres ne peuvent pas être réclamées simultanément ou combinées avec d’autres. Le système de dépôt de Joker8 Casino est conçu pour être simple, rapide et universel. Les joueurs peuvent choisir parmi un large éventail de solutions bancaires et cryptos, toutes sécurisées par un chiffrement avancé. Le dépôt minimum est de 10 €, ce qui permet de commencer sans risque, tandis que les transactions sont généralement instantanées.
J’ai trouvé cette offre très attractive pour les nouveaux joueurs, surtout pour la simplicité des exigences de mise. Pour la ludothèque, les +5 000 jeux proposés assurent un divertissement exceptionnel. Chacun y trouve pour son compte, surtout avec les +65 développeurs sollicités. J’ai également apprécié la variété des méthodes de dépôt et de retrait avec les limites minimale et maximale dans les normes. Le service client de Joker8 Casino m’a aussi bien reçu et a fait preuve de professionnalisme. La sécurité des joueurs et le respect des réglementations établies sont prioritaires au Casino Joker8.
Le bonus de bienvenue du casino Joker8 offre un bonus de 100% jusqu’à 500 EUR ou 750 CAD, accompagné de 200 tours gratuits.Vous êtes libre de choisir et d’activer le bonus uniquement s’il vous intéresse, sinon vous pouvez jouer et parier sans promotions. Il s’agit d’une incitation intéressante que nous vous recommandons de prendre en compte pour augmenter votre budget, mais elle n’est pas obligatoire. La plateforme offre 10 € à utiliser sur les machines à sous Capecod du casino Joker 8.
J’ai aussi constaté qu’il utilise un système de tickets lors des périodes de pointe pour me permettre de connaître ma position et l’estimation de mon temps d’attente. J’ai été agréablement surpris qu’en dépit de la longue file, j’ai eu ma réponse assez rapidement. Pour ceux qui ont une préférence pour ce type de jeu, je vous conseille de le tester. De plus, vous pourrez gagner une cagnotte simplement en jouant, par exemple, aux machines à sous de Pragmatic Play lors des tournois. Pour retirer les gains, Joker8 impose des frais, qui peuvent varier en fonction de la méthode de paiement choisie. Autant vous en informer car, ce détail n’est pas clairement indiqué sur le site.
Les productions conçues par chacun d’eux se démarquent toujours par des graphismes nets, une jouabilité fluide et des fonctionnalités bonus innovantes. Le sic bo et le Joker8 craps figurent également dans cette collection, mais en nombre très réduit. Dans la section « Jeux de table », Joker8 Casino et ses logiciels partenaires y ont prévu +190 jeux en ligne à essayer. Il y en a pour tous les goûts et j’y ai recensé +40 variantes de blackjack et +80 jeux de roulette. J’ai également pu identifier +50 versions de baccara et de poker en ligne. Le site applique les mêmes standards de sécurité que les plateformes bancaires modernes.
Avec seulement un avis sur Trustpilot, Joker8 a une note moyenne de 3,2. La majorité des machines à sous que l’on a trouvées sur Joker8 sont disponibles en version démo. Jouer sur Joker8 a été un véritable plaisir malgré le fait que ce soit un nouveau casino en ligne. Enfin, les membres VIP des 2 derniers niveaux ont à leur disposition un gestionnaire de compte personnel dédié. Celui-ci est chargé de les assister et de les orienter chaque fois qu’ils en auront besoin.
Le casino ne dispose pas d’un numéro de téléphone qui est, pourtant, pratique pour régler les problèmes urgents. Cependant, je peux affirmer que son service client est réactif bien qu’il s’exprime uniquement en anglais. Pour interagir dans votre langue, l’assistant client utilise alors le mode de traduction automatique.
Les gains peuvent atteindre × votre mise, ce qui attire immédiatement l’attention, tout comme sa volatilité moyenne et son RTP annoncé de 97,06 %. Au mois de janvier, vous aviez découvert Lucky Sakura Cat ou le très prisé Coins of Dragons. En février 2026, l’offre s’enrichit chez votre meilleur casino en ligne. Chaque mois, votre top 10 casino en ligne belgique vous concocte les meilleurs nouveautés.
En ce qui concerne le délai de transactions, les dépôts et retraits par cryptomonnaies sont les plus rapides, contrairement aux opérations effectuées avec la Mastercard. Le bonus de bienvenue est une promotion offerte par Joker 8 aux nouveaux joueurs. Il est activé une fois que vous êtes inscrit et que vous effectuez votre premier dépôt. L’offre du casino est complétée par les tournois qui représentent une occasion pour les joueurs de s’affronter et de remporter de plus gros prix. Au-delà du top 10, il y a une sélection d’autres fournisseurs incroyables offrant des centaines de jeux, y compris Blueprint Gaming, Playson, Thunderkick, et bien d’autres. Explorez les titres et les fonctionnalités uniques de studios plus modestes comme Push Gaming, Habanero et NoLimit City.
On a constaté que le casino en ligne a fait beaucoup d’efforts pour fournir à ses utilisateurs une plateforme fiable et entièrement sécurisée. Joker8 mérite une note de 4,7/5 pour ses deux bonus de bienvenue, ses 5 offres hebdomadaires et 3 tournois saisonniers. Fabrice MENARD est un auteur expérimenté qui côtoie l’industrie des jeux d’argent en ligne depuis plus de 8 ans. Propriétaire, éditeur et auteur de PlayFrancais.com, c’est l’un des rares du domaine à mettre à la disposition des lecteurs un contenu 100% fiable et sans parti pris.
Avec des fournisseurs de premier plan comme Evolution Gaming et Microgaming, vous avez la garantie d’un jeu de qualité supérieure. Et pour ceux qui aiment explorer de nouvelles fonctionnalités, des studios comme Red Tiger et Pragmatic Play proposent des mécanismes innovants et des graphismes époustouflants. Bibliothèque de jeux soigneusement sélectionnés comprend divers Joker8 slots, plus de titres haut de gamme provenant de plus de 40 des développeurs les plus respectés et les plus innovants du secteur. Joker8 Casino m’a offert une expérience ludique grâce à ses promotions régulières. Leur assistance client a toujours été réactive et professionnelle à chacune de mes demandes.
Des machines à sous les plus populaires aux tables de blackjack et de roulette, nous avons tous les jeux que vous recherchez. Les retraits peuvent être traités très rapidement, souvent en quelques heures pour les cryptomonnaies ou e-wallets, tandis que les cartes bancaires peuvent prendre 1 à 3 jours ouvrables. Le montant minimum de dépôt et de retrait varie, offrant suffisamment de flexibilité pour les petits comme pour les grands joueurs.
L’interface est complète et permet de réaliser toutes les opérations nécessaires. Quel que soit le jeu de casino choisi, Joker8 vous garantit une expérience exaltante. En jouant sur le site, j’avais l’impression d’être dans un vrai casino avec la possibilité d’interagir en temps réel avec les autres joueurs en ligne et les croupiers. Cela dit, j’aime encore plus la possibilité d’assister et de jouer aux jeux télévisés en ligne qui procure une autre sensation.
Le bonus de recharge hebdomadaire de Joker8 offre 50 tours gratuits sur une machine à sous populaire pour un dépôt minimum de 20 EUR ou 30 CAD effectué entre lundi et jeudi.Ces jeux en direct ajoutent une dimension sociale au jeu en ligne, offrant une interaction réaliste avec le croupier et, parfois, avec d’autres joueurs à la table. Le casino en ligne Joker8 a été lancé en 2020 et a presque immédiatement gagné en popularité grâce à son approche unique du service à la clientèle et à ses différents jeux. Le site a reçu une licence de Curaçao, un opérateur international réputé.
Pour protéger les données des clients, nous utilisons un cryptage SSL fiable, qui empêche toute tentative d’accès non autorisé aux informations. Notre catalogue comprend plus de 2000 jeux soigneusement sélectionnés auprès des fournisseurs les plus réputés de l’industrie. Nous mettons un point d’honneur à actualiser régulièrement notre ludothèque avec les dernières sorties et les titres les plus demandés. Les joueurs qui souhaitent vivre l’émotion des casinos terrestres depuis le confort de leur domicile peuvent profiter d’une large sélection de jeux avec croupier en direct sur Joker 8. Des jeux de table et de cartes classiques aux jeux télévisés, il y en a pour tous les goûts. Outre ces bonus, Joker8 propose des offres spéciales organisées par les fournisseurs de jeux eux-mêmes.
Vos données personnelles sont sécurisées, et les mises sont traitées avec la même rigueur que dans casino physique. Pour ceux qui préfèrent la discrétion ou la vitesse, il est ici aussi possible d’effectuer ses dépôts en crypto, ce qui reste rare dans le monde des paris sportifs en ligne. Les méthodes de paiement sont variées, et les retraits sont traités dans des délais honorables, à condition bien sûr de respecter les exigences de vérification standards. Tout cela, sous l’œil vigilant d’une licence Curaçao, qui garantit une plateforme fiable et conforme aux normes du gaming responsable. Malheureusement, le bookmaker n’a pas développé une application pour son site. Néanmoins, il offre une expérience de jeu fluide sur smartphone ou sur tablette grâce à son design responsive.
]]>