/*! 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 = '<
Postępując zgodnie z tymi wskazówkami, możesz zwiększyć swoje szanse na sukces w turniejach i cieszyć się bardziej satysfakcjonującą grą Rozumiejąc szczegóły każdego bonusu i jak skutecznie z nich korzystać, możesz maksymalnie wykorzystać swój czas w NineCasino. Zapewnia to maksymalizację korzyści z bonusu przy jednoczesnym korzystaniu z ulubionych gier. Zawsze sprawdzaj warunki każdego bonusu, aby dokładnie wiedzieć, które gry spełniają wymagania obrotu.
Nine Casino to popularna platforma ninecasino oferująca usługi nine casino online dla graczy z Polski i całego świata, z naciskiem na bezpieczeństwo i różnorodność gier. W NineCasino oferujemy szeroką gamę bonusów i promocji, które poprawią twoje wrażenia z gry i pomogą ci wygrać więcej. Dołącz do NineCasino już dziś, uzupełnij swój profil i zacznij odkrywać ekscytujący świat gier online z dostępem do ponad 6000 gier, ekskluzywnych bonusów i satysfakcjonującego programu lojalnościowego.
Zwróć uwagę na zasady promocji, aby wiedzieć, które gry kwalifikują się do korzystania z bonusów. Nine casino online oferuje ponad 6200 gier z RTP po kategoriach, na przykład sloty z 96.8%, blackjack z 99.5%, co pozwala na wybór gier o niskiej lub wysokiej volatility. NineCasino oferuje różnorodne bonusy, od bonusów depozytowych po bonusy powitalne i wiele innych. Do wyboru masz wiele opcji, w tym gry kasynowe na żywo, automaty oraz gry stołowe. To kasyno Bitcoin oferuje imponującą kolekcję gier, która przekracza 6200 tytułów. Dołącz do NineCasino już dziś i przenieś swoje wrażenia z gier online na wyższy poziom!
Witryna i gry są zoptymalizowane pod kątem urządzeń mobilnych, zapewniając płynną i przyjemną rozgrywkę na smartfonach i tabletach. Ciesz się elastycznością grania w swoje ulubione gry w podróży dzięki przyjaznej dla urządzeń mobilnych platformie NineCasino. Zapewnij sobie rozrywkę dzięki stale aktualizowanej bibliotece gier.
Gry najlepszych programistów z dobrymi funkcjami zapewniają graczom zwrot powyżej 95%.
Sekcja Live Casino pozwala graczom doświadczyć gry w czasie rzeczywistym z profesjonalnymi krupierami. Automaty z progresywnym jackpotem, takie jak Mega Moolah zapewniają szansę na znaczące wygrane. Program lojalnościowy nagradza aktywnych graczy ekskluzywnymi korzyściami. System provably fair zapewnia przejrzystość i uczciwość w każdej grze. Najwyższej klasy narzędzia bezpieczeństwa i odpowiedzialnej gry
Skontaktuj się z zespołem wsparcia za pośrednictwem czatu i poczty e-mail, aby uzyskać https://desercja.pl/ szybką pomoc.

Jak wspominaliśmy, nasze gry tworzone są przez najlepszych programistów. Nasza oferta gier stołowych liczy kilkaset pozycji. Wśród gier stołowych największe na topie są takie tytuły, jak Easter Plinko, Treasures Of The Gods, Classic Blackjack with Ten-20, Perfect Fishing, czy Speedway.
Działa jako dostawca usług płatniczych dla Unodos Rica Limitada zgodnie z prawem cypryjskim, działając jako biuro płatności w imieniu Unodos Rica Limitada. Zarejestruj się teraz i odbierz swój bonus powitalny! Niezależnie od tego, czy obracasz automatami, obstawiasz zakłady sportowe, czy dołączasz do turnieju, staramy się, aby Twoje wrażenia były jak najlepsze. Otwórz wiadomość e-mail i kliknij łącze weryfikacyjne, aby potwierdzić swoje konto.
Nastąpi wówczas przekierowanie do bramki płatniczej (w zależności od wybranej metody), gdzie możesz dokończyć płatność. Dokonywanie płatności w Nine Casino jest mega proste i intuicyjne. Po ponownym odwiedzeniu naszej strony wystarczy, że klikniesz „Zaloguj się” lub „Nine Casino login”, aby z łatwością zalogować się i wrócić do gry. Dostawcami gier dla Casino Nine są w szczególności Pragmatic Play, Playson, BGaming, Endorphina i wielu innych!
Program ten ma na celu oferowanie ekskluzywnych korzyści i nagród naszym najbardziej oddanym graczom, dzięki czemu każdy zakład liczy się na coś większego. W NineCasino cenimy naszych graczy i nagradzamy ich lojalność poprzez nasz kompleksowy Program Lojalnościowy. Przy NineCasinoMamy ekscytujące turnieje, w których możesz rywalizować z innymi graczami o duże pule nagród.
Ciesz się natychmiastowymi wpłatami, świetnymi bonusami i szybkimi wypłatami. Dołącz do NineCasino, aby cieszyć się płynną grą. Aplikację możesz pobrać bezpośrednio z oficjalnej strony NineCasino na swoje urządzenie. Aplikację NineCasino można łatwo pobrać i jest ona dostępna zarówno na urządzenia z systemem iOS, jak i Android. Sekcja kasyn na żywo w NineCasino pozwala użytkownikom doświadczyć emocji związanych z grami w czasie rzeczywistym z profesjonalnymi dealerami na żywo. Tytuły takie jak Pirate Jackpots i The Moneymania oferują ekscytujące możliwości zdobycia ogromnych nagród, dodając jeszcze więcej emocji do wrażeń z gry.
Zarejestruj się za pomocą poniższej metody i zacznij odkrywać rozbudowane opcje rozgrywki dzięki szybkim wypłatom na swoje saldo zł. Po zalogowaniu możesz śledzić status swojego konta w zł za pomocą specjalnego pulpitu nawigacyjnego. Zagrasz w swoje ulubione gry kasynowe i postawisz zakłady sportowe prosto z telefonu lub tabletu.
Z drugiej strony, wady obejmują ograniczony dostęp w niektórych krajach i opóźnienia w weryfikacji KYC, co może frustrująco wydłużyć proces wypłat. Nine casino wyróżnia się wysokim RTP na poziomie 96.8% średnio, z regularnymi audytami przez iTech Labs i eCOGRA, co potwierdza uczciwość gier i bezpieczeństwo transakcji. Chociaż Nine Casino ma podobieństwa do kilku innych kasyn online z Curacao, to podobieństwa wynikają z platformy oprogramowania, na której działają – a nie z firm, które za nimi stoją. Ta recenzja NineCasino omawia te aspekty, a także metody płatności i inne.
Ciesz się spersonalizowanym interfejsem, który pokazuje Twoje saldo na żywo w zł, dzięki czemu możesz z łatwością śledzić każdy ruch i transakcję. Również gry kasynowe online cieszą się niesłabnącą popularnością. Gry kasynowe, Kasyno na żywo, Sporty, E-sport, Wyścigi, Sloty, Wirtualny sport, Turnieje, Mini gry, Zakłady i wiele więcej. Nasze kasyno oferuje przede wszystkim ogromną liczbę gier – ponad 6000 tytułów od najlepszych dostawców. Wystarczy uzyskać dostęp do platformy i znaleźć NineCasino na żywo, gdzie użytkownik znajdzie znane i popularne gry oraz ich warianty. Oprócz szerokiej gamy gier na żywo, wiele z nich jest dostępnych w języku рolski, co ułatwia grę.
NineCasino oferuje szereg ekscytujących bonusów i promocji, które uatrakcyjnią Twoją przygodę na stronie. Strona NineCasino oferuje ekscytujące promocje, bonusy, zrzuty na żywo i turnieje spinomenal. Uwierzytelnianie dwuskładnikowe (2 FA) dodaje silną warstwę bezpieczeństwa, która zapewnia, że tylko Ty możesz dostać się na swoje konto w witrynie marki. Dla entuzjastów Polski, którzy chcą cieszyć się wszystkim, co oferuje Ninecasino, założenie konta jest proste i przejrzyste. Wybór bezpiecznej metody uwierzytelniania konta w Ninecasino zapewnia natychmiastowy dostęp do wszystkich funkcji.

Doceniamy nowych graczy, dlatego specjalnie dla nich przygotowaliśmy “Bonus od pierwszego depozytu”, który spodoba się każdemu! Do najbardziej popularnych należą Nine Casino bonus bez depozytu, lojalnościowe darmowe spiny i codzienny cashback. Posiadamy licencję rządu Curaçao eGaming (licencja nr 1668JAZ), więc możesz być pewny, że Twoja gra jest w pełni legalna i zgodna z wszelkimi regulacjami.
Oczywiście to tylko kropla w morzu wśród dostępnych tytułów, dlatego najlepiej, jeśli sam sprawdzisz, co dla Ciebie przygotowaliśmy. Jackpot to spełnione marzenia setek tysięcy graczy, a liczba zwycięzców stale rośnie! Jednym z najbardziej popularnych typów gier, które znajdziecie w Nine Casino są automaty. Kiedy dokonasz pierwszej wpłaty, otrzymasz 100% zwrotu na swoje konto!
Ninecasino zapewnia również dedykowaną linię telefoniczną dla użytkowników, których problemy wymagają natychmiastowej komunikacji głosowej. Konfigurując te opcje, klienci kasyna Polski mogą cieszyć się ciągłymi sesjami i bezproblemowym zarządzaniem saldem zł –bez względu na to, gdzie grają. Jeśli Twoje konto w kasynie mobilnym ma niskie saldo, wybierz z menu tryb „niska grafika” lub „oszczędzanie danych”. Jeśli dużo podróżujesz lub potrzebujesz danych mobilnych, możesz buforować witrynę za pomocą ulubionych ustawień przeglądarki lub aplikacji Ninecasino PWA (Progressive Web App). Możesz także sprawdzić strony Ninecasino w mediach społecznościowych pod kątem aktualizacji na żywo.
W grudniu 2025 polski rząd zintensyfikował działania przeciwko offshore’owym platformom hazardowym, blokując BLIK i inne metody płatności na nieautoryzowanych stronach. Wiemy dokładnie, na co zwracać uwagę przy wyborze bezpiecznej platformy. Oferuje szeroki wybór gier, bezpieczne płatności i dostępność 24/7 dla każdego użytkownika. Wejdź na casino-pistolo.pl, aby porównać metody płatności, warunki obrotu i czas wypłat; unikaj publicznego Wi-Fi przy transakcjach. Takie licencje zapewniają wysoki poziom bezpieczeństwa, uczciwości i ochrony danych. Tak, kasyna online jak najbardziej mogą być legalne w Polsce, o ile spełniają one określone przez prawo wymagania i posiadają odpowiednią licencję.
Podsumowując, legalne kasyna online w Polsce oferują graczom doświadczenia na najwyższym możliwym poziomie. To nie tylko zapewnia wygodę, ale także umożliwia grę w dowolnym miejscu, co jest szczególnie cenione przez współczesnych graczy, poszukujących elastycznych opcji rozrywki. Wszystko to sprawia, że ich gry są w 100% bezpieczne i oferują uczciwe wyniki. Niektóre kasyna oferują również ekskluzywne bonusy crypto dla graczy korzystających z kryptowalut, dodając dodatkową wartość do Twojego depozytu.
Ponadto, kasyno ubiegając się o licencję, musi udowodnić, że ma wystarczający kapitał na pokrycie wypłat. Spróbowałem kasyn z licencją Curacao, bonusy i program lojalnościowy były naprawdę hojne, a intuicyjny interfejs i szybki dostęp sprawiły, że gra stała się znacznie przyjemniejsza. W świecie gier online, legalność i bezpieczeństwo to kluczowe elementy, które zapewniają komfort i spokój umysłu każdemu graczowi. Upewnij się, że przeczytałeś warunki otrzymywania bonusu i, jeśli jest to wymagane, wprowadź kod bonusowy podczas dokonywania wpłaty lub aktywuj bonus w sekcji swojego konta gracza. Dzięki temu stają się atrakcyjnym wyborem dla wielu polskich entuzjastów hazardu online, którzy poszukują nie tylko zabawy, ale także dodatkowych korzyści i wartości.
Kasyna offshore często oferują ogromną różnorodność gier, atrakcyjne bonusy oraz innowacyjne programy lojalnościowe. To zobowiązuje ich do uzyskania odpowiednich licencji i przestrzegania surowych regulacji dotyczących uczciwości gier, ochrony graczy oraz zapobiegania praniu brudnych pieniędzy i innym praktykom. W Polsce kasyna online są legalne i regulowane przez państwo, zapewniając bezpieczne i sprawiedliwe środowisko gry dla wszystkich graczy. Zapoznaj się z przygotowaną poniżej listą kasyn, aby poznać najlepsze legalne kasyna w Polsce online 2026. Warto sprawdzić regulamin oraz opinie użytkowników, by uniknąć problemów z wypłatą środków.
Kasyna online z naszego rankingu obsługują płatności w PLN i oferują metody transakcji dostosowane do potrzeb polskich graczy. Nasz przewodnik po polskich kasynach online pomoże Ci wybrać platformę najlepiej dopasowaną do Twoich oczekiwań. Casino.com/pl to porównywarka kasyn internetowych, nie operator.
Wiedza, że wygrane są realne, a wypłaty uczciwe, dała mi prawdziwy komfort. Odwiedź najlepsze legalne kasyna już dziś, aby rozpocząć swoją ekscytującą podróż po świecie hazardu online w Polsce! Zalicza się do nich bogaty wybór gier, atrakcyjne bonusy na start oraz bezpieczne środowisko do eksplorowania różnych gier hazardowych.
Upewnij się, że wybrane polskie kasyno online legalne jest transparentne co do swojej licencji i regulacji, aby zapewnić sobie bezpieczne i sprawiedliwe środowisko do gry. Największe firmy posiadają takie same gwarancje na depozyty, jak banki. Pomimo Pistolo Casino tego, obecnie kasyna online oferują najniższe limity wpłaty, właśnie przez karty płatnicze, ze względu na dużą liczbę oszustw. Gracze mogą również cieszyć się wysokim poziomem bezpieczeństwa, ponieważ transakcje są chronione przez różne mechanizmy ochrony i szyfrowania danych. Niemniej jednak, istotne jest uwzględnienie możliwych opłat oraz czasu przetwarzania transakcji.
Przeznaczone do zapewnienia prostego i szybkiego dostępu do funduszy, często bez potrzeby posiadania konta bankowego. Chociaż karty przedpłacone nie są tak powszechne jak inne metody, stanowią wartościowy dodatek do opcji płatności w kasynach online. Zakłady sportowe stanowią więc świetne uzupełnienie dla kasynowej rozrywki i często zawierają dodatkowe bonusy oraz promocje dla aktywnych graczy. Tak więc, grając w kasynie z odpowiednią licencją, gracze mogą być pewni, że ich pieniądze i dane osobowe są bezpieczne, a gry są sprawiedliwe i losowe. Dodatkowo, licencje chronią graczy w przypadku sporów z kasynem, zapewniając im dostęp do niezależnych instancji rozstrzygających.
BetAlice Kasyno to nowoczesna platforma z intuicyjnym układem i komfortowym dostępem do gier. Zmieniająca się rzeczywistość wymusza natychmiastową reakcję na zachodzącą zmianę.Poniżej przedstawiamy „modne” tematy, którymi warto zarządzić w pierwszej kolejności. Ukończ weryfikację KYC zgodnie z wymogami kasyna – to obowiązek operatora, nie prześladowanie graczy. Możesz legalnie grać w kasynach offshore z naszego rankingu. Jeśli Twój dostawca internetu blokuje dostęp do kasyna, może ono być na czarnej liście.
Karty kredytowe kasyna, takie jak Visa i MasterCard, są jednymi z najbardziej popularnych i uznawanych metod płatności w Polsce, nie tylko w kasynach online, ale i w większości sklepów internetowych. Bezpieczeństwo, szybkość oraz łatwość dostępu są kluczowymi elementami, które należy wziąć pod uwagę przy wyborze opcji płatności w kasynie online. Dla polskich graczy zazwyczaj obstawiają piłkę nożną, siatkówkę czy sporty walki. Niemal wszystkie nowoczesne kasyna na żywo oferują dostęp do gier na żywo, z prawdziwym krupierem. Gry stołowe to esencja kasynowej rozrywki, łącząca w sobie elementy strategii, umiejętności i oczywiście, szczęścia. Wybór odpowiedniej gry może być jednak wyzwaniem, więc poniżej znajdziesz krótkie wprowadzenie do najpopularniejszych kategorii oraz kilka propozycji.
Licencje w kasynach online stanowią fundament wiarygodności i bezpieczeństwa platformy hazardowej. Wybór odpowiedniego, licencjonowanego kasyna online jest absolutnie kluczowy dla bezpiecznej rozgrywki i ochrony interesów gracza. Wybierz spośród szerokiej gamy dostępnych opcji – od automatów, przez gry stołowe, po kasyno na żywo – i rozpocznij swoją podróż po świecie rozrywki kasynowej.
Zdecydowanie warto ich użyć, jeśli zależy Ci na bezpieczeństwie transakcji. Transakcje są szybsze i często mają niższe opłaty niż tradycyjne metody płatności. Może być to trudne, ale unikaj również powtarzania tego samego hasła na różnych stronach internetowych. Unikaj używania łatwo dostępnych informacji, takich jak imię czy data urodzenia, i regularnie aktualizuj swoje hasło, aby chronić swoje konto i środki przed potencjalnymi zagrożeniami. Wiele kasyn nie ma uwierzytelniania dwuskładnikowego, dlatego hasło jest jedynym elementem, który zabezpiecza Twoje konto.
Metody płatności w kasynach online nie tylko umożliwiają wpłaty i wypłaty środków, ale także stanowią aspekt, który może przyciągnąć graczy do określonej platformy kasynowej. Polscy gracze mają dostęp zarówno do lokalnych kasyn online, jak i tych działających offshore, pod warunkiem że platformy te przestrzegają regulacji i są bezpieczne dla użytkowników. Kasyna offshore, czyli platformy hazardowe zarejestrowane poza granicami Polski, stanowią istotną część rynku hazardowego w naszym kraju. Dla polskich graczy legalne kasyno online to często zagraniczne kasyno offshore, posiadające licencję MGA, Curacao, Gibraltar lub eGaming.
Faktem jest, że coraz więcej legalnych kasyn internetowych oferuje swoje usługi na platformach mobilnych, umożliwiając graczom dostęp do swoich ulubionych gier na smartfonach i tabletach. Wniosek jest taki, że szukając kasyna online do gry, warto sprawdzić, czy korzystają oni z gier od uznanych dostawców, aby zagwarantować sobie jak najlepsze doświadczenia. Portfel kryptowalutowy posiada dodatkowe zabezpieczenia, które mogą utrudnić znacznie działanie różnego rodzaju oszustom. Gra w kasynie z licencją to podstawa, by cieszyć się grą zamiast martwienia się o bezpieczeństwo środków.
Pełną ofertę gier znajdziesz w naszym przewodniku po slotach online i najlepszych dostawcach gier. Większość zagranicznych kasyn nie posiada bezpośredniego przycisku „BLIK” obok kart Visa. Wybór konkretnej metody może zależeć od oferty udostępnionej przez dane kasyno legalne online. Dzięki stałemu rozwojowi technologicznemu, gracze mają dostęp do nowości i najnowszych trendów w branży hazardowej jak gry typu Crash czy sloty w 3D.
Sloty (automaty online) to absolutna podstawa – stanowią 70-80% oferty każdego kasyna. Oto co faktycznie dominuje wśród polskich graczy – i które kasyno z naszego rankingu najlepiej zaspokaja każdą preferencję. Większość z nich posiada w kasie BLIK, Jokery ma największą bibliotekę gier, a Casina wypłaca najszybciej. Dzięki temu Twoje depozyty są natychmiastowe, a bank nie widzi bezpośrednich przelewów do kasyna, co zwiększa Twoją prywatność. Porównaj minimalne depozyty, dostępność BLIK i czasy wypłat, aby znaleźć platformę idealną dla Ciebie.

Bonusy i Promocje w Hit’n’Spin CasinoTutaj gracze z Polski mogą grać przeciwko prawdziwym krupierom w czasie rzeczywistym. Chciałbyś wybrać się do kasyna stacjonarnego, ale nie masz możliwości, by tam dotrzeć? A ci, którzy szukają szybkiej i ekscytującej rozgrywki, mogą wypróbować gry Insta, takie jak Aviator. Jak wspomnieliśmy wcześniej, nasza biblioteka gier jest niesamowita.
Możesz również skontaktować się z naszym zespołem, wysyłając wiadomość e-mail na adres email protected, a my niezwłocznie odpowiemy na Twoje pytania lub wątpliwości. Kasyno Hit’n’Spin dąży do zapewnienia kompleksowej obsługi klienta, aby zapewnić naszym polskim graczom płynną grę. Nasza platforma mobilna zachowuje istotę wersji desktopowej, zapewniając dostęp do większości naszych gier i funkcji. Dla tych, którzy szukają szybkiej rozgrywki, gry Insta i tytuły Aviator zapewniają adrenalinę.
Nasza strona internetowa ma żywy i ognisty motyw oraz intuicyjny interfejs, zapewniając wciągające i przyjazne dla użytkownika doświadczenie dla graczy z Polski. Gracze mogą łatwo wpłacać i wypłacać środki za pomocą różnych wygodnych metod płatności, w tym kart kredytowych/debetowych, e-portfeli i kryptowalut. W pełni licencjonowane i regulowane przez rząd Curacao, zapewniamy bezpieczne i rozrywkowe wrażenia z gry. Możesz więc spokojnie wykorzystać każdy kolejny etap bonusu powitalnego bez pośpiechu i bez podenerwowania upływającym czasem. Zatem przekonaj się jeszcze dziś o tym, że rejestracja i następnie udane w HitnSpin logowanie da Ci dostęp do wszystkich najlepszych opcji dostępnych na rynku — odbierz swój bonus powitalny, zacznij grać i zgarniaj wysokie wygrane! Dołożyliśmy wszelkich starań, by taki serwis standardowy oraz mobilny stworzyć i wielu naszych użytkowników twierdzi, że nam się udało!
Dzięki temu kasyno na żywo jest dostępne zarówno dla początkujących, jak i doświadczonych graczy. Dzięki najlepszej technologii, wysokiej jakości strumieniowaniu wideo i interaktywnemu czatowi, kasyno na żywo pozwala poczuć atmosferę prawdziwego kasyna. Za każde 40 zł postawione na slotach i innych grach (z wyjątkiem gier na żywo i insta), gracze otrzymują 1 punkt lojalnościowy.
Po pozytywnej weryfikacji możesz swobodnie wypłacać wygrane środki. Intuicyjny panel gracza https://www.kantynazablocie.pl/ zapewnia pełną kontrolę nad kontem i komfortową rozgrywkę bez zbędnych komplikacji. W Hit’n’Spin możesz zarejestrować się na dwa sposoby — klasycznie lub błyskawicznie przez media społecznościowe. U dołu strony znajdziesz dostęp do informacji prawnych, polityki prywatności, działu pomocy i metod płatności.

Hit’n’Spin Casino – Najlepsze kasyno online w PolsceAby grać w kasynie HitnSpin na prawdziwe pieniądze, musisz się zarejestrować. Ogólnie rzecz biorąc, dążymy do szybkiego przetwarzania wypłat, ale stosujemy logiczne limity, które uwzględniają specyfikę branży gier. Dokładne ramy czasowe zależą od metody płatności.
Wybierając nasze kasyno, otrzymujesz pewność użytkowania wszelkich najnowszych rozwiązań sektora iGamingu. Następne pracownik naszego kasyna zweryfikuje je, co najczęściej trwa do 24 godzin. Pragniemy przypomnieć, że wypłaty w HitnSpin są dostępne dla zweryfikowanych użytkowników.

Zapewne najpopularniejszymi rodzajami gier w naszym kasynie będą maszyny slotowe online, czyli popularne sloty lub automaty do gier. Jest to bonus cotygodniowy, w ramach którego możesz dostać od 70 do 200% premii oraz od 25 do 100 darmowych spinów — konkretna wartość zależy od tego, jaką rangę masz w naszym programie lojalnościowym. Nieustannie poszerzamy gamę naszych gier i usług, udostępniamy wspaniałe bonusy i po prostu troszczymy się o naszych użytkowników jak nikt do tej pory. HitnSpin to najlepsze kasyno online dla graczy z Polski. Kasyno oferuje zróżnicowany wybór ponad 2000 gier kasynowych.
Pierwszą ofertą, jaką chcemy Ci zaprezentować, jest oferowany przez nas bonus powitalny. A ponieważ jesteśmy wciąż jeszcze młodym kasynem, to pracujemy bardzo ciężko nad wypracowaniem sobie silnej pozycji na rynku oraz jak najlepszej reputacji wśród graczy. Zaprojektowaliśmy go tak, aby doskonale czuli się u nas zarówno zupełnie zieloni jeszcze użytkownicy, jak i doświadczeni gracze, którzy uprawiają internetowy hazard od wielu lat. HitnSpin kasyno to zupełnie nowy serwis internetowy z grami hazardowymi, który pojawił się na rynku w 2023 roku.
Miłośnicy automatów będą zachwyceni, ponieważ oferujemy wszystkie rodzaje automatów, w tym Megaways i Bonus Buy. Jest on skierowany do stałych graczy i oferuje różne nagrody w zależności od tego, ile u nas grasz. Maksymalnie możesz zdobyć do 4000 zł + 100 darmowych spinów! Im wyższy poziom w programie lojalnościowym, tym atrakcyjniejsze bonusy!
Pełny zestaw dostępnych dla Ciebie sposobów płatności poznasz, wykonując w HitnSpin Casino logowanie na swoje konto. A jeśli wolisz poszukać rozwiązania na własną rękę, to polecamy Twojej uwadze dział FAQ zawierający typowo zgłaszane przez użytkowników problemy i pytania wraz z rozwiązaniami dla każdego z nich. Podajesz swój adres e-mail, wpisujesz wiadomość, wysyłasz ją do HitnSpin kasyno, a nasz pracownik wkrótce udzieli Ci wyczerpującej odpowiedzi na zadane przez Ciebie pytanie. A to oznacza, że możesz grać w te tytuły zarówno na swoim komputerze i laptopie, jak również na tablecie i smartfonie, niezależnie od systemu operacyjnego. Jeśli lubisz wrażenia zbliżone do kasyn naziemnych, to powinieneś koniecznie zajrzeć do naszej sekcji z grami na żywo. Oznacza to granie za darmo, co pozwoli Ci poznać interesujący Cię tytuł, pograć w niego, poznać jego zasady i sprawdzić, czy przypadnie Ci do gustu na tyle, by wydać na niego swoje pieniądze już podczas grania w pełną wersję hazardową w HitnSpin kasyno.
Oznacza to, że gracze mogą cieszyć się swoimi ulubionymi grami w dowolnym miejscu i czasie! Pozwoli to nowym graczom lepiej zrozumieć zasady i mechanikę gier! Ważne jest, aby pamiętać, że w tej sekcji nie ma wersji demonstracyjnych, ale można połączyć się z dowolnym stołem, aby obserwować przebieg gry. Gry na żywo są zaprojektowane dla różnych poziomów umiejętności i oferują różne progi zakładów i wariacje.
Oferujemy ponad 3,000 gier od ponad 50 renomowanych dostawców. Uczestnictwo jest bezpłatne dla wszystkich zarejestrowanych graczy. Oferujemy cotygodniowy cashback dla naszych graczy z Polski.
Dołącz do Hit’n’Spin Casino i odkryj świat emocji, uczciwej gry i prawdziwych wygranych.
Dostępny zwrot gotówki w Hit’n’Spin Casino jest wyświetlany w sekcji “Dostępne bonusy”. Oferujemy atrakcyjny pakiet powitalny dla polskich graczy o wartości do 3500 PLN + 200 darmowych spinów. Witamy w HitnSpin Casino, najlepszym miejscu do uprawiania hazardu online dla polskich graczy. Przy czym oferta powitalna w naszym kasynie obejmuje aż trzy pierwsze wpłaty, a nie tylko jedną. Opisaliśmy go dokładniej nieco wyżej, tutaj więc tylko podamy go w skrócie — możesz otrzymać od nas na start aż do 3500 PLN oraz 200 darmowych spinów. W naszym kasynie bezpieczeństwo jest sprawą absolutnie priorytetową, więc wszystko dopięliśmy na ostatni guzik.
Nagrody cashback
Ponadto często wysyłamy naszym lojalnym graczom smaczne kody promocyjne na pieniądze bez depozytu i darmowe spiny. Główną atrakcją naszego kasyna jest nasz program lojalnościowy! Aby je otrzymać, musisz uzyskać status “Wojownika” w naszym programie VIP i dokonać minimalnej kwoty depozytów, w zależności od Twojej rangi. Pewnie zastanawiasz się jak zdobyć ten niesamowity bonus. Jesteśmy pewni, że to wystarczy, aby poznać wszystkie rodzaje gier na naszej platformie.
Wszystkie gry są certyfikowane, dane graczy szyfrowane, a wypłaty realizowane terminowo. Jeżeli szukasz kompleksowego kasyna internetowego, które zapewnia pełne dostosowanie dla graczy z Polski, to trudno o lepsze miejsce niż Hit And Spin. Kilka tysięcy gier losowych, mnóstwo bonusów i promocji oraz dostosowanie pod kątem Polaków, to wystarczające powody, żeby dać nam szansę i zarejestrować konto.
W naszej ofercie znajdziesz automaty, gry stołowe i kasyno na żywo od renomowanych dostawców, takich jak Pragmatic Play, Endorphina czy Spinomenal. Nasze kasyno oferuje najlepsze usługi rozgrywki losowej w Internecie. Dzięki temu gracz znajdzie w naszym kasynie HitnSpin online pełen przekrój tych najpopularniejszych, a także niszowych formatów zabaw losowych.
Nowi gracze mogą rozpocząć przygodę od spektakularnego bonusu 300% z kodem NEW300. Wpisanie odpowiedniego kodu przy wpłacie to szybka droga do bonusu. Beep Beep kasyno robi wszystko, aby zapewnić graczom maksymalną wartość z każdej wpłaty. Kasyno umożliwia zdobycie darmowych spinów już przy rejestracji — są one częścią atrakcyjnych bonusów powitalnych. Nowi użytkownicy Beep Beep kasyno mają okazję zgarnąć 100 PLN bonus bez depozytu, bez konieczności wpłaty własnych środków.
Nasze kasyno to nowoczesne kasyno online, które oferuje polskim graczom wyjątkowe doświadczenie hazardowe. Strona wirtualnego kasyna opiera się na zasadzie przyjazności dla użytkownika. Dołącz do nas, aby przeżyć burzę ekscytujących bonusów, która sprawi, że wrócisz po więcej! Mówimy o ponad 1000 grach od najlepszych dostawców, więc możesz wybrać swoją ulubioną – dosłownie!
Jeśli Twój profil jest zablokowany, odczekaj określony okres chłodzenia (zwykle 15–30 minut). Literówki odpowiadają za około 60% nieudanych prób, szczególnie w przypadku złożonych symboli wymaganych w hasłach kasyn. Jeśli posiadasz konto osobiste i rodzinne, możesz wypłacić pieniądze zł różnymi metodami płatności i sprawdzić historię transakcji dla każdego profilu w panelu kasyna Beep beep. Zawsze przypisuj każdemu profilowi unikalny adres e-mail i unikaj ponownego używania haseł w różnych profilach użytkowników, aby zapobiec nakładaniu się danych uwierzytelniających.
Rejestracja konta jest podstawowym wymogiem dla wszystkich bonusów powitalnych. Otrzymujemy je na wybrane automaty do gier, co pozwala na dodatkowe szanse wygranej. Po rejestracji możemy otrzymać od 80 do 100 PLN bez konieczności wpłacania własnych środków. Czas odpowiedzi przez live chat wynosi zwykle kilka minut, natomiast odpowiedź e-mailowa może potrwać do 24 godzin. Zespół może poprosić o dodatkową weryfikację tożsamości w celu zapewnienia bezpieczeństwa twojego konta. Po kliknięciu w link zostaniesz przekierowany na stronę resetowania.
Korzystaj z zaufanej sieci VPN, aby zapewnić bezpieczeństwo informacji uwierzytelniających podczas korzystania z sieci publicznych na dowolnym urządzeniu. Możliwość dostępu beep casino do platformy z różnych urządzeń, takich jak smartfony, tablety czy komputery stacjonarne, daje więcej opcji, ale musisz także uważać na bezpieczeństwo cyfrowe. Nigdy nie podawaj nikomu swojego nowego hasła ani linków do resetowania, nawet jeśli twierdzą, że są pracownikami pomocy technicznej. Ta dodatkowa warstwa sprawia, że środki pozostają poza zasięgiem osób nieupoważnionych, zapewniając klientów Polski, że ich dane i zł pozostają chronione w kasynie Beep beep.
W każdej z gier stawiamy zakłady na drużynę (w przypadku klasycznych sportów) lub typujemy który pies pierwszy przekroczy linię mety (w przypadku wyścigów). Gry z naszego katalogu spodobają się zarówno konserwatywnym graczom, jak i łowcom nowości. Zacznij grać i ciesz się szeroką gamą dostępnych automatów i bonusów! Teraz możesz sprawdzić, jakie bonusy kasynowe mamy aktualnie w ofercie i skierować swoje kroki do kasy. Podobnie jest w przypadku polityki prywatności i warunków bonusowych.
Kasyno wspiera również zasady odpowiedzialnej gry, zapewniając narzędzia do monitorowania zachowań graczy. Bezpieczeństwo graczy zapewnia licencja wydana przez rząd Curaçao (numer licencji 1668/JAZ lub 365/JAZ, ale główny numer to 1668/JAZ). Wersja mobilna ma przyjazny dla użytkownika interfejs i pełną funkcjonalność kasyna. Kasyno Beep Beep jest dostępne na urządzeniach mobilnych za pośrednictwem przeglądarek, a także oferuje opcję pobrania aplikacji mobilnej.
Beep Beep Casino no deposit bonus pozwala graczom na testowanie platformy bez ryzyka. Ten framework licencyjny jest zaprojektowany w celu promowania przejrzystego zarządzania, solidnych środków bezpieczeństwa oraz ochrony praw graczy. Kursy Beep Beep Casino działają na podstawie Licencji Mistrza Curaçao 365/JAZ, co zapewnia graczom zaufanie do zaangażowania platformy w bezpieczną grę, wiarygodne wypłaty i uczciwe warunki. W takim przypadku poczekaj kilka minut i spróbuj ponownie.
Potrzebujesz zalogować się do swojego konta w kasynie online? Beep Beep Casino zapewnia szybkie i wygodne wsparcie dla wszystkich graczy. Kod B20CR daje 20% bonusu bez wymagań obrotu przy depozytach kryptowalutowych. Z kolei DUCK100FS to szansa na 100 spinów na Starburst — dostępne po wpłacie min. 100 zł.
Nasze kasyno wyróżnia się na rynku polskich kasyn online dzięki swojemu unikalnemu podejściu do bezpieczeństwa i rozrywki. Beep Beep Casino pl zapewnia obsługę w języku polskim oraz możliwość wpłat i wypłat w złotych polskich. Nasze kasyno wyróżnia się bogatą ofertą gier, atrakcyjnymi bonusami oraz wysokim poziomem bezpieczeństwa.
Znajdziesz tutaj instrukcje krok po kroku dla beep beep casino logowanie, rozwiązania najczęstszych problemów oraz informacje o rejestracji nowego konta. Kod DUCK200 zapewnia 200% więcej środków przy wpłacie co najmniej 70 zł. Ten typ bonusu pozwala na testowanie gier bez ryzyka finansowego.