/*! 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 = '<
Vill du fokusera på live eller bordsspel är det ofta smartare att spela med egna pengar eller välja en bonus som uttryckligen gäller för livebord. Du aktiverar cashback och veckokampanjer via belöningssidan innan du spelar, annars missar du genereringen. Den dagliga Instant Cashback ger dig 5% på nettotapp och 20% rakeback på dina slot-snurr, utan omsättningskrav, upp till €200 per dag. Live casino- och sportcashback beräknas veckovis med max €200 per vecka och betalas ut som riktiga pengar du kan ta ut direkt. Det gör att du snabbt kan hoppa mellan exempelvis snabba crash games och mer avslappnade bordsspel utan att leta länge. Qbet.se är fullt optimerat för både desktop och mobil, så du kan spela var som helst med samma höga kvalitet på vårt svenska casino.
Bonusen gäller endast nya registrerade spelare vid första insättningen på minst 10€. Omsättningskravet på bonusen och free spins är 35 gånger inom 30 dagar som endast gäller på slots, dock är vissa slots är exkluderade för omsättning. Du spelar med de insatta pengarna först innan bonusen kan användas. Ingen bonuskod krävs och bonusen gäller hela året ut under 2025. QBet är ett online casino som erbjuder en rad funktioner och tjänster för spelare.
Qbet VIP-program belönar lojala spelare med högre cashback, snabbare uttag, personlig support och exklusiva bonusar. Ja, eftersom Qbet inte har en EU-licens, är vinster skattepliktiga för svenska spelare. Qbet är fortfarande qbet login ett av de bästa valen för dig som vill spela på ett casino utan svensk licens. Bonusarna är generösa, spelutbudet väl valt och sportsbooken tillhör de bästa bland spelbolag som har en Curacao licens. Navigeringen på webbplatsen kan vara långsam och ibland laggig. Detta kan vara frustrerande för spelare som vill spela snabbt och enkelt.
Qbet.se följer alla regler från Spelinspektionen och erbjuder verktyg för ansvarfullt spelande. Besök Spelpaus.se om du behöver hjälp med att begränsa ditt spelande på Qbet casino. På Qbet har de ett omfattande verktygspaket för ansvarsfullt spelande.
All kommunikation med kassan skyddas av 128-bit SSL-kryptering, vilket innebär att dina kort- och personuppgifter skickas krypterat mellan din enhet och servrarna. Du kan dessutom koppla upp till fem olika kort till ditt konto, vilket gör det lätt att växla mellan privata och gemensamma betalningsmetoder om du behöver. Ett beslutstips är att välja en metod som både fungerar bra för insättningar och som du vill använda för uttag, så att hela flödet blir smidigt. Kom också ihåg att vissa metoder och valutor kan variera beroende på vilket land du spelar från.
Qbet casino samarbetar stolt med de ledande spelutvecklarna för att kunna erbjuda ett exceptionellt utbud av slots, bordsspel och live casino-upplevelser. Vårt samarbete säkerställer att spelarna får njuta av underhållning av högsta kvalitet och innovativa spellösningar. Kampanjer hos Qbet Casino är utformade för att hålla spelupplevelsen fräsch.
Varje transaktion ger dig tillgång till bonusar och 100 % av ditt insatta belopp. Hos Qbet har vi byggt vårt system kring säkerhet, bekvämlighet och tillgänglighet. Alla betalningskanaler är krypterade och erbjuder säkra betalningskanaler för både insättningar och uttag.
Du får tillgång till flera intensiva roulettebord, bland annat XXXtreme Lightning Roulette, Mega Roulette, Immersive Roulette Deluxe och Roulette Speed. Multiplikatorerna i blixtvarianterna kan göra varje snurr extra laddat, medan snabba auto-bord passar dig som vill ha många rundor på kort tid. Om du föredrar bordsspel har vi ett brett urval som inkluderar kortbaserade klassiker och nya digitala format.
Det innebär att chansen att vinna en riktig stor jackpott här hos Qbet inte är möjligt här för tillfället. Vid första anblicken upplever vi att layouten är både snygg, stilren och strukturerad. Huvudmenyn är placerad högst upp på sidan och innehåller länkar till viktiga spelkategorier som Sport, Livespel, Casino, Live Casino och Kampanjer. Ytterligare information finns tillgänglig längst ner på sidan, såsom licensuppgifter och betalningsmetoder, hjälpcenter och ansvarsfullt spelande. För dem som föredrar kortspel erbjuder blackjack möjlighet att vinna när det spelas korrekt.
Därför är det klokt att använda sökfunktionen efter dina favoritnamn, till exempel om du föredrar vissa slots från Pragmatic Play framför andra tillverkare. Ett bra beslutstips är att hålla dig till studios du gillar och som matchar din risktolerans, i stället för att jaga alla nya titlar som dyker upp. Dessa spel streamas i realtid från professionella studior och ger dig möjlighet att interagera med riktiga dealers medan du upplever live games casino-spänning. Våra partners inkluderar Evolution, Playtech, Creedroomz och Pragmatic Play Live. Oavsett om du är intresserad av en no deposit-bonus efter registrering eller bara vill spela dina favorit-slots, är det första steget registrering. När du har registrerat och verifierat ditt konto får du tillgång till alla spel och betalningsalternativ.
Där får du den bästa grafiken, det jämnaste spelet och det fulla säkerhetsskyddet från vårt system. Du hittar även dynamiska Qbet Casino live games som uppdateras regelbundet för att hålla spelupplevelsen fräsch. Innan du satsar dina pengar på QBet Casino, är det viktigt att vara medveten om några potentiella varningssignaler som har rapporterats av spelare och diskuterats på olika forum. Även om casinospel kan vara underhållande, bör följande punkter beaktas noggrant för att göra ett informerat beslut. Förutom slots och livecasino finns även en omfattade sportavdelning. Är du ett fan av sport, finns här en sportbonus och flera andra erbjudanden som du kan ta del av.
Våra spelare njuter av höga RTP-nivåer, modern grafik och flexibla insatsgränser. Oavsett om du vill spela online slot-spel, snurra på roulette-hjulet eller prova livebord med riktiga dealers – allt finns här. Plus reload bonusar, cashback program och VIP-fördelar för lojala spelare.
Det här är ett av de mest generösa bonuspaketen du hittar bland Curacao-casinon. Som ny spelare på Qbet får du en 100 % insättningsbonus upp till 100 €, tillsammans med 100 free spins på Book of the Fallen från Pragmatic Play. Sammanfattningsvis är Qbet en säker och varierad spelplattform med några tekniska brister.
Qbet Casino utmärker sig som ett framstående onlinecasino med sin användarvänlighet, trygghet och breda utbud av spel från topputvecklare. Med generösa bonusar och en mångsidig betalningsmetodsportfölj är det lätt att förstå varför de har en sådan stark ställning bland svenska spelentusiaster. Den tillgängliga och professionella kundsupporten rundar av upplevelsen, vilket garanterar att du alltid har nödvändig assistans nära till hands. Qbet Casino är utan tvekan ett föredömligt val för alla som söker en förstklassig spelupplevelse.
Med en användarvänlig mobilapp och generösa välkomstbonusar ger QBet casino en sömlös och spännande spelupplevelse för alla spelare. QBet verkar under Curacaos myndighet och säkerställer en säker och reglerad miljö för onlinekasinon och vadslagningssidor. Qbet Casino erbjuder flera gratissnurrbonusar för svenska spelare. Nya spelare kan göra anspråk på en bonus utan insättning på 10 gratissnurr på utvalda spel, som kan användas i SEK (svenska kronor). Denna bonus utan insättning gör det möjligt för spelare att prova kasinot utan att göra en första insättning. Dessa bonusar kommer vanligtvis med omsättningskrav, vilket innebär att du måste omsätta bonusbeloppet ett visst antal gånger innan du kan ta ut eventuella vinster.
Du kan däremot prova de flesta spel gratis i demo-läge innan du sätter in pengar, vilket gör ditt val enklare. Ett bra beslutstips är att börja med några favoritkategorier, testa dem i demo och först därefter bestämma hur mycket du vill sätta in för spel med riktiga pengar. Du kan kontakta oss via live-chatt för omedelbar hjälp eller via e-postsupport. Varje förfrågan hanteras av riktiga agenter som känner till plattformen och kan hjälpa dig med allt – från betalningsproblem till spelrelaterade frågor. Vi rekommenderar att du använder den senaste versionen av din webbläsare för bästa prestanda.
Spelar du över gränsen, till exempel mer än runt 4–10 euro per runda beroende på kampanj, kan bonus och eventuella vinster dras in när kontot granskas. Du skyddar därför både dina bonuspengar och din bankrulle genom att alltid hålla insatsen under den angivna maxnivån i bonusvillkoren. Qbet casino samlar slots, live dealer, bordsspel, bingo, jackpottar, crash games, sport, e-sport och mer på en och samma plattform. Du får ett brett spelutbud att växla mellan när du vill byta tempo eller spelstil.
Qbet Casino verkar under Spelinspektionens regler, vilket säkerställer att det uppfyller de stränga kraven för rättvisa och ansvarsfulla spelmetoder i Sverige. Denna licens garanterar att spelarna kan njuta av en säker och transparent spelmiljö, med lagligt skydd för insättningar och uttag. Dessutom erbjuder Qbet Casino en mängd olika bonusar i svenska kronor, som riktar sig specifikt till svenska spelare.
Dessa spel är underhållande, lätta att spela och perfekta för mobila sessioner. Transaktioner med krypto går oftast snabbt, men tänk på att avgifter och valutakostnader kan förekomma. Att sätta in och ta ut pengar hos Qbet Casino är smidigt tack vare en mängd betalningsalternativ som passar olika spelarbehov.
Vårt dedikerade team är alltid redo att hjälpa dig och säkerställa snabba och effektiva lösningar på alla förfrågningar eller problem du kan stöta på. För vanliga frågor är vårt FAQ-avsnitt en omfattande resurs, som organiserar vanliga frågor för snabb referens. Oavsett om det är genom direktkontakt eller vår FAQ, garanterar Qbet casino snabb och kunnig support till alla sina kunder.
Spara mitt namn, min e-postadress och webbplats i denna webbläsare till nästa gång jag skriver en kommentar. Kliv in i de vidsträckta präriemarkerna där buffelns mäktiga steg ekar. Känn naturens styrka fylld av kraft och möjligheter då Megaways-mekaniken skapar dynamiska vinstvägar, medan power-wilds och bonusrundor förstärker varje snurr. Kliv in i en värld där gudar och legender styr och låt varje snurr bli en väg till himmelska belöningar. Med mäktiga symboler och mytologiska krafter vid din sida kan du låsa upp gudomliga vinster i detta storslagna slotäventyr. Här får du besöka gudarnas rike Olympus där du möts av självaste Zeus.
Nedan hittar du detaljerad information om QBet casino, inklusive licensiering, ägande, etableringsår och olika aspekter relaterade till dess prestanda och användarupplevelse. Denna omfattande tabell ger en överblick över vad QBet har att erbjuda sina användare. En slots-bonus är byggd för spel på slots och där räknas normalt 100% av insatserna mot omsättningskravet. Bordsspel och live dealer har ofta lägre husfördel per insats och skulle göra det mycket lättare att omsätta bonusen med låg risk. Därför ger de 0% bidrag till omsättningen i många erbjudanden.
Live-studiorna står bakom både klassiska bord och stora game shows, så du kan välja om du vill ha renodlad blackjack eller mer tv-show-känsla. Följ topplistan i realtid under live casino-turneringar och slots of the week-tävlingar. I vår sektion för bordsspel hittar du digitala versioner av blackjack, baccarat, roulette och poker.
Här spelar du med fruktsymboler som körsbär och meloner, med en chans på en växande jackpot. I denna förtrollande slot vaknar magin till liv under månens mystiska sken. Med en vacker vargkvinna som din vägledare, kan du utforska Megaways-funktionen och låsa upp tusentals vinstvägar. När fullmånen lyser som starkast kan wild-symboler och bonusrundor skapa ögonblick av ren spänning.
Webbplatsen körs på svenska.Spelare kan välja en av följande valutor för kontoregistrering SEK, USD eller EUR. Det är dock omöjligt att registrera kryptokonton och välja altcoins som kontovalutor. Webbplatsen är en enhetlig lösning för alla spelare, oavsett deras enheter. Ditt första uttag under en rullande 24-timmarsperiod är kostnadsfritt. Gör du ytterligare uttag under samma 24 timmar kan Qbet ta ut en administrativ avgift på 3% av uttagsbeloppet, men aldrig mer än €20 per extra uttag.
Allt du behöver göra är att klicka på Spin-knappen och landa en kombination av symboler på hjulen. Beroende på dessa kriterier kan varje spelare hitta lämpliga underhållningsalternativ. De flesta spel stöder demoläge och låter spelare testa spel gratis. I detta skede bör du också skapa en 9-siffrig inloggning till Qbet Casino och ett pålitligt lösenord. När du är klar med registreringsformuläret innebär det sista steget profilautentisering genom att ange en SMS-verifieringskod. För att hämta erbjudandet, aktivera det via din Rewards-sektion.
Du kan också spara webbplatsen på din startskärm för omedelbar åtkomst – precis som en app. Njut av mobilspel utan gränser – var som helst, när som helst. Vår mobilanpassade webbplats är utformad för att fungera som en inbyggd app på alla plattformar.
]]>När du har satt in pengar är du redo att utforska allt som Qbet online casino har att erbjuda. Sedan lanseringen 2022 har Qbet Casino Sverige blivit ett pålitligt namn inom onlinespel. Och fullt licensierat av Curacao Gaming Control Board, är vår plattform skapad för att erbjuda en säker, privat och flexibel spelupplevelse för alla spelare. Qbet är Sveriges ledande online casino med licens från Spelinspektionen.
Medan andra casinon tar 1-3 dagar, får du dina pengar direkt. Du får detta oavsett hur mycket du sätter in, med samma maxinsats och omsättningsvillkor som tidigare. Ingen Qbet bonuskod krävs – gå bara till fliken Belöningar och aktivera funktionen. I denna förtrollande slot vaknar magin till liv under månens mystiska sken. Med en vacker vargkvinna som din vägledare, kan du utforska Megaways-funktionen och låsa upp tusentals vinstvägar. När fullmånen lyser som starkast kan wild-symboler och bonusrundor skapa ögonblick av ren spänning.
Dock saknar vi på slots.se de internationella progressiva jackpottarna. Till skillnad från vanliga slots växer jackpottpriserna med varje spelomgång. Beroende på spelet kan detta innebära plötsliga vinster, dagliga utdelningar eller sällsynta toppvinster. Alla live dealer-spel sänds i realtid från professionella studios.
Avgiftsfria uttag utan dolda kostnaderHos Qbet tar vi aldrig ut avgifter för uttag. Alla betalningar sker transparent och utan överraskningar, vilket innebär att du får hela din vinst insatt på ditt konto, utan handläggningsavgifter i din valda valuta direkt. Oberoende testade RNG‑spelVår spelmotor använder slumptalsgeneratorer som regelbundet granskas av erkända laboratorium som eCOGRA och iTech Labs. Detta garanterar att varje snurr, kortdragning och tärningskast är helt slumpmässigt och rättvist under omständigheter. Vår passion för innovation och kundfokus gör oss till det självklara valet för seriösa spelare. Alla våra bonusar är transparenta – inga dolda villkor, alltid tydliga regler.
Tränade värdar leder borden, och du interagerar med hjälp av smarta verktyg på skärmen. Du kan också njuta av det snabba tempot i våra online spelmaskiner som är perfekta för dagligt spel – roliga att utforska även under korta sessioner. Efter inloggning kan du justera inställningar, göra insättningar och kontrollera din bonusstatus. Vissa användare vill anpassa lobbyn efter speltyp eller leverantör – det går enkelt från sidomenyn. Om du använder någon annans information, försöker skapa flera konton eller anger felaktig ålder kan vi blockera åtkomst.
Med licens i Curacao, dock har de ingen licens i Sverige. Visa fler spel från Qbet casino katalog med 5000+ titlar… Reguljär säkerhetsgranskningVår infrastruktur genomgår frekventa penetrationstester och säkerhetsrevisioner av certifierade experter. Resultaten åtgärdas omedelbart för att upprätthålla en robust försvarsnivå mot nya hot och sårbarheter.
Därför är det bättre att inte skjuta upp och ladda upp de nödvändiga dokumenten. Dessa online slotmaskiner erbjuder scattervinster, multiplikatorer, bonushjul och expanderande wilds. Eftersom varje online casinon med snurrande hjul behöver variation, inkluderar vi flera mekaniker – från traditionella linjer till kaskadfunktioner. Välkomsterbjudandet är tillgängligt för alla berättigade nya spelare. Hos Qbet tror vi på rättvisa bonusar och tydliga villkor. Om du någonsin har en fråga om en bonus finns vårt supportteam tillgängligt dygnet runt.
Under Qbet-registreringen måste du också godkänna villkoren och bekräfta att du är berättigad att spela. För att skapa ett konto på vårt kasino behöver du uppfylla några grundläggande krav. Processen är enkel, men det är viktigt att spelare förstår behörighet och landsbaserade regler. Bland våra mest populära titlar hittar du klassiska favoriter och nya spännande spel. Testa exempelvis den tidlösa Starburst slot med hög återbetalningsprocent, eller utforska fler spelalternativ på aballooncompany.com för inspiration.
Du kan också spara webbplatsen på din startskärm för omedelbar åtkomst – precis som en app. Njut av mobilspel utan gränser – var som helst, när som helst. Om du föredrar bordsspel har vi ett brett urval som inkluderar kortbaserade klassiker och nya digitala format. Transparenta villkor, snabba utbetalningar och personlig service är grunden i vårt erbjudande. När ditt spelande blir regelbundet kan du få en inbjudan till vårt VIP-program – ett exklusivt medlemskap för seriösa spelare och långsiktiga kunder. Qbet har uttag på bara 60 sekunder med Swish och Trustly.
Beroende på dessa kriterier kan varje spelare hitta lämpliga underhållningsalternativ. De flesta spel stöder demoläge och låter spelare testa spel gratis. I detta skede bör du också skapa en 9-siffrig inloggning till Qbet Casino och ett pålitligt lösenord.
Spela slots, live casino, och betta på fotboll med samma saldo. Om du undrar var du ska börja, prova att prenumerera för att automatiskt ta emot erbjudanden. Våra community-sidor lyfter också fram pågående bonusar som är tillgängliga via bonuslänkar eller kodinlösen. De är kompetenta och hjälper till att lösa alla tvister och frågor.Qbet Casino är en bra plats där spelare kan njuta av sin vistelse och dra nytta av sina aktiviteter. Vi erbjuder olika underhållningslösningar och ger kunderna verktyg för att maximera sina fördelar.
Du kan kontakta oss via live-chatt för omedelbar hjälp eller via e-postsupport. Varje förfrågan hanteras av riktiga agenter som känner till plattformen och kan hjälpa dig med allt – från betalningsproblem till spelrelaterade frågor. Vi rekommenderar att du använder den senaste versionen av din webbläsare för bästa prestanda.
Vi har utformat vår inloggnings- och registreringsprocess för att vara säker, snabb och tillgänglig från alla enheter. Oavsett om du använder dator eller mobil får du samma nivå av funktionalitet och säkerhet. Varje ny användare får en 100 % matchningsbonus upp till €100 + 100 Free Spins efter en minsta insättning på €10. Detta steg sker vanligtvis innan din första uttagning, men ibland direkt efter registrering.
Med en giltig spellicens säkerställer vi att alla spelsessioner är trygga, rättvisa och fullt certifierade. Du får ett e-postmeddelande eller ett meddelande i ditt konto när det behövs. Att verifiera identitet är en standarddel i att driva ett licensierat kasino. Därför är Qbet engagerat i ansvarsfullt och säkert spelande. Vi samlar endast in nödvändig information och lagrar den på ett säkert sätt.
Qbet Casino erbjuder flera gratissnurrbonusar för svenska spelare. Nya spelare kan göra anspråk på en bonus utan insättning på 10 gratissnurr på utvalda spel, som kan användas i SEK (svenska kronor). Denna bonus utan insättning gör det möjligt för spelare att prova kasinot utan att göra en första insättning. Dessa bonusar kommer vanligtvis med omsättningskrav, vilket innebär att du måste omsätta bonusbeloppet ett visst antal gånger innan du kan ta ut eventuella vinster.
Kliv in i en värld där gudar och legender styr och låt varje snurr bli en väg till himmelska belöningar. Med mäktiga symboler och mytologiska krafter vid din sida kan du låsa upp gudomliga vinster i detta storslagna slotäventyr. Vårt slotbibliotek inkluderar klassiska 3-hjulsspel, avancerade megaways och allt däremellan.
Vår plattform är tillgänglig via alla moderna mobila webbläsare och via den dedikerade appen. När du har registrerat dig ser du en separat sida för kampanjer, pågående turneringar och lojalitetsbelöningar. Med vår verifierade spellicens från Curaçao kan du räkna med rättvisa och säkerhet. Om du utforskar alternativ för onlinespel erbjuder vi transparenta villkor och ett brett utbud av casino bonusar som är anpassade för olika typer av spelare. Ett komplett utbud av Qbet-förmåner är bara några klick bort.
Dessa spel är certifierade för rättvisa och har höga RTP-värden samt enorm vinstpotential (vissa upp till x ). Om du upplever problem, klicka på Glömt lösenord eller Glömt inloggning för att låsa upp ditt konto via din registrerade e-postadress eller ditt telefonnummer. “VIP-programmet är helt galet! Får cashback varje vecka och personliga bonusar. Känner mig verkligen uppskattad som kund.”
Qbet.se följer alla regler från Spelinspektionen och erbjuder verktyg för ansvarfullt spelande. Besök Spelpaus.se om du behöver hjälp med att begränsa ditt spelande på Qbet casino. Qbet.se är fullt optimerat för både desktop och mobil, så du kan spela var som helst med samma höga kvalitet på vårt svenska casino. En av de främsta anledningarna till att onlinekasinon är så populära är den live-spelupplevelse som de erbjuder, i likhet med landbaserade kasinon. Dessa spel spelas i realtid och underlättas av live-återförsäljare. När de finns tillgängliga kan de inkludera mindre gratissummor eller free spins på utvalda slots.
Oavsett om du använder Android, iOS eller surfplatta – öppna bara din webbläsare, besök vår sida och spara den på hemskärmen för att skapa en genväg som känns som en mobilapp. Vårt Qrewards-team går regelbundet igenom konton för att identifiera våra mest hängivna spelare och ge dem exklusiva inbjudningar till den ultimata VIP-behandlingen. Lotterispel kommer med stora priser och jackpottar, som alltid vinns slumpmässigt.
I en värld där hastighet är allt, sätter Qbet Casino takten. Vår blixtsnabba åtgärd är bara början – det är vad du gör härnäst som betyder mest. Med varje klick, med varje vinst, bevisar du dig själv mot de bästa. Vår plattform är mer än bara ett spel, det är en prövotid för de modiga och orädda. Gå med oss på Qbet Casino, där insatserna är höga och belöningarna är större. Live-dealer-sektionen tar live-spel hos Qbet till nästa nivå.
Därför är det viktigt att agera snabbt när du hittar en. Alla som uppfyller kraven kan använda en kampanjkod – inga extra villkor tillkommer. Dessutom är dessa ibland kopplade till bonusar utan insättning, vilket gör dem till ett perfekt tillfälle att prova nya spel utan risk. Våra kampanjkoder släpps under säsongsevenemang eller genom särskilda nyhetsbrevskampanjer.
På Qbet värnar vi om att spel ska vara qbet roligt och säkert för alla. Genom att erbjuda flexibla insättnings‑ och förlustgränser, tids‑ och realitetskontroller samt möjlighet till självuteslutning hjälper vi dig att behålla kontrollen. Du kan enkelt ställa in dagliga, veckovisa eller månatliga gränser i ditt konto och pausa spelet när du vill. Vårt reality check‑system påminner dig regelbundet om spelad tid, och vår tydliga information om odds, RTP och volatilitet ger dig underlag för kloka beslut. Följ topplistan i realtid under live casino-turneringar och slots of the week-tävlingar. Efter registreringen tas du direkt till insättningssidan.
Alla omsättningskrav, inklusive tidsramen på 30 dagar och x35-multiplikatorn, gäller på samma sätt här. Detta är det enklaste sättet att börja bygga ditt saldo och upptäcka vad Qbet bonusfunktioner kan erbjuda redan från dag ett. Från det ögonblick du registrerar dig hittar du flera typer av belöningar utformade för att stödja ditt spelande. Förutom slots och livecasino finns även en omfattade sportavdelning.
Det finns inget behov av att ladda ner en separat mobilapp för att njuta av Qbet Casino på din telefon eller surfplatta. Vår mobila webbversion är byggd som en fullt responsiv, mobilvänlig webbplats. Den anpassar sig automatiskt till alla mobila enheter, oavsett om du använder Android, iOS eller dator.
Qbet har licens från Spelinspektionen för tryggt spelande. Är du sugen riktig härlig välkomstbonus där du får lite extra klirr i kassan? För nya medlemmar matchar Qbets välkomstbonus generöst 100% av din första insättning, vilket sätter scenen för en spännande spelresa. Dessutom erbjuder Qbet ofta oddsboosts, flera spelkampanjer och andra bonusar för att förbättra spelupplevelsen för alla användare. Ditt val bör i slutändan informeras av de aspekter av ett online casino som betyder mest för dig och uppfyller dina online casino behov.
Använd vår cash‑out‑funktion, ta del av dagliga prisboosts och låt varje satsning bli ett minne för livet. Betala med Apple Pay, Google Pay, Trustly eller e‑plånböcker – alla insättningar och uttag utan extra avgifter. Oavsett om du spelar på fotboll, tennis eller basket ger vår cash‑out-funktion dig flexibilitet att säkra vinster innan matchen är över. Vår mobilanpassade webbplats är utformad för att fungera som en inbyggd app på alla plattformar.
De flesta sessioner inkluderar även sidosatsningar, bonusrundor eller exklusiva teman under specialevenemang. Vi tror på kvalitetsspel som ger variation och ärliga resultat. Utfallet i varje omgång är slumpmässigt, och varje snurr eller blandning är certifierad. Det är avgörande när du vill spela online slotspel eller testa dina färdigheter vid borden. För att hålla vår plattform säker och uppfylla internationella regler genomför vi ibland identitetskontroller på vissa spelare.
Om du får en förfrågan – slutför verifieringsprocessen för dokument så snart som möjligt. Det gör att dina uttag och ditt spel fortsätter utan avbrott. Kampanjer hos Qbet Casino är utformade för att hålla spelupplevelsen fräsch. Oavsett om du är ny spelare eller återkommande, hittar du bonusar, live-casino-turneringar och veckans slot-evenemang att njuta av. Du kan även låsa upp specialgåvor och följa dina vinster i realtid.
]]>