/*! 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 = '<
Pelit ovat myös kokeiltavissa demoversioilla täysin ilmaiseksi. Aloittaaksesi pelaamisen, sinun on suoritettava perinteinen rekisteröintiprosessi. Wheelz casinolla on tarjolla yhteensä yhdeksän vaihtoehtoa, joilla voi tehdä talletuksia ja nostoja sekä kaksi vaihtoehtoa pelkille talletuksille. Sen jälkeen kun Wheelz on käsitellyt kotiutuksesi, voi siirrossa kestää 1-3 pankkipäivää. Sekä talletusbonuksella että ilmaiskierrosten voitoilla on kierrätysvaatimuksena 35x. Tukipäälliköt ja livejakajat puhuvat englantia.Sallimme asiakkaidemme avata tilit useissa valuutoissa, mukaan lukien USD ja EUR.
Kolikkopelit kartuttavat kierrätystä pääsääntöisesti 100 prosentin teholla, poikkeukset on lueteltu bonusehdoissa. Wheelz kasino käyttää samaa rakennetta kuin sen sisarkasinotkin. Sinisen ja violetin paletilla leikkivä ulkoasu on yksinkertaisuudessaan näyttävä. Käytössä on hyvin yksinkertainen sivupalkki, josta löytyy tärkeimmät valikot tukilinkkien löytyessä alalaidasta. Pöytäpelien tarjonta on huomattavasti kolikkopelivalikoimaa suppeampi.
Tarjoamme asiakkaillemme suotuisat olosuhteet onnistuneelle pelaamiselle. Tarjoamme laajan pelivalikoiman, runsaat kampanjat, mobiiliratkaisut ja muita etuisuuksia. Wheelz Casino tarjoaa uusille pelaajille ainutlaatuisia etuja ilman talletusbonusta. Rekisteröitymällä voit nauttia ilmaispyöräytyksistä ja muista erityisistä kampanjoista, jotka tuovat lisää jännitystä pelikokemukseen. Wheelz on erinomaisesti kasinopelien pyörittelyyn soveltuva nettikasino, joka on lukeutunut jo vuosia suomalaisten suosikkeihin.
Wheelz.com kotiutus peittoaa nopeudessaan suurimman osan muista kasinoista. Maksutavan valinta kuitenkin vaikuttaa kotiutuksiin, ja nostot voi saada tunneissa ainoastaan hyödyntämällä nopeita verkkopankkipohjaisia maksutapoja tai nettilompakoita. Wheelz tarjoaa erityisen Wheel of Spinz -pyörän, joka jakaa ilmaiskierroksia omiin suosikkipeleihin. Bonuspyörän eteen pääsee aina, kun oman tilin Progress Bar -mittari täyttyy, joten Wheelz ilmaiskierroksia on jatkuvasti tarjolla. Jos Wheelz on jäänyt vielä kokeilematta, saa alkuun 100% talletusbonuksen 300 euroon saakka ja 100 ilmaiskierrosta. Jo pelitilin rekisteröinnin aikana on mahdollisuus laittaa talletusraja voimaan, mutta se onnistuu myöhemminkin.
Tämän arvostelun kirjoitushetkellä eteemme aukesi yhteensä 212 Megaways-peliä. Peliryhmät on jaettu suosittuihin, kolikkopeleihin, jackpot-peleihin ja pöytäpeleihin. Kaikista pääkategorioista löytyy myös tarkempia alakategorioita, jotka auttavat omien suosikkien löytämisessä. Pääset hienosti alkuun Wheelzin 100%/300€ non sticky -bonuksella. Muut bonukset, kuten kasino, ovat persoonallisia, ja niitä jaellaan pitkälti pelaajan aktiivisuuden mukaan. Wheelzin casinon johtotiimi etsii jatkuvasti uusia pelejä – tämä voi tarkoittaa joko sivustolta jo valmiiksi löytyvien pelivalmistajien uusia pelejä, tai kokonaan uusia pelivalmistajia.
Huomionarvoista on, että palautusta kerätään kaikilla Granturo Malta Limitedin kasinoilla – ja sen voi aktivoida käyttöön peliviikon päätteeksi millä tahansa niistä. Näistä suosikkimme ovat verkkopankkipohjaiset Brite, Trustly ja Euteller, mutta valikoimissa on myös nettilompakoita, prepaid-kortteja ja mobiiliin suunnattuja maksutapoja. Bonukset ovat hyvät, ja keskittäminen tietää pääsyä ilmaiskierroksia jakavan Wheel of Spinz -bonuspyörän äärelle. Wheelz-tilin sulkeminen on aina mahdollista myös lopullisesti, jos rahapelit vievät miestä. Siellä on tarkkoja ohjeita moniin tärkeisiin asioihin, kuten kasinon palkitsemisjärjestelmään. Wheelz Casinolle voi tallettaa yli kymmenellä eri maksutavalla.
Seuraavat tarjoukset on tarkoitettu yhdysvaltalaisille pelaajille. Sivustomme on moderni ja täyttää nykyaikaisten pelaajien vaatimukset. Muiden progressiivisten portaalien tavoin tarjoamme mahdollisuuksia mobiilipelaamiseen. Asiakkaamme voivat pelata pelejä silloin, kun haluavat, sijainnistaan riippumatta. Casino wheelz tukee välittömiä talletuksia ja nostoja, ja live-aulat ovat avoinna ympäri vuorokauden. Yhdistä suoraan ammattimaisten jakajien kanssa, osallistu Live Games -kampanjoihin ja liity eksklusiivisiin pöytiin VIP-kokemusten pariin.
Tervetuloa Wheelz Casinolle, online-kasinosivusto, joka tarjoaa ainutlaatuisen pelikokemuksen kaikille pelaajille Suomesta. Wheelz Casino on tunnettu siitä, että se tarjoaa laajan valikoiman pelejä, joissa yhdistyvät jännitys ja turvallisuus. Sivusto on täysin lisensoitu ja säännelty, varmistaen läpinäkyvän pelikokemuksen käyttäjilleen.
Tämä hauska kasino ilmestyi pelaajien ruudulle omalaatuisella luonteellaan varustettuna ja tarjoten reaaliaikaisia palkintoja, mitkä tekivät siitä vuoden 2020 kiinnostavimman brändin. Aikaraja, tappioraja, talletusraja, panosraja ja pelitauko ovat esimerkkejä siitä, kuinka voit itse asettaa itsellesi rajoja pelaamisellesi. Livekasinon valikoimaan kuuluvat myös suositut Game Show pelit, jotka tarjoavat aimo annoksen viihdettä ja upeita voittomahdollisuuksia.
Videokolikkopelissä voiton saa saamalla tietynlaisen pelisymbolien yhdistelmän. Tyypillisesti pelaajan tulee saada identtisiä symboleja, tai yhdistelmä identtisiä symboleja ja wild-symboleja tietyille panoslinjoille. Tässä osiossa pelaajat voivat valita suosituimpien korttipelityyppien välillä. Tarjoamme amerikkalaista ja eurooppalaista rulettia, nopeaa ja automaattista blackjackia, pokeria ja baccaratia. Täällä pelaajat voivat lajitella pöydät osallistujien määrän ja panoskokojen mukaan. Mobiilisivustomme tarjoaa pääsyn samoihin toimintoihin ja antaa pelaajille mahdollisuuden nauttia täysimittaisista pelikokemuksista tien päällä.
Rekisteröintivapailla kasinoilla pelaaja tunnistetaan verkkopankkitunnuksia hyödyntäen, mutta Wheelzillä ei. Wheelz Casino pyrkii käsittelemään kotiutuspyynnöt mahdollisimman nopeasti, mutta rahojen saapumisessa on syytä varautua 1–3 päivän viiveeseen. Lisäksi itse maksumenetelmään voi liittyä kasinosta riippumatonta lisäviivettä. Maksimipanos kierrätyksessä on viisi euroa per kierros tai 0,50 euroa per panoslinja.
Wheelz on suomalainen kasino, joka jää kertalaakista mieleen erittäin myönteisellä tavalla. Ulkoasu aina kasinon onnenpyörän mieleen tuovaa logoa myöten on mehevän värikäs, mutta kuitenkin selkeälinjainen ja modernin tyylikäs ilman liiallista rönsyilyä. Kotimaisella palvelua saa live chatin kautta ja sähköpostitse päivittäin kello 9–01. Hieman vajaammatkin aukioloajat ovat kuitenkin enemmän kuin riittävät. Arviointikerralla live chat tuki toimi hyvin, vaikka auttajalla olikin aluksi pieniä vaikeuksia ymmärtää kysymys.
Tutustu tuhansiin huippukolikkopeleihin, jännittäviin live-kasinopöytiin ja paikallisiin peleihin. Wheelz Casino tarjoaa nopeat talletukset ja kotiutukset sekä suomeksi saatavaa asiakastukea vuorokauden ympäri. Laajan pelivalikoiman lisäksi löydät täältä turnauksia, henkilökohtaisia tarjouksia sekä reilua peliä. Wheelz Casino tarjoaa kattavan valikoiman pelejä, mukaan lukien videokolikkopelit, pöytäpelit, live-kasino ja progressiiviset jättipotit. Peliaula on täynnä suosittuja nimikkeitä tunnetuilta ohjelmistotoimittajilta kuten NetEnt, Microgaming, ja Play’n GO. Laajan pelivalikoimansa ansiosta Wheelz Casino voi tarjota jokaiselle pelaaja-tyypille jotakin kiinnostavaa, olitpa sitten kokenut kasinoharrastaja tai uusi tulokas.
Pöytäpelit toimivat kertoimien ja sääntöjen suhteen samalla tavalla kuin kivijalkakasinoilla. Ainoa merkittävä ero on, että pokerissa on muunnelma nimeltä multi-hand poker, jossa voi pelata jopa 25 kättä kerralla. Tätä ja joitain visuaalisia muutoksia lukuun ottamatta nämä pelit ovat kuitenkin täysin samanlaisia kuin muuallakin. Wheelz Casinon bonukset ovat monipuolisia; tarjoamme promootioita sekä aloittelijoille että vakituisille pelaajille.
Kierrätyksessä sallitaan korkeintaan 5 euron suuruinen kierrospanos tai 0,5 euroa panoslinjaa kohden. Anni on ikävuosiltaan Kasinonetin kuopus, mutta siitä huolimatta hän on työskennellyt nettikasinoiden parissa jo yli kuuden vuoden ajan. Muistakaa, että Wheelz toimii perinteisellä tavalla, joten KYC-prosessiin on varauduttava jo ensimmäisellä nostolla. Kasinot ilman rekisteröitymistä ovat oikea suuntaus, jos dokumenttirumba ei kiinnosta ainakaan pelaamisen alussa.
Jartsa on avannut pelitilin noin kasinolle ja kasinoarvosteluja on takana eri sivustoille yli kappaletta.Nykyään suurimpana intressinä on kierrätysvapaat pikakasinot. Miehen oma suosikki on Pelikaani Casino, jonne tulee talletettua useampia kertoja viikossa. Peleistä tulee valittua lähtökohtaisesti Nolimit Cityn tuotantoa. Pelaajien osalta Wheelz on 2020-luvun suosituimpia kasinoita, ollen edelleenkin paras nettikasino monelle pelaajalle.
Wheelz Casino tarjoaa runsaasti erilaisia bonuksia ja tarjouksia sekä uusille että vanhoille pelaajille. Uudet pelaajat voivat hyödyntää tervetuliaisbonusta rekisteröityessään, ja aktiivisille pelaajille on tarjolla säännöllisiä kampanjoita, kuten ilmaiskierroksia ja talletusbonuksia. Lisäksi Wheelz Casino palkitsee uskollisia pelaajia VIP-ohjelmalla, joka tarjoaa eksklusiivisia etuja ja palkintoja. Oletko selannut kymmeniä uhkapelisivustoja yrittäessäsi löytää sopivaa nettikasinoa? Wheelz-kasinomme on oikea valinta pelaajille, jotka arvostavat mukavuutta, luotettavuutta ja saavutettavuutta.
Myöhemmin omalle pelitilille kirjautumiset onnistuvat kätevästi rekisteröitymisen yhteydessä syötetyn sähköpostin ja salasanan avulla. Pelitilin tunnukset voi myös halutessaan tallentaa laitteelleen, helpottaakseen kirjautumisia jatkossa entisestään. Uusia pelaajia odottaa 100% talletusbonus 300 euroon saakka ja 100 ilmaiskierrosta. Tervetuliaisbonuksen saa lunastettua jo 20 euron minimitalletuksella. Wheelz erottuu muista monipuoliseksi kasvatetun pelivalikoiman ja hyvien bonusten kautta. Myös kotiutukset ovat rekisteröitymisen kautta toimivaksi kasinoksi suorastaan poikkeuksellisen nopeat.
Ole vuorovaikutuksessa ammattimaisten jakajien kanssa, osallistu erityisiin Live-pelipromootioihin ja liity VIP-kokemuksia tarjoaville eksklusiivisille pöydille. Oppaamme kertoo kaiken, mitä sinun tulee tietää aloittaaksesi pelaamisen Wheelz Casinolla. Rootz-kasinoalustalle rakennettu Wheelz nostaa rimaa entistäkin korkeammalle tarjoamalla ennennäkemättömän personoituja kasinoelämyksiä. Voit odottaa pääseväsi nauttimaan nopeammista latausajoista, parannelluista palkinnoista ja jopa useammista mahtavista kasinopeleistä. Ota yhteys tukeviin palveluihin, mikäli koet että sinulla on uhkapeliriippuvuus. Wheelz kasino kotiutus ja talletus onnistuu useilla eri maksutavoilla.
Jackpot-pelit ovat myös hyvin edustettuina, ja peliaulasta löytyy kiitettävän monta useiden miljoonien jättipotteja suoltavia Mega Jackpot -pelejä. Wheelsin mittava pelivalikoima vastaa vähintäänkin niitä odotuksia, jotka kasinon houkutteleva ulkoasu ja vauhdikkaan vinkeä meininki pelaajassa nostattavat. Katettuna on mahtava valikoima kolikkopelejä, jackpoteja, pöytäpelejä, raaputusarpoja ja tietenkin myös kunnon livekasino. Jokainen pelikategoria avautuu lajiteltuna käteviin alaosioihin esimerkiksi pelin ominaisuuksien mukaan. Saatavilla on myös tietoa vastuullisesta pelaamisesta, kuten jo toimiluvan vaatimuksiinkin kuuluu.
Itselleen voi lisäksi asettaa monia erilaisia rajoituksia pelaamisen hallitsemiseksi, sillä nettikasino tarjoaa pelaajilleen kattavat vastuullisen pelaamisen työkalut. Kuin yllä ei olisi jo tarpeeksi, tarjolla on myös uskollisuusohjelma. Loyalty-pelaajat saavat muun muassa oman tilinhoitajan ja 20 % cashbackin joka viikko. Wheelz Loyalty -pelaajille tarjoillaan myös ilmaiskierroksia ilman kierrätysvaatimusta. Myös Wheelz cashbackin kierrätysvaatimus on vain 1x, eli käytännössä kyseessä on käteispalkinto. Jokaiselta löytyy oma, monipuolinen portfolionsa ja yhdessä ne tarjoavat rikkaan valikoiman erilaisia kasinopelejä kaikille Wheelzin pelaajille.
Pika-nettikasinot.comin tiimi ei voi muuta kuin antaa kasinolle 9.6 arvosanan. Wheelz Casinon pelivalikoima on jaoteltu mukavan selkeästi eri kategorioihin. Kolikkopelejä voi etsiä esimerkiksi teeman (kauhu, urheilu, mytologia jne.) tai erikoisominaisuuksien (sticky wilds, putoavat symbolit jne.) tai volatiliteetin mukaan.
Tämä ei ole bonus ilman kierrätystä, mutta keskittäminen voi tuoda lähes kierrätysvapaata cashbackia. Tervetulobonuksen lisäksi Wheelzillä on jaossa valtava määrä muita etuja. Wheel of Spinz-peli antaa pelaajaetuja aina tasolta toiselle noustessa ja Progress Bar-mittarin täyttyessä. Onnenpyöräpelissä annetut ilmaiskierrokset on kohdistettu aina pelaajan omiin suosikkipeleihin koneoppimisen kautta. Lisäksi tarjolla on erilaisia reload-bonuksia ja käteispalautusta.
Maksutapasi voit verovapaalla ja turvallisella Wheelzillä valita useista vaihtoehdoista, mutta kyseessä ei harmillisesti ole kasino ilman rekisteröintiä. Wheelzille suomalaiset ovat tärkeä asiakasryhmä, joten suomenkielistä asiakaspalvelua on tarjolla ympäri vuorokauden livechatin ja sähköpostin email protected kautta. Käytettävissäsi on myös laaja kokoelma usein kysyttyjä kysymyksiä vastauksineen. Pelien päävalikossa ei ole lainkaan raaputusarpoja, mutta kun kirjoitat hakukenttään Hacksaw, saat näkyviin lähes 50 arvan valikoiman. Tarjolla on hauskaa ja nopeaa pelattavaa ja voittoja aina jättipotteihin asti.
Näistä nopeimpia ovat Trustly, Euteller ja Brite talletus, jotka kaikki kuuluvat tiimimme suosikkeihin. MGA-lisenssi tunnetaan myös tiukkana ja turvallisena lisenssinä. Lisäksi kasinolla kamppaillaan säännöllisesti voittokerroin-turnauksissa, joiden palkintona on käteistä tai voittokertoimia. KYC-prosessin suorittamisen jälkeen Wheelz Casino kotiutus on nopeudessa markkinoiden huippua. Nostopyynnöt käsitellään välittömästi, ja tunnetusti Trustlyn ja Briten kautta siirrot kulkevat pelaajalle pikavauhtia.
Kokeile onneasi esimerkiksi Crazy Time tai Deal or No Deal peleissä. Wheelz casinon pelivalikoiman takana on kaikkiaan 57 eri pelivalmistajaa, minkä myötä pelien yhteismäärä nousee pitkästi yli 3000 kappaleen. Lisäksi voit saada jopa 20 prosenttia kierrätysvapaata cashbackia pelkällä pelaamisella. Cashback maksetaan viikoittain ja se on aina aktiivinen Loyalty-jäsenille eli vippiläisille.
Luonnollisesti Wheelz Casinon ominaisuuksiin kuuluu myös mobiilikasino, joka on erinomainen, kuten vastaavilla kevyillä pelisivustoilla kuuluu ollakin. Wheelz Casino App ei wheelz ole tarpeellinen, sillä tällä simppelillä sivustolla pelit sujuvat mainiosti mobiiliselaimessa HTML-pohjaisena. Kattauksesta vastaa yli 100 laatuvalmistajaa, joihin lukeutuvat muun muassa Play’n GO, NetEnt ja Games Global (Microgaming). Alan suosituimpien pelivalmistajien parhaat hittipelit, innostavat uutuudet sekä harvinaisemmatkin herkut kuuluvat kaikki Wheelz Casinon monipuoliseen pelikattaukseen. Wheel of Spinz onnenpyörää pääsee pyöräyttämään aina täytettyään kasinon Progress Bar -mittaria pelejä pelaamalla.
Ota suunnaksi jännittävät live-pöydät, joissa pääset aistimaan aidon kasinon tunnelmaa. Ruletti, blackjack ja muut suosikit löydät useissa eri live-versioissa livekasinon uumenista. Wheelzin tervetuliaisbonuksen ilmaiskierrokset ovat arvoltaan 0,10– 0,25 euroa per kierros ja tuollainen 10 ilmaiskierroksen satsi on käytössäsi aina 24 tuntia sen myöntämisestä. Muista siis käydä päivittäin hyötymässä ilmaiskierrokset ensimmäisen 10 päivän ajan. Pöytäpelit on yleismaailmallinen termi, jota käytetään kaikista pöytäpohjaisista kasinopeleistä. Pelit, kuten blackjack, pokeri ja baccarat, kuuluvat tähän kategoriaan.
Wheelz viihdyttää pelaajiaan muun muassa komealla non sticky bonuksella ja kiinnostavilla onnenpyörillä sekä ahkeraan vaihtuvilla kampanjoilla. Turvallisuus on niin ikään huipussaan, vastuullisen pelaamisen työkalut kunnossa ja asiakaspalvelu live chatin kautta on tukena vuorokauden ympäri. Toimivuuden, luotettavuuden sekä viihdyttävyyden ansiosta voit nauttia nettikasinolla pelaamisen riemusta helposti Wheelz Casinolla.
Wheelz Casino on muiden Rootz-alustalla toimivien kasinoiden tavoin tehty ensisijaisesti mobiili edellä. Vaikka pelaamisen lisäksi tarjolla on monenlaista bonusta ja muuta kilkettä, ei käytettävyys kärsi. Suurin osa Wheelzin peleistä toimii suoraan mobiilissa – vain muutama flash-peli jää mobiililaitteiden ulottumattomiin. Wheelz Casino on erinomaisesti Suomi-lokalisoitu nettikasino vuodelta 2021. Nopeat maksut, verovapaus ja listojen parhaat bonukset ovat todellisia vetonauloja. Wheelz netticasino tarjoaa pelaajilleen kaiken, mitä kotimaiset pelaajat vain voivat toivoa.
Wheelz Casino yleisestiWheelz Casino tulee hienosäätämään näitä elementtejä vieläkin enemmän, kun sivusto vihdoin julkaistaan. Rekisteröityminen on vaivatonta, tervetuliaisbonusta saa aina 300 euroon saakka ja siihen päälle vielä ilmaiskierroksia 120 kappaletta. Ja niitä ilmaiskierroksia on sitten mahdollista saada myöhemmin lisää erilaisten kampanjoiden kautta.
Live Casinon jakajat työskentelevät studiossa ja he voivat nähdä sekä panoksesi että kätesi, aivan kuin jos istuisit paikan päällä pelipöydän ääressä. Tärkeimpiä valttikorttejamme ovat krypto-ystävällisyys, runsaat kampanjat, monipuoliset pelit ja hyvin toimiva mobiilisivusto. Ulkoisesti Wheelz tarjoaa erittäin selkeän, tyylikkään sekä helppokäyttöisen sivuston, joka soveltuu niin kokeneemmille pelaajille kuin vasta-aloittaneillekin. Värimaailmaa hallitsee violetti, mikä luo sopivaa eloisuutta sekä viihtyisyyden tunnetta sivustolle. Näin suomalaisena mieltä lämmittää erityisesti sekin, että sivusto on käännetty kauttaaltaan suomenkieliseksi ja näin ollen olo kasinolla on varmasti kotoisa heti alusta alkaen.
Wheelzin sivusto on myös käytettävyydeltään oivallisella tasolla. Sisältöä on aika paljon siihen nähden, miten uudesta pelipaikasta on kyse, mutta se on hyvin järjestetty, joten navigointi sujuu kitkatta. 100 spiniä Wheelz antaa sinulle 10 kappaleen erissä 10 peräkkäisenä päivänä. Kukin erä on voimassa 24 tuntia, joten älä aikaile kierrosten pelaamisessa. Talletusbonuksen ja tuhdin ilmaiskierrospaketin voit lunastaa ensimmäisellä, vähintään 20 euron suuruisella talletuksellasi. Voit etsiä pelejä myös valmistajan mukaan tai kirjoittamalla pelin nimen Wheelz Casinon peliaulan hakukenttään.
Wheelz poimii joka viikko uudet pelit, joita suositellaan peliaulan etusivulla. Kasino suositteli tätä arvostelua laatiessa esimerkiksi pelejä Barbarossa, Immortal Romance Mega Moolah ja King Kong Cash Even Bigger Bananas 2. Konsepti toki toimii – Wheelz-sivuston toimivuudesta ei löydy juuri moitittavaa ja imagossa on sopiva ripaus värikkyyttä ja huumoria. Silti esimerkiksi kierrätysvapaat ilmaiskierrokset olisivat palkinnoissa mukava lisä. Wheelz Casinon suomenkielinen asiakaspalvelu on avoinna joka päivä vuorokauden ympäri.
Uuden sukupolven pelikehittäjien kärjessä nähdään sellaisia nimiä, kuin Evolution Gaming. Jos haluat kokea jotain todella epätavallista, etsi nämä pelit käsiisi, sekä lukemattomat muut nimikkeet Wheelzin avattua ovensa. Wheelzin palkinto-ohjelman keskiössä on Wheel of Spinz -peli, johon pääset silloin, kun olet ansainnut tasonnousun täyttämällä Progress Bar-mittarisi kokonaan. Tästä pelistä löydät ilmaiskierroksia joihinkin suosikkipeleihisi, älykkäiden koneoppimisjärjestelmien toimiessa taustalla ja määritellessään ne pelit, joihin ilmaiskierroksia annetaan.
Jos tarvitset apua tehdessäsi siirtoja pelitilillesi, tai lisätessäsi uutta maksutapaa, Wheelzin ystävällinen asiakaspalvelu-tiimi voi auttaa sinua 24/7 minkä tahansa ongelman parissa. Petri on erikoistunut Suomen rahapelilakiin sekä suomalaisille suunnattuihin netin rahapeleihin keskittyen niihin yli 15 vuoden ajan. Uransa aikana hän on tarjonnut yli tuhat faktoihin perustuvaa artikkelia rahapeleihin ja rahapelaamiseen liittyen. Hänellä on kokemusta kirjoittamisesta 1980-luvulta alkaen, ja hän valmistui journalistiksi Tampereen yliopistosta 1990-luvulla.
]]>