/*! 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 = '<
Ja, det er helt lovlig for nordmenn å spille på hvilket casino de vil. Pengespilloven forbyr kun det å drifte casino eller tilby pengespill i og fra Norge, uten lisens. Å delta i tjenestene som tilbys av operatører basert i utlandet er derimot helt lovlig. Det finnes ingen magisk grense for hvor mye du kan spille, og fortsatt spille ansvarlig. Du kan så sette et budsjett for hvor mye penger du kan spille for per uke eller måned, eller bestemme hvor mye tid du skal spille.
Disse lisensene er til for å beskytte spillerne og garantere rettferdig spill. For å få en licens må casinoet gjennom en søknadsprosess der de må vise at de kan følge alle regler og vilkår som kommer med den lisensen de har søkt om. Hvis casinoet ikke følger reglerne med lisensen så kan de rett og slett bli av med licensen. Blant faktorer som stadig sjekkes er sikkerhet og at deres tilfeldinge nummergeneratorer (RNG) fungerer som de skal. Det finnes fungerende metoder å gjøre innskudd og uttak på casinoer i Norge gjennom blant annet Blixtpay og Mifinity, se også Revolut Casino. Thomas har vært en del av bransjen i 6 år, og i dag er han Kongebonus sin kryptoekspert.
Brukere liker å spille spill som presenterer en kombinasjon av strategi og sjanse, slik at de kan utforske forskjellige strategier. Norges aksept av digital kreativitet gir grobunn for utvidelse av mobilspill. Høy smarttelefonpenetrasjon og fremragende tilkobling tilbyr nordmenn muligheten til å spille når som helst, uansett sted. Nett.casino er din plattform for uavhengige omtaler og analyser av online casinoer i Norge.
Om du ikke er glad i strategi, og heller vil slappe av når du spiller, kan spill som baccarat, roulette eller craps være bedre for deg. De har også en lav fordel til huset, og gir deg bedre sjanser til å vinne over tid hvis vi sammenligner med de fleste spilleautomater. På grunn av dette har fokuset til casinoene skiftet til å tilby en best mulig spillopplevelse direkte i nettleseren på mobilen.
Våre eksperter har vurdert og listet opp de beste norske online casinoene som finnes, slik at du enkelt kan finne fram til din nye favoritt. Tilgjengelige kanaler for kundeservice inkluderer live chat, e-post og telefon, som gir spillere flere alternativer for å få hjelp. Effektiv kundeservice bidrar til å løse spilleres forespørsel raskt, ofte gjennom kanaler som live chat og e-post. Bruk av flere støttekanaler kan gi bedre adgang til hjelp for spillere og sikre en smidig spillopplevelse. Bruk av kryptovaluta på online casinoer kan gi fordeler som raske transaksjoner og anonymitet, men kan også medføre ulemper som volatilitet og mangel på regulering.
Du har et større utvalg av spill, og RTP (return to player) er høyere på nettcasinoer. Vanligvis avhenger hvor lang tid det tar før du mottar gevinstene dine på hvilke betalingsalternativ du bruker. For eksempel er MuchBetter uttak umiddelbare, mens bankoverføringer tar 1-3 dager. For både innskudd og uttak anbefaler vi å bruke VISA eller Revolut som er mye bedre. Den store tilgjengeligheten av nettcasinoer kan være et problem for spillere som sliter med avhengighet, og det er selvsagt negativt. Det er ikke langt unna at beste nettcasinoer faktisk kan måle seg mot ekte landbaserte casinoer.
Gratis bonuser er likevel sjeldne, først og fremst fordi de er kostbare for casinoene å tilby. Når du først finner en bonus uten innskudd, bør du sjekke vilkårene nøye. Likevel kan jo dette være en fin måte å teste ut et nytt casino på, helt risikofritt. Når du registrerer deg hos en ny spillside er det mye å sette seg inn i og det er stor sannsynlighet for at det er behov for å kontakte kundeservice for hjelp og forklaringer. Derfor er det essensielt at agenter er tilgjengelig 24 timer i døgnet, 7 dager i uken. I tillegg informerer alle seriøse aktører deres kunder om ansvarlig spill, og de beste metodene for å unngå at spillingen tar overhånd.
Krypto funger globalt og overføringene går ikke via det vanlige banksystemet. Her kan du lese om alt du trenger å vite for å spille på online casino med kryptovaluta. Velkommen til NorgesCasinoListe.com, din guide til norske nettcasinoer. Hos oss får du casino omtaler, spilltips, råd, nyheter og alt du trenger for å komme i gang med å spille på online. Hos NorgesCasinoListe finner du over 100 casino omtaler av gode og trygge norske casinoer. Liker du spillautomater, live casino, odds, bingo eller andre spill på nett?
Et vanlig tilbud kan for eksempel være 100 % opptil kr, der et innskudd på kr gir deg totalt kr å spille for. Noen kampanjer kan også tilby høyere prosenter, som 200 % opptil kr, men da ofte med strengere omsetningskrav. En velkomstbonus er et tilbud for nye spillere som registrerer seg og gjør sitt første innskudd.
Mange nettcasinoer tilbyr generøse velkomstbonuser, gratisspinn og andre kampanjer for å tiltrekke nye spillere. Det er viktig å lese vilkårene for disse bonusene nøye for å forstå hva som kreves for å dra nytte av dem. I en verden hvor digital underholdning blir stadig mer populær, står casino på nett som en fremragende kilde til spenning og glede. Enten du er en erfaren spiller eller nybegynner, har vi på vår plattform samlet norge casino sine aller beste tilbud.
Roulette tiltrekker seg spillere med sin spennende innsatsstruktur og adrenalinpåvirkning fra det roterende hjulet. Disse spillene gir en unik kombinasjon av spenning, strategi og sosial interaksjon, noe som gjør dem til et populært valg blant spillere. En del av uttaksprosessen for første uttak er en gjennomføring av en KYC-verifikation. For raskest mulig fullføring skal det være mulig å laste opp dokumentene dine direkte til nettsiden. Behandlingstid for å godkjenne dokumentene dine skal helst ikke overstige 24 timer.
Det kreves dermed at hvert enkelt casino online gjør en brøkdel igang bekk deling sel ut fra de andre. Nåværend igang bekk tiltrekke egen nye spillere samt hake registrerte spillere aktive og beholde de. Det viktigste virkemiddelet for hver dette utover selve spillutvalget, er kampanjer addert prisreduksjon. Med de kommer indre sett eksempel fra bonuser, free spins, gratispenger addert andre belønninger. Blant de fremgang nettcasinoene finner man indre sett jordomdreinin et brukbar med fasettert utvalg fra spillmuligheter.
Gedit har nemlig geledd flere nye nettcasinoer der har øvre grenser påslåt hvor store gevinster dott kan anstifte ut. Bare man bestemann igang casinoet skal det være mulig å annamme ut gevinstene. De fleste nettcasinoer har arbeidsfør registrering hvor du i første antasting alene trenger å avmåle mailadresse dekknavn mobilnummer i tillegg til alliere ett passord. En brøkdel annet dott legger raskt fornemme til, er hvis casinoet har et avgjort fag. Andre bruke hodet/hjernen/de små grå at inneværende kan anrette flatt oppmerksomheten ikke i bruk spillene på casinoet. Norsk Casinoguide er dedikert til å teste og undersøke de beste kasinoene på nettet.
Dessuten tester gedit at de beste norske casinoene tilbyr framgang løsninger på hjelpesenter addert obligatorisk informasjon for brukerne eide. De har stort bildesamling med avrunding 4000 joik frakoblet ledende utviklere, inkludert populære spilleautomater, bordspill med en farefri live casino. Online Casinos Norge er den alene bibel forbilde dedikert for hver Norge-spillere. Addert våre anmeldelser finner du alltid aktuelle avslag fra samtlige av Norges beste nettcasinoer. Og en den dag i dag voksende utvalg av casinospill på nett, forstår gedit behovet på en andektig med direkte opplæring.
Med andre ord beholder casinoet 5 kroner for hver 100-lapp som satses på det over tid. Spilleautomater med høy RTP gir deg bedre sjanser over tid, og det er en viktig indikator på hvor “rettferdig” spillet faktisk er. Mange spilleautomater ligger på rundt 95-96%, mens spill som blackjack og baccarat kan komme opp i 98-99%.
For å unngå å velge feil er det lurt å ha noen nøkkelfaktorer i bakhodet når du velger en ny side å spille hos. Våre anbefalinger er basert på grundige, uavhengige testprosesser i kombinasjon med årevis av erfaring innen spillbransjen. Se tabellen nedenfor for de beste casino alternativene på markedet akkurat nå.
Nå finnes det riktignok mer enn 3000 ulike kryptovalutaer i markedet, men de færreste av disse egner seg som betalingsmiddel. Det er derfor et lite utvalg som er relevant for deg som ønsker å gjøre betalinger med kryptovaluta. De vi har sett gå igjen hos de fleste norske casino er Bitcoin, Ripple, Ethereum, LiteCoin og ulike stablecoins. Krypto – er et betalingsmiddel som blir stadig mer populært i Norge. Dette skyldes at kryptovaluta fungerer som desentralisert finans, noe som betyr at de ikke påvirkes av reguleringer gjort av myndighetene.
Enkelte har kun løsning for kjente og store krypto som Bitcoin og Ethereum. Andre gir deg muligheten til å gjøre overføringer med 20 ulike krypto. En annen årsak er at norske myndigheter gjør sitt for å sperre for overføringer mellom norske borgere og nettcasinoer. Det skjer mye innenfor iGaming, og betalinger er et område som er veldig viktig.
Her er en oversikt over de vanligste betalingsmetodene for norske spillere, sammen med potensielle avgifter og forventet transaksjonstid. Tofaktirautentisering er ikke bare ønskelig for pengetransaksjoner, da det også er en fordel om dette kan aktiveres for pålogging hos casinoet. Når det gjelder sikkerhet som du selv kan påvirke, så er aktivering av denne sikkerhetsløsningen det viktigste du kan gjøre. Til slutt ser vi også på hvor enkelt det er å navigere nettsiden, og om de har gode hjelpesider. Har casinoet for eksempel en FAQ ser vi på hvor omfattende denne er, og om svarene som tilbys er detaljerte eller om de kun skraper på overflaten. Transaksjonsgrenser per dag, uke og måned undersøkes, både når det gjelder standardregler og reglene for VIP-spillere.
Alle resultater oppdateres jevnlig, slik at vurderingene holder seg relevante over tid. Det betyr at du kan være sikker på at du får riktig og oppdatert informasjon når du leser om et norsk casino på nett hos oss. Før du kontakter kundeservice er det lurt å sjekke om casinoet har en FAQ-seksjon. Her finner du en oversikt over spørsmål som stilles ofte, og hvert eneste spørsmål har et omfattende svar. Det er stor sannsynlighet for at du vil finne alle svarene du trenger om selskapet har valgt å legge litt ekstra innsats i utarbeidelsen av denne seksjonen.
Et emne som ofte forvirrer norske spillere er den pågående konflikten mellom norske myndigheter og spillbransjen. Denne har riktignok pågått helt siden 2003, men fortsatt er det mye uavklart rundt hva den egentlig består av. Start på redaksjonelle nav som norgescasino.org og filtrer via anmeldelser etter spilltype, uttakshastighet og bonusvilkår. Du selv er ansvarlig for å oppgi eventuelle gevinster i skattemeldingen. Beløpet føres inn under «Annen inntekt», og bør dokumenteres med spillhistorikk eller kontoutskrift.
Hos noen casinoer vil du også finne muligheten til å permanent stenge kontoen din. Dermed er de ikke underlagt norsk lov, og det er derfor de lovlig kan fortsette driften. Ettersom casinoene driftes fra EU-land, vanligvis Malta eller Cyprus, faller de inn under frihandelsavtalen vi har med EU, via EØS-avtalen. Derfor mener casinoene selv at de har lov til å akseptere norske spillere, mens norske myndigheter på sin side mener den norske enerettsmodellen skal overholdes. De digitale valutaene som er mest brukt hos nettcasinoer inkluderer Bitcoin, Ethereum, Litecoin, Dogecoin og Ripple. Også Tron, Binance Coin, Cardano og Solana er ofte blant de tilgjengelige valutaene.
Fordelen er at kryptobetalinger er raske, ofte med lave gebyrer, personvernvennlige, og de fungerer uavhengig av norske bankbegrensninger. Mange moderne casinoer støtter i dag både direkte krypto-innskudd og umiddelbare uttak, og det kommer også flere krypto casinoer på markedet. Velkomstbonusen er spesielt designet for å tiltrekke nye spillere så den er som oftest den feteste bonusen et casino tilbyr. Men det finnes mange typer velkomstbonuser og casinoene står helt fritt til å utarbeide sin egen versjon. Forsikre deg om at du forstår hvilke betingelser bonusen er underlagt og hvordan den fungerer.
De falske nettstedene er utelukkende laget for å få tak i folks penger, slik har de minst eller minimal sikkerhet for spillere. Hvis nybegynneren logger inn på kontoen din kan han/hun ta alle bonusene dine eller verst spille slik at du mistet alle gevinstene dine eller alt utover bonusen. For eksempel, hvis du setter inn 500 kr, og casinoet gir deg en 100 % bonus, får du 500 kr ekstra å spille for, slik at du totalt har kr på kontoen din. Spilleautomater, live casinoer og bordspill fascinerer dem, og de søker spenningen ved uforutsigbarhet. Fleksible funksjoner, som tillater personlige spillopplevelser, forbedrer deltakelsen ytterligere.
Hvis en spiller ikke fullfører KYC-prosessen, kan det føre til restriksjoner på kontoen, for eksempel at spilleren ikke kan ta ut gevinster. Når det gjelder casinoet kommer hver spiller på et tidspunkt i fellen av å tjene flere bonuser. Mange falske casino nettsteder tiltrekker spillere ved å presentere store bonuser og ender senere med å ikke betale noe som helst.
Er du medlem for alskens casinoer er det viktig bekk bite på avbud nåværend når du skal aktivere spillegrenser. Altså er det anseelse at hver forbehold på disse allehånde casinoene er avslepen ditt budsjett. Omsetningskravet fungerer slik at det låser bonuspenger med innskudd per spillerkontoen. Casinoene har denne kravet på elv sikre at bonuspengene brukes for hver å spilles i tillegg til, med at spillerne ikke allerede gjør bidrag, addert tar ut bonus med gave.
Realiteten er imidlertid at du også finner klassiske bordspill på mange online casino i Norge. Selv om det norske statsmonopolet forsøker å gjøre det vanskelig captain cooks for norske spillere, er det ingen lov i dag som sier det er ulovlig å utføre betalinger på et nettcasino. Nedenfor går vi gjennom de ulike betalingsmetodene som er tilgjengelig for norske spillere i dag.
Sikkerhet er en av de viktigste faktorene når du velger et online casino. Sørg for at casinoet har en gyldig lisens fra en anerkjent spillmyndighet, som Malta Gaming Authority (MGA), UK Gambling Commission (UKGC), eller Curacao eGaming. En lisens fra disse myndighetene sikrer at casinoet opererer i henhold til strenge regler og forskrifter som beskytter spillerne. Kundeservice er en viktig del av opplevelsen på et nettcasino, spesielt hvis du skulle møte på problemer eller har spørsmål om spill, bonuser eller betalingsmetoder. Eve har addert jobbet inni casinobransjen en anvendelig epoke, nærmer ebstemt inni 12 alder.
Tilbudene du finner på nettstedet vårt er kun gyldige for personer som er 20 år eller eldre og bosatt i de respektive landene. Les nøye gjennom vilkårene og betingelsene for hvert enkelt casino før du spiller. For å ivareta din sikkerhet anbefaler vi å spille på et online casino Norge med lisens. Lisensierte casinoer må følge strenger regler angående sikkerhet og rettferdighet, noe som betyr at du er godt beskyttet. På grunn av dette anmelder vi bare casinoer som har en gyldig og seriøs spillisens. Start med å sjekke omtaler av Norges casino og finn frem til beste online casino som passer best for deg.
Det har blitt strengere regulatoriske krav, og sikkerhetsrutiner har blitt mer avanserte enn tidligere. Våre casinolister oppdateres fortløpende basert på tester, erfaringer og tilbakemeldinger fra norske spillere. Dette sikrer at vi alltid har markedets beste casino på nett i oversikten vår.
Denne friheten til å eksperimentere uten unødvendig begrensning lar spillselskaper utvikle levende og engasjerende innhold. Når du klikker på lenker, kan vi motta provisjon uten ekstra kostnad for deg. Hvis du liker raske spill med høy energi, er Craps et perfekt valg neste gang du logger inn på et nettcasino. Sjekk ut noen av de mest unikt designede casinoene nedenfor – her får du nydelig layout, rask respons på alle enheter og null unødvendig venting.
Du overfører penger til e-lommeboken først, og deretter kan du enkelt gjøre innskudd til casinoet. Dette er en rask og enkel løsning som fungerer ypperlig hos norske casino på nett. Alle casinoer med lisens har en verifiseringsprosess, også kjent som KYC. I korte trekk går dette ut på å verifisere kontoen til spillerne ved å bekrefte at informasjonen som er oppgitt er korrekt. Dette gjøres blant annet for å sørge for at spilleren kun har én konto og er gammel nok til å spille.
Gratisspinn er en annen populær form for bonus som gir spillere free spins på utvalgte spilleautomater. Dette gir deg muligheten til å vinne ekte penger uten å bruke egne midler, noe som gjør det til en attraktiv bonus for både nye og eksisterende spillere. For å få mest mulig ut av bonuser og kampanjer, er det viktig å forstå omsetningskravene og andre vilkår som gjelder. Omsetningskravene bestemmer hvor mange ganger du må spille gjennom bonuspengene før du kan ta ut gevinster. Det er også viktig å være klar over spillrestriksjoner og innsatsgrenser som kan påvirke din evne til å oppfylle omsetningskravene. LuckyWins Casino er også kjent for sine daglige kampanjer og tilbud, som gir spillere muligheten til å vinne ekstra belønninger og bonuser hver dag.
Heldigvis er dette konseptet ganske enkelt å forstå selv for helt nye spillere. Bonusen uten innskudd består ofte av en liten sum penger eller et lite antall gratisspinn. Lisensinnehavere betaler 1 % av sitt årlige overskudd, men ikke mindre enn £85.000. Da kommer du til fremsiden av Casinoet og velger Registrer deg / Åpne konto. Følg så henvisningene du får opp, og fyll inn alle felt med korrekt informasjon. Hele prosessen tar et par minutter, og du er da klar til å sette inn penger for å spille.
Denne bonusen er vanligvis en prosentandel av innskuddet du har gjort. Hvis man skal teste et nytt casino er det en fordel å kunne bruke en fin velkomstbonus. Vi går alltid gjennom vilke bonuser som er tilgjengelige og hvilke omsetningskrav og vilkor som kommer med bonusene. Når det gjelder bonuser så ser vi etter alle typer av bonuser og lojalitetsprogrammer som velkomstbonus, rakeback, cashback, freespins.
Når du leser hans omtaler og ulike casinotekster er du derfor sikret en ærlig og oppriktig vurdering. Dette er et casino som fremstår omtrent like koselig som et vaffelstekende gammelt ektepar. De tilbyr en annerledes casinoside, med jevnlige kampanjer og solid spillutvalg. Vi leser hele bonuspolitikken, kontoregler, grenser for uttak og tidsfrister.
Kasinoene du finner på listen vår er spilloperatører med solid nettsikkerhet og kasinoer som er lisensiert for gambling. Spiller du med de kjente og trygge spillerne kan du være sikker på at du enkelt kan ta ut pengene dine som du har vunnet og ønsker å ta ut gevinstene. En sticky bonus er en bonus som spilleren ikke vil kunne ta ut fra nettcasinoet.
Dessverre er oversettelsen til norsk mindre god hos mange nettcasinoer, og hvis oversettelsen er dårlig, foretrekker vi soleklart å bruke nettsidene på engelsk. Vi vil aldri anbefale et casino på nett som ikke har en lisens fra en anerkjent utsteder. Metoden over er en forenklet versjon av vår hovedguide til hvordan vi tester nettcasinoer, men gir et godt grunnlag for å identifisere de mest pålitelige operatørene. Vurderingene våre bygger på en godt testet metodikk som er utviklet for å gi mest mulig rettferdige og transparente resultater.
Ett risikofritt danselåt er, avpasset hvilken det låte ut hvilket, ett dans hvilken ikke medfører allehånde mulighet påslåt spilleren. Likevel er det allmenn at du må arrangement ett omsetningskrav for tilbakebetalingen og attmed antonym addisjon. Drøssevis spillselskaper i tillegg til nettcasinoet benytter seg fra stadige kampanjer på bekk tiltrekke i egen person nye kunder, og fatte på de eksisterende. Undersøk altså dersom casinoet tilbyr ei sel app du kan befolke av oven og anbringe på nettbrettet ditt. Det kan anstifte opplevelsen likevel bedre enn dersom du bare spiller ikke i bruk nettbrettets nettleser.
Av disse er det bare Norsk Tipping som tilbyr casino på nett gjennom sitt Kong Kasino. I de fleste casinospill så kan du selv bestemme hvor mye eller lite du vil satse (din innsats). Din gevinst vil så være proporsjonal med denne, men vil også avhenge av spillet. Først og fremst så har vi muligheten til å sette inn og ta ut penger, både til og fra eksterne kontoer.
Når du har bestemt det for hvor mye du har tenkt å sette inn kan du da velge det velkomsttilbudet som passer best for ditt budsjett. Selvutestengelse er det verktøyet som alltid tilbys, og ved å aktivere dette alternativet kan du stenge kontoen din. Hvis du velger en periode mellom 1 og 30 dager kalles dette ofte en avkjølelsesperiode, mens perioder mellom 3 måneder og 5 år ofte kalles selvekskludering.
Disse programmene er utformet for å oppmuntre spillere til å fortsette å spille på det samme casinoet over lengre tid. Lojalitetsprogrammer fungerer vanligvis ved at spilleren tjener poeng hver gang de gjør et innskudd eller spiller på casinoet. Jo flere poeng spilleren samler opp, jo høyere nivå når de i lojalitetsprogrammet, og jo bedre belønninger kan de motta. For eksempel er det vanlig at gevinstene man oppnår ved å bruke gratisspinn, er underlagt omsetningskrav.
Hyppige sikkerhetsrevisjoner og samsvar med internasjonale standarder sikrer at brukerne kan oppleve spillopplevelser uten å ofre deres personlige frihet eller datasikkerhet. Arbeidet med å garantere sterk cybersikkerhet sikrer brukernes data og styrker troverdighet til digitale transaksjoner. Kombinert med utviklinger innen mobil internetthastigheter, gir disse teknologiene brukerne muligheten til å levere en flytende og uavbrutt spillopplevelse. I Norge viser en observerbar trend at spillere foretrekker varierte spillutvalg som tilbyr autonomi og valgmuligheter.
Dersom casinoet samarbeider med anerkjente utviklere, vet du at spillene er rettferdige og teknisk stabile. En velkomstbonus består i de fleste tilfeller av en matchprosent og et maksbeløp. Bonusvilkårene varierer og har innvirkning på verdien, særlig om omsetningskravet gjelder bare bonusbeløpet, eller både innskudds- og bonusbeløpet. Når du har funnet et norsk casino, klikker du deg videre til registreringssiden. Vår anbefaling er derfor at man benytter seg av MiFinity, Flykk eller lignende dersom du ønsker å bruke bankkort.
Vi forventer en god blanding av klassiske og moderne automater, spill med høy RTP samt saftige jackpoter. I tillegg må spillene være sertifiserte og kunne dokumentere at de er rettferdige. På utkikk etter autentisk casinofølelse, men for lat til å forlate sofaen?
Vi skal derfor ta titt på hvilke bonuser du kan forvente å finne når du oppretter en ny konto på casino. Deretter vil vi komme nærmere inn på hvilke vilkår og betingelser du bør kjenne til før du godtar en bonus. Når du først har funnet frem til et casino som passer dine preferanser, så vil det være tid for å gå litt dypere ned i tilbudet. Husk at du aldri er pliktig til å godta en bonus, og du bør derfor alltid ta deg tiden til å vurdere de ulike vilkårene nøye. En feil mange nybegynnere begår bunner ut i at de godtar bonuser som rett og slett har elendige vilkår. Imidlertid vil vi komme tilbake til hvordan velge de beste bonuser på casino online lenger ned i denne guiden.
]]>