/*! 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 = '<
De bästa casinoupplevelserna kommer från innovativ design, originella teman, ständigt växande spelutbud, dynamiska bonusar och mycket mer. 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. Sveriges live casinon erbjuder några av de bästa live spelen som roulette, blackjack, poker och baccarat. För att skapa en god spelmiljö har det behövts tydliga regleringar för både spelare och casinon.
Nya svenska casinon idag är välplanerade och har något mer unikt att erbjuda spelarna. På Maria Casino erbjuder vi ett förstklassigt utbud av klassiska live casino-spel, så att varje spelare kan hitta något de gillar. Denna transparens och interaktivitet gör Maria Casinos livecasino till ett enastående val för både nya och erfarna spelare. Maria Casino har nu sin egen svenska spellicens, vilket markerar en ny och spännande fas för vårt live casino online. Läser du exempelvis en recension av ett svenskt casino och ser att det erbjuder livecasino, klicka på loggan och du tas till en lista med Sveriges bästa livecasinon.
Free spins innebär länk helt enkelt att casinot belönar dig med ett visst antal gratissnurr att använda på en eller flera utvalda slots. Om exempelvis bonusen är begränsad till specifika spel, eller om den omfattas av ett väldigt högt omsättningskrav (allt över 40x) innan du tillåts plocka ut dina eventuella vinster. Att nya kunder på något sätt måste kunna bekräfta sin identitet innan de börjar spela är förvisso inga konstigheter. Och faktum är att det idag finns i princip lika många guider eller jämförelseportaler om casino som faktiska casinon på nätet. Ett förutsättning därför at igenom ska förorda någon nätcasino villig CasinoGuide befinner sig att casinot äger svensk perso koncessio. Hos någon bit casinon går registreringen mot så att du fyller i dina kontaktuppgifter samt kanske väljer ett användarnamn samt lösenord.
Tack vare vår oberoende jämförelse kan du känna dig trygg i dina val – och alltid hitta en svenskt spelsajt som matchar din stil. En avstängning gäller dessutom på samtliga svenska spelsajter, travbanor och fysiska butiker. Vi vill även belysa några av skillnaderna med fysiska casinon, samt vilka förbättringar som dykt upp den senaste tiden så att du får en komplett överblick. Utöver detta ska marknadsföring av bonusar kompletteras med tydlig information kring omsättningskrav, minsta insättning, begränsningar och liknande. Från och med sommaren 2020 fram till november 2021 begränsades bonusarna till maximalt 100 kr, samtidigt som du endast fick sätta in kr per spelbolag i veckan. En obligatorisk spelskatt på 18 % infördes också, precis som licensavgifter för casinospel.
Trots att olika casinon samarbetar med olika spelutvecklare, har de bästa casinon en välbalanserad mix av spelleverantörer i sina spelbibliotek. Vi på Alcasino har exklusiva topplistor över de bästa casinon online och hos oss kan du enkelt hitta ett som passar dina behov. Tack vare de smidiga betalningsmetoderna vi erbjuder, som Swish och Trustly, kan våra spelare både sätta in och ta ut pengar snabbt och säkert. Registrera dig hos Storspelare idag och dyk in i en värld av förstklassigt mobilspel. Oavsett om du är intresserad av spännande slots, klassiska bordsspel eller vårt interaktiva livecasino, är allt tillgängligt direkt från din mobil. Live spel tillför en ytterligare nivå av spänning och är casinospel som är väldigt omtyckta av våra Storspelare.
Vi strävar alltid efter att presentera material på sajten på ett rättvist sätt genom våra sidor, nyheter och recensioner. Sedan registrerar du dig och gör din första insättning. Ibland går en jackpott in på ett specifikt casino, men den kunde lika gärna ha betalts ut på ett annat. Det finns tyvärr inte något casino som ger mest utdelning, det är inte något som ett 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. Alla insättningsmetoder som erbjuds är både säkra och direkta.
Därför att festa lanseringen välkomnas nya lirar tillsamman någo givmild extra bums under registreringen. Genom att testa spelen och webbsajten får vi få en bra känsla för den övergripande användarupplevelsen. Vi drar nytta av denna kunskap för att förbättra din spelupplevelse på nätet. Eftersom spelbranschen är i ständig rörelse, uppdaterar vi dagligen information som berör alla delar av marknaden.
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.
Vårt mål är att du ska kunna fatta informerade beslut och ha en positiv spelupplevelse online. Vi på Casinopro åtar oss att ständigt uppdatera vår information och guider för att spegla den senaste utvecklingen runt omkring ansvarsfullt spelande. Du kan välja att pausa i en bestämd tid eller tills vidare, vilket ger dig tid att reflektera över ditt spelande och vidta nödvändiga åtgärder utan frestelser. Dessa trygga, skattefria och licensierade internet casino jämför, rankar och listar teamet här på Casinopro.se kontinuerligt. Välj ett spel i vår lista så lär vi dig spelets regler, tipsar om bäst företag att spela hos och hjälper dig att maximera dina vinster.
]]>Vet du inte vad du ska spela kan vi tipsa om våra vinnarfeeder som dyker upp lite här och där på vår sajt. Du kan klicka på det mesta här hos oss på Sweden Casino, särskilt sådant du ser i infoboxar (se exempel nedan). Då de flesta på ett casino är återkommande kunder och hittat sina favoriter utgör dessa spellistor sådant som är beprövat. Att det finns tusentals slots att välja bland gör inte saken enklare.
Inte heller på utländska om de har licens i EU/EES och inte vänder sig till svenska spelare. På svenska online casinon kan du i regel bara spela med svensk valuta, SEK. Det finns uppskattningsvis 60 bolag som har license för att driva online casinon mot den svenska marknaden.
Internet casino Sverige står ut bland många andra casinon på nätet. Poängen är att marknaden för casinospel blomstrar i Sverige. Are du letar efter en topp casino bonus och vill veta var man kan hitta en verkligt bra erbjudande?
Vilka är de mest populära casinospelen i Sverige just nu? För att göra det ännu enklare tänkte vi sammanfatta hela vår idé om att ge dig den bästa casinoguiden i Sverige. Där ser vi regelbundet till att uppdatera våra läsare med de senaste nyheterna från casinovärlden – med fokus på Sverige. Om du vill ha koll på aktuella händelser inom spelbranschen ska du hålla ett extra öga på vår nyhetssektion. Om du är nybörjare kan en bra start vara att först läsa igenom våra grundläggande casinoguider innan du påbörjar ditt speläventyr. Vi har skapat denna casinoguide för att ge dig som läsare en större kunskap och förståelse för casino på nätet.
Här finns ett av de största utbuden av jackpottspel online, live casino och en avdelning med odds. Happy Casino är ett snabbt nytt casino som erbjuder slots, bordsspel och sportsbook med Pay N Play. Här hittar du en komplett lista på 85 casino med svensk licens. Sen regleringen infördes i Sverige den 1 januari 2019 har spelinspektionen utfärdat någonstans mellan casinolicenser.
De ledande svenska casinona har etablerat starka samarbeten med storbanker som Swedbank, SEB, Handelsbanken och Nordea. Ditt svenska casino med BankID är dessutom ett kvitto på att en godkänd licens är på plats. Svenska spelare förväntar sig snabba transaktioner och en smidig verifiering, vilket har lett till utvecklingen av flera innovativa betallösningar. Trenden går mot ökad personalisering och fler svenskspråkiga alternativ, där spelupplevelsen anpassas specifikt för den svenska marknadens preferenser och spelvanor.
Nästan alla online casino sverige erbjuder säkra och snabba betalningsalternativ som passar spelare i Sverige. Den vanligaste bonusen är insättningsbonusen, där casinot matchar spelarens insättning med bonuspengar. För vissa spelare är casino bonusar viktiga, medan andra söker efter ett svenskt casino som stöder specifika betalningsmetoder, erbjuder ett visst spel eller har ett visst RTP.
Vi granskar varje casino vi rekommenderar med samma noggrannhet som vi själva skulle vilja ha som spelare. När vi började gräva i den svenska onlinecasinoscenen för över ett decennium sedan dök samma frustrationer upp gång på gång. Gäller endast nya spelare.
]]>Det innebär att du kommer få möjligheter att kunna spela gratis på casinospel – närmare bestämt på spelautomater. Free spins är ett erbjudande som gör det gratis att spela på slots och spelautomater. 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”. Oftast så påverkas casinobonusar av summan du väljer att sätta in. Det allra vanligaste typen av casinobonus är en insättningsbonus.
Genom att undersöka dessa kan du hitta marknadens bästa casino spel just för dig. Här kan du testa världens bästa casino slots helt gratis i demoversioner. miniwilla.se Casino game shows är interaktiva livespel som kombinerar turhjul och TV-showskänsla, ledda av en presentatör.
Därför försöker flera sidor ha casinobonusar som är unika. På nätet finns det en lång rad olika casinobonusar att välja mellan. En välkomstbonus leder även till större chanser att vinna pengar på casino. Innan du väljer en bonus på casino så är det viktigt att läsa om omsättningskrav, bonusvillkor och insättningskrav. Det finns många andra bonus casinon som är värd att spana in.
Numera kan i alla casinon på nätet betraktas som mobilcasinon. Man kan spela direkt i sin mobiltelefon, surfplatta eller dator. Om du tycker bonusar är viktiga bör du prioritera att hitta en bra sådan. Därefter bör du fundera på vad som är viktigt för dig hos ett casino.
Vårt team prioriterar pålitliga metoder som erbjuder hög betalningssäkerhet, inga avgifter, snabba insättningar och uttag. Vårt team granskar hela spelkatalogen för att identifiera casinon med ett imponerande spelutbud. 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. Om du spelar för mer än du har råd med eller känner att du har tappat kontrollen, bör du blockera dig via Spelpaus.
Det finns de bonusar som inte är möjliga att använda på t.ex. 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å.
]]>Den laddar snabbt även om man spelar på 4G mitt ute i skogen (testade när jag var på landet). Förutom en välutvecklad sektion för betting utan licens har Dreambet dessutom 5,500+ casinospel. Välj casino classic om du vill spela roulette och blackjack eller poker om du bara vill spela poker.
De har använts i det här sammanhanget så länge nätcasinon har funnits. Revolut erbjuder konton utan månadsavgift, kontantuttag utan avgift och valutaväxling. Trustly samarbetar med många banker och används av både e-handelsbutiker och hos speloperatörer.
Många casinon utan BankID har dock utvecklat snabba registreringsprocesser som liknar BankID-casinon, där du kan komma igång på bara några minuter. Att skapa ett konto på ett casino utan BankID är en enkel process som inte kräver elektronisk legitimation, men den skiljer sig något från de svenska BankID-alternativen. Till skillnad från ett casino med BankID, där allting går snabbt och är tydligt reglerat, erbjuder dessa sajter större flexibilitet och färre begränsningar – men också ett större eget ansvar. Det är ditt ansvar att hålla koll på detta, eftersom casinot inte gör det åt dig. Däremot, om licensen kommer från ett land utanför EU/EES, som Curacao, måste du enligt svensk lag deklarera och betala 30% skatt på vinster över 100 kronor.
Casino utan konto är en av de mest bekväma metoderna för att göra transaktioner på online casinon. E-plånböcker är ett annat populärt alternativ för att sätta in och ta ut pengar på online casinon. Oavsett vilket alternativ du väljer är det alltid viktigt att spela ansvarsfullt och vara medveten om de risker som är förknippade med online spelande. Svenska etablerade och nya casinon måste följa strikta regler när det gäller marknadsföring och reklam.
De är också ansvariga för att utfärda nya licenser, kontrollera spelbolag och utfärda böter vid eventuella felaktigheter. Spelinspektionen är den svenska myndighet som är ansvarig för att övervaka allt spel i Sverige. Det är till exempel inte tillåtet att köpa bonusar i Storbritannien. Den brittiska spellicensen har precis som Sverige, väldigt hårda lagar och restriktioner. Den brittiska licensen har också ett gott rykte och är en välkänd aktör inom spelindustrin.
Spelande innebär alltid en viss risk, men det är viktigt att minska dessa risker så mycket som möjligt. Video poker casino utan svensk licens erbjuder både enkelhet och spänning, med många olika varianter att välja mellan. Det gör att live casino på dessa sidor ofta har en unik och spännande atmosfär. Här hittar du klassiska spel som blackjack, roulette och baccarat i många olika varianter. Här kan du hitta spel med högre vinstmöjligheter och mer variation.
]]>Vi på Casino.com erbjuder inte bara recensioner – vi erbjuder kompletta guider där du som spelare är i fokus. I och med att vi startade som ett online casino har vi en gedigen bakgrund och erbjuder unika professionella insikter i världen av online casinon. Vi på Casino.com är en pålitlig partner när du vill hitta den bästa online casino upplevelsen. De bästa casinoupplevelserna kommer från innovativ design, originella teman, ständigt växande spelutbud, dynamiska bonusar och mycket mer. De bästa svenska online casinos är de som lyckas skapa en harmonisk kombination av dessa olika element. På svenska casinon finns support på svenska, medan du på utländska casinon kan få hjälp på engelska.
Det är en trygghet i att veta att du kan kontakta support och få snabba svar oavsett vilken fråga eller fundering du än må ha. 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 utländska casino 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!
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. Istället för vinstlinjer belönas du här för symboler som landar i klungor på spelplanen.
Aktivera flerfaktorsautentisering för att begränsa vem som har åtkomst till ditt casinokonto Ha en budget för gambling spel och ha som mål att spela för nöjes skull Alternativt en licens från UK Gambling Commission som också är bland de bästa.
För att locka nya kunder och behålla de befintliga så släpper casinon ständigt nya bonusar och kampanjer. Vi har stött på tusentals casinon, vilket gör spelbranschen mycket konkurrenskraftig. Svenska casinon är självklart på det svenska språket, medan utländska casinon är på engelska. Därför bör du alltid följa de regler och villkor som gäller för det online casino du valt att spela på. Den nya svenska spellagen trädde kraft år 2019 och ersatte den gamla lagen. I Sverige regleras onlinespel av den svenska myndigheten Spelinspektionen .
Genom att noggrant läsa igenom de specifika reglerna och villkoren i casinots information kan du vara säker på att du vet vad som gäller. Dock är det viktigt att alltid välja ett pålitligt licensierat casino. Deras ansvar är att se till att spelmarknaden är laglig, säker och ansvarsfull. Dessa förändringar beror till stor del på den ökade populariteten av onlinespel. Under de senaste åren har spelindustrin i Sverige genomgått en hel del förändringar.
En god idé är att titta på de olika bonusarna och vad de innehåller, innan du väljer att utnyttja erbjudandet. I vissa fall kan du dessutom ta del av omsättningsfria bonusar, eller gratisbonusar som inte kräver att du gör en insättning. Det kan antingen röra sig om free spins i utvalda automater, eller en matchbonus på ditt insatta belopp. De nyaste titlarna inkluderar ofta köplägen, extrem volatilitet för en ökad spänning, samt enorma maxvinster. I den hårda konkurrensen som råder är det tämligen viktigt med utmärkande faktorer som dessa. Ett casino som passar perfekt för en person kan vara helt fel för en annan.
]]>Med upplägget “Sätt in 100 kr och spela för 500 kr” handlar det i praktiken om en 400%… Här kan du läsa om de senaste som händer inom spelbranschen och vilka uppdateringar vi gör på Casivo. För dig som vill veta vad det senaste inom betting och casino presenterar vi en överblick av det senaste. Därför att vi med över ett decennium av erfarenhet i spelbranschen måste anses som experter inom området. Vi tittar på faktorer som spelutbud, kundtjänst, betalningsmetoder, användarvänlighet och bonusar i vår helhetsbedömning. Casivo är en jämförelsetjänst driven av experter inom spelbranschen.
För olika bordsspel tillämpas olika strategier och spelregler. Vinstutfallen hos dessa dynamiska och bygger på ren slump. Oftast består processen bara av att välja betalningsmetod och summa och sedan ska det godkännas. Speltillverkarna inkluderar oftast en beskrivning av hur spelen fungerar, eller informationssidor om t.ex. Därefter är det bara att testa spelen som verkar intressanta. Om du saknar någon information, eller om du hittar någon felaktighet, kontakta oss gärna.
Det viktigaste beslutet är det beslut som du tar när du registrerar dig hos ett online casino. Dessa casinon använder också tredjepartslaboratorier för att granska sina spel och säkerställa fair play. Att ha en licens är en grundläggande indikation på casinots pålitlighet, men det finns flera andra aspekter att ha i åtanke.
Det finns ingen anledning att kompromissa när det gäller din spelupplevelse på online casinon – en förstklassig upplevelse är ett måste. Om spelare har många klagomål, riskera inte din information eller pengar på casinot. Vissa svenska casinon erbjuder en egen mobilapp som du kan ladda ner från Google Play eller Apple Store. Traditionella kredit- och betalkort ger säkra betalningar online och är vanliga på de flesta svenska casinon. Idag kan du fortfarande spela för spänningens skull, vilket är vad de flesta turister söker efter hos landbaserade casinon.
Licensen är där för spelare för att ge en ökad säkerhet och en tryggare upplevelse. Vi recenserar och utvärderar alla nätcasinon genom att gå igenom bonusar, free spins, spelutbud, support och mycket mer. Exakt hur välkomstbonusen ser ut kan variera, vi delar ut allt från free spins, casinobonusar, oddsbonusar, bingobonusar eller kombinerade bonusar, som låter dig prova våra spel utan extra kostnad. Dessutom har vi på Paf helt unika och exklusiva jackpots som bara är tillgängliga för våra spelare. Inte nog med det så lyckades en annan spelare vinna över 85 miljoner kronor i slotten “Arabian Nights”. Detta innebär också att du inte kan vinna några riktiga pengar när du spelar demo slots.
Därför gjorde vi en djupdykning i svenska låntagares konsumtionsvanor med extra fokus på spel om pengar. Detta gav oss en större inblick i vilket det bästa casinot är. Här på Casinofeber recenserar och jämför samtliga casinon och våra listor uppdateras varje månad. Antalet kan variera något från år till år när licenser löper ut, förnyas eller när nya aktörer lanseras. Vi kollar bonusar, spel, uttagstider och support.
]]>Där kan du ta en paus från spelandet eller stänga ditt spelkonto för en längre period. Att spela med ansvar gör det roligt i längden. Som vid allt spel om pengar, finns det en liten risk att det roliga går över i ett mer tvångsmässigt spelande. Hos oss hittar du tips på vilka betalningsmetoder du kan använda för insättningar och uttag. Svenska NetEnt är ledande när det gäller populära casinospel och de är verkliga innovatörer när det gäller nytänkande.
Alla dina vinster hos oss är 100 procent skattefria – oavsett vinstens storlek. Givetvis går det att spela live med en riktig dealer. Hos oss kan du spela bingo i fler unika och exklusiva bingorum, från 1 krona och uppåt. Med hjälp av marknadsledande leverantörer som Evolution Gaming och Pragmatic Play, kan vi erbjuda ett brett utbud av spel i vårt live casino, av högsta kvalitet.
Slots online är digitala spelautomater där vinstlinjer fylls med symboler genom att casino utan spelpaus snurra hjulen. För att förstå det faktiska värdet på en casino bonus är det bra att veta vilka regler och villkor som är knutna till bonusen.
Var uppmärksam på att du endast kan hämta en välkomstbonus per spelbolag med licens i Sverige. En bonus på casino kommer oftast i form av free spins eller bonuspengar, vilket du kan bli erbjuden när du skapar ditt konto och gör din första insättning på casinot. Var uppmärksam på att sätta in det belopp som krävs för att aktivera bonusen, och använd dig av en giltig casino betalningsmetod. Om det finns en välkomstbonus får du även den samtidigt och kan börja spela med den direkt.
Vi strävar alltid efter att få in så många casinon som möjligt, förutsatt att de uppfyller våra krav. Genom kontinuerlig kontakt med spelbolagen är vi alltid bland de första som får veta när ett nytt casino släpps. Live casino erbjuder även Game Shows.
]]>Hos Otto Casino spelar du över casinospel – från klassiska bordsspel till moderna slots och freespins-favoriter. Många svenska casino erbjuder idag enkel registrering vilket innebär väldigt smidiga och i många fall direkta uttag. En del spellicenser har dessutom ett flertal casinon inom samma licens, som tex Kindred som har sajter som Maria och Unibet. Hos oss på CasinoGuide.se hittar du garanterat endast svenska casino. Denna lag ligger till grund för den svenska spellicensen som trädde i kraft 1 januari 2019.
Myndigheten kräver att varje operatör erbjuder spelgränser, självtest och Spelpaus. Därmed är det alltid tryggt att sätta in och ta ut pengar hos svenska kasinon. Detta eftersom alla sidor måste ha SSL-kryptering för att skydda spelarnas uppgifter. Spelinspektionen kontrollerar också att casino online i Sverige följer de lagar och regler som myndigheten och Sveriges riksdag skapat i Spellagen. Trustly fungerar som en mellanhand mellan dig och din internetbank som skickar medel från casinot direkt till ditt bankkonto i samband med uttag. Svenska casinon kan kräva KYC-dokument men det är väldigt sällsynt och brukar bara gälla mindre aktörer vid extremt stora uttag.
Vi anser att ett bra casino gärna får erbjuda någon typ av bonus. Vissa håller sig enbart till slots medan andra även erbjuder bonusar på t.ex. När det gäller bonusar finns lika många olika erbjudanden och bonuskonstruktioner som det finns casinon på nätet. Nätcasinot blir istället svårt att navigera i och det kan vara frustrerande att leta efter knappen till spelkassan. För bara ett par år sedan var registrerings- och verifieringsprocessen på casinon ibland ganska krånglig. Vi försöker att betygsätta de internetcasinon vi erbjuder så rättvist som möjligt, så att du får en indikation på hur bra det är.
Det finns många fördelar med att välja casino online istället för att spela på ett ”riktigt casino”. klicka här 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. Visserligen måste du verifiera dig även när du spelar på landbaserat, men online-processen är minst lika säker.
Vi har endast med casinosidor som verkar i Sverige med tillstånd, specifikt för att du ska undvika skatt på vinster som det kan bli på utländska casinon. Man får bara ha ett konto hos varje spelsajt per hushåll, vilket är bra att känna till. För ta del av olika erbjudanden lönar det sig att ha konton på flera olika casinon. Det enda du behöver göra är att välja ett casino du är intresserad av, sedan legitimerar du dig med ditt e-leg och knappar eventuellt in lite grunduppgifter. Många spelportaler inkluderar även odds och betting som en kategori utöver casinospelen.
Att några av Sveriges mest populära casinostreamers väljer att samarbeta bara med SveaCasino är ingen slump. Ett tydligt bevis på att stora vinster kan komma från de allra minsta insatserna! OneRush är en ny spelsajt med en skön kombination av adrenalin och underhållning. Läs om den roliga händelsen här!
Bland annat har spelbolagen i Sverige aktivt opererat online casinon sedan de började dyka upp på nätet. På de bästa svenska casinona tar det i stället bara några minuter innan pengarna är på plats. För dig som spelar kan det leda till förvirring eftersom vissa licenshavare har flera nätcasinon under samma licens. Med Casivo hittar du bara nya casinon där både spelupplevelsen och din trygghet står i fokus. Den nya kampanjen ger spelare en 300% bonus upp till 600 kronor, tillsammans med 100…
Tack vare vår oberoende jämförelse kan du känna dig trygg i dina val – och alltid hitta en svenskt spelsajt som matchar din stil. Spelpaus är ett nationellt självavstängningsverktyg för alla spelare. I dag får spelbolag med svensk licens inte erbjuda spel på kredit, men det finns fortfarande möjligheter att spela med pengar från kreditkort eller externa lån.
]]>Förutom att välja ett online casino med en bra casinobonus finns det ett par saker du bör tänka på. Som medlem på ett nätcasino kan du bli erbjuden en bonus om du tipsar en vän att skapa ett konto på onlinecasinot. Dessa likartade välkomstbonusar kallas för reloadbonusar och fungerar som en påfyllningsbonus.
Kolla också värdet per snurr, hur många snurr du får och vilka spel som räknas till omsättningskravet för bonusen. Högre krav och högre spelgränser är vanliga på insättningsfria bonusar. Du behöver spela för en viss multipel av bonusen innan uttag. Om vi jämför mot online casinon utanför Sverige så kan det även förekomma bonusar i form av referensbonusar (när du tipsar en vän) eller turneringsvinster.
Även om bonusen är utan omsättningskrav kan det finnas andra begränsningar. Tänk på att hos vissa casinon måste du gå in och aktivera dina free spins, t.ex. Det enklaste sättet att hitta bonusar utan omsättningskrav är att använda dig av en jämförelsesajt. Det vanligaste är dock att casinon erbjuder en del av sin bonus utan omsättning. Din bonus kan du använda enligt casinots regler och därefter kan du ta ut dina pengar. Få sedan bonuspengar och gratisspins i Pirots 4.
Det är också bestämt att denna bonus måste erbjudas vid det första speltillfället. Att jämföra bonusar är tidskrävande, och det är lätt att missa avgörande detaljer. ”Utan krav på insättning” är en väldigt bred kategorisering. Idag är det en sällsynt bonustyp då den är svår att räkna hem rent ekonomiskt för spelbolagen.
Intresset av att spela på nätcasinon är extremt stort vilket gör att spelbolagen har ett stort intresse att mätta efterfrågan. Efter att du fått din insättningsbonus så bör du förvänta dig att du måste omsätta bonusen ett antal gånger innan du kan ta ut din bonussumma i pengar. När du väl har spelat igenom din bonus och uppfyllt alla villkor vill du förstås kunna ta ut dina pengar snabbt och smidigt. Även om många spelbolag fortfarande använder sig av bonuskoder, börjar det bli allt vanligare att bonusen aktiveras automatiskt när du gör din insättning. Om du inte hinner omsätta bonusen inom den angivna tiden förlorar du oftast både bonusbeloppet och alla vinster som genererats från bonuspengarna.
Det betyder sedan att du fått 96 kr https://buildbackfossilfree.org/ i bonuspengar som ska omsättas 50x, vilket blir en totalsumma på 4800 kr, vilket är ett högt omsättningskrav. Om omsättningskravet är alldeles för högt samtidigt som varje snurr är lågt så kanske bonusen inte är så bra. Oavsett vilken typ av free spins du föredrar kan du här enkelt jämföra & välja det bästa casinot med gratissnurr! Fördelarna hos casinon med svensk licens är många.
]]>Ibland väljer nämligen casinon att inte tillåta de slots som har alldeles för hög RTP. Bonusarna är oftast utformade efter slots och här är spelbidraget till omsättningskravet 100% i de flesta fall. Vissa välkomstbonusar är betydligt enklare att vinna med än andra. Här kan du exempelvis se beloppet du får ta del av samt omsättningskravet. Erbjudandet är tänkt att ge dig en fördelaktig start på ditt spelande.
Dessa blockerar inte dina konton utan tillgången till all casino och betting, och består av program som du installerar på din dator och på mobila enheter. Det finns dock blockeringsverktyg som du kan använda med liknande egenskaper som Spelpaus som du installerar på dina enheter och som stänger dig ute från spelbolag. Du kan se en jämförelse av olika egenskaper nedan och därifrån bestämma vad som passar dig bäst. Utöver tekniska och funktionella aspekter granskar vi även casinots rykte på marknaden.
I vår guide en bonus per licens går vi igenom hur du kontrollerar vilka casinon som delar licens. Först och främst är det viktigt att komma ihåg att svenska bonusregler gäller även för omsättningsfria bonusar. Hos Paf får nya spelare 99 freespins att gå loss med i spelet Golden Joker. På omsättningsfria casinon slipper du det här krånglet då du spelar som vanligt och kan ta ut vinsten direkt.
Gratis casinopengar utan krav på insättning kan du ofta använda relativt fritt i casinot. Det finns både likheter och skillnader mellan en välkomstbonus utan insättning och en bonus som kräver insättning. Här listar vi alla bonusar som du kan få till insättningar om mindre än 100 kronor.
30x på bonus och 10x för freepins 300% upp till 2000 kr samt 10 free spins Du har 60 dagar på dig att uppnå omsättningskraven. Efter att du registrerat ditt konto kommer din bonus att aktiveras automatiskt och vara tillgänglig på ditt bonussaldo direkt när du loggar in. Glöm inte att kryssa för att du vill ha en bonus under denna process. Allt detta bör du vara påläst om innan du väljer att acceptera en bonus.
I de fall när den existerar så är summan ofta låg och omsättningskraven på eventuell vinst hårda. Vill du få tips om spel rekommenderar vi vår hemsida där vi lägger ut spel varje dag. Läs igenom villkoren noga innan du går med så du inte binder upp dig på något du inte känner till. 50 eller 100 casino utan svensk licens kr och dessutom ha olika krav som du måste uppfylla innan du kan ta ut dina eventuella vinster. Den registrerade adressen för företaget är ,12 Triq Tal – Katidral, Tas-Sliema,Malta.
Men försök ändå tänka efter om du känner igen casinots namn, har du sett det i någon reklam? Det finns väldigt många casinon online idag och självklart är det omöjligt att ha koll på alla casinon som finns. Ett casino kommer aldrig ge ut en bonus som gör att de själva går back. Det finns inget krav som säger att du ska sätta in pengar på ett casino. Men på det här sättet kan du få en känsla för hur casinot känns, vilket spelutbud som finns och liknande. Undantaget brukar vara spel med progressiv jackpott, som live casino-spel.
]]>