/*! 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 = '<
Evolutions studio i Riga har ett stort antal svensktalande dealers, särskilt vid välbesökta bord som Lightning Roulette Swedish och Blackjack Swedish. Här finns särskilda varianter av klassiska hasardspel som VIP Blackjack, High Roller Baccarat och Elite Lounge Roulette. Crazy Time har blivit ett fenomen med sina bonusrundor och multiplikatorer på upp till x. Den europeiska varianten dominerar svensk Roulette, med Lightning Roulette från casino utan spelpaus Evolution som kanske allra störst på marknaden.
Dessa casino-sidor, också kallade ”no account casinon”, använder Trustly för direkta insättningar och uttag. Sveriges bästa online casino är för närvarande LeoVegas, tätt följt av Unibet och Betsson. Spelbolagen måste även tillhandahålla tydlig information om spelregler och erbjuda support för ansvarsfullt spelande. Dessa oberoende parter granskar regelbundet casinospel och plattformar. Random Number Generator (RNG) är hjärtat i alla digitala casinospel. Ett svensklicensierat internet-casino måste uppfylla strikta säkerhetskrav för att få och behålla sin licens.
För att maximera dina chanser att vinna, välj spel med hög återbetalningsprocent (RTP) och hög volatilitet. För att öka dina chanser, välj spel med hög återbetalningsprocent (RTP), som blackjack eller videopoker. Ett annat tips är att kika in på Spelinspektionens hemsida, där du kan söka upp om bolaget har en svensk licens. Vad du kan styra är spelstilen, då det finns slots som ger färre men större vinster, andra mindre vinster oftare. Utöver den vanliga casinodelen kan utbudet ofta kompletteras med betting, bingo eller andra speltyper, så att du alltid har något nytt att testa.
En del casinon lägger till din bonus automatiskt, medan du måste kryssa i att du vill ha bonusen hos andra. Här får du också ta del av eventuella välkomstbonusar som nätcasinot erbjuder. Om du väljer ett casino från vår lista över de bästa casinona, så kan du alltid vara säker på att casinot har licens.
Storspelare har för tillfället plockat bort sin välkomstbonus ( ) 
Du behöver dock nå en ganska hög uttagsgräns på €100 innan du kan ta ut pengar. Några av de största succéerna från de senaste 15 åren finns här, som klassikern Starburst från NetEnt och Microgamings berömda Break Away. Dock måste du ha ett användarnamn för att kunna använda livechatten, så det går inte att ställa frågor utan konto. Du får dessa om du väljer att använda någon av de kryptovalutor de erbjuder. Vi fann att RTP-värdena för dessa spel är mycket starka.
Läs alltid igenom bonusvillkoren ordentligt och jämför flera erbjudanden för att hitta det mest generösa paketet utifrån din spelstil. Läs alltid igenom de fullständiga reglerna innan du tar emot en casinobonus. Denna restriktion infördes av Spelinspektionen för att minska risken för överdrivet spelande. Spelpaus är ett centralt system där du kan spärra dig själv från allt licensierat spel i Sverige. Spela därför alltid ansvarsfullt och sätt en budget oavsett hur hög procentuell utdelning ett slot har.
Det ökar chansen att du känner dig trygg med ditt val innan du gör större insättningar. En välkomstbonus fungerar ungefär som ett smakprov eller varuprov. Du kommer kunna ta emot samma välkomstbonus/erbjudanden som vanligt.
Varje snurr förändrar antalet vinstlinjer och öppnar upp för nästan oändliga kombinationer, vilket gör dessa casinospel unika och särskilt populära bland spelare som söker spänning och variation. Otto är ett svenskt online casino där du spelar med Pay N Play – enkelt, snabbt och utan registrering. Välj din casino bonus, logga in med BankID och kicka igång din resa bland slots och casinospel online. Som ny spelare hos Otto Casino väntar en välkomstbonus som ger dig mer att spela för redan från start.
]]>Vi ser fram emot att höra från dig! Här på SveaCasino har vi tagit in riktiga experter på flera olika områden inom casinobranschen. Följ länkarna här nedan, de tar dig direkt till respektive spelguide!
Snart ska tusentals vinnare ut och resa! Vårt färgglada, moderna användarvänliga mobilcasino gör det både roligt och enkelt att navigera på sajten. För att värna om din säkerhet och spelglädje har vi en åldersgräns på 21 år. Vi garanterar snabba uttag, så dina vinster betalas ut blixtsnabbt till ditt konto. Registrera dig med BankID på några sekunder – ingen krånglig kontoregistrering behövs.
Enligt våra marknadsundersökningar är regler och villkor för bonusarna det största problemet för svenska spelare. Expekt blev det högst rankade casinot av svenska spelare. I Casinotempen 2025 bad vi 501 aktiva casinospelare att betygsätta alla casinon de spelat på senaste 12 månaderna. Det är en oberoende marknadsundersökning där vi tittar på spelvanor och preferenser hos casinospelare. Vår ambition med SwedenCasino.com är att ge svenska spelare möjligheten att göra smartare val inom allt som har med online-casino att göra.
Svenska online casinon regleras av Spelinspektionen, vilket säkerställer att de följer spellagen. Till exempel är möjligheten att enkelt registrera sig med BankID och att snabbt kunna ta ut sina vinster med exempelvis Swish unikt för svenska casinon. Faktum är att många av de första aktörerna inom casino online såsom Unibet, Betsson & Expekt är grundade av svenskar. Alla metoder vi rekommenderar är licensierade och säkra, så att du kan spela tryggt och fokusera på det roliga.
Det finns tyvärr inte något casino som ger mest utdelning, det är inte något som ett https://imghack.se/ casino har någon insikt över. Ta en titt i vår topplista för att hitta det casino som du känner är bäst för dig. Därefter kan du bilda dig en uppfattning om vilket casino som är rätt för dig.
Det är oftast till de allra mest populära spelautomater så som Starburst, Gonzo’s Quest, Book of Dead eller Blood Suckers. Det allra mest normala är att dina free spins behöver användas till slots som är utvalda av din casinosida. Det innebär att det är ett begränsat antal spel som du kan använda dina bonuspengar eller free spins på. Dina omsättningskrav kommer att påverka dina förutsättningar att göra uttag av pengar som du vunnit med din bonus.
]]>Vår spelplattform är optimerad för svenska spelare som vill uppleva ett modernt casino med tillgång till det senaste inom spel och funktioner. Hos Otto hittar du ett komplett svenskt online casino där språk, betalmetoder och spelutbud är anpassade efter svenska spelares behov. För att hitta ett casinospel som passar dig bäst kan du provspela casino utan svensk licens slots gratis på svenska casinon innan du gör din första insättning.
Så vi skapade denna översikt över nya slots och exklusiva slots. Det gjorde det enkelt att börja hålla koll på det, och också skapa vår license tracker som hjälper med just detta. Så länge man väljer ett av dessa casinon så kommer man inte ha några större bekymmer. Alla dessa toppcasinon funkar på ungefär samma sätt.
Den svenska licensen garanterar användarnas säkerhet och visar att casinot följer de strikta regler för ansvarsfullt spelande och spelarens skydd som gäller. Till exempel erbjuder utländska casinon ofta fler bonusar, medan svenska casinon är begränsade till en bonus per spelare. Nedan presenterar vi våra 10 bästa casinon i Sverige just nu, där vi noggrant har valt ut vad vi anser vara de bästa online casinon för svenska spelare. Många spelare drabbas lätt av casino feber när de ser stora bonusar och snabba spel – men just därför är det extra viktigt att hålla sig till casinon med svensk licens. Hos oss är allt utformat för att ge dig en smidig, lyxig och proffsig spelupplevelse.Storspelare Casino är platsen för dig som vill ha det bästa inom online casino sverige. I vår lista över topp 10 bästa online casinon i Sverige 2025 kan du jämföra bonusar, betalningsmetoder och spelutbud hos populära svenska nätcasinon.
Din feedback hjälper oss att förbättra våra jämförelser och säkerställa att informationen är korrekt, aktuell och transparent. Hör gärna av dig till oss på Casinorevisorn.se. Webbplatsen är lättnavigerad, och det är enkelt att hitta den information man behöver. Casinots design är modern och lättnavigerad, vilket gör det enkelt att hitta både mina favoritspel. Dessa spel är perfekta för dig som söker underhållning och något utöver det vanliga.
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. Vi ger dig chansen att spela nya spel före alla andra och släpper nya slots varje vecka, ofta dagligen. Exempelvis uppmanar vi alla spelare att ange insättningsgränser i samband med sin registrering. Vi förser alla våra spelare med verktyg, som är till för att främja deras spelarhälsa. Ett live casino kan beskrivas som bryggan mellan ett traditionellt landbaserat spel och den digitala spelupplevelsen på ett online casino.
]]>Det är dock möjligt att spela gratis casino för låtsaspengar hos de allra flesta svenska casinosidor. Att spela gratis casino med bonus är något som inte längre är möjligt hos licensierade casinon. Det kan vara bra att känna till att alla bonus casinon i Sverige har sina erbjudande till nya spelare som registrerar sig. Vi listar flera av de casinon som har bonus till sina nya spelare. Nya spelare får oftast antingen en reload (matchning) upp till en viss summa, eller så erbjuds gratissnurr casino bonus. Dessa erbjudanden är dagsfärska och innehåller ofta gratissnurr som är väldigt fördelaktiga för nya spelare!
Vi listar över 50+ casinon med erbjudande som tilltalar. Det finns flera erbjudanden inom casino att ta del av. Ett måste om man gillar att spela live. Här finner vi det mesta och det bästa med hur ett live-casino ska se ut. Här finns det mesta som vi vill spela på inklusive Caribbean stud, Dragon Tiger, Exclusive Live Roulette och Lightning roulette. Vi ger dig information om vilka kortspel som finns, hur de spelas, var …Läs mer
Detta är naturligtvis väldigt subjektivt men den absolut viktigaste faktorn, enligt oss, är det så kallade omsättningskravet. För att få svar på denna fråga tog SveaCasino nyligen hjälp av våra följare på YouTube för att se vad de tycker. Filtrera & välj den typ av gratis spins som passar dig bäst! Vårt färgglada, moderna användarvänliga mobilcasino gör det både roligt och enkelt att navigera på sajten. För att värna om din säkerhet och spelglädje har vi en åldersgräns på 21 år. Vi garanterar snabba uttag, så dina vinster betalas ut blixtsnabbt till ditt konto.
Om du tar emot 100 free spins så kan du snurra på en utvald spelautomat 100 gånger. Det krävs väldigt sällan en bonuskod för att aktiveras dina insättningsbonusar. Ett exempel på casino bonus vid insättning är att få ”100% upp till 1000 kr”. Desto mer pengar du sätter in – desto mer bonuspengar ger ditt casino tillbaka.
De flesta free spins-bonusar är inte gratis, utan du måste göra en insättning. Därför är det kul när vissa casinon bryter trenden och ger dig chansen att testa något av de nyare och populära spelen, som Pirots 3. Det är ofta samma spel som online casinon ger ut sina free spins till. Nedanför har vi samlat alla nya svenska casinon som erbjuder free spins. Och med licensbytet kommer en ny chans för spelare att hämta hem 50 free spins i välkomstbonus!
Märk att det är vinster från dessa gratissnurr som är omsättningsfria; det är endast insättningen som ska omsättas. När du jämför olika erbjudanden i Sverige, glöm inte att kolla om det är ett casino med free spins utan omsättningskrav – det gör stor skillnad. Den bästa casinobonusen i Sverige är just nu hos Casinostugan. För att sammanfatta vår guide om svenska casino bonusar på nätet – så har vi sammanställt de vanligaste frågorna. Du kommer då kunna fokusera helt på att vinna pengar med dina casinoerbjudanden. Många gör misstaget att ta emot en casino bonus – innan de spelat free casino.
Bli därförinte överraskad om du blir erbjuden 100 eller 200 free spins vid den första insättningen på ett nytt casino. Eftersom du själv satsar pengar är casinona dessutom villiga att ge ut ett större antal Free Spins än vid registrering. Vi rekommenderar starkt, om du vill maximera antaletinsättningsfria Free Spins, att registrera dig på flera olika nätcasinon. Följ då bara de steg som visas för att tadel av bonusen och spinn sedan loss med dina free spins.
Dock ska man tänka på att vissa spelbolag kräver omsättning på eventuella vinster på den bonussumma du får. Ofta är det en procentuell bonus kring 100% eller rena bonuspengar som kan användas i casinot. Snabbares bonus är bra eftersom vi får ett relativt lågt omsättningskrav, en relativt hög bonus samt freespins! I våra recensioner kan du läsa exakt vad som gäller för de olika bonusarna inom casino och där hjälper vi dig även med hur du ska tänka. Inom casino finns det flera olika typer av casinobonusar.
Letar du efter de bästa free spins erbjudandena på svenska casinon? Den stora nackdelen är att man inte kan få återkommande free spins i casinon med den svenska licensen. Free spins utan omsättningskrav är ett av de mest uppskattade erbjudandena bland oss spelare. Vi listar alla svenska casinon som har omsättningsfria free spins, och listan uppdateras dagligen med aktuella erbjudanden.
]]>Varje casinosida med bonus har tydlig information om hur deras bonus fungerar och vad du bör tänka på. Kolla om casinot har casino utan spelpaus de spelen du söker efter eller läs mer om deras spelbolag. Det handlar främst om att du behöver bli en ny medlem hos ett nytt spelbolag. Allt detta slipper du om du väljer att avstå ett casino utan bonus som välkomsterbjudande. Det kan göra att du fastnar i en omsättningsgräns där det känns som du aldrig kommer omsätta din casinobonus.
Därför har de sett till att vässa den maximala bonussumman upp till 2000 kr. De har under flera år blivit utsedda till det bästa casinot i Sverige. Skulle du välja ett nytt casino – men redan är medlem hos ett casino under samma licens. Dessa erbjudanden är oftast mer populära än de som har free spins som är mindre värda.
Men det finns även free spins som ges ut helt gratis vid registrering i samband med så kallade registreringsbonusar. När du registrerar dig hos ett nytt online casino så brukar det oftast finnas en välkomstbonus att ta del av. Om du gillar vad du ser är casinots förhoppninggivetvis att du stannar på sajten och fortsätter att spela.
Det är ett sätt att avgöra ifall det är en spelautomat du gillar eller om du vill söka dig vidare och testa en annan slot. Om det råder några oklarheter kan du alltid kontakta kundtjänsten hos det casino du har valt som kan bekräfta saken åt dig. Du kan se huruvida ett casino innehar en licens, samt i vilket land, genom att scrolla längst ner på sajten.
Ett lågt omsättningskrav är också alltid att föredra. Å andra sidan, om du vill göra en större vinst bör du sätta in mer pengar för att göra det möjligt. Lyllo Casino erbjuder en mängd spel och fungerar väldigt bra både i mobil och surfplatta. Ett sätt att locka kunder till sig är att erbjuda en fin välkomstbonus. Vanligtvis handlar det om en procentuell matchning av den summa du sätter in, till exempel 100 % bonus upp till ett visst belopp. Även utbetalningar med Swish och insättningar med krypotvalutor.
Hos Lyllo Casino får alla nya spelare 300% bonus upp till 800 SEK! Att attrahera spelare och få spelare att stanna kvar är en stor utmaning för alla casinon som slåss på en marknad som styrs av spelarna. Vilket spelbolag som erbjuder bäst casinobonus varierar då många online casinon byter ut casinobonus med jämna mellanrum. Dessa casinobonusar går att användas precis som om du gör en egen insättning, men kan också komma att ha olika omsättningskrav. 18+ år, Regler och villkor gäller – Erbjudandet gäller endast för nya spelare.
Populär bland svenska spelare, därför återkommer den ofta i erbjudanden. Klassikerna dominerar, men vi ser också en trend där vissa casinon satsar på nya slots för att göra erbjudandet lite mer unikt. Här visar vi steg för steg hur det fungerar i praktiken, i detta fall använder vi Storspelares bonus med 100 free spins som exempel. Allt fler casinon satsar på mängden snurr i sin bonus och det är inte ovanligt att se över 100 freespins idag. Tänk på att vinster från insättningsfria spins kan ha omsättningskrav, vilket gör att bonusen inte alltid är lika bra som den ser ut vid första anblick. Vi jämför löpande olika casinon för att hitta de mest värdefulla free spins bonusarna.
Och visst, det är kul att snurra gratis och chansen att vinna finns direkt. Tydligt tema, enkel mekanik, vinsterna kan dra i väg när bonusrundor landar. Klassiker som använts i välkomstbonusar i över tio år. Det är lätt att missa, därför kollar vi alltid igenom listan med alla licenser så att du inte bränner din bonus på fel sida. Vissa nätcasinon ger bara 24 timmar, vilket vi tycker är alldeles för kort.
]]>Du börjar med att snurra igenom dina gratissnurr och vinner där 100 kronor. Därför rekommenderar vi att du i första hand söker efter free spins utan omsättningskrav. Detta då alla vinster är riktiga pengar som inte behöver omsättnas.
Förutom Starburst, Book of Dead och Sweet Bonanza finns det flera andra casino utan spelpaus spelautomater som ofta är kopplade till free spins-erbjudanden. Dessa spelautomater har hög RTP (återbetalningsprocent) och spännande bonusfunktioner, vilket gör dem till favoriter bland spelare. När allt är klart kan du börja spela och njuta av dina gratissnurr!
Minst lika viktigt som att ha koll på innehållet i en bonus är att känna till vilka regler och villkor som gäller. Du kan även läsa omdömen och recensioner från andra spelare för att få en bättre uppfattning om vad som väntar. Vi har valt ut Sveriges bästa casino med free spins för att du snabbt ska kunna hitta ett spelbolag som passar dig. Den här typen av program premierar lojala och aktiva spelare samt spelare som har för vana att spela med lite större summor.
Maria Casino är ett av de fyra casinona som erbjuder free spins utan insättning just nu. Free spins är en typ av casinoerbjudande där du får gratissnurr på en eller flera utvalda slots till ett förbestämt värde. 20x omsättningskrav på insättning för att motta bonusen. Det finns olika typer av free spins du kan få hos nätcasinon. Läs alltid igenom regler & villkor samt gör en budget innan du börjar spela.
Ingen gillar att ”köpa grisen i säcken” – free spins låter dig se om casinot och spelen lever upp till dina förväntningar. När du spelar på ett svensklicensierat casino får du en trygg och säker spelupplevelse. När det handlar om det finstilta kan vissa casinon nämligen kräva att du omsätter både din bonus och din insättning, något som fördubblar motkravet.
Gå till spelet som du har fått dina spins på. I de flesta fall så krävs det att du gör din första insättning för att kunna ta del av spins. Jämfört med free spins, så är det inte lika fördelaktigt. Om du ändå inte fått in dina freespins, så kolla med supporten. Det fungerar precis på samma sätt som när du betalar för en spelrunda.
Du behöver självklartinte satsa kr direkt utan väljer själv din insatsnivå och spelar hur lågaeller höga belopp du vill per omgång. Du spelar då baraspela vidare tills dess att beloppet har blivit omsatt. Ett riktigt bra Free SpinsCasino ger inte enbart ut gratissnurr vid registrering. Alla vinster från Free Spinskrediteras till ditt casinokonto. Det kan med andra ord löna sig att snurra påspelautomaterna både i datorn och telefonen.
]]>Casinot erbjuder egna provably fair-spel vid sidan av det stora spelutbudet, vilket gör det möjligt att verifiera att resultaten är slumpmässiga. Spelar du däremot på ett nätcasino med EU-licens är det skattefritt. Casinoburst redogör alltid vilken typ av spel samt spelutvecklare som varje nätcasino har för att du som läsare enklare ska få en överblick. Därför kan de samarbeta med fler spelutvecklare och erbjuda ett större urval av slots, bordsspel, live casino och betting. (Ett undantag är direkt banköverföring via Krofort, som dock bara finns på några få casinon.) Dock erbjuds dessa av ett fåtal casinon som du kan ta del av här.
Två casino utan licens Trustly har sällan exakt samma spelutbud. Har man gjort valet att aktivera Spelpaus, men känner att man nu kan spela ansvarsfullt igen, då kan man inte bryta spelpausen. Spelpaus är ett system som bara berör de casinon läs mer här son har en svensk licens. Detta leder till att utländsk casino sidor kan erbjuda större och mer omfattande bonusar.
Här hittar du marknadens 10 bästa casino utan svensk licens samt all viktig information om att spela utan licens. Alla casinon utan svensk licens har olika omsättningskrav på sina bonusar. Om du spelar på ett casino som har en licens inom Europa så måste du inte betala skatt på dina vinster.
För den största skillnaden är just den att du kommer inte kunna stänga av dig själv från spel eller begränsa ditt spelande då Spelpaus endast erbjuds hos nätcasinon med licens i Sverige. Många casinon erbjuder kunder att sätta in med hjälp av Trustly oavsett om spelarna är från Sverige eller inte. Det viktigaste för dig som svensk spelare att veta är att det är lagligt att spela på ett utländskt casino utan licens i Sverige. De utländska spelcasinona kan ha Curacao licens som är en av de äldsta som finns för spel online. Detta har medfört en tryggare marknad för svenska casinospelare men det har även inneburit många begränsningar.
Det innefattar att vara medveten om riskerna med spel, att sätta tydliga gränser för sitt eget spelbeteendet, och att vara uppmärksam på tidiga tecken på spelberoende. Men det kan vara bra att känna till att sådana begränsningar kan finnas, för att undvika besvikelse vid ett stort vinstuttag. Det är viktigt att känna till vilka spel som bidrar mest till omsättningskraven för att effektivisera uppfyllandet av dessa. Ofta bidrar slots med 100%, sportsbetting med 50%, medan bordsspel som Blackjack eller roulette kan bidra med en så lite som 5% procent. Inte alla spel bidrar lika mycket till omsättningskraven.
]]>De flesta bonusar ska ska dock omsättas och det kan vara väldigt tidskrävande. Om du skulle omsätta mer än detta kommer pengarna att gå tillbaka till casinot. Många av de casinon som är med vår lista har ett omsättningskrav mellan 30x och 40x.
Vad skall man då se upp med när det kommer till att spela på casinon utan licens? Och det är alltid ett plus att casinon med svensk licens erbjuder snabba uttag.
Hur lång tid tar uttag på utländska casinon?
En tråkig faktor är att svenska spelare måste betala 30 % skatt när de spelar på casinon som är licensierade på Curaçao. Många spelare tycker att det är värt att spela på utländska casinon med licens utanför EU, trots att de behöver betala vinstskatt. En växande grupp svenska spelare upptäcker fördelarna med casinon på nätet som inte har en svensk licens. Trustly är en välkänd och populär betalningsmetod bland svenska spelare när de spelar på online casinon. Det är vanligt att nya casinon utan svensk licens använder bonus utan insättning för att locka nya spelare.
Var dock noga med att ha låst upp ditt kort för utlandsbetalningar om du vill använda det för spel på ett casino utan svensk licens. Siru och SMS Voucher är bra metoder för dig som vill få säkra och snabba betalningar för spel på casinon utan svensk licens. Se till att du läser igenom bonusvillkoren noggrant innan du accepterar en bonus på ett casino utan svensk licens.
Vissa casinon kan dock erbjuda möjligheten att godkänna transaktioner med BankID om de stödjer direkta banköverföringar. Om du har ett aktivt konto på flera olika casinon behöver du ofta kontakta varje casino för sig, eller ladda ner någon sorts blockeringstjänst. Det kan bland annat innebära att du inte är helt införstådd med vad du behöver göra för att få en viss bonus, eller vad omsättningskravet innebär. Utländska casinon är nästan alltid på engelska, eller något annat språk.
EU-casinon kan erbjuda spelgränser i form av insättnings- och tidsgränser, men det är dock inget krav att använda. Dock har man en laglig skyldighet att deklarera vinster till Skatteverket vid skatteplikt (spellicenser utfärdade utanför EU/EES). Tillsynsmyndigheten ansvarar för att kontrollera att casinot efterlever säkerhets- och licenskraven.
För att genomföra KYC-processen måste spelaren skicka in vissa dokument som bekräftar identitet, adress och betalningsmetod. Självuteslutningsprogram finns också tillgängliga, vilket gör att spelare kan pausa sitt spelande under en viss tid. För spelare som kämpar med spelberoende finns internationella resurser läs mer som GamCare och Gambling Therapy. I sådana fall måste spelaren rapportera vinsten till Skatteverket och betala en skatt på 30 % av nettovinsten. Många casinon utan svensk licens har börjat acceptera kryptovalutor som ett alternativ till traditionella betalningsmetoder. Bonuserbjudanden på casinon utan svensk licens har oftast omsättningskrav på 20x–50x.
High Flyer, Funky Time och Coin Flip är några populära Game Shows på casinon utan svensk licens. Utländska casinon erbjuder 8 000+ casinospel inom kategorier som slots, bordsspel och livespel. Alla casinon som saknar svensk licens räknas som casinon utan spelgränser. Utfärdad spellicens påverkar skatteplikt för EU-medborgare, spelutbud, spelreglering, betalningsmetoder och bonusar. Engelska casinon måste följa en strikt spelreglering, bonusbegränsningar och krav på marknadsföring.
]]>Slots är den speltyp som dominerar på svenska spelsajter, följt av bordsspel och live casino som ger en mer äkta casinokänsla. Det medför en ökad risk för dig som spelare. Bonus och moderna spelfunktioner i senast nya casino 2026! Har övergripande bästa spelupplevelse, spelutbud, uttagshastighet och välkomstbonus svensk casino Vi verifierar att casinot har direkta länkar till Spelpaus och Stödlinjen samt obligatoriska verktyg som självtest och spelgränser (insättning, förlust, tid). Den avgörande faktorn är uttagshastighet där de bästa online casinona behandlar utbetalningar omedelbart efter BankID-verifiering.
De flesta svenska nätcasinon idag erbjuder någon typ av välkomstbonus för nya spelare om du vill spela casino online. År 2011 förvärvades webbplatsen av Gentoo Media (tidigare GiG Media) och omarbetades för att hjälpa svenska spelare hitta marknadens bästa casino online. Upptäck varför tusentals svenska spelare varje dag väljer Unibet mobilcasino online, med fokus på säkerhet, variation och en högkvalitativ spelupplevelse i ett licensierat svenskt casino. Detta casino online erbjuder dig som spelare en underhållande och trygg upplevelse med svensk licens. Nedan presenterar vi våra 10 bästa casinon i Sverige just nu, där vi noggrant har valt ut vad vi anser vara de bästa online casinon för svenska spelare.
Vissa föredrar ett massivt liveutbud, andra vill ha de senaste slotsen eller riktigt stora bonusar. Till exempel är möjligheten att enkelt registrera sig med BankID och att snabbt kunna ta ut sina vinster med exempelvis Swish unikt för svenska casinon. Alla metoder vi rekommenderar är licensierade och säkra, så att du kan spela tryggt och fokusera på det roliga. Det vanligaste sättet att spela på nätcasinon idag är att verifiera dig med hjälp av ditt BankID. Varje nytt casino testas och rankas utifrån bonusar, spelutbud och uttagshastighet, och om de bjuder på något unikt som skiljer dem från konkurrenterna.
Alla slots och spel avgörs helt genom slumpgeneratorer. 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.
]]>Konkurrerande digitala identifieringslösningar är fortfarande få, så i praktiken innebär det att den som vill spela svenskt casino måste ha internetbank. Sedan det införts krav på digital identifiering har de flesta svensklicensierade casinon valt att gå över till betallösningar som kräver detsamma. Detta gäller både för spelare (det är i spelen man kan vinna) och operatören (det är när spelaren spelar som man tjänar pengar). Majoriteten av vår tid kommer tillbringas inuti casinospelen, snarare än i en lobby på jakt efter nya spel.
Affiliate info På spelsidor.se jobbar vi hårt för att ge dig dom bästa erbjudandena som passar just dig. Med hjälp av våra guider or listor över de bästa casino sidorna kan du enkelt jämföra olika alternativ och hitta vilket casino som är bäst för just dig. Det finns särskilda regler beroende på om spellicensen är från ett EES-land eller inte.
När du loggar in med BankID uppfylls KYC-kravet automatiskt och omedelbart, vilket garanterar en laglig och snabb spelstart. Tack vare BankID elimineras den tidskrävande, traditionella processen (ID-kopior). Både spelbolagen och speltillverkaren övervakas av Spelinspektionen. Om du inte är nöjd med operatörens beslut kan du vända dig till Allmänna reklamationsnämnden (arn.se) eller allmän domstol. Alla spelbolag måste ha tydliga rutiner för klagomålshantering. Med hjälp av vår expertis kan vi vägleda dig utifrån dina egna preferenser.
Regeringens förslag innebär att allt kreditfinansierat spel ska förbjudas, även via tredje part. Några kriterier som kan avgöra hur måttfull reklamen är inkluderar utsträckningen spelet riskerar att nå ut till personer under 18 år, samt i vilket sammanhang det förekommer. Du måste också erbjudas verktyg som Spelpaus och Stödlinjen, något som hittas längst upp på sidan.
Du bör noggrant granska varje online casino 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. På Casino.com granskar vi de avgörande faktorerna som gör de bästa svenska online casinos utmärkta. Alla casinon som listas hos CasinoFeber.se innehar sådan licens från Spelinspektionen.
Det är inget fel i att ta en paus från spelandet då och då, det behöver de flesta. Alla som vunnit stort vet hur lätt det är att spela bort hela eller delar av vinsten så att använda Spelpaus som ett verktyg för att stänga av sig i 24 timmar kan hjälpa mycket. På Casivo delar vi med oss av speltips där våra skribenter täcker allt från fotboll till trav där du kan rygga spelen på Sveriges bästa bettingsidor.
Kolla in våra listor där du kan välja bästa casino och välkomstbonus. Det är roligt att ta del av och spela med välkomstbonus, men tänk på att alltid kolla upp omsättningskrav och regler för bonusen innan du tar del av kampanjen. Vissa casinon ger dig möjlighet casino utan spelpaus att välja en bonus av flera olika alternativ som sport, casino och live casino.
Ä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. Vissa casinon är kända för sina generösa bonusar och har nya kampanjer varje dag i veckan. Om du är ute efter bästa casino bonus och casinon som har veckolånga kampanjer, bör du ta en närmare titt på avsnittet för bonusar.
Just nu är Sugar Rush, Gates of Olympus och alltid populära Starburst slots bland våra mest spelade online-slots. Bland våra spelarfavoriter finns Reel Star, Hyper Joker Gold, House of Joker och fotbollsspelet Go Glenn. Med Hot Drops Jackpot tar vi kasino online till nästa nivå och ger dig en ny dimension av jackpotspänning i casinospel. Vissa söker efter casino, andra skriver casino online, online casino eller casino på nätet. Våra experter på nätcasino testar sajterna, guidar till optimal strategi för de klassiska casinospelen, och tipsar om spelautomaterna med bäst odds. Fler spelomgångar innebär att casinospelens teoretiska återbetalningsgrad manifesteras, och den är alltid till casinots fördel.
]]>