/*! 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 = '<
Med Pay N Play och BankID loggar du in på några sekunder och är igång direkt. Oavsett om du föredrar avancerade funktioner eller enklare klassiker finns något för dig. Varje snurr kan aktivera kedjereaktioner där symboler faller bort och ersätts av nya, vilket skapar chans till flera vinster i följd – utan att du behöver göra ett nytt snurr.
Det kan till exempel handla om att ett casino lanserat en ny bonus eller spel, att nya regler införts på spelmarknaden eller att en tursam spelare precis snurrat fram en storvinst. Att tillhandahålla dig som spelare med den absolut bästa guiden till online casinon i Sverige. Oavsett om du är en erfaren spelare eller nybörjare, våra noggrant utformade guider är skapade för att hjälpa dig att navigera i den spännande världen av casinobonusar med lätthet. Vi jämför och rankar de bästa online casinon för Svenska spelare. Ja, alla svenska casinon erbjuder verktyg för att sätta spelgränser som insättningsgränser, förlustgränser och tidsgränser.
Ett bra nätcasino ska erbjuda ett flertal betalningsmetoder. Har du valt ett casino utan konto är du klar där, om inte så följer inloggningen i några enkla steg. Matchar inte dessa mina förväntningar, så är det inte ett casino jag skulle rekommendera våra läsare. Självklart finns det dock en del faktorer som kännetecknar ett riktigt bra casino. Ett bra nätcasino är ett casino som du trivs med och där du känner att du alltid kan få hjälp av trevlig och kunnig supportpersonal – så enkelt är det på många sätt! 100% bonus upp till max 4000 kr + 200 gratisspins i Gates of BetMGM.
Den vanliga synpunkten är att ålderskravet ska vara för alla svenska spel, även spel med låtsaspengar. Medan Svenska Spel erbjuder offline bingo, poker, lotteri och sportspel, har de inget online casino. Svenskt nät casino är så klart spelbolag som har svensk licens från Spelinspektionen.
Vi samlar dagligen bonusar och erbjudanden för Sveriges mest populära spelbolag 2026. Vi hoppas att de online casinon som vi har valt ut faller dig i smaken. Länkar, banners och eventuella andra bilder som leder till casinon från sajten är annonser. Casinoguide.se är en jämförelsesajt för casino online. Hon har alltid älskat att läsa och skriva och är idag expert inom ämnet online casinon, men skriver även finansrelaterade artiklar. Spelar du hos ett casino utan licens i EU/EES kan skatt svensk casino tillkomma.
Även om casinon kan locka med flashiga bonusar och imponerande grafik, är det viktigt att se bakom ytan. Om du föredrar att spela via en app, leta efter svenska mobila casinoappar. Om du gillar roulette eller live dealer spel, se till att det finns gott om dessa alternativ på casinot du väljer.
Detta innebär att samtliga spelare har rätt att ta del av den saftiga välkomstbonusen som casinot just nu erbjuder. Quick Casino är ett casino som snabbt fått fotfäste bland Sveriges casinon och har sedan lanseringen under 2023 blivit ett populärt hem för många svenska spelare. Det som driver henne i arbetet är att kunna erbjuda spelare all den information de behöver på ett ställe, vare sig det gäller att hitta bästa svenska online casino eller lära sig mer om något visst spel.
Upptäck våra djupgående insikter och experttips i våra senaste blogginlägg, som täcker allt från casino-strategier till utbildande artiklar med lite allt däremellan. Omsättningskrav 20x (insättning + bonus). Ta del av en 100% bonus upp till kr + 11 gratissnurr på spelet. Omsättningskravet för bonusen är 30 gånger.
Vi har över 400 recensioner av spelautomater med nya slots för dig att upptäcka. Videopoker är ett casinospel som kombinerar slotsens enkelhet med strategin från femkortspoker. Online casinon erbjuder ett brett utbud av casinospel på nätet med olika nivåer av strategi, tur och utbetalningar. En besökare hos oss ska aldrig behöva testa casinot själv, eller sätta sig in i krångliga bonusvillkor och regler.
]]>Använd tabellen nedan för att hitta det casino som passar dig bäst. En stabil plattform är grunden för en felfri upplevelse. Spelansvar är den viktigaste faktorn enligt svensk lag.
Omsättningskraven avser hur många gånger du måste satsa bonusen eller generera ett visst belopp för att kunna göra uttaget av vinsten. Dock kan du behöva registrera dig eller spela under en viss period för att få tillgång till VIP-förmåner. En no deposit bonus däremot, eller bonus utan insättning kräver ingen insättning från din sida. Genom att noggrant läsa igenom de specifika reglerna och villkoren i casinots information kan du vara säker på källa att du vet vad som gäller.
På Casinopro.se arbetar vi aktivt med att uppdatera alla erbjudanden från svenska casinon. Ett brett och varierat utbud av spel gör det möjligt att möta olika spelares preferenser, från kortspel till progressiva jackpottar. Spela casino hos Otto och upplev ett svenskt online casino där det går snabbt från tanke till spel. Vårt utbud av nya casinospel uppdateras löpande, och du hittar allt från slots med klusterfunktioner, re-spins och köpbonus till jackpottitlar och Megaways-favoriter. Vi samarbetar med de bästa spelleverantörerna för att ge dig en förstklassig live casino-upplevelse som är både engagerande och underhållande. Oavsett om du är en erfaren spelare eller nybörjare inom Megaways, finns det alltid något nytt att upptäcka i vårt utbud.
Gillar du adrenalinkickar och chans på storvinst är slots eller jackpottslots lockande. Bakom alla dessa spel ligger några stora och kända speltillverkare. De största leverantörerna är Evolution (baserade i t.ex. Malta och Lettland) och Playtech. Husets fördel är låg, ofta runt 1,0–1,2% vid satsning på “Banker”.
I guiden förklarar vi enkelt i text och bilder hur man ser om casinot har svensk licens. LeoVegas erbjuder idag en av de större casino- och live casino-bonusarna. Otto Casino är det enda casinot som erbjuder en casinobonus utan insättning. Studien genomförs tillsammans med Reflect och Norstat och bygger på svar från över aktiva casino- och bettingspelare. Deltagarna fick betygsätta olika casinon på en skala från 1 till 5, vilket gjorde det möjligt att ta fram en ranking över de casinon som spelarna själva uppskattar mest.
Videoslots, tillskillnad från slots, har ofta mycket mer animationer, mer grafik och annat som ska göra spelet mer underhållande. Det som anses med termen videoslots är egentligen en omskrivning av slots. 1×2 älskar bordsspel och det märks också i deras casino.
Om du hittar ett nätcasino som inte anpassar sig till mobilen är det förmodligen ett oseriöst spelbolag som inte satsar på spelupplevelsen. Live casino och jackpottar kan man ofta inte provspela gratis p.g.a. deras natur, men vanliga automater går bra. BetMGM är ett annat nytt spelbolag med svensk licens och många spel med hög RTP. Momang är exempelvis ett nytt casino från Svenska Spel med fokus på slots och jackpotspel. Guiden täcker alla aspekter från topplista, jämförelsetabeller och djupgående recensioner, till tips om ansvarsfullt spelande. Sammanfattningsvis ger denna guide dig en fullständig överblick över de bästa casino online i Sverige 2025.
]]>Idag är hon produktägare för CasinoGuide.se och ansvarar för hemsidans strategi och innehåll. Emma Sjökvist är vår redaktionschef med över 10 års erfarenhet i spelbranschen. Bakom CasinoGuide står ett svenskt redaktionsteam med 10–15 års erfarenhet av iGaming.
Genom att aktivt söka bevis på dessa revisioner, kan vi bekräfta att ett casino erbjuder rättvisa och legitima spel. Vi rankar casinon med licens från bland annat Kahnawake, Sverige, Malta, Storbritannien och USA. Skulle du känna att du själv eller någon i din närhet spelar för mycket rekommenderar vi dig att läsa vår sida om ansvarsfullt spelande för att få tips om hur du skapar sunda spelvanor. För att du ska få en tillfredsställande spelupplevelse är det naturligtvis viktigt att välja rätt casino utan spelpaus casino. Vi ger dig även möjlighet att testspela massor av slots helt gratis direkt här på SveaCasino!
Det finns rena free spins-erbjudanden, men även många kampanjer som innehåller både bonuspengar och ett antal snurr. Du väljer själv om du vill ha bonus och du kan bara hämta den på din första insättning. Du behöver inte registrera ett spelkonto genom att ange användarnamn eller lösenord, utan verifierar dig direkt genom BankID.
Här kan du spela de flesta former av Roulette, Black jack, Baccarat, Caribbean stud och en mängd andra live-casinospel. Man kan ofta chatta med andra spelare eller med den som leder spelet. En kategori spel som vuxit mycket senaste åren är live-casino. Här sker allt digitalt så vida du inte kliver in i live-casinot där du kan hitta dessa bordsspel men med en fysisk dealer. Numera finns en uppsjö av spelleverantörer som tagit fram slots som alla försöker konkurrera om att vara den spelautomat som spelarna älskar mest.
Snabba och säkra insättningar är en stor fördel med spelsajter med licens. Alla spelsajter är skyldiga att begära att vi sätter gränser för vårt spelande. Särskilt smidigt är det om du spelar i mobilen eller på surfplattan. Det spelar ingen roll om du spelar på datorn eller en mobil enhet. Därför sker legitimering på svenska spelsajter numera alltid via BankID.
]]>Det finns många fördelar med att välja casino online istället för att spela på ett ”riktigt casino”. Här finns sajter som där du enbart kan spela casino och live casino, andra har odds eller kanske bingo på menyn. En annan stor fördel med att spela på casino online i Sverige, är att det finns väldigt många bra sajter att välja mellan. Vill du ändå ha äkta spelkänsla – då finns det live casino online.
I denna tabell listar vi de vanligaste betalningsmetoderna och hur stor del av de svenska casinona vi har recenserat som har dem tillgängliga för insättning och uttag. För att svenska casinon ska få vara aktiva i Sverige krävs det att de har en svensk licens utfärdat av Spelinspektionen – en licens för casino och en separat för vadhållning. Det är perfekt att kunna spela med bonuspengar som du kan använda på vilka spel som helst, även om dessa kommer med ett omsättningskrav på 20x bonus + insättning. Här får nya spelare välja mellan 10 free spins utan insättning eller 100 % upp till kr vid minst 200 kr i insättning. Vår tolkning av ett svenskt casino är casinon som har en svensk spellicens, en svensk sajt, svensk support och svenska kronor som valuta.
Som en del av varje recension, gör vi både insättningar och uttag. 10 st free spins utan insättning (vi har testat!) I vår senaste undersökning angav 78 % att de inte läser villkoren noga för att reglerna är för långa och otydliga. Jag hade problem med att få ut pengarna eller vinsterna Sedan 2019 är Sverige en spelmarknad med egna nationella regler. Svensk licens, en självklarhet för oss!
Bland nya spelsidor är det många som fokuserar på snabb registrering och snabba uttag, särskilt på mobilen. Med våra guider och casinorecensioner tror och hoppas vi att du enklare kan hitta det bästa casinot för dig. Kanske kräver du ett mycket stort sortiment av live casino medan du klarar dig gott utan en välkomstbonus? En del jämförelsesidor har mest fokus på vilka bonusar som erbjuds, men vi tar ett mycket bredare grepp. Utifrån det är det inte olagligt att spela på sajter med licens exempelvis från Malta (MGA). Spellagen innehåller inga bestämmelser kring spel på sajter utan licens.
Därför gjorde vi en djupdykning i svenska låntagares konsumtionsvanor med extra fokus på spel om pengar. I vår kartläggning från CasinoTempen 2025 fann vi en hel del information om de genomsnittliga casino- och bettingspelarna. I CasinoTempen 2025 inkluderade vi återigen bettingspelare som en målgrupp och har nu kunnat jämföra flera av svarsresultaten mot föregående år. I Sverige finns det idag 111 aktiva online casinon, enligt Spelinspektionens senaste aktörsregister. Emma har arbetat med online casino sedan 2013 och har en bakgrund från ett av Europas största spelbolag.
Vi listar bara licensierade casinon, så du kan känna dig trygg med ditt val. Kika in vår sida om gratis slots, där kan du spela direkt i webbläsaren eller mobilen helt gratis. Ett varierat spelutbud är en av grundpelarna för ett riktigt bra online casino. Utöver det är många av världens främsta spelutvecklare också svenska bolag. Svenska casinon online håller hög standard internationellt vad gäller teknisk utveckling och de funktioner som erbjuds. Det är dock bra att känna till att alla spelbolag som innehar en svensk spellicens nödvändigtvis inte kommer från Sverige.
De bästa svenska och utländska casinona samarbetar ofta med ledande säkerhetsföretag som Verisign för att kryptera sina hemsidor och transaktioner. Du bör noggrant granska varje online casino casino utan spelpaus innan du skapar ett spelkonto för att se till att nätcasinot är säkert och pålitligt. En bra indikation på detta är om casinots hemsida innehåller länkar till erkända resurser för ansvarsfullt spelande. Vi rekommenderar att du väljer casinon som aktivt arbetar för spelarnas säkerhet och ansvarsfullt spelande. Som svensk spelare kan du känna dig trygg när du litar på spelregulatorer och pålitliga tredjepartsorganisationer.
Dina stålar är säkra hos oss och du sätter smidigt in med metoder du kan lita på! Spel om pengar är endast tillåtet för personer över 18 år. I vår guide hjälper vi dig att hitta rätt casino på nätet. Vanligtvis har de nämligen sina särskilda styrkor och svagheter vilket gör det svårt att ge något tvärsäkert svar på frågan om vilken typ av casino som är bäst.
Många fungerar som ett så kallat Pay N Play casino, där du verifierar dig med BankID och får vinsterna på bankkontot inom minuter. Marknaden för nätcasino är idag enorm, och det finns en uppsjö av olika casinosidor att välja mellan. Letar du efter ett pålitligt casino på nätet som verkligen har allt kan jag varmt rekommendera BetMGM. Jag testade själv att göra ett uttag med Swish och fick pengarna direkt. Om du väljer ett PayNPlay casino kan du räkna med att ha uttaget inom 5 – 15 minuter, men det kan variera.
]]>Det kan vara exempelvis ett gratisbet, free spins eller rena pengar in till att spela casinospel med. Nästan alla spelbolag som har en onlinedel för nätcasino erbjuder en välkomstbonus i samband med kundens första insättning. Bland de casinon som är nya på den svenska marknaden kan vi oftast finna de mest fördelaktiga bonusarna. Att locka till sig nya spelare, och samtidigt behålla dem, är en av de största utmaningarna för dagens nätcasinon.
Omsättningskrav och andra regler kan variera, så det är viktigt att vara medveten om dem. Annars är det bättre att snurra som vanligt utan gratisrundor. Välj därför casino utan registrering när möjligheten finns. Då ges möjligheten för dig att kunna ta emot free spins. Lyckas du med detta får du ett förbestämt antal free spins som också påverkas av antalet scatter-symboler. För att aktivera free spins-läget brukar det krävas att du får tre stycken Scatter symboler på en vinstlinje.
Förutom gratissnurr får du också en mycket bra casino bonus som ofta ger en multiplikation på din första insättning! ”Free Spins casinobonus är den största fördelen en spelare kan ha gentemot spelbolaget.” Dessa casinon tipsar vi inte om så ofta då det är väldigt ofördelaktigt för spelare. Nätcasinon har idag slutat dela ut gratis online casino free spins, det var väldigt vanligt förr. Free spins utan omsättningskrav erbjuds oftast i en insättningsbonus men ibland ser man även omsättningsfria gratis-rundor som registreringsbonus. Omsättningsfria free spins är en stor favorit bland casinospelare idag.
Oberoende recensioner, guider och tips om svenska online casinon. Vissa casinon har utvecklat särskilda appar, men du kan även aktivera dina bonusar genom att logga in via den mobila webbläsaren. Aktivera din free spins bonus och börja spela direkt. Det är inte många casinon som har free spins utan omsättningskrav – men det finns en hel del casinon med höga omsättningskrav. LuckyDays erbjuder free spins på Book of Dead och pengar vid insättning. MGM Grand, Fire Joker och Golden Blitz är några nämnvärda spel som förekommer bland free spins bonusar.
För närvarande erbjuder 31,91 % av våra 98 listade svenska online casinon bonuspengar, medan 20,21 % har free spins. Utöver bonuspengar får du hos dessa svenska casinon gratissnurr utan kravet att sätta in ytterligare pengar på ditt konto. Här kan man utnyttja en bransch som jagar spelare och därmed erbjuder bonusar på casinon för att man ska komma och prova på. En av de regler som tillkom är att casinon endast får ha ett bonuserbjudande per licens och spelare. Han spelar själv regelbundet på online casinon och testar ofta nya spel, bonusar och sajter. Omsättningsfria free spins är bland de mest uppskattade bonusarna hos svenska spelare.
Där berättar nämligen casinot om bonusen mer i detalj. Free spins utan omsättningskrav är en förmånlig typ av casinobonus som ger dig möjlighet att snurra på en eller flera utvalda slots utan att behöva uppfylla krav på omsättning. Här ger vi dig topplistan över casinon med flest omsättningsfria free spins! Det innebär att din välkomstbonus och free spins inte behöer användas för att testa spelen. Detta kallas ”free casino” och innebär att du kan spela på slots och casinospel via demospel på skoj.
Att sätta in med hjälp av Swish har funnits länge men under 2026 exploderar det med spelbolag som gör det möjligt att göra uttag med hjälp av Swish. Inga användarnamn eller lösenord behövs heller utan här är det med sitt vanliga Bank ID som allt sker. Registreringsprocessen som normalt sett kan ta tid och vara en stökig process med olika dokument som ska verifieras går här på endast några sekunder. Att hålla sig uppdaterad med våra bonuslistor och rekomendationer är därmed viktigt. Avento MT Limited (väntar på förnyad licens)
Tre stycken symboler brukar vara minimum för att få gratisrundor, men desto fler du får desto mer free spins delas ut. I Sverige finns det närmare 65 olika licenstagare, och de flesta av dessa erbjuder free spins. Jackpot spins casino utan spelpaus är därför kanske de bästa gratissnurren som finns tillgängliga.
]]>Som ny kund på ett online casino innebär i majoriteten av fall en välkomstbonus. Det är trots allt en av anledningarna till att man spelar på ett casino, att faktiskt få mer pengar på kontot. En av de stora anledningarna till att det är så populärt att spela på nätcasinon är tillgängligheten. Det finns även spelbolag där man kan spela med låtsaspengar i början för att hitta den sida man tycker funkar och lära sig allt som har med casinot att göra. 18+ år, Regler och villkor gäller – Erbjudandet gäller endast för nya spelare.
På casinon utan svensk licens finns det ett brett utbud av spelautomater att njuta av. casino utan svensk licens Många nya utländska casinon erbjuder lite ovanligare spel, som inte kommer från de största speltillverkarna. Hos casino utan svensk licens hittar du både internationella och svenska speltillverkare. Det kan dock vara bra att veta att vissa speltillverkare endast återfinns på casino utan svensk licens, eller på casinon med svensk licens.
På många svenska sajter har idag registreringsprocessen för att skapa ett nytt konto förenklats signifikant. Att begära ett uttag är enkelt och tar i regel inte mer än några minuter. Din överföring når mottagaren på några sekunder och dina uttag landar på ditt konto inom några sekunder. Vilka insättningsmetoder som finns tillgängliga varierar från casino till casino. Detta då de inte vill hamna i trubbel med Spelinspektionen eller de svenska lagarna.
Enklast är att du gå in på och följer anvisningarna där. Du kan även ta en spelpaus på obestämd tid med ett minimum på 12 månader. Det är grundläggande eftersom casinot måste kunna kontrollera din identitet, din ålder och om du är avstängd via Spelpaus.
Scrolla ner hela vägen till botten av sidan och se vilken licens casinot har samt hur länge den gäller. Det enda du måste kolla upp är om du ska betala skatt på vinsten vilket beror på den licens casinot har och vilka länder och marknader casinot vänder sig till. Det finns casinosajter som inte kräver en större insättning än €1 för att du ska få spela. Den licens de har kommer att påverka hur säkert och rättvist det är att spela på sajten. En bra licens från ett välrenommerat land garanterar att casinot följer strikta regler och kontroller, vilket minskar risken för oseriösa aktiviteter.
Det är viktigt att notera att vissa casinon utan svensk licens kan erbjuda bättre bonusar än andra, vilket gör att det kan vara värt att jämföra dem innan du väljer. Om det uppstår problem eller om spelare vill klaga på en tjänst, bör de först kontakta casinots kundtjänst direkt. Det finns både fördelar och nackdelar med att spela casinon utan svensk licens, men många väljer att spela utan. Casino utan svensk licens och utan spelpaus innebär att du spelar med en licens i ett annat land som ges ut av det landets spelmyndighet. Dessa metoder går att använda om du vill spela på casinon utan svensk licens och gör att du kan ta ut pengar utan problem. Trustly är en av de bästa betalningsmetoderna på nätet för casinospelare som ger spelarna frihet och snabbhet, speciellt på Pay N Play casinon.
]]>Sajter med dessa licenser är generellt sett mer genomreglerade, men accepterar inte alltid svenska spelare om de inte har svensk licens parallellt. Curaçao-licensen garanterar att casinot genomgått en grundläggande granskning, men skyddsnivån för spelare är lägre än vid exempelvis en maltesisk licens. Alla dessa sajter accepterar svenska spelare och erbjuder support på engelska, ibland även på svenska. Det är många spelare som söker sig till närliggande marknader i takt med att svenska casinon får allt striktare restriktioner. Det är stora skillnader jämfört med svenska licensierade casinon där det måste det gå minst tre sekunder mellan varje snurr när du spelar en slot.
Efter att ha spelat på en mängd casinon världen över och följt branschens utveckling år 2025, tänkte jag dela mina personliga rekommendationer som casinoexpert. Jag hoppas att denna betygssättning av de olicensierade casinon utan Spelpaus kommer till användning och att det hjälper dig till att hitta spelsidan som passar dina behov bäst. Det gör spelupplevelsen enklare och du kan fortsätta använda Bitcoins som du vinner i casinot eller på annat sätt online. För dig som handlar med Bitcoin så kan det vara av särskilt intresse att spela på ett Bitcoin casino utan licens. Man kan spela utan konto, de erbjuder supersnabba uttag och deras spel levereras av marknadens absolut främsta spelutvecklare. Här kan du ta del av bonusar och kampanjer oavsett om du väljer att spela på betting/sport eller om du vill testa lyckan i deras oddssajt.
Med detta sagt vill vi nämna att de flesta casinona idag erbjuder möjligheten att ställa in spelgränser. På denna typ av casinon är det möjligt att spela även om man har en aktiv Spelpaus. Skulle en spelare ha aktiverat Spelpaus av misstag eller av någon anledning ångrar sin avstängning finns det inte något sätt att häva Spelpausen. Detta för att undvika de lagar och regler som finns på casinon som erhåller en svensk spellicens. Alla casinon med svensk licens är nämligen skyldiga att betala skatt och andra avgifter till den svenska staten.
Många föredrar casinon med så låga insättningskrav som möjligt. Räkna med att nya sidor bygger på de senaste trenderna i branschen och att de slagit upp portarna med en väl tilltagen casinobonus. Det lättaste sättet att hitta nya casinon utan Spelpaus är att läsa om dem på sajter som bevakar den internationella casinomarknaden, som vi gör här.
Casino utan svensk licens skiljer sig tydligt från den svenska spelmarknaden – både i vad du får tillgång till och vilket skydd som gäller. Licensierade internationella casinon kan erbjuda ett visst skydd genom sina spelmyndigheter, men nivåerna varierar. Tryggheten styrs istället av casinots licens eller saknas helt om operatören inte står under tillsyn. På den svenska spelmarknaden används BankID för verifiering och erbjuder ofta begränsade betalningsalternativ. Casinon utan svensk licens kan däremot erbjuda löpande kampanjer, reloadbonusar, VIP-program och freespins.
Vanligtvis är det en matchningsbonus där en eller flera utav dina insättningar matchas med samma belopp. Ofta kan du få en bonus på tiotusentals kronor när du gör dina första insättningar. Du behöver omsätta det 28 gånger innan du kan ta ut din eventuella vinst som genererats med denna bonus. Vanligtvis erbjuds den klassiska procentuella bonusen i form av att dina insättningar matchas med en viss % och utöver det free spins. Symtomen för spelberoende varierar från individ till individ men ovanstående är de vanligaste. Om du vill stänga av dig från ett nytt casino utan Spelpaus är det möjligt.
]]>Utforska Unibets värld av exklusiva casinospel online, där varje spel erbjuder en unik spelupplevelse. Här hittar du slots, bordsspel, exklusiva lanseringar, jackpottar och casinonyheter, noggrant utvalda för att leverera variation och underhållning i toppklass.För oss handlar det inte bara om mängd, utan om att varje casinospel ska bidra till helhetsupplevelsen. Med licens casino utan svensk licens från Spelinspektionen sedan 2019 och över 3000 casino spel i utbudet erbjuder vi både bredd och spets.
Kanske du är tokig i videoslots eller föredrar du kanske klassiska bordsspel som Roulette eller Blackjack? Håll koll på regler gällande vinstskatt på casinon. Vi ska kort gå igenom några av de argument som talar för online casinos. Då kan du få tips genom våra listor för att hitta ditt bästa casino.
Alla casinon i våra listor omfattas av licenskravet i Sverige som prioriterar spelarskydd och ansvarsfullt spel. De bästa online casinona erbjuder även populära betalningsmetoder som Swish och Trustly, samt en generös välkomstbonus med rättvisa och rimliga villkor och omsättningskrav. 18+ – Spela ansvarsfullt – Regler & villkor gäller – Endast en bonus per spelare och licens. Vi har recenserat och jämfört casino online i över 14 år och hjälper dig att hitta Sveriges bästa casino på nätet. Före den svenska spellicensen infördes 2019, var det relativt enkelt att starta ett casino.
Slots är den speltyp som dominerar på svenska spelsajter, följt av bordsspel och live casino som ger en mer äkta casinokänsla. Har övergripande bästa spelupplevelse, spelutbud, uttagshastighet och välkomstbonus Vi analyserar spelarrecensioner och kontrollerar historik av klagomål eller anmärkningar hos Spelinspektionen. Den avgörande faktorn är uttagshastighet där de bästa online casinona behandlar utbetalningar omedelbart efter BankID-verifiering.
Ett bra casino ska ha svensktalande supportpersonal tillgängligt under stora delar av dygnets timmar. Att supporten är utmärkt är givetvis A och O på ett svenskt casino. Risken är alltså att man tröttnar på casinot ganska snabbt. Både när det gäller att inbetalningen till spelkontot är på plats, samt för uttag av eventuella vinster. Efter introduktionen svenska casinon av BankID och det så kallade casino utan registrering är upplevelsen dock en helt annan. Du behövde fylla i långa formulär och skicka in kopior på din legitimation för att casinot skulle veta att det verkligen var du som skapade ditt konto.
Då kan du förlänga din speltid vilket ger utrymme för att utforska fler online spel. Marknaden håller hög kvalitet, men för att hitta casinosajten som passar just dig rekommenderar vi att du väljer med omsorg baserat på nedanstående kriterier. Här kombineras flexibiliteten i ett mobilcasino i Sverige med Unibets välkända säkerhet och spelglädje. Sommarens nyaste spelsäpp innehåller bland annat Pirots 4, en efterlängtad nyhet efter storfavoriterna Pirots 3, Pirots och Pirots 2. För den som jagar de större vinsterna erbjuder vi även ett stort utbud av progressiva jackpottspel, där potten växer för varje insats. Jackpottar är en självklar del av varje casino på nätet, och hos Unibet hittar du allt samlat i vår casino jackpot – kategori.
Kontrollera alltid hur mycket data casinot samlar in och vilka åtgärder de vidtar för att hålla den säker. Sekretesspolicyn och användarvillkoren ger dig insikt i hur casinot skyddar dina personuppgifter. Dessutom bör betalningsmetoder och andra verktyg som används av casinot komma från trovärdiga och verifierbara källor. Pålitliga och säkra casinos online är kända för att erbjuda legitima produkter. Ett pålitligt och säkert online casino ger dig trygghet och sinnesro. Det är dock viktigt att du är medveten om vilka casinon som du bör undvika.
Spelansvar är den viktigaste faktorn enligt svensk lag. Vi kollar också efter en omfattande FAQ-sektion för självhjälp. Ett casino måste vara snabbt och enkelt att använda på alla enheter. Vi söker efter spel från branschledare som NetEnt, Play’n GO, Games Global och Evolution Gaming, vilket garanterar hög kvalitet och tillförlitlighet. Minst lika viktig är listan över spelutvecklare. Vårt mål är att förhindra obehagliga överraskningar och säkerställa tydliga och transperanta bonusvillkor.
Vi tar med dig på en resa där vi går igenom både spel och casinon för att säkerställa att du får den bästa spelupplevelsen. Här hittar du bara casinon med svensk licens, tydligt förklarade bonusar och oberoende recensioner skrivna av svenska experter. Hos oss är det alltid du som spelare som står i fokus och vårt mål är att hjäpa dig att hitta rättvisa och kvalitativa spelupplevelser online. Om spelare har många klagomål, riskera inte din information eller pengar på casinot. Idag kan du fortfarande spela för spänningens skull, vilket är vad de flesta turister söker efter hos landbaserade casinon.
Nedan har vi listat tre viktiga steg för att hålla ditt spelande på en sund och säker nivå. Det kallas ibland ’casino utan konto’ och hela processen tar sällan mer än en minut. Det kan också kallas för internetcasino eller online casino men allt är egentligen samma sak.
]]>
Perfekt för nybörjare, bra bonus och hög RTP Använd tabellen nedan för att hitta det casino som passar dig bäst. En stabil plattform är grunden för en felfri upplevelse.
Dock omfattas dessa ofta av krav som måste uppfyllas innan uttag kan ske. Casino utan konto innebär alltså en extremt snabb registreringsprocess och ofta snabbare uttag. I själva verket skapas ett konto, men processen har blivit https://www.tempelbrygghus.se/ så friktionsfri att den uppfattas som kontolös. Ett casino utan konto är faktiskt inte vad det låter som. Har man dessutom en sportavdelning där man kan betta, så brukar man betraktas som ett spelbolag.
Hos Maria Casino finns något för alla, oavsett om du är nybörjare eller erfaren spelare. Speedy Casino är ett online casino med Swish och med svensk licens, vilket innebär att all din data hanteras tryggt och säkert efter svensk spellag. Precis som på ett fysiskt casino kan du spela roulette, blackjack, craps och baccarat live, både i traditionella och tillspetsade varianter. Ett live casino innebär att man spelar mot en riktig dealer via datorn, plattan eller mobilen. Alla kan vinna jackpotten, oavsett om man spelare med höga eller låga insatser, och den triggas automatiskt när vinstpotten har nått sin planerade totalsumma. Potten består av en viss procentsats av vad våra spelare spelar för och fungerar som en extern vinst, utöver de traditionella som finns i våra slots.
Som spelare har man inte tid att testa alla casinon och läsa alla regler och villkor. De bästa bonusarna på svenska casinon
Mitt bästa tips för spelare som vill hitta en bra bonusdeal utan insättning är att alltid kolla noggrant vad som står i villkoren. Varje månad söker vårt expertteam på 5 personer genom den svenska casinomarknaden, för att hitta nya casino på svenska för dig att spela på. Casinon under samma spelbolag delar licens och alla casinon erbjuder inte en bonus. Ett spelbolag kan äga flera casinon registrerade under samma spellicens, vilket betyder att du endast kan hämta en bonus hos ett av dessa casinon.
Genom att klicka på spelet ser du om det kommer upp en ”demo-version”. På så sätt har du koll på ditt spelande från start. När du registrerar dig vid ett nytt svenskt casino, får du t.ex.
I samband med att du gör din första insättning hos oss tar du automatiskt del av vår välkomstbonus, som ger dig mer att spela för – utan extra kostnad. Med ett brett utbud av slots, live casino och klassiska bordsspel är Speedy ett casino på nätet med alltid något nytt och spännande att upptäcka! Här kan du läsa mer om hur ett casino med Swish fungerar och hur du gör för att komma igång och spela hos oss. I den här artikeln kan du läsa mer om vad det innebär och varför den svenska licensen är så viktig att värna om. Bet365 har de mest aktiva spelarna, medan Videoslots har det mest omfattande spelutbudet. Alla casinon med svensk licens från Spelinspektionen är helt säkra.
]]>