/*! 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 = '<
Für Echtgeld Spiele gibt es grundsätzlich alle möglichen Strategien, die allesamt nur das Beste versprechen. Wollt ihr bei einem Slot Anbieter oder Online Casino Echtgeld auszahlen, dann gibt es zwei Faktoren, die die Auszahlungsdauer beeinflussen. Die meisten Spielotheken und Casinos mit Echtgeld verlangen dafür, dass ihr Kopien bestimmter Dokumente bereitstellt, zu denen der Personalausweis gehört. Wir erklären euch, wie ihr euch bei einer Echtgeld Spieleseite anmeldet, wie ihr euer Konto verifiziert und was für eine schnelle Auszahlung zu beachten ist. Wer noch neu ist in der Welt der virtuellen Glücksspiele, weiß nicht unbedingt, was es am Anfang zu beachten gibt und wie ein erfolgreicher Einstieg gelingt.
In Online Spielotheken mit Echtgeld spielst du Automatenspiele mit deinem eigenen Budget. Wenn du online mit Echtgeld spielst, solltest du immer auf einen Anbieter mit gültiger Lizenz setzen. Auch Auszahlungsquoten, Kundenservice und die Zuverlässigkeit auf dem Handy spielen eine wichtige Rolle. Überleg dir vorab, wie hoch dein persönliches Budget ist, damit du jederzeit bewusst spielen kannst. Auch danach bleibt es abwechslungsreich, mit regelmäßigen Missionen, Freispielen und Aktionen. Die Umsatzbedingungen für das Bonusguthaben sind mit 30x fair, bei den Freispielen etwas strenger.
Wenn du in einem Online Spielautomaten Casino um Echtgeld zocken möchtest, solltest du dich nicht von langen Anleitungen und eventuellen Risiken abschrecken lassen. Viele deutsche Automatenzocker bevorzugen heute das bequeme Spiel an Online Spielautomaten mit Echtgeld. Echtgeld Spielautomaten findest du in Deutschland im Jahr 2026 nicht nur in Spielhallen und Gaststätten, sondern auch in zahlreichen Online Casinos, die du immer und überall verwenden kannst.
Hier bekommst du allein für deine Registrierung bei einem Anbieter einen Bonus mit dem du um echtes Geld spielen kannst – ganz ohne vorherige Einzahlung. Umso wichtiger ist es daher, dass Sie stets verantwortungsvoll spielen. Derzeit dürfen nur Casinos mit offizieller GGL-Lizenz ihre Online-Glücksspiele in Deutschland legal anbieten. Für Neukunden gibt es einen attraktiven Willkommensbonus, wobei die Freispiele allerdings an vergleichsweise strenge Bonusbedingungen gebunden sind.
Bestimmte Spiele bieten einzigartige Erfahrungen, die über die Norm hinausgehen. Wenn ein Casino-Anbieter überzeugen will, sollte er mehr bieten als nur Bonusversprechen. LeoVegas begrenzt den maximalen Einsatz mit Bonusgeld, um Missbrauch zu vermeiden.
Wurde die Einzahlung auf Ihrem Konto gutgeschrieben, können Sie sich anschließend an die Echtgeldtische und die Echtgeldspielautomaten setzten und losspielen. Ein typischer Willkommensbonus umfasst oft eine Kombination aus Bonusgeld und Freispielen. Sie sind bereit, online mit Echtgeld zu spielen. Hier können Sie sicher und geschützt im Casino online spielen, um Echtgeld, und gleichzeitig die besten Bonusse abräumen.
Hier finden Sie aktuelle Casino Seiten mit zahlreichen Bonusoptionen, Möglichkeiten mit einer Mindesteinzahlung zu spielen und Tausende von klassischen, Live und Video Spielen. Du kannst in Deutschland im Online Casino Echtgeld einsetzen und legal spielen. Wer das Live Casino spielen mit Echtgeld ohne größere Regelkenntnis bevorzugt, kann auf beste online casinos die einfachen Spielshows ausweichen. Das Thema der Spielsucht ist beim Echtgeld spielen aber nicht vom Tisch zu fegen. Mitte 2021 soll der neue Glücksspielvertrag der Bundesländer in Kraft treten und nun erstmals das Online Casino Echtgeld spielen in Deutschland regulieren.
]]>Zudem lassen die meisten Echtgeld Casinos aus dem Ausland auch anonyme Ein- und Auszahlungen zu, worüber die Finanzbehörden gar keine Informationen erhalten können. Steuern für Gewinne im deutschen Casino dürften also kaum anfallen. Es ist aber ohnehin ziemlich schwer, bei einem Maximal Einsatz von 1 € pro Spin in Echtgeld Online Casinos größere Gewinne zu erzielen. Auch bei den Zahlungsmethoden setzen die Top Echtgeld Online Casinos auf Vielfalt und Sicherheit. Nur Anbieter, die von der Glücksspielbehörde der Länder oder vergleichbaren europäischen Institutionen reguliert werden, bieten dir als Spieler den Schutz, den du beim Spiel um echtes Geld erwartest. Dank regelmäßiger Updates und neuer Releases bleibt die Spieleauswahl in den besten Echtgeld Online Casinos immer frisch und abwechslungsreich.
Wir sind kein Glücksspielanbieter und bieten auch keine Echtgeld-Dienste an. Solche Titel zählen zu den Top-Empfehlungen für Echtgeldspieler, die auf faire Gewinnchancen achten. Das beste Online Casino mit Echtgeld bietet Dir Demospiele an, bei denen Du ohne eigenen Geldeinsatz spielen kannst, um ein Gefühl dafür zu bekommen. Bevor Du überhaupt loslegst, mit Echtgeld im Online Casino zu spielen, solltest Du zuerst ausprobieren, welches Spiel Dir am meisten liegt oder gefällt. Meist erhältst Du einen Einzahlungsbonus von 100% oder mehr, oft kombiniert mit Freispielen. Du willst in Online Casinos mit Echtgeld spielen, bist aber unsicher, welchem Anbieter du vertrauen kannst?
Derzeit dürfen nur Online-Casinos, die eine solche Lizenz besitzen, ihre Online-Glücksspiele legal in Deutschland anbieten. Es kann Einschränkungen geben, an welchen Spielautomaten Sie mit Freispielen spielen können und wie hoch der maximale Gewinn pro Drehung sein kann. Diese kostenlosen Drehungen ermöglichen es dem Spieler, an einem bestimmten Spielautomaten zu spielen. Die besten Online Casinos bieten auch regelmäßige Wettbewerbe und Aktionen, bei denen Freispiele als Preise online casino deutschland vergeben werden. Die Freispiele werden entweder mit Ihrer Ersteinzahlung gutgeschrieben oder als Teil eines Bonus für reguläre Spieler angeboten.
Wir bieten Ihnen einen hervorragende Auswahl an legalen Online Casinos Deutschlands mit einer Lizenz, wo Sie im Internet sicher und unbesorgt spielen können. Sehen Sie sich dazu die folgende Tabelle an, welche Zahlungsanbieter hierzulande im Online Glücksspiel eine Rolle spielen. Gleichzeitig bedeutet die neue Regulierung aber eine enorme Anzahl an gesetzlichen Einschränkungen, damit ein Casino online Deutschland legal Casinospiele anbieten darf. Wer mit Echtgeld spielen will, muss vorher sein Kapital natürlich zum Online Casino bringen. Wer in einem Online Casino mit Echtgeld über die App spielen will, der muss diese entweder herunterladen oder aber über die Web-App im Browser das Casino betreten.
Diese Prämie ist nach unseren Online Casino Echtgeld Erfahrungen in der Regel an eine Mindesteinzahlung gebunden. Ein Willkommensbonus ist ein gängiges Angebot für Casino Spiele Online mit Echtgeld, das neue Kunden mit einem höheren Startguthaben belohnt. Dadurch kann man mehr Runden spielen, verschiedene Games ausprobieren und seine Gewinnchancen verbessern, ohne sofort das gesamte Budget zu riskieren. Eine niedrige Mindesteinzahlung minimiert den möglichen Verlust und gibt mehr Kontrolle über das Spielverhalten in einem Echtgeld-Casino. Unser Online Casino Echtgeld Test hat sich gezeigt, dass eine Mindesteinzahlung in der Regel zwischen 5€ und 20€ liegt.
]]>Freispiele für die Kontoeröffnung sind ein beliebtes Angebot, das neuen Kunden recht häufig von den Glücksspielunternehmen zur Verfügung gestellt wird. Ein Startguthaben in Echtgeld ist ein fester Geldbetrag, der neuen Kunden bei der Registrierung in einer Online Spielhalle gutgeschrieben wird. Trotz der Einschränkungen können Boni ohne Einzahlung eine gute Wahl sein, um das beste Echtgeld Casino auszuprobieren, bevor Sie eigenes Geld investieren. Ein Einzahlungsbonus hingegen bietet mehr Potenzial für größere Gewinne und spricht erfahrenere User an.
Falls du zum beispiel den brandneuen Spielautomaten von Hydrargyrum ausprobieren willst, kannst respons dir via Spielgeld ohne gewähr angewandten Impression versorgen. Angeschaltet oberster Stelle erforderlichkeit nachfolgende Ernsthaftigkeit so genannt sind, denn gleichwohl unter einsatz von der gültigen Erlaubnisschein wird sera gestattet, Online-Slots anzubieten. Within seiner Freizeit nutzt er seine Liebe für jedes Casinospiele, um seine Schreibfähigkeiten hinter spezialisieren und seinen Artikeln weitere Hausen einzuhauchen. Nun man sagt, sie seien unser begehrten Spiele sekundär für Schweizer im Verbunden Spielbank qua Echtgeld spielbar.
Funktioniert diese nur stockend, kommt es zu Fehlern oder kommt es zu anderen Problemen, verliert man schnell die Lust, um echtes Geld spielen zu wollen. Mit einer deutschen Lizenz der Gemeinsamen Glücksspielbehörde der Länder sind die Anbieter dazu befugt, Glücksspiel im Internet anzubieten. Illegale Anbieter versprechen oft sehr hohe Geldsummen in Kombination mit surreal vielen Freispielen. Mit unserem Ratgeber in der Hand sind Sie nicht nur gut informiert, sondern auch gut gerüstet, um sicher zu spielen. Dies beinhaltet das Erkennen von roten Fahnen, das Verstehen von Bonusbedingungen und das Setzen von Grenzen, um verantwortungsbewusst zu spielen.
Unsere Experten haben genau hingeschaut und zeigen dir, wo du ohne große Hürden Echtgeld Einzahlungen vornehmen und sofort mit dem ultimativen Spielvergnügen starten kannst. Dafür sind die in Deutschland lizenzierten Anbieter zu gut geworden. DAS beste Online Casino mit Echtgeld gibt es in unseren Augen nicht. Willst du mit eigenem Guthaben durchstarten, nimmst du einfach eine Echtgeld Einzahlung vor und sicherst dir mit einem maximalen Einsatz von 1 Euro pro Drehung deine ersten Gewinne. Sie zeigen dir aber auch, welche Softwarehersteller immer wieder mit Trends aufwarten und die höchste Auszahlungsquoten bieten. Ob du in einem Casino mit Echtgeld aktuelle Spiele-Trends findest, verraten dir unsere Experten in den umfangreichen Testszenarien.
Bonusangebote wie Willkommensboni, Freispiele oder Cashback sollen dein Guthaben erhöhen. Diese Echtgeld Casinos bieten viele Spiele, schnelle Auszahlungen und attraktive Boni. online casino deutschland Ja, einige der von uns vorgestellten Echtgeld Casinos bieten gelegentlich auch Boni ohne Einzahlung an, besonders für Neukunden. Gerade für Vielspieler kann sich Cashback langfristig lohnen.
So können Sie die verschiedenen Casinospiele und Online Slots auch auf Ihrem Smartphone genießen und um echtes Geld spielen. Je nach Online Casino müssen Sie sich danach die Casinosoftware herunterladen oder können ganz einfach im Webbrowser Ihres Computergeräts spielen. Um Casinospiele kostenlos spielen zu können, müssen Sie sich in der Regel im Online Casino anmelden. In den meisten Echtgeld Casinos können Sie die Casinospiele völlig gratis ausprobieren. Sie müssen jetzt nur noch ein Online Casino echtgeld auswählen. Mit diesem Wissen bewaffnet, machen Sie spielend mehr aus Ihrem Spielbudget.
Einige Online Spielotheken lassen ihre Kunden die Loyalitätsprogramme erst freischalten, bei anderen sammeln Spieler beim Spielen mit Echtgeld Treuepunkte. Neben den reinen Umsatzanforderungen solltet ihr prüfen, ob eure Lieblingsspiele überhaupt zum Umsatz beitragen. Erst, wer das Guthaben aus dem aktivierten Echtgeld Casino Bonus bei Spielen umsetzt, kann sich die Gewinne auszahlen lassen. Besonders bei einem seltenen Casino Echtgeld Bonus ohne Einzahlung sind die Bedingungen streng – denn die Anbieter haben wenig zu verschenken.
]]>Wir haben fast 20 Jahre Erfahrung in der Erstellung von Testberichten über Echtgeld Casinos. Das ist eine gute Idee, denn Sie können viel gewinnen. Moderne Echtgeld Online Casinos Deutschland investieren zunehmend in diese Technologien.
In Pay N Play Casinos ist keine Registrierung notwendig – nach Bekanntgabe deiner BankID kannst du direkt Geld aufladen und sofort im Casino spielen. Klassiker wie Roulette, Baccarat und Blackjack, die in der Vergangenheit das Rückgrat vieler Casinos bildeten, sind in lizenzierten deutschen Online Casinos nicht mehr zu finden. Unterschiede finden sich eher in den Umsatzbedingungen und den zusätzlichen Anreizen, wie etwa Freispielen, die Teil des Bonuspakets sein können. Die Willkommensboni in den getesteten deutschen Online-Casinos sind streng reguliert und unterliegen klaren gesetzlichen Vorgaben.
Online Spielhallen und Online Casinos bieten dir die Möglichkeit, virtuelle Spiele mit Echtgeld zu spielen. Sie können dort mit eigenem Geld spielen und mit etwas Glück Echtgeld gewinnen. Ein Casino wie Wildz punktet zusätzlich durch technologische Innovation – hier erkennt das System Ihre Vorlieben und schüttet Freispiele für genau die Echtgeld-Slots aus, die Sie am häufigsten spielen. In einem Casino online Echtgeld einzahlen kannst du bei den deutschen Anbietern auf verschiedene Weise. Beinahe alle Casinos bieten einen Willkommensbonus an, da sie damit neue Spieler gewinnen möchten. Du siehst also, viele Casinos bieten dir nicht nur Bonusgeld an, sondern schenken dir auch noch Freispiele – also Gratis-Runden an Spielautomaten.
Spiele mit einem hohen Risiko bieten Dir seltenere, aber dafür größere Gewinne. Spiele mit einem geringen Risiko, oder Volatilität, bieten häufigere aber kleinere Gewinne. Die Volatilität beschreibt, wie oft und wie viel ein Spiel in Echtgeld Casinos auszahlt.
Within ein nachfolgenden Verzeichnis auftreiben Sie diese Erreichbar Casino Slots, damit diese kein Verloren vorbeiführt, sofern Eltern im Online Spielsaal qua Echtgeld vortragen möchten. Online Kasino Banking erfordert sichere unter anderem verlässliche Zahlungsmethoden, damit Die leser Echtgeld Transfers salopp & direkt verwirklichen beherrschen. Zum Üben ferner je den Entzückung zwischenzeitlich gibt sera wohl nebensächlich diesseitigen kostenlosen Spielgeldmodus.
Alle Game-Kategorien müssen in den Echtgeld Casino Apps zu finden sein. Bei der Bewertung der Echtgeld Casino Apps gelten im ersten Schritt die identischen Qualitätsmerkmale wie für das Desktop-Casino. Fakt ist aber, die Überzahl der deutschen Spieler landet auf der Casino-Homepage und weiß innerhalb von Minuten, ob eine Registrierung erfolgt oder nicht. Der zweite Punkt im Echtgeld Casino Test ist die Präsentation des Gesamt-Angebotes. In deiner Spieler-Lounge kannst du in den seriösen Echtgeld Casinos zudem individuelle Limits für die Einzahlungen, Einsätze, Verluste und die Spielzeiten einstellen. Der Punkt wird leider von vielen deutschen Spielern ein wenig unterschätzt.
Zu den einfachen und unterhaltsamen Games in Echtgeld Casinos zählen die Rubbellose. Zudem sind spezielle Aktionen in den Spielhallen sportwetten online deutschland eine gute Gelegenheit, zusätzliche Karten oder Freispiele zu sichern. Je mehr Spieler, desto höher fallen die Preise aus, wobei spezielle Bingo-Spiele auch garantierte Jackpots bieten können.
Wurde die Einzahlung auf Ihrem Konto gutgeschrieben, können Sie sich anschließend an die Echtgeldtische und die Echtgeldspielautomaten setzten und losspielen. Ein typischer Willkommensbonus umfasst oft eine Kombination aus Bonusgeld und Freispielen. Sie sind bereit, online mit Echtgeld zu spielen. Hier können Sie sicher und geschützt im Casino online spielen, um Echtgeld, und gleichzeitig die besten Bonusse abräumen.
Daher sind Online Casino Echtgeld Spiele generell mit Vorsicht zu genießen und man darf den Überblick nie verlieren. Wer dort spielt sollte allerdings sich und seine Finanzen gut kennen, denn im Echtgeld Casino ohne Limits kann man viel Geld verlieren. Zum einen gibt es beim deutschen Anbieter das 1€ Limit pro Spielrunde, zum anderen die Einzahlungsgrenze von monatlich 1000€ insgesamt bei allen Portalen innerhalb Deutschlands. Ist bei einem Echtgeld Casino Angebot eine solche Lizenz nachweislich vorhanden, spricht grundsätzlich nichts gegen das Zocken mit echtem Geldeinsatz. Wie erwähnt, gibt es mit Malta, Gibraltar und Curacao/Niederlande EU-Staaten, welche durch ihre Lizenzierung und Kontrolle seriöse Echtgeld Online Casinos in Europa gewährleisten.
]]>Nur so können Sie sicher sein, dass der lizenzierte Anbieter auch zuverlässig mit Ihrem Geld umgeht und zum Schutz der Spieler Daten schützt. Wir sprechen Empfehlungen nur für Online Casinos und Spielotheken aus, die die GGL-Lizenz für Virtuelle Automatenspiele und/oder Online Casinospiele besitzen und von der Gemeinsamen Glücksspielbehörde der Länder (GGL) reguliert werden. Diese gewährleistet den Spielern im lizenzierten Glücksspiel in Deutschland optimale Sicherheit.
Organisationen wie die Bundeszentrale für gesundheitliche Aufklärung (BZgA) oder die Anonymen Spieler bieten Unterstützung. Spinmills Casino bietet einige Werkzeuge, um den eigenen Konsum zu kontrollieren. Die Spiele selbst stammen von lizenzierten Providern, die eigene Zertifizierungen und Prüfungen durchlaufen haben.
In diesem Artikel erfahren Sie, welche deutschen Online-Casinos 2026 lizenziert und sicher sind. Auf diesem Slot kann jeder bei NetBet registrierte Spieler neben den üblichen Gewinnen, Boni, Freispielen und Jackpots gleich doppelt profitieren. Wann immer Spieler auf unseren Slots mit Echtgeld spielen, erhalten sie NetPunkte. Von North Casino über Ricky Casino bis hin zu Dundeeslots – diese Anbieter setzen hohe Maßstäbe und bieten ein unvergleichliches Spielerlebnis. Wichtige Merkmale von attraktiven Bonusangeboten in Online Casinos sind spielerfreundliche Bedingungen, moderate Umsatzsummen und realistische Erfüllbarkeit.
Gefährdete Spieler werden in der aktuellen Sperrdatei OASIS eingetragen und können sich bei einer vorhandenen Sperre nicht mehr bei einem deutschen Glücksspielanbieter anmelden. Einheimische Spieler dürfen aus Glücksspielseiten mit deutscher Lizenz lediglich noch bei einem Anbieter gleichzeitig spielen. Gleichzeitig bedeutet die neue Regulierung aber eine enorme Anzahl an gesetzlichen Einschränkungen, damit ein Casino online Deutschland legal Casinospiele anbieten darf. Ja, deutsche Spieler können frei in Online Casinos spielen. Diese Casinos bieten einen deutschen Kundensupport und Sie können sicher sein, dass dieses eingespielte Teams Ihnen helfen wird.
Deutsche Spieler können verschiedene Bonusarten erwarten, einschließlich Willkommenspakete, Boni ohne Einzahlung und Treueprogramme mit Freispielen und Einzahlungsmatches. Online-Glücksspiel ist in Deutschland legal, wenn Plattformen Lizenzen von deutschen Behörden oder gültigen internationalen Lizenzierungsstellen haben. Absolut, zahlreiche legitime deutsche Online-Casinos bieten umfangreiche Spielbibliotheken und etablierte Reputationen. Führende deutsche Casinos bieten Flexibilität zwischen herunterladbarer Software und sofortigen Browser-Versionen. Um an deutschen Online-Casino-Spielen teilzunehmen, müssen Spieler die Mindestalteranforderungen erfüllen. Entdecken Sie echtes Feedback von deutschen Spielern, die ihre Erfahrungen mit unseren empfohlenen Online-Casinos teilen.
Der 100 % Willkommensbonus bis 100 € kommt mit 125 Freispielen für Book of Ra Deluxe. Der Willkommensbonus bietet 100 % bis 100 € plus bis zu 150 Freispiele, gestaffelt nach Einzahlungshöhe. Die Marke Löwen Play ist seit 1949 in deutschen Spielhallen präsent, und auch online spürt man diese Erfahrung. Zum ersten Mal hatten alle deutschen Bundesländer die Befugnis, Lizenzen an Betreiber zu vergeben, die es diesen ermöglichen, Online Slots und Pokerspiele offiziell und legal zu betreiben. Das Wetten im Internet war ausschließlich auf Pferderennen beschränkt, und die Online- Casinospiele waren in allen deutschen Bundesländern bis auf eines verboten. Dies lag vor allem daran, dass es in den Gesetzen des Landes keine Anerkennung von Online-Glücksspielen als eigenständige Tätigkeit gab und der deutsche Glücksspielstaatsvertrag aus dem Jahr 2008 fast alle Formen von Online- Glücksspielen verboten hatte.
Neue Spieler profitieren von einem großzügigen Willkommensbonus, während bestehende Spieler regelmäßig von Bonusaktionen und Freispielen profitieren. Es ist daher von größter Wichtigkeit, nur in lizenzierten Online Casinos zu spielen, um die Sicherheit Ihrer Daten und die Fairness der Spiele zu gewährleisten. Die besten Online Casinos in Deutschland bieten eine Vielzahl von Bonusangeboten, die oft mit extra freispiele kombiniert werden können. Hier spielen Sie gegen echte Croupiers über Streaming in HD-Qualität, was ein besonders aufregendes Spielerlebnis bietet. Die Lizenzierung durch die GGL ist ein Garant für die Legalität und Sicherheit der angebotenen Spiele im online casino in Deutschland.
Rakoo Casino bietet neuen Spielern ein attraktives Willkommenspaket, das 100€ Bonusgeld und 150 Freispiele umfasst. Neue Spieler werden bei Casinorex mit einem hohen Willkommensbonus begrüßt, der attraktive Vorteile bietet. Diese großzügigen Bonusangebote machen Queenspins zu einer beliebten Wahl unter den deutschen Spielern. Die Vielfalt der online casino paysafecard Spiele und die hervorragenden Bedingungen machen es zu einer beliebten Wahl unter den deutschen Spielern. Ricky Casino hat sich den zweiten Platz unter den besten deutschen Online Casinos für 2026 verdient. Die benutzerfreundliche App ermöglicht es Ihnen, bequem von unterwegs aus zu spielen und beinhaltet alle Funktionen der Desktop-Version.
]]>Falls sich die Daten der Anbieterseite nicht auf der Website der genannten staatlichen Glücksspielbehörde wiederfinden, solltest du in diesem Casino keinesfalls um echtes Geld spielen. Online Casinos sollten einen umfassenden FAQ-Bereich anbieten, der häufige casino ohne oasis Fragen und wichtige Informationen abdeckt. Statt Bonushöhe spielen Dinge, wie zum Beispiel Umsatzfaktor oder zeitliche Angaben, deutlich wichtigere Rollen.
Wählen Sie seriöse Casinos, nutzen Sie mobile Casinos und spielen Sie immer verantwortungsvoll für ein erfüllendes Erlebnis. Von den besten deutschen Casinos mit Live-Casino-Spielen und Online-Slots bis hin zu aufregenden Boni und großzügigen Aktionen war noch nie ein besserer Zeitpunkt, um sich zu engagieren. Im Jahr 2025 floriert Deutschlands Online-Glücksspielszene mit einer Fülle von Optionen für Spieler, um Echtgeld-Spiele in regulierten Casinos zu spielen. Viele deutsche Casinos bieten Tools, um Spielern zu helfen, ihre Spielgewohnheiten zu kontrollieren, einschließlich Selbstausschluss-Programmen, Links zu Spielsucht-Unterstützung und Einsatzlimits. Erstklassige mobile Casinos bedienen deutsche Spieler durch intuitive Anwendungen und responsive Websites und bieten sofortigen Zugang zu umfangreichen Spielsammlungen, wo immer Sie sind. Mobile Casino-Gaming bietet enorme Vorteile für deutsche Spieler, obwohl es wichtig ist, sowohl die Vorteile als auch die Einschränkungen zu verstehen, bevor man sich ins mobile Spiel stürzt.
Rakoo Casino bietet eine Vielzahl von Zahlungsmethoden, darunter PayPal und paysafecard, um den Spielern eine sichere Einzahlung zu ermöglichen. Diese hohen Quoten bieten den Spielern bessere Gewinnchancen und machen das Spielen noch attraktiver. Es gibt spezielle Bonusaktionen, die regelmäßig angeboten werden und den Spielern zusätzliche Gewinnchancen bieten.
Dundeeslots belegt den dritten Platz und begeistert Spieler mit einem umfangreichen Angebot an über 300 Spielautomaten. Es umfasst verschiedene Angebote, die den Einstieg im Casino erleichtern und den Spielern zusätzliche Gewinnchancen bieten. Neben den klassischen Slots bietet Ricky Casino auch ausgewählte Sportwetten-Optionen, die es Spielern ermöglichen, auf eine breite Palette von Veranstaltungen zu setzen.
Nicht lizenzierte Casinos können aggressive Marketing Taktiken durchführen, was die Spieler in die Irre führen kann, dass sie legitim sind. Um die Spieler zu schützen Casinos, die ohne gültige deutsche Lizenz tätig sind, werden dieser schwarzen Liste hinzugefügt, die öffentlich verfügbar ist. In diesem Abschnitt werden wir die Hauptaspekte des Glünurstv Vertrags, die Bedeutung von Lizenzen für Deutsche Online Casinos und die mit nicht lizenzierten Betreibern verbundenen Risiken untersuchen. (Staatsvertrag über Glücksspiel) vor, eine Regulierung, die darauf abzielt, Online Glücksspiele und Casinos im ganzen Land zu standardisieren und zu kontrollieren. Dies beinhaltet das Angebot von Tools, mit denen Spieler bestimmte Grenzen für ihre Ausgaben festlegen und Zugang zu Support und Beratung für das Problemspiel und das Selbstausschlusssystem bieten können.
Darüber hinaus implementieren viele Online Casinos Deutschland auch Maßnahmen gegen Spielsucht, um den Spielern zu helfen, verantwortungsvoll zu spielen. Jetzt im Spinight Casino sofort ohne Verifizierung echtes Geld einzahlen und die aktuellsten Casinospiele spielen! Einzahlen und ohne Verifizierung direkt spielen Im Green Luck Online Casino können Sie ohne Verifizierung echtes Geld einzahlen und direkt spielen. Ohne deutsche online casinos ohne oasis Verifizierung direkt spielen Jetzt im Spinrollz Casino direkt ohne Verifizierung Echtgeld einzahlen, die besten Casinospiele spielen und gewinnen!
]]>Das Freispielpaket wird nach der Ersteinzahlung über mehrere Tage verteilt gutgeschrieben. StarGames bietet als einer der wenigen Anbieter native Apps für iOS und Android und zahlt in der Regel innerhalb von 24 Stunden aus. Nach der Verifizierung gibt es zusätzlich 10 Freispiele ohne Einzahlung. StarGames erreicht 9,5 von 10 Punkten und überzeugt mit einem der breitesten Spielangebote unter den GGL-lizenzierten Anbietern. Die LÖWEN PLAY digital GmbH betreibt die Online Spielothek direkt aus Deutschland – einer der wenigen Anbieter mit deutschem Firmensitz. PayPal steht für Ein- und Auszahlung bereit, der Kundenservice ist rund um die Uhr erreichbar – auch per kostenloser Telefonhotline, was nur wenige Anbieter bieten.
Seit Inkrafttreten des neuen Glücksspielstaatsvertrags ist nur noch das Spielen bei diesen Glücksspielanbietern legal. Für deutsche Spieler ist bei Online Casinos im Vergleich zudem die Auszahlungsquote der Spiele relevant. Achtet beim Vergleichen zuerst auf top deutsche online casinos seriöse Online Casinos und prüft, ob sie über eine deutsche Lizenz für Online Glücksspiel verfügen. Die besten online spielotheken in Deutschland überzeugen durch ihre Vielfalt, innovative Features und kundenfreundlichen Service.
Organisationen wie die Bundeszentrale für gesundheitliche Aufklärung (BZgA) oder die Anonymen Spieler bieten Unterstützung. Spinmills Casino bietet einige Werkzeuge, um den eigenen Konsum zu kontrollieren. Die Spiele selbst stammen von lizenzierten Providern, die eigene Zertifizierungen und Prüfungen durchlaufen haben.
Alle GGL-lizenzierten Anbieter müssen diese Sperre respektieren. Viele mobile Browser bieten die Option „Zum Home-Bildschirm hinzufügen” an. Moderne mobile Casinos bieten responsives Design mit Touch-optimierter Steuerung. Internationale Casinos bieten teilweise eigene Apps an, die oft außerhalb der offiziellen App-Stores verfügbar sind (als APK-Download für Android). Die fehlende OASIS-Anbindung und das Fehlen anbieterübergreifender Limits können für gefährdete Spieler ein Risiko darstellen. Nachteile sind der weniger strenge Verbraucherschutz, mögliche Sprachbarrieren im Support, teilweise längere Auszahlungszeiten und die rechtliche Grauzone für deutsche Spieler.
Wer unterwegs spielen möchte, kann Spinmills Casino über den Browser des Smartphones aufrufen. Gewinne aus Freispielen unterliegen denselben Umsatzbedingungen wie der Bonusbetrag. Das Willkommenspaket ist mit einem Volumen von 400% plus 350 Freispielen beworben. Neben den Hauptkategorien bietet Spinmills Casino auch Minispiele und Sofortgewinn-Formate an.
Es ist unabhängig und überwacht den deutschen Glücksspiel-Markt sowie die Einhaltung aller Regeln. Denn wir testen und bewerten alle Online Glücksspielanbieter für deutsche Spieler. Genau da kommen unsere Glücksspiel-Experten von Onlinecasinoscout.de ins Spiel. Obwohl die regulatorische Situation in Deutschland im Moment ein bisschen unklar ist, können sich deutsche Spieler dennoch problemlos an EU-lizenzierten Casinos erfreuen.
In unserer Liste der besten Online Casinos für 2026 finden sich die Top 50 staatlich lizenzierten Online Spielbanken für deutsche Spieler. Die Auswahl der besten deutschen Online Casinos für 2026 basiert auf strengen Kriterien, die sicherstellen, dass Spieler ein erstklassiges Erlebnis genießen können. Dann steht dem Spielvergnügen in deutschen Online-Casinos bzw. Du solltest daher zugunsten deiner eigenen Sicherheit ausschließlich bei legalen Anbietern spielen. Wir empfehlen, bei Anbietern zu spielen, die du über verschiedene Kanäle rund um die Uhr oder zumindest bis Mitternacht erreichen kannst. Cashback-Boni sind besonders gut für Vielspieler geeignet, da die Rückerstattung oft automatisch erfolgt und sie zur Verbesserung des RTP beitragen kann.
Gerade die deutschen Spieler zahlen nicht gerne mit unbekannten Zahlungsmethoden ein. Wir empfehlen Ihnen immer nur in legalen Online Casinos mit einer Lizenz zu spielen. Diese Spielkategorie zählt aktuell zu den beliebtesten bei den deutschen Spielern, weswegen alles Live Spiele wie Blackjack, Baccarat, Roulette, Poker und Spielshows gefragt sind.
]]>Sehen Sie sich unsere empfohlenen Casinos an und spielen Sie noch heute drauf los!
Wie schon erwähnt, haben wir für Sie vorrecherchiert und die besten Online Casinos für den deutschen Markt auf Casinos.de ausgewählt. In den meisten Fällen müssen Sie nicht einmal eine bestimmte Anwendung herunterladen, um in Ihrem Lieblings-Online-Casino spielen zu können. Sie können in diesen mobilen Casinos ganz einfach auf Ihrem Smartphone spielen, als ob Sie sich vor Ihrem Laptop oder PC befinden würden. Wenn Sie in einem Live Casino spielen, werden Sie feststellen, dass ein Tablett auf den Tisch gelegt wird und eine Nummer auf dem Bildschirm dieses Tabletts angezeigt wird. Es gehört zur Gruppe der besten Live Spiele und zählt ebenso zu den klassischen Online Glücksspielen.
In vielen deutschen Online Spielotheken im 2026 steht für neue Spieler eine große Anzahl an Zahlungsmethoden zur Verfügung. Neben dem Willkommensbonus und Reload Bonus erhalten Spieler oft Cashback-Angebote, die in vielen Online Casinos und Spielotheken mit deutscher Lizenz verfügbar sind. Wenn Sie in einem seriösen Online Casino spielen möchten, muss dieser Anbieter außerdem die gültige GGL-Lizenz für Virtuelle Automatenspiele aufweisen können. Neue Spieler erhalten einen Willkommensbonus von 100 % bis zu 100 € sowie bis zu 150 Freispiele für “Book of Ra Deluxe”. DrückGlück bietet seit 2015 ein umfangreiches Online Spielotheken-Erlebnis und hat sich nach Inkrafttreten des Glücksspielstaatsvertrags erfolgreich die GGL-Lizenz für Virtuelle Automatenspiele gesichert.
In unserer Liste der besten Online Casinos für 2026 finden sich die Top 50 staatlich lizenzierten Online Spielbanken für deutsche Spieler. Die Auswahl der besten deutschen Online Casinos für 2026 basiert auf strengen Kriterien, die sicherstellen, dass Spieler ein erstklassiges Erlebnis genießen können. Dann steht dem Spielvergnügen in deutschen Online-Casinos bzw. Du solltest daher zugunsten deiner eigenen Sicherheit ausschließlich bei legalen Anbietern spielen. Wir empfehlen, bei Anbietern zu spielen, die du über verschiedene Kanäle rund um die Uhr oder zumindest bis Mitternacht erreichen kannst. Cashback-Boni sind besonders gut für Vielspieler geeignet, da die Rückerstattung oft automatisch erfolgt und sie zur Verbesserung des RTP beitragen kann.
Zusätzlich gibt es dazu noch einen Echtgeldbonus bis zu 100€. Diese selbst entwickelten Klassiker wie Book of Ra und weitere Spiele anderer Entwickler deutsche online casinos stehen auch online im Novoline-Casino zur Verfügung. Alle gelisteten Casinos verfügen über eine gültige deutsche Lizenz und erfüllen natürlich die gesetzlichen Vorgaben des Glücksspielstaatsvertrags. Im Joo Casino beispielsweise gibt es einen Willkommensbonus, der auf speziell auf Bitcoin zugeschnitten ist.
Dies bietet Flexibilität beste deutsche online casinos und Komfort für Spieler, die unterwegs spielen möchten, ohne eine zusätzliche App installieren zu müssen. Ein typischer Willkommensbonus umfasst oft eine Kombination aus Bonusgeld und Freispielen. StarGames.de bietet beispielsweise Gutscheine, Freispiele ohne Einzahlung, Einzahlungsbonus und Cashback an.
Nur Anbieter mit dieser Lizenz dürfen Glücksspiele hierzulande legal anbieten. Nur Betreiber, die eine solche Lizenz vorweisen können, dürfen in Deutschland Online Glücksspiele anbieten. Jokerstar wird von einem deutschen Betreiber geführt und ist mit einer Lizenz der Gemeinsamen Glücksspielbehörde der Länder (GGL) ausgestattet. Die Plattform besitzt eine gültige Lizenz der Gemeinsamen Glücksspielbehörde der Länder (GGL) und erfüllt damit alle deutschen Vorgaben.
Dieser Effekt betrifft alle GGL-lizenzierten Anbieter gleichermaßen. Nicht jeder Anbieter bietet den Demomodus für alle Slots an – bei manchen sind exklusive Titel oder neue Releases nur im Echtgeldmodus spielbar. Das Spielangebot der GGL-lizenzierten Anbieter hat sich im vergangenen Jahr deutlich vergrößert.
Den stärksten Bonus bietet Jokerstar mit 200 % auf die Ersteinzahlung, und Wildz liefert das beste Verhältnis von Einzahlung zu Spielguthaben für Budget-Spieler. In der Praxis betrifft das fast ausschließlich Pokerspieler. Das ergibt sich daraus, dass Echtgeld Gewinne aus Online Glücksspielen kein steuerpflichtiges Einkommen darstellen. Die besten Online Spielotheken bieten heute über 1.000 Spiele, während viele deutsche Spielhallen auf 20 bis 80 Automaten beschränkt sind. Die Auszahlungsquoten liegen deutlich über Spielhallen-Niveau, und Willkommensboni gibt es ausschließlich online.
Mehr Startguthaben, Freispiele, Cashback, No-Deposit. Umso beeindruckender ist es, dass einige Online-Casinos wie Löwen Play oder LordLucky RTPs von 94 % anbieten. Giropay wird mittlerweile in fast allen GGL-lizenzierten Casinos akzeptiert und punktet mit hoher Sicherheit. GiropayEine rein deutsche Lösung mit direkter Anbindung ans Online-Banking. TrustlyTrustly bietet direkte Zahlungen vom Bankkonto aus, ohne dich anzumelden.
Es ist unabhängig und überwacht den deutschen Glücksspiel-Markt sowie die Einhaltung aller Regeln. Denn wir testen und bewerten alle Online Glücksspielanbieter für deutsche Spieler. Genau da kommen unsere Glücksspiel-Experten von Onlinecasinoscout.de ins Spiel. Obwohl die regulatorische Situation in Deutschland im Moment ein bisschen unklar ist, können sich deutsche Spieler dennoch problemlos an EU-lizenzierten Casinos erfreuen.
Dabei handelt es sich bei den meisten dieser Online-Anbieter jedoch um illegale Betreiber, die virtuelle Automatenspiele ohne gültige Erlaubnis anbieten. Der Begriff „Online Casino“ wird oft falsch verwendet – meist für Internetseiten, die eigentlich nur virtuelle Automatenspiele anbieten. Dementsprechend erteilt die Gemeinsame Glücksspielbehörde der Länder keine Erlaubnisse zur Veranstaltung und Vermittlung von Online-Casinospielen und ist auch nicht für deren Regulierung und Aufsicht zuständig. Die GGL erhält regelmäßig Anfragen zur genauen Definition des Begriffes Online Casino beziehungsweise zum Unterschied zwischen legalen Online Casinos in Deutschland und virtuellen Automatenspielen. Er erläutert rechtliche Definitionen, zeigt die Unterschiede zwischen Online Casinospielen und virtuellen Automatenspielen auf und informiert darüber, welche Anbieter tatsächlich eine gültige Erlaubnis besitzen. Dadurch ist unsere Top Liste der besten deutschen Online Spielhallen entstanden.
Der Willkommensbonus bei den JackpotPiraten verdoppelt deine Ersteinzahlung bis zu einem Betrag von 100 €. Sehr gut ist hingegen die Tatsache, dass Wildz mit einer gültigen Glücksspiellizenz der Gemeinsamen Glücksspielbehörde der Länder für Automatenspiele ausgestattet ist. Betrieben wird das Angebot von der Gauselmann Gruppe, einem der bekanntesten deutschen Glücksspielunternehmen. Entdecke legale Online Casinos und Automatenspiele in Deutschland – sicher, lizenziert & seriös
Der 100 % Willkommensbonus bis 100 € kommt mit 125 Freispielen für Book of Ra Deluxe. Der Willkommensbonus bietet 100 % bis 100 € plus bis zu 150 Freispiele, gestaffelt nach Einzahlungshöhe. Die Marke Löwen Play ist seit 1949 in deutschen Spielhallen präsent, und auch online spürt man diese Erfahrung. Zum ersten Mal hatten alle deutschen Bundesländer die Befugnis, Lizenzen an Betreiber zu vergeben, die es diesen ermöglichen, Online Slots und Pokerspiele offiziell und legal zu betreiben. Das Wetten im Internet war ausschließlich auf Pferderennen beschränkt, und die Online- Casinospiele waren in allen deutschen Bundesländern bis auf eines verboten. Dies lag vor allem daran, dass es in den Gesetzen des Landes keine Anerkennung von Online-Glücksspielen als eigenständige Tätigkeit gab und der deutsche Glücksspielstaatsvertrag aus dem Jahr 2008 fast alle Formen von Online- Glücksspielen verboten hatte.
]]>Ein Einzahlungsbonus erhöht die Bankroll deutlicher und kann für längere Sessions taugen. Bei Need for Spin gibt es 20 Freispiele ohne Einzahlung für Hot Fruits on Fire (von Mancala Gaming). Das Bizzo Casino stellt 50 Freispiele ohne Einzahlung für Lady Wolf Moon MEGAWAYS bereit. Als Alternative wird m Verde Casino ein 70 Freispiele Casino Bonus neuen Spieler vergeben. Beim No Deposit Bonus bekommst du Bonusguthaben oder Freispiele, ohne vorherige Einzahlung.
Allerdings nur bei Anbietern mit deutscher Lizenz. Du bezahlst direkt per Online-Banking, ganz ohne Registrierung oder Drittanbieter-Konto. Wer bei einem lizenzierten Anbieter spielt, kann mit wenigen Klicks sicher einzahlen und sich auf schnelle, zuverlässige Auszahlungen verlassen.
1Red Casino ist eher für erfahrene Spieler interessant, die bewusst außerhalb des deutschen Lizenzsystems spielen möchten und sich mit Bonusbedingungen auskennen. Der 400% Willkommensbonus in Höhe von 40€ und 100 Freispielen, ist fantastisch für deutsche Gamer. Das Fehlen von 188 Wettsportarten war eine große Enttäuschung, online casino vergleich deutschland um die Wettanforderungen. Befolgen Sie die detaillierten Anweisungen auf der Neteller-Website, slots 7 casino freispiele wenn der Dealer einen Blackjack hat und Sie Ihre Hand bereits getroffen haben. Wenn nicht, online casino vergleich deutschland während sie gleichzeitig sicher und geschützt bleiben.
Der Online Slot mit erweiterbaren Symbolen und hoher Volatilität ist bei Spielern im Casino online beliebt. Dank innovativer Avalanche-Mechaniken und Multiplikatoren bietet der Slot eine Auszahlungsquote von 95,77 %. Spieler können hier spannende Freispiele und hohe Multiplikatoren mit einem RTP-Wert von 96,71 % erwarten. Ja, lizenzierte Casinos müssen Gewinne rechtmäßig auszahlen, sofern alle Bonus- und Identitätsbedingungen erfüllt sind. Ja, solange die Casinos von der GGL lizenziert sind, gelten sie als legal. Solche Seiten sind in Deutschland legal und bieten eine faire und sichere Spielumgebung.
Besonders gut gefallen mir die deutschen Dealer und die saubere Streamqualität. Die Grafiken sind durchweg hochwertig und die Volatilität meist beste online casinos spielerfreundlich eingestellt. Pragmatic Play ist derzeit der führende Slot-Anbieter in deutschen Online-Casinos und glänzt durch innovative Features und hohe RTPs.
]]>