/*! 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 = '<
Deze spellen, ontwikkeld door gerenommeerde ontwikkelaars, garanderen kwalitatieve graphics en een vloeiende functionaliteit, cruciaal voor een uitstekende spelervaring. Door het portfolio te analyseren, zien we dat Fgfox zich inzet voor het aanbieden van innovatieve spellen, waardoor spelers vol zekerheid en met gecontroleerde spanning kunnen spelen. Fgfox Casino heeft prioriteit gegeven aan toegankelijkheid, zodat iedereen van hun spelopties kan genieten. We vonden dat hun website functies toepast zoals toetsenbordnavigatie en compatibiliteit met schermlezers, wat gebruikers met een beperking sterk helpt.
Door gebruikersgedrag te voorspellen, passen we flexibele beeldgroottes toe, waardoor we gering dataverbruik garanderen zonder concessies te doen aan de kwaliteit. Door grondig te testen, zorgen we voor betrouwbaarheid en responsiviteit, waardoor gebruikers in elke fase maximaal kunnen profiteren. Door vooruitstrevende laadtechnieken toe te passen, hebben we de basis gelegd voor een superieure gebruikerservaring.
De integratie van game shows zoals Crazy Time en Monopoly Live voegt een entertainment dimensie toe die verder gaat dan standaard tafelspellen. Fgfox Casino slots worden aangevuld met instant games en crash games voor spelers die op zoek zijn naar snelle gaming sessies met directe uitbetalingen. De diversiteit in het spelaanbod wordt versterkt door samenwerkingen met meer dan 50 spelproviders, waaronder minder bekende maar innovatieve studio’s zoals BGaming, Quickspin en Nolimit City. Dit zorgt ervoor dat spelers toegang hebben tot zowel populaire titels als unieke, minder bekende spellen. Bovendien worden nieuwe spellen regelmatig toegevoegd, waardoor het aanbod fris en actueel blijft. Het casino biedt ook een demomodus voor veel spellen, zodat spelers deze gratis kunnen uitproberen voordat ze met echt geld spelen.
Door Blackjack in te geven in de zoekbalk, krijg je honderden kansspelen te zien. Gelukkig geeft een banner duidelijk weer welke live verlopen en welke een RNG gebruiken. Als beloning om bij Fgfox te komen spelen, geven ze je een hele hoop bonussen.
Er zijn verschillende reload bonussen actief waarbij je op vaste dagen een bonus kan activeren. Je krijgt dan free spins of bonusgeld cadeau bij een nieuwe storting. Natuurlijk draait het als je graat gokken maar om één ding en dat zijn de casino spellen. Je wilt als speler zoveel mogelijk spellen uitproberen en gaan ontdekken. De populaire gokkasten staan er eigenlijk allemaal wel tussen want ze werken samen met verschillende grote namen.
Voor je tweede storting kan je nog eens 50% en 50 gratis spins extra verwachten. Hiervoor gelden dezelfde voorwaarden als op de eerste welkomstbonus. Ook dit is een 100% matchbonus, daarnaast ontvang je 100 free spins verdeeld over 2 dagen. Als je eerste storting €20 of hoger is, kun je de welkomstbonus accepteren in je casino account. De grote, gerenommeerde softwareontwikkelaars zorgen voor een aanbod aan vertrouwde, hoogkwalitatieve spellen.
Het pakket omvat doorgaans een substantiële stortingsbonus, conform de branche-normen, en verstrekt vaak fgfox gratis spins, zodat onze spelopties worden vergroot. Laten we de promoties van Fgfox Casino eens nader bekijken, met name het welkomstpakket waar nieuwe spelers van kunnen profiteren. Dit pakket biedt een compleet overzicht van de introductiebonussen en depositobonussen, wat onze eerste spelervaring flink kan verbeteren.
De bonussen en voorwaarden bij FGFOX zijn erg goed, en ze houden de games leuk en nieuw. Naast pokies en live dealer games, vind je ook andere spellen zoals craps, sic bo en bingo. Deze diversiteit maakt FgFox Casino een unieke bestemming voor gokkers. De mogelijkheid om verdiende punten uit te wisselen in de interne VIP-shop voegt een aanvullende beloningslaag toe, hoewel specifieke details over beschikbare items gelimiteerd zijn. Mijn ervaring heeft uitgewezen dat vergelijkbare systemen vaak exclusieve bonussaldi, gepersonaliseerde promoties en zelfs fysieke items aanbieden. De FgFox app is beschikbaar voor zowel iOS als Android, met minimale vereisten van iOS 5.0+ en Android 5.0+.
Genereuze bonusstructuren kenmerken het promotionele aanbod sinds de lancering in 2022. Nieuwe spelers profiteren van een welkomstpakket dat direct 100% matchbonus tot €1.000 vrijgeeft, aangevuld met 100 free spins die strategisch worden verdeeld over twee opeenvolgende dagen. FgFox heeft een Curaçaose sub-licentie en wordt geëxploiteerd door een bedrijf dat meerdere online casino’s runt. Het casino is nog relatief nieuw (sinds 2022) en moet zijn reputatie op langere termijn nog bewijzen.
In korte tijd heeft dit paarse casino zich opgewerkt tot een serieuze optie voor Nederlandse spelers die houden van veel keuze, stevige bonussen en een opvallend uitgebreid live casino. Met meer dan 5.000 games, toernooien, cashback en een VIP-programma is FgFox Casino allesbehalve een doorsnee aanbieder – maar natuurlijk zitten er ook haken en ogen aan. Met een warme welkomstbonus van 100% tot €500 + 200 gratis spins, voel je je meteen thuis. Ons toegewijde team staat klaar om ervoor te zorgen dat je ervaring soepel en plezierig is. Met het Fgfox Casino-platform op mobiele apparaten kunnen Nederlands spelers verbonden blijven, waar ze ook zijn.
Voor spelers die geen high rollers zijn, biedt FGFox Casino een standaard bonuspakket dat iets bescheidener is maar nog steeds zeer aantrekkelijk. Dit pakket omvat een 100% bonus tot €100 op de eerste storting en een 50% bonus tot €350 op de tweede storting, samen met in totaal 150 gratis spins. Deze spins worden verdeeld over meerdere dagen, zodat je langer kunt genieten van extra speelkansen. Het aanmaken van een account bij FGFox Casino is een eenvoudig en intuïtief proces dat in enkele minuten kan worden voltooid.
Naarmate we dieper ingaan op de materie, wordt duidelijk dat ze een consistente merkpresentatie op verschillende media mogelijk maken. Als je op zoek bent naar een breed scala aan spellen, heeft ons casino veel te bieden, waaronder oude en nieuwe slots, tafelspellen en live dealersessies die je vermaken. FgFox Casino neemt verantwoord gokken serieus en biedt tools en middelen om spelers te helpen hun gokgedrag in de gaten te houden en beperken. Dit omvat limieten voor inzetten en sessies, evenals de mogelijkheid om een tijdslimiet te stellen of je account tijdelijk te blokkeren.
Dit bedrijf maakt live casino spellen en is wat minder bekend dan Pragmatic Play live. Maar dit soort spellen zijn zeker weten de moeite waard om uit te proberen. De welkomstbonus bij FgFox Casino is speciaal ontworpen om nieuwe spelers een vliegende start te geven.
Het platform onderscheidt zich door een VIP-systeem met tien verschillende niveaus, waarbij elke stap nieuwe voordelen ontgrendelt. Van welkomstbonussen tot wekelijkse acties zoals de Thursday Reload en Monday Free Spins, er zijn regelmatig mogelijkheden om extra waarde te halen uit je speelsessies. Of je nu via desktop of mobiel speelt, de ervaring blijft soepel en toegankelijk. Gameshows zoals Dream Catcher, Monopoly Live, en Deal or No Deal voegen een extra dimensie toe aan de live casino-ervaring. Deze interactieve spellen combineren entertainment met de spanning van traditionele casinospellen, complete met charismatische hosts en spectaculaire producties. Verbeter de accountveiligheid door tweefactorauthenticatie (2FA) via het Fgfox-dashboard in te schakelen.
Onze analyse laat zien dat snellere laadtijden het percentage spelers dat een website verlaat aanzienlijk kunnen verlagen. Uit informatie blijkt dat tot 50% van de spelers een website verlaat die er langer dan drie seconden over doet om te laden. Tijdens onze ontdekking van het uitgebreide assortiment aan online casino’s stuitten we op Fgfox Casino, een platform dat een vernieuwende spelervaring garandeerde. Geïntrigeerd verdiepten we ons in het game-aanbod om de bijzondere eigenschappen en geloofwaardigheid te evalueren.
Dit is een veilige en eenvoudige manier om toegang te krijgen tot het casino vanaf uw mobiele apparaat. Om spelers te helpen een deel van hun verliezen terug te krijgen, biedt FgFox Casino een cashback bonus. U kunt bijvoorbeeld 10% van uw totale verliesbedrag voor de week terugkrijgen, wat een extra stimulans is om door te spelen. Je hebt een welkomstbonus, tweede storting, reload, free spins, VIP en cashback bonus.
Vlotte thumbnails verzekeren dat we onder deze drempel blijven, waardoor de klantretentie en -tevredenheid groeien. Snel ladende thumbnails bevorderen niet alleen de interactie van gebruikers, maar hebben ook een essentiële rol bij het reduceren van het verlatingspercentage in online casino’s. We hebben ontdekt dat een vertraging van 1 seconde in de laadtijd van een pagina de conversie met 7% kan reduceren. Thumbnails, die voor veel gebruikers de eerste ervaring vormen, moeten snel laden om de aandacht vast te houden. Trage laadtijden verstoren de gebruikerservaring en resulteren vaak tot een verhoogd bouncepercentage.
Het platform hanteert strikte verificatieprocedures om de veiligheid van alle gebruikers te waarborgen en te voldoen aan Nederlandse gokwetgeving. De spelbibliotheek van Fgfox casino telt meer dan 3500 titels van gerenommeerde providers zoals NetEnt, Pragmatic Play en Evolution Gaming. Van klassieke fruitautomaten tot geavanceerde videoslots met innovatieve bonusrondes – het aanbod spreekt diverse speelstijlen aan. Naast gokkasten vind je hier crash games, tafelspellen zoals blackjack en roulette, plus een uitgebreid live casino waar professionele dealers je verwelkomen aan authentieke speeltafels. Het spelaanbod is buitengewoon ruim, met duizenden titels en ook over het bonusaanbod ben ik best te spreken.
Jackpot enthusiasten kunnen hun geluk beproeven bij progressieve slots zoals Mega Moolah en Divine Fortune, met prijzenpotten die regelmatig de €1 miljoen grens overschrijden. Mis het bekijken van elk deel van onze grondige FGFox Casino recensie niet. Het bevat essentiële informatie over FGFox Casino functies en voordelen die alle online gaming fans te wachten staan. Een ander essentieel kenmerk dat FGFox Casino ondersteunt, zijn de verschillende betaaloplossingen.
Tot slot heb je de mogelijkheid om met een virtuele munt te betalen. Fgfox aanvaardt verschillende bekende cryptovaluta als Bitcoin, Doge Coin en USDT. Na de welkomstbonus kan je nog steeds 50% claimen op je stortingen. Om deze reload bonus te claimen moet je de promocode ‘THUBONUS’ delen in de live chat. Het team activeert hem dan voor je en geeft je nog eens 100 free spins extra. Met een casino licentie en meer dan 5.000 spellen heeft FgFox zelfs meer te bieden dan veel andere online casino’s.
Speel bij Fgfox als je een uitgebreide keuze wil hebben aan kansspelen. Daarnaast geven ze je verschillende aantrekkelijke promoties en een eenvoudig loyaliteitsprogramma. Hoewel de betrouwbaarheid van casino’s met deze licentie in het verleden discutabel was, is hier verandering in gekomen. CasinoJager ziet dat de kwaliteit van casino’s met een licentie op Curaçao aan het verbeteren is. De ‘rotte appels’ zijn aan het verdwijnen waardoor de licentie steeds betrouwbaarder wordt.
Van welkomstbonussen tot wekelijkse cashbacks, het casino biedt een breed scala aan incentives om je speelervaring te verbeteren. Hieronder bespreken we de belangrijkste bonussen en hun voorwaarden, zodat je precies weet hoe je het meeste uit je stortingen kunt halen. Deze indrukwekkende catalogus omvat alles van klassieke gokkasten tot moderne videoslots, tafelspellen en een uitgebreid live casino. Of je nu houdt van snelle spins op gokkasten of de spanning van live roulette, FG Fox Casino biedt voor ieder wat wils. De spellen zijn overzichtelijk gecategoriseerd, en met handige zoekfilters kun je eenvoudig navigeren naar je favoriete titels of providers. FgFox Casino zet zich in voor het bieden van een veilige en betrouwbare speelomgeving voor al zijn gebruikers.
Daarnaast zijn er regelmatig toernooien waaraan je deel kunt nemen om leuke prijzen binnen te halen, gewoon door casinospellen te spelen. In de beschrijving van het toernooi staat exact vermeld welke spellen je moet spelen om punten te verzamelen voor het scoreboard. Door aanpasbaar webdesign toe te passen, bieden ze vloeiende navigatie op alle apparaten, waardoor gebruikers weinig hinder ervaren, ongeacht de beeldschermgrootte. Met behulp van gegevensgestuurde inzichten verbeterd Fgfox Casino deze technieken constant om aan de eisen van gebruikers te beantwoorden en competitief te blijven. Bij het evalueren van het introductiepakket van Fgfox Casino blijkt het een zorgvuldig samengesteld aanbod te zijn, ontworpen om onze initiële ervaring te verrijken. We ontdekken een royale bonus gespreid over onze eerste enkele stortingen, elk nauwkeurig samengesteld om ons vanaf het begin een voordeel te geven.
Deze seizoensgebonden promoties zijn vaak een geweldige manier om je speelervaring te verrijken en je winkansen te vergroten. Jackpot spellen bij FgFox Casino bieden spelers de kans om enorme bedragen te winnen. Deze spellen zijn vooral bekend om hun progressieve jackpots, die groeien naarmate meer spelers meedoen. De mogelijkheid om miljoenen te winnen trekt veel spelers aan, wat de populariteit van deze spellen alleen maar vergroot. Voor iOS-gebruikers is er geen officiële app in de App Store, maar u kunt eenvoudig een snelkoppeling naar de website toevoegen aan uw startscherm.
Spelers kunnen kiezen uit een breed scala aan stortingsmethoden, waaronder creditcards (Visa, Mastercard), e-wallets zoals eZeeWallet, en moderne oplossingen zoals Apple Pay en Revolut. De minimale storting is vastgesteld op €20, wat toegankelijk is voor spelers met verschillende budgetten. FGFox Casino biedt een uitgebreide selectie betalingsmethoden om tegemoet te komen aan de diverse voorkeuren van Nederlandse spelers. Het platform ondersteunt zowel traditionele betaalmethoden als moderne digitale oplossingen, inclusief cryptocurrencies.
Ons casino is nog steeds toegewijd aan het geven van eerlijke en genereuze beloningen, dus elke upgrade maakt duidelijk welke voordelen je hebt verdiend. Als VIP kun je altijd genieten van evenementen die speciaal voor jou zijn gepland, zoals seizoenswedstrijden en tafels waar maar een paar mensen aan kunnen deelnemen. Als het gaat om FGFOX, is het VIP-pad de beste manier om de best mogelijke casino-ervaring te krijgen. Veel van onze loyale spelers genieten van de extra voordelen, speciale functies en unieke evenementen die gepaard gaan met VIP-zijn.
Mis deze kans niet en sluit u aan bij de groeiende gemeenschap van tevreden spelers. Dit zijn echter manieren om een snelkoppeling naar de website te maken. Gelukkig is de website wel mobielvriendelijk zodat je steeds gemakkelijk vanaf het kleine scherm kan spelen. Wil je geld storten en uitbetalen, dan heb je eerst een account nodig. Deze opent een pop-up venster waar je kan kiezen uit een ruim aanbod betaalmogelijkheden.
De HD-streams zorgen voor een authentieke casino-ervaring vanuit je huiskamer. Fgfox casino biedt ongeveer 45 verschillende crash games aan, waarbij spelers hun inzet kunnen vermenigvuldigen voordat de multiplier crasht. Je kan in dit casino overwegen om geen standaard welkomstbonus te nemen. Je moet dan de VIP bonus aanklikken als nieuwe speler en minimaal 200 euro storten. Er zijn duizenden spellen waaruit je kan kiezen en het aanbod is echt schrikbarend groot.
Om de free spins te ontvangen moet je contact opnemen met de klantenservice. Geef bonuscode MONDAYSPIN door en de accepteer vervolgens de bonus in je casino account. Uiteraard vind je bij een aanbieder met zo’n groot aanbod ook tal van klassieke tafelspellen, zoals blackjack, poker en roulette.
Progressieve JPEG- en WebP-formaten zorgen voor een versnelde initiële laadtijd dankzij hun efficiëntie in het verkleinen van de bestandsgrootte met behoud van superieure kwaliteit. Samen maken we een omgeving waarin uw welbevinden prioriteit heeft, zonder afbreuk te doen aan uw entertainmentervaring. Wij geloven in helderheid en informatie en verschaffen duidelijke details over de bedreigingen van deelnemen, zodat u bij elke stap volledig bewust bent. Daarnaast hebben we een sterk supportnetwerk dat 24/7 voor u beschikbaar is om u te bijstaan als u moeilijkheden tegenkomt of hulp nodig heeft. Zorgvuldig deelnemen vraagt een gevarieerde benadering die een beschermde en leuke spelomgeving waarborgt.
De app is niet alleen snel en gebruiksvriendelijk, maar ook uitgerust met de nieuwste beveiligingsprotocollen om ervoor te zorgen dat alle transacties en persoonlijke gegevens veilig zijn. Spelers kunnen altijd en overal inloggen en toegang krijgen tot hun favoriete spellen zonder in te boeten op kwaliteit of snelheid. FgFox Casino biedt spelers volledige toegang tot hun favoriete spellen en functies via mobiele apparaten, waardoor ze dezelfde hoogwaardige ervaring kunnen genieten als op de desktopversie.
Ons ondersteuningsteam kan 24 uur per dag, zeven dagen per week vragen beantwoorden of betalingen doen. FgFox Casino is volledig gelicenceerd en gereguleerd, wat betekent dat het spel écht en veilig is. De casino gebruikt SSL-encryptie om persoonlijke en financiële gegevens te beschermen. Alle games zijn voorzien van Random Number Generators (RNG) om ervoor te zorgen dat de resultaten eerlijk zijn. Het FgFox spelaanbod is in 2025 indrukwekkend uitgebreid, met meer dan 5000 spellen beschikbaar voor Nederlandse spelers. Of je nu een fan bent van klassieke slots, live casino of mini-games, er is voor ieder wat wils.
Welkomstbonus bij Deze AanbiederCasinoVergelijker helpt spelers de beste online casino’s te vinden met deskundige beoordelingen, spelinzichten en veilige betalingsopties voor een veilige en plezierige spelervaring. Daarentegen biedt dit online casino wel slots en live casino spellen aan. We nemen aan dat dit in de nabije toekomst zal veranderen, wanneer het team achter de website uitgebreid wordt en meer mensen ingezet worden voor het helpen van spelers op de website. Een ander nadeel is dat de klantenservice in veel talen beschikbaar is en Nederlands hierbij ontbreekt. Aangezien het casino zich niet nadrukkelijk op Nederlanders mag richten, is dit overigens een logisch (maar vervelend) punt. Als kers op de taart is er ook nog een VIP-programma waarbij je steeds grote beloningen vrij kunt spelen.
Hiernaar kunnen spelers hun vragen sturen over accounts, bonussen, betalingen of technische problemen. Reactietijden kunnen variëren, maar het supportteam streeft ernaar om binnen redelijke termijn te antwoorden. Voor dringende zaken is het raadzaam om dit in je bericht te vermelden. Het is belangrijk dat spelers zich bewust zijn van de risico’s die verbonden zijn aan gokken en alleen spelen met geld dat ze zich kunnen veroorloven te verliezen. Signalen van problematisch speelgedrag omvatten het achtervolgen van verliezen, het verwaarlozen van verantwoordelijkheden, of het spelen met geleend geld. Voor ondersteuning bij gokproblemen kunnen Nederlandse spelers terecht bij organisaties zoals AGOG (Anonieme Gokkers) of de nationale hulplijn voor verslavingszorg.
Vereiste documenten omvatten identiteitsbewijs en adresverificatie. Opnames bij FGFox Casino zijn onderworpen aan een minimumbedrag van €40 en spelers kunnen maximaal drie opnames tegelijk hebben staan. Deze beperking helpt bij het beheren van cashflow en zorgt voor ordelijke verwerking. De inzetvereisten zijn vastgesteld op 40x het bonusbedrag, wat competitief is binnen de industrie. Dit houdt in dat spelers het bonusbedrag 40 keer moeten inzetten voordat winsten kunnen worden opgenomen.
Audits van casinosessies worden regelmatig uitgevoerd door externe groepen die ervoor zorgen dat de resultaten eerlijk zijn. Maak geen fouten, vooral niet in de naam en e-mail velden, zodat uw welkom aanbod niet te lang duurt om te activeren of er zijn andere problemen. Gebruik de specifieke velden tijdens het aanmelden als u uw communicatiemogelijkheden wilt bekijken of limieten wilt instellen. Controleer altijd uw spammap of neem contact met ons op via de helpsectie als u uw bevestigingsbericht niet ontvangt. Nadat we uw registratie hebben bevestigd en u inlogt, kunt u een storting doen en meteen beginnen met het spelen van games in de lobby. Een snelle manier om je te laten registreren is door vooruit te plannen.
We kiezen zorgvuldig games van bekende ontwikkelaars zoals Pragmatic Play, NetEnt en Evolution. Op deze manier kunnen we garanderen dat alle soorten spelers zullen genieten van de gameplay en graphics. Iedereen die zich heeft geregistreerd, kan elk spel op elk moment spelen, zonder aan ingewikkelde vereisten te hoeven voldoen of verborgen beperkingen te hoeven vinden. Op ons platform kun je honderden verschillende speelautomaten uitproberen, met thema’s variërend van klassieke fruitmachines tot mythologie, thrillers met hoge inzet en progressieve jackpots. Er zijn verschillende functies in elke gokautomaat, zoals gratis spins, vermenigvuldigers, wilds die groeien en bonusrondes. Je ervaring zal soepel en plezierig zijn dankzij instant zoekfilters die het gemakkelijk maken om populaire games zoals Book of Dead en Starburst te vinden.
Tijdens onze kennismaking met de features apprecieerden we de nadruk op gebruikersvrijheid, waardoor gebruikers hun spelervaring naar eigen inzicht konden configureren. Door een promotiecode te gebruiken wanneer u zich aanmeldt of een storting doet bij FGFOX, kunt u een speciale deal krijgen. De officiële nieuwsbrieven, geverifieerde partnerpartners en speciale promoties ter plaatse zijn allemaal manieren waarop deze codes binnenkomen. Houd ook de promotiessectie van ons casinoplatform in de gaten en controleer uw e-mail vaak op nieuws over onze nieuwe aanbiedingen. Zoek eenvoudig naar het veld om uw code in te voeren wanneer u een account aanmaakt of een storting doet.
Door geavanceerde laadtechnieken toe te passen, hebben we de basis gelegd voor een superieure gebruikerservaring. Om de gebruikerservaring echter echt te verbeteren, moeten we ons ook richten op flexibel webdesign. Dit zorgt ervoor dat onze game-thumbnails soepel worden weergegeven op alle apparaten, met haarscherpe precisie voor diverse schermformaten. Met behulp van media-query’s en aanpasbare grids passen we de lay-out dynamisch aan, waardoor gebruikers doeltreffend kunnen navigeren en de controle over hun ervaring behouden. Onze data-analyse toont een groei van 30% in sessieduur wanneer gebruikers via mobiele apparaten interageren, wat het belangrijke belang van apparaatadaptatie benadrukt.
Het aanmelden bij FgFox casinos is ontworpen om snel en eenvoudig te verlopen. Nieuwe spelers kunnen binnen enkele minuten een account aanmaken en beginnen met spelen. Het FgFox registratie proces vereist enkele basisstappen die zorgen voor een veilige en geverifieerde gebruikerservaring. Bij FGFox Casino ontdek je een ongelooflijke selectie van spellen die aan elke smaak en voorkeur voldoen.
Mijn ervaring leert dat cryptobetalingen bijzonder nuttig zijn voor Nederlandse spelers die extra financiële privacy zoeken. Financiële flexibiliteit kenmerkt het betalingssysteem van dit online casino. Transacties verlopen soepel via meerdere kanalen, waaronder populaire Nederlandse opties zoals iDEAL. Tijdens mijn onderzoek merkte ik dat betalingsdrempels strategisch zijn ingesteld – toegankelijk genoeg voor beginners maar met voldoende beperkingen voor verantwoord gokken. Voor veel basisvragen kun je ook terecht in de FAQ-sectie, maar bij betalings- of accountissues is de chat meestal het snelst. De live chat is direct toegankelijk vanaf elke pagina, terwijl e-mails binnen 24 uur beantwoord worden.
De spellen zijn ontworpen door topproviders zoals NetEnt, Evolution Gaming en Play’n GO, wat zorgt voor hoge kwaliteit, aantrekkelijke graphics en betrouwbare RTP’s. De FgFox welkomstbonus is in 2025 een van de meest royale in de markt. Nieuwe spelers ontvangen 100% tot €1000 bonusgeld plus 100 Free Spins.
Speel mee in het live casino aan meer dan 400 speeltafels of laat de rollen draaien van de vele online gokkasten. Liefhebbers van cryptovaluta zullen zich ook thuis voelen bij dit casino dat de mogelijkheid biedt om geld te storten en op te nemen in verschillende cryptocurrencies. De algemene voorwaarden van FgFox Casino zijn zorgvuldig opgesteld om duidelijkheid te bieden aan alle spelers. Het is verplicht voor elke speler om deze voorwaarden te accepteren voordat ze een account kunnen aanmaken. Het niet naleven van de voorwaarden kan leiden tot sancties, waaronder de sluiting van het account. FgFox Casino biedt een uitgebreide selectie van casinospellen, waaronder de nieuwste slots, klassieke tafelspellen en live dealer games.
Activeer deze functie om zowel een wachtwoord als een unieke verificatiecode te vereisen die op een vertrouwd apparaat is gegenereerd voordat een account wordt ingevoerd. Deze methode vermindert de ongeautoriseerde toegang aanzienlijk en beschermt gevoelige accountinformatie en saldi in €. Cryptocurrencybetalingen via Bitcoin en Ethereum bieden de snelste verwerkingstijden, vaak binnen enkele minuten voor stortingen. Traditionele bankmethoden kunnen 1-3 werkdagen vereisen voor opnames, afhankelijk van je bank en het bedrag.
Het platform biedt vele geavanceerde en traditionele opties om je financiële transacties te verwerken. Deze veelzijdigheid zorgt ervoor dat je moeiteloos een methode kunt kiezen die perfect aansluit bij je voorkeuren, waardoor je geen moeilijkheden ondervindt bij het beheren van je transacties. De welkomstbonus wordt automatisch toegekend bij je eerste storting van minimaal €20.
Voor alle Nederlands gebruikers stelt de Fgfox-site voor om browsercaching in te schakelen en te updaten naar de meest recente versie van de app op mobiel. Als u van apparaat wisselt, worden uw instellingen automatisch gesynchroniseerd wanneer u zich aanmeldt, zodat u uw voorkeuren niet opnieuw hoeft te wijzigen. Gebruikers kunnen gemakkelijk overal nieuwe releases of toernooien zien dankzij meldingen die in het gebruikerspaneel zijn ingebouwd. Als er enige vertraging is, kunt u een ingebouwde diagnostiekwidget in het profielgebied gebruiken om erachter te komen wat er mis is met uw verbinding voordat u casinospellen gaat spelen. Om in te loggen hoeft u alleen maar de site te openen in een mobiele browser. Er is geen verplichte app-installatie – de site werkt rechtstreeks via Chrome, Safari of voorkeursbrowsers.
Bij FgFox Casino vindt u een uitgebreide selectie aan spellen, waaronder gokkasten, tafelspellen, live casino spellen en meer. De spellen zijn afkomstig van gerenommeerde ontwikkelaars zoals NetEnt, Microgaming en Evolution Gaming. FgFox Casino onderscheidt zich door een indrukwekkende collectie spellen van topontwikkelaars, een gebruiksvriendelijke interface en aantrekkelijke bonussen.
Gebruik voor de beste beveiliging een sterke, unieke code met een mix van hoofdletters en kleine letters, cijfers en symbolen. Om uw € saldo te beschermen, gebruikt u nooit meer toegangsinformatie van andere sites. Als u uw inloggegevens niet per e-mail ontvangt of als de problemen zich blijven voordoen, kunt u contact opnemen met de ondersteuning van Fgfox Casino via livechat of e-mail. Als u veel geldtransacties in uw accountgeschiedenis heeft, moeten ondersteuningsagenten mogelijk uw identiteit verifiëren voordat ze u kunnen helpen. Voor een eenvoudigere communicatie, altijd uw ID of accountnummer klaar. FGFox Casino zal alle soorten casinoliefhebbers aanspreken dankzij de enorme spelcollectie met meer dan 6.000 titels.
Het FgFox mandaat zijn gespendeerd doorheen Curaça eGaming, plus vanaf beperkt beschikt u toneelpodium bovendien over eentje tweede vergunning va Anjouan. Het is belangrijk op te merken dat de uitbetalingen bij roulette zijn gebaseerd op de kansen van het spel, online gokken zonder vergunning die voor Elk veilingitem kan verschillen. Ruby Fortune biedt u een standaard online game-ervaring, het vermindert het vermogen van de speler om kaarten te tellen. Bovendien evalueren we de hardwareprestaties om ervoor te zorgen dat de servercapaciteit aan de piekvraag voldoet. Door middel van uitgebreide prestatieanalyses blijven we anticiperend en handhaven we optimale laadsnelheden, wat van vitaal belang is voor de gebruikerservaring.
]]>