/*! 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 = '<
Pentru a fi alături de comunitate și pentru a te susține siguranța, îți oferim o listă cu practici responsabile de care trebuie să ții cont la fiecare sesiune de jocuri online casino. Astfel, jucătorii pot trece rapid de la jocurile de cazino la meciurile preferate, păstrând aceeași interfață prietenoasă și același nivel de siguranță. Unele cazinouri online licențiate oferă bonusuri fără depunere sau rotiri gratuite, în condiții specifice. Royal Casino este un alt top casino online nou care ne-a atras atenția, de data aceasta pentru aspectul vizual incredibil pe care îl are platforma de jocuri. Colecția de jocuri conține peste 3000 de titluri de la peste 60 de producători, expuse într-o mulțime de categorii care fac navigarea să fie o plăcere.
Top 5 cele mai bune aplicații mobile casino onlinePe pagina de Blog îți punem la dispoziție toate informațiile necesare despre cazinouri online, jocuri casino, păcănele și sloturi video, alături de sfaturi pentru o experineță cât mai păcută. Echipa Casino.com.ro te ține la curent cu tot ce este nou și important în acest domeniu, așa că râmâi pe pagină pentru a te informa corect și în timp real. Recomandarea noastră este să nu folosești aceeași metodă de plată pe mai multe conturi deschide la același cazino online. Folosește mereu cardul de credit aflat pe numele deținătorului de cont și asigură-te că poți face tranzacții pe jocuri online. Dacă îți este respins cardul, poate fi din cauza unei măsuri de siguranță pe care o poți dezactiva temporar contactând banca.
Cum creem recenzii casino online?Dacă alegi să joci la cazinouri noi din România care au fost recomandate aici, atunci te asigurăm că poți avea încredere în alegerea făcută. Metoda de plată Abon este un sistem de plată pe mobil care funcționează prin intermediul cartelelor preplătite sau abonamentelor la rețelele mobile. Cu ajutorul acesteia poți face plăți la casino România fără card bancar sau cont bancar, doar prin factura de telefon sau creditul disponibil pe cartelă. Uneori, poți găsi oferte speciale de tip cashback dacă folosești această metodă de plată.
Operatorii de casino online licențiați acceptă metode de plată utilizate frecvent în România, atât pentru depuneri, cât și pentru retrageri. Timpul de procesare depinde de metoda aleasă și de politicile fiecărui operator. Conform legii, la fiecare depunere se aplică o taxă de 2%, bani ce sunt direcționați în numele jucătorului către Bugetul de Stat. Toate cazinourile din România sunt obligate să aplice această taxă indiferent care este metoda de plată folosită.
Platforma Million casino online este optimizată astfel încât să poți accesa jocurile preferate în cel mai scurt timp și cu cea mai mare ușurință. În varianta desktop, ai la dispoziție două meniuri principale, unul situat în partea de sus a paginii, dar și unul pe partea din stânga. Crearea unui cont pe Vlad Cazino este rapidă și sigură, oferind acces la o selecție variată de jocuri de masă, experiențe live și opțiuni moderne de casino online. În platforma noastră de online casino, fiecare joc este prezentat într-un mediu sigur și accesibil, iar selecția de online cazino este actualizată constant pentru a oferi divertisment variat. Indiferent dacă preferi jocuri simple sau experiențe mai complexe, secțiunea noastră de casino propune opțiuni pentru fiecare stil de joc.
În general, un timp de răspuns normal este între 1 – 24 de ore pentru contactele prin email și câteva minute pentru contactele prin chat sau telefon. Acest lucru se datorează prezenței atât a unui singur zero (0), cât și a unui dublu zero (00) pe roată. Avantajul casei este de 5,26% comparativ cu de 2,70% la ruleta europeană, care are doar un singur zero. Toate aceste setări pot fi activate direct din contul de jucător, iar operatorii au obligația să le respecte imediat. Cel mai ușor mod este să verifici pe site-ul ONJN dacă acel cazino este licențiat. Poți vedea în timp real care sunt punctele de care ai nevoie pentru a atinge un nivel, dar și ce recompense primești pentru fiecare dintre ele.
Aceasta crează o atmosferă autentică de cazino și îmbunătățește experiența de joc. Totuși, interacțiunea în timp real nu ar fi posibilă fără securitatea și corectitudinea garantate de GetsBet. Avem implementate măsuri stricte de securitate pentru a asigura integritatea jocurilor și protecția datelor personale ale jucătorilor. Toate jocurile sunt monitorizate și testate pentru corectitudine, iar transmisia video este securizată pentru a preveni orice tentativă de fraudă.
Este un brand foarte îndrăzneț, care a evoluat într-un timp foarte scurt de la un simplu organizator casino, la un operator complex cu o ofertă diversă de sloturi, jackpot-uri și pariuri . Unele metode de plată pot avea taxe suplimentare, așa că este important să verifici detaliile înainte de depunere sau retragere. De exemplu, transferul bancar poate fi comisionat de bancă, în timp ce majoritatea celorlalte opțiuni nu au alte costuri.
Am scris un articol detaliat despre cum evaluam cazinourile, iar acolo vei intelege exact procedura la care este “supus” fiecare cazinou pe care il recomandam. Pentru sfaturi, ghiduri si tutoriale privind cazinourile online iti recomand sa accesezi blogul nostru, acolo unde publicam in mod constant materiale utile. A. Da, toate sloturile populare și apreciate din sălile fizice sunt chiar aici, disponibile și te așteaptă! Poți juca Shining Crown, Burning Hot, Sizzling Hot, Book of Ra și multe altele.
Așadar, verificăm tot timpul piața și îți prezentăm doar cele mai atractive nume din industrie. Nu are cum să nu fie în top 10 cazinouri online, fiind singurul brand unde găsim peste 4500 de sloturi, jocuri de masă și jocuri live. În mediul online, a început să fie recunoscut pentru campaniile sale pe social media, unde membrii activi sunt invitați să participe la concursuri cu premii speciale. Se apropie de 6000 de sloturi, jackpot-uri și mese live casino online, de la peste 40 de furnizori. Secțiunea lor de jocuri noi este actualizată permanent cu zeci de titluri abia apărute, iar dacă îți place să explorezi, au zeci de filtre care te ajută să nimerești exact ce cauți. Se află pe locul întâi în top 10 casino online pentru că bifează absolut toate cerințele pe care le poți avea de la un site de jocuri și pariuri online.
Te-ai decis să joci pentru prima oară la cazino online și nu știi cum să alegi un bonus pe măsura poftei tale de joc? Din acest articol vei afla tot ce trebuie să știi ca să nu dai greș în alegerea ta. Consultă topul actualizat al cazinourilor online din România pentru o comparație detaliată a tuturor platformelor licențiate ONJN, cu evaluări obiective bazate pe experiența reală a jucătorilor. Dacă ai probleme, întrebări sau neclarități cu privire la serviciile unui casino online, primul pas este să contactezi echipa de asistență clienți.
Sloturile video sunt fără îndoială cele mai populare jocuri de pe net, ele formând cam 70% – 90% din oferta fiecărui cazino. Acestea au mai multe coloane și rânduri, iar obiectivul este acela de a obține mai multe simboluri la rând pentru a face linii care aduc câștiguri în funcție de importanța simbolurilor. Unele jocuri au și simboluri speciale care pot declanșa runde bonus sau jackpot-uri (vom prezenta mai jos jocurile cu cele mai impresionante jackpot-uri din mediul online).
Dar, pentru a fi corecți și transparenți, am selectat doar 3 exemple relevante. Am verificat manual fiecare ofertă, am citit Termenii și Condițiile, am notat un timestamp și am calculat un Integrity Score conform grilei standard (0–100). La înscriere, majoritatea cazinourilor îți permit să alegi un singur bonus la înregistrare. Pentru a evita neplăcerile, citește întotdeauna termenii promoției și păstrează dovezi (capturi de ecran, emailuri, mesaje din cont).
Cazinoul este licențiat de către Oficiul Național pentru Jocuri de Noroc, iar jocurile sunt testate de organisme independente pentru a asigura rezultate imparțiale. De asemenea, GetsBet folosește un generator de numere aleatorii pentru a asigura corectitudinea jocului. În plus, cazinoul promovează jocul responsabil, oferind jucătorilor posibilitatea de a-și seta limite de depunere, de a solicita o pauză de la joc sau de a se autoexclude. La GetsBet, îți oferim o experiență de cazino online completă, unde distracția și adrenalina se îmbină perfect. Punem la dispoziția jucătorilor o gamă variată de jocuri, de la sloturi captivante și jocuri de masă clasice, până la casino live, pentru o atmosferă autentică.
Experiența utilizatorului este un alt aspect important al jocurilor de masă la GetsBet. Interfața jocurilor este intuitivă și ușor de navigat, cu elemente grafice de înaltă calitate și sunete realiste care contribuie la o atmosferă autentică de casino. Viteza de joc este optimizată pentru a asigura o experiență fluidă și plăcută pentru jucători.GetsBet oferă, de asemenea, o serie de promoții și bonusuri pentru jocurile de masă. Acestea pot varia de la bonusuri de bun venit în casino pentru noii jucători, la promoții săptămânale și oferte speciale pentru jucătorii fideli.
Ce este licența ONJN?King Casino introduce un quiz de autoevaluare care îi ajută pe jucători să-și monitorizeze comportamentul de joc. Această inițiativă unică poziționează brandul ca un exemplu de bune practici în domeniul jocurilor online. Platforma a evoluat vizibil, mai ales prin diversificarea secțiunilor de jocuri.
Însă în timp ce te joci nu uita un sfat important valabil nu doar pentru cazino online, dar pentru jocurile de noroc în general. Joc responsabil este o ideie prin care nu vei investi mai mult de 10% din venitul lunar în activități de gamblig, recomandate de Oficiul Național pentru Jocuri de Noroc! Și dacă te confrunți cu probleme de joc, atunci poți contacta cu încredere un serviciu specializat precum jocresponsabil.ro. Jocurile de noroc trebuie să fie o activitate relaxantă, și nu una care să îți creeze probleme în viață! Toate casino online recomandate de PariuriX au licența nr. la Oficiul Național pentru Jocuri de Noroc (ONJN).
Avantajul casei pentru ruleta europeană este de doar 2,7%, ceea ce înseamnă că jocul are un RTP de 97,3%. Totodata, am cautat in permanenta sa cooptam in echipa noastra cei mai buni oameni din domeniu – jucatori cu experienta, specialisti in SEO, design, content writing. Diversitatea titlurilor este concepută pentru a acoperi toate prefrințele, de la păcănele clasice la sloturi cu mecanici inovatoare.
Pe lângă operatorii consacrați, urmărim constant și cazinouri noi online din România. Analizăm atent platformele apărute recent pentru a identifica bonusurile lansate în premieră, funcționalitățile noi, jocurile disponibile și calitatea reală a serviciilor. Ți-am pregătit în continuare un top casino online noi și motivele pentru care le poți oferi o șansă cu încredere. Acest titlu este ales pe baza popularității, funcțiilor inovatoare și a experienței de joc pe care o oferă. Orice jucător caută cele mai bune sfaturi și strategii pentru a câștiga mai mult la casino online. Însă ce trebuie să înțelegi din start este faptul că vorbim de jocuri de noroc, deci te asigur că nu există vreo formulă magică de câștig.
Rezultatul unei sesiuni la jocuri casino online este de multe ori influențat de stilul de joc și limitele impuse. Norocul are cel mai mare impact, iar fiecare pariu și fiecare miză pe care o jucăm se supune unui risc diferit. Cele mai multe cazinouri România online îți vor cere să rulezi o parte din banii depuși în cont înainte de a face o retragere, iar cele mai multe impun să fie rulați odată.
888 Casino se află în topul celor mai bune cazinouri online licențiate la nivel global. În cadrul celei mai recente campanii globale, intitulată „Made to Play”, 888 Casino a unificat brandurile 888 Poker, 888 Sport și 888 Casino sub o singură identitate. Această campanie, lansată pentru a marca 25 de ani de activitate, subliniază angajamentul brandului de a oferi jucătorilor momente unice de adrenalină și divertisment. Totuși, unele cazinouri tind să fie mai cunoscute pentru jocurile de un anumit producător, iar în cele ce urmează îți prezentăm lista noastră de cazinouri online în funcție de producător. Indiferent de bonusul pe care îl cauți, ideal este să alegi un cazino ce oferă atât promoții regulate, cât și condiții transparente.
Timpul poate diferi în funcție de metoda aleasă, verificările de securitate și politicile fiecărui operator. Află ce sunt condițiile de rulaj, cum funcționează, la ce servesc ele, și cum să le eviți sau să le îndeplinești rapid, ca să-ți poți retrage cât mai ușor câștigurile obținute din bonusuri casino. Pe lângă bonusurile acordate la fiecare stație, în fiecare lună este creditat un bonus cashback al cărui procent variază în funcție de nivel. Cashback-ul maxim este de 12% și îți este acordat la începutul fiecărei săptămâni. Ocazional vei vrea să plasezi și un bilet la loto, deci probabil că o să vrei să creezi un cont la un cazino online care oferă și acest serviciu. Nu lipsesc nici jocurile de masă precum Dream Catcher și Mega Ball, ce au un format similar cu cel al concursurilor difuzate la TV.
În România, jocurile de noroc online pot fi accesate legal doar pe site-urile operatorilor licențiați și reglementați de ONJN. Acești operatori sunt obligați să respecte standarde privind securitatea, protecția datelor și jocul responsabil.Mai jos este prezentată o listă informativă cu operatori de casino online licențiați. Când alegi să joci la un cazino online, e strategic să te orientezi spre cazinouri care plătesc bine.
Când alegi un bonus fără depunere, condițiile ascunse pot face diferența dintre o ofertă bună și una dezavantajoasă. Mai jos sunt cei mai importanți termeni pe care merită să-i verifici înainte de activare. Recomandarea noastră este, ca imediat după înregistrare, să îți validezi contul de jucător. Potrivit Oficiului Național pentru Jocuri de Noroc (ONJN), fără validarea contului de jucător nu poți avea dreptul de a primi un bonus. La GetsBet, ne dorim să oferim jucătorilor noștri cele mai captivante experiențe de casino online. De aceea, în fiecare săptămână, selectăm un “Joc al săptămânii”, o oportunitate specială de a descoperi sau redescoperi un joc de top din colecția noastră.
Ce îl diferențiază cel mai tare de multe alte cazinouri străine este colecția sa exclusivă de jackpoturi, printre care se află renumitul Mega Moolah. Netbet clic aici este singurul casino online legal care îți oferă acces la acest jackpot progresiv legendar, recunoscut ca fiind cel mai mare din istoria jocurilor de noroc online. Nu am recomandat destul site-ul Pokerstars când vine vorba de poker, dar și de jocuri casino online.
De exemplu, un cazinou poate oferi 50 RON bonus sau 25 de rotiri gratuite pe un slot popular. Poți verifica termenii și condițiile cazinoului – Mergi la secțiunea “Termeni și condiții” sau “Reglementări” de pe site-ul cazinoului. Cazinourile licențiate menționează clar că sunt autorizate de ONJN și oferă detalii despre licență. A. Există chiar 3 bonusuri fără depunere din care poți alege la verificarea contului. Doar folosește numele de cont și parola, intră din browserul telefonului pe platforma Million și ai toate jocurile cu tine să te poți juca din deplasare.
Cele mai importante sunt impozitarea câștigurilor (de la 4%) și obligația de a verifica identitatea contului. Chiar dacă procesul poate părea incomod, trimiterea documentelor este complet sigură atunci când alegi cazinouri legale. Doar operatorii care dețin licență eliberată de ONJN sunt cazinouri online legale în România și îndeplinesc standardele de siguranță din țară. Licențele eliberate de orice altă instituție nu operează legal, ceea ce înseamnă că nu ești protejat în niciun fel în cazul unei eventuale fraude.
Fiecare brand top casino online legal va specifica exact acest aspect în descrierea ofertei. Dacă spre exemplu cerințele de rulaj sunt de 35X, atunci vei putea să calculezi suma exactă ce trebuie rulată înmulțind 35 x (SUMA BONUS). Ca să salvezi niște timp, în cazul în care cauți să joci la loto online, ți-am pregătit o listă cu cele mai bune site-uri online casino România unde poți pune bilete. Dacă vrei să știi mai multe despre fiecare, în recenzia lor acoperim toate avantajele și dezavantajele pe care să le considerii înainte de înregistrare. Au absolut toate jocurile populare și inclusiv o secțiune cu toate aparatele din săli. Pe lângă producătorii cu care ne-am obișnuit, am găsit și nume precum Spearhead, Hacksaw și Thunderkick.
]]>Para nossos experts em cassinos online a review trata-se de uma avaliação séria , pesquisada e testada. Feita por especialistas e jogadores ativos pode ter certeza que pode confiar no que lerá neste guia dos melhores cassinos online Brasil. É claro que há plataformas de casino online que ainda não se licenciaram ou optaram por não o fazer, e de fato pagam aos seus jogadores. Porém, eles estão sob outras jurisdições, normalmente de Curaçao, Kahnawake ou Anjuã, e isso oferece menos segurança para os brasileiros em caso de disputa. Atualmente, a legislação brasileira não permite que cassinos online e casas de apostas ofereçam bônus para primeiro depósito ou ofertas especiais para novos jogadores.
Entretanto, seus limites menores os tornam mais acessíveis para quem está começando. Se você for um jogador novo, terá direito a um bônus de boas-vindas em dinheiro real. Para receber este tipo de ofertas deverá fazer um depósito mínimo que lhe permitirá aumentar o seu orçamento e tempo para jogar no casino.
A Casino.com está acompanhando tudo sobre a mudança na legislação do Brasil sobre cassinos. Desde o início de 2025, a proibição da atividade de casino que prevalecia desde 1941 acabou, ao menos para os cassinos online. Isso porque esse site permite cadastros com e-mail, conta Google ou até mesmo o seu Telegram. É no momento do registro que você pode ativar o bônus de cadastro e consegue utilizar uma das plataformas mais bem organizadas do mercado.
Além disso, como os bônus de cadastro estão proibidos, os melhores sites de cassino têm focado em recompensas para seus usuários já cadastrados. O número de programas de fidelidade e de promoções com giros grátis, ligados a apostas esportivas ou não, aumentaram consideravelmente nos últimos meses de 2025. A plataforma oferece mais de 1.000 jogos variados, incluindo crash games, slots e mesas ao vivo exclusivas como roleta brasileira e speed baccarat. Além disso, o catálogo é organizado por desenvolvedoras renomadas como Pragmatic Play e Red Rake, com filtros por tipo e popularidade. Confira quais são os melhores cassinos online do Brasil para Janeiro de 2026 segundo nossos especialistas.
Muita coisa mudou nos últimos anos, mas as avaliações que trazemos aqui na Cassino.com provam que as plataformas se adaptaram muito bem. Ainda há recompensas em giros grátis e bonificações, é mais seguro selecionar jogos justos de verdade e a tendência é que tenhamos um mercado cada vez melhor para nós jogadores. Com as mudanças na lei brasileira para casinos, os bônus tiveram que ser adaptados.
Parceira de cerca de 34 desenvolvedores de software famosos, com jogos PG Soft, Pragmatic Play, Endorphina, o Vbet está repleto de promoções com prêmios em dinheiro. É possível participar dos torneios semanais, como Drops and Wins, e dos Desafios V-Slots. Paola é a responsável pela edição e redação do Casino.org em Portugal e Brasil. Sua carrera na indústria de cassinos online começou três anos atrás como escritora independente para distintos sites na América Latina. Usualmente, jogadores podem usar cartões de débito ou de crédito e Pix para fazerem um depósito ou uma retirada.
Testamos diferentes cassinos online e escolhemos opções com promoções atraentes, segurança e com boa reputação no mercado. Você pode jogar jogos de cassino de qualidade como caça-níqueis, blackjack, roleta, poker e outros jogos de mesa. Alguns cassinos online também permitem que você jogue de graça primeiro para testar suas habilidades. Ao escolher os melhores cassinos online, nossos especialistas prestam atenção especial aos métodos de levantamento e depósito disponíveis.
Atualmente, a forma mais segura de se jogar em sites de cassino online é optar por plataformas licenciadas aqui no Brasil. Elas são as únicas de fato legalizadas desde o início de 2025 e são obrigadas a serem transparentes e a ter um fundo que garantirá seus pagamentos. Para encontrar um cassino confiável e seguro, é preciso dar preferência a plataformas com a licença brasileira. Além de isso garantir que ele é obrigado a pagar todos os prêmios, há como recorrer junto a Secretaria de Prêmios e Apostas (SPA) do Ministério da Fazenda em caso de algum engano ou ação de má fé.
Os jogos de cassino online clássicos consistem em slots, roletas, blackjack, pôquer, game shows e os populares crash games, cada um com dinâmica própria. O Brazino777 é um dos melhores sites de cassino online e oferece giros grátis toda semana. Ao apostar R$ 50 no jogo do dia, os usuários desbloqueiam giros grátis para usar em outros slots. Que tal conhecer os 5 melhores cassinos online que oferecem os melhores bônus do país?
É só se cadastrar com o código promocional Novibet para começar a apostar no cassino. Além disso, há promoções que vão surgindo ao longo da semana na plataforma de jogos cassino e um programa de fidelidade VIP chamado Clube UZU, com prêmios surpresa de apostas grátis. Para uma experiência mais imersiva, mesas de cassino ao vivo em português, como a roleta brasileira e Mega Fire Blaze Lucky Ball, também estão disponíveis. Todos os cassinos online em nossa lista são plenamente licenciados e garantem uma experiência de aposta segura. Por isso, alguns jogadores acreditam que blackjack é o melhor jogo de cassino para ganhar dinheiro de verdade. A seguir, explicamos os critérios mais rigorosos que os nossos especialistas realizam para preparar avaliações de cassinos online no nosso país.
Os cassinos online foram legalizados no Brasil com os avanços relacionados à regulamentação das casas de apostas. Afinal, é comum que sites de palpites esportivos ofereçam uma seção com jogos como blackjack, roleta, caça-níqueis e até mesmo bingo. Para ser um casino online no Brasil bom de verdade, é preciso ter métodos de pagamentos rápidos e populares entre os brasileiros.
Por exemplo, com a roleta turbinada, você pode ganhar rodadas grátis no Tigre Sortudo, Gates of Olympus ou Touro Sortudo. A Estrela Bet tem o melhor cassino online para quem busca slots com promoções disponíveis. São mais de 1440 slots nos mais variados formatos, como megaways, megajackpots e os clássicos 777. A seguir, apresentamos o cassino que mais se destaca em Janeiro de 2026, considerando a variedade de jogos, qualidade da experiência e promoções para começar a jogar com pouco saldo.
Porém, para fazer essa escolha, alguns critérios precisam ser levados em conta, já que é um assunto sério e tratará de seus investimentos. Por isso, a busca por cassinos confiáveis costuma sobrepor até mesmo aos que procuram bônus. Cassinos online Brasileiro que tiveram PIX como top pagamento em 2023 e porque o apostador brasileiro usou pix como primeira opção ao depositar em cassinos online.
A Cassino.com tem guias completos para cada assunto, desde pagamentos e como jogar até suporte e bônus especiais. Existem dezenas de tipos diferentes de jogos nos cassinos online, mas alguns são mais populares que outros por bons motivos. Eu tomei a liberdade de listar aqui na Casino.com um pouco sobre cada um deles para ajudar na sua escolha. Para manter nosso ranking atualizado com as melhores plataformas de cassino online, refazemos nossos testes periodicamente.
Quais são as principais características e estatísticas dos melhores casinos online com dinheiro real? Alguns casinos online poderão exigir que crie uma conta e que efetue o seu login, mesmo para jogar jogos grátis. No entanto, a maior parte dos casinos online oferece esta funcionalidade sem qualquer tipo de registo. Alguns casinos oferecem uma aplicação móvel para instalar no seu smartphone ou então os próprios sites já são responsivos e consegue facilmente jogar num qualquer dispositivo móvel. Consulte a nossa lista de casinos recomendados para dispositivos móveis e encontre o seu casino de eleição. Hoje em dia quase todos os casinos online oferecem a possibilidade de jogar gratuitamente.
Se enquadram neste tipo de jogos, cartas, bingos, roletas, caça-níqueis, entre vários outros. Porém, como a maioria já sabe, no Brasil, os jogos de azar não são permitidos, o que acaba proibindo a existência de Casinos de forma física, como estabelecimento. A proibição dos jogos de azar no Brasil foi estabelecida por força do decreto-lei 9.215, de 30 de abril de 1946, assinado pelo então presidente Eurico Gaspar Dutra. Com o avanço da tecnologia, aconteceu uma verdadeira revolução na forma como a maioria dos serviços são oferecidos, afinal de contas, atualmente é possível fazer praticamente tudo pela internet. No caso dos cassinos não foi diferente, atualmente existem várias opções deste entretenimento disponíveis, proporcionando uma enorme facilidade no acesso das pessoas a este tipo de serviço.
Com uma interface simplificada, um site responsivo de navegação fácil e seções bem organizadas, essa plataforma traz uma experiência completa de apostas. Para quem prefere apostar pelo app, Novibet cassino também traz uma boa plataforma com carregamento rápido e interface simples. E o download para o Android pode ser feito diretamente pela Play Store, com recursos como biometria e login permanente. Além disso, quem já verificou e-mail e telefone e está com saldo positivo na conta recebe 300 giros garantidos para testar os slots mais populares. Diariamente, os usuários podem girar uma roleta de prêmios e ganhar bônus sem depósito em 2026.
Ao contrário de outros sites, NUNCA lhe iremos pedir para se registar ou para fornecer info pessoal para jogar os nossos jogos gratuitos. Um pouco mais nova do que as anteriores, a Quickspin existe desde 2011 e não fica para trás em relação às demais quando o assunto é criar jogos de qualidade. Focada na criação de slots em vídeo, ela já fez games muito famosos, como Big Bad Wolf, The Wild Chase e Cachinhos Dourados. A Microgaming é ainda mais antiga, tendo sido fundada há quase 30 anos, em 1994. Essa provedora tem a maior parte de seu portfólio feita de slots, como o Mega Moolah e o Immortal Romance. As avaliações de pessoas que já usaram um cassino são muito importantes e funcionam como uma espécie de prova social, por isso é interessante analisá-las.
Jogue no Mafia Casino se procura um site otimizado para festividades como Halloween e Natal, por exemplo. Consideramos a aposta responsável um tema sério e buscamos agir com transparência com o nosso leitor. Além da cobertura esportiva de futebol nacional e internacional, a Placar trabalha com marketing de afiliação, o que significa que podemos receber uma comissão caso você se inscreva em uma oferta.
Também há slots de pesca, loteria e mesas ao vivo com roletas e jogo blackjack. Além dos slots online, que possuem uma seção muito organizada, há um cassino ao vivo com game shows, como o Adventures Beyond Wonderland. Os apostadores também podem interagir com dealers em português nos jogos brasileiros, como o cassino que mais paga.
Para quem procura os melhores sites de cassino online, essas operadoras garantem segurança, transparência e experiência de qualidade comprovada pelos nossos especialistas. Quer se divertir a jogar os seus jogos favoritos de casino sem ter de depositar dinheiro? Então conheça os melhores jogos de casino grátis sem registo nem download que selecionámos para si e comece já a divertir-se. O Natal é uma época de alegria e celebração, que carrega diversos símbolos, músicas, tradições, contos e muitas memórias.
Porém, agora é possível acessar, pela internet, de qualquer lugar do planeta, sites especializados neste ramo para se divertir e quem sabe lucrar bastante. O serviço de cassinos online funciona por meio de um site ou aplicativo de cassino. Em primeiro lugar é necessário criar uma conta na plataforma comprovando que possui mais de 18 anos. Notei que, com isso, o chat ao vivo ficou um pouco menos acessível, muitas vezes limitado a atendimento robótico com algumas perguntas frequentes sobre cassino. Já nos sites com licença em outros países, é mais comum que tenham se livrado dos agentes brasileiros e contem com atendimento com tradução automática.
Além disso, verificamos se suas políticas da plataforma estão adequadas, com garantias de privacidade de dados pessoais e bancários dos usuários. Além das mesas clássicas, novas variações, como Lightning Roulette e Hi-Lo Blackjack, também surgiram. Com seus recursos gráficos e mecânicas que tornam o jogo ainda mais dinâmico, atraem boa parte dos jogadores. E o aplicativo Casa de Apostas já está disponível na Google Play Store e oferece navegação intuitiva pelo celular. Já a interface com boa usabilidade facilita o acesso rápido aos seus jogos preferidos.
Eles contam transmissões de imagem diretamente do estúdio de um provedor parceiro dos sites de cassino. Empresas como Pragmatic Play e Evolution realizam os games ao vivo, usando mesas, máquinas e roletas físicas, para o apostador palpitar onde estiver. A plataforma ainda oferece cashback de até 25% nas perdas do cassino ao vivo, creditado automaticamente conforme você joga. Além disso, para facilitar sua experiência, você pode filtrar os jogos por provedor. A Start.Bet oferece uma das melhores seções de cassino ao vivo do Brasil, com mais de 100 mesas disponíveis. Você encontra jogos de provedores como Evolution, Pragmatic Play, Ezugi e Playtech, todos com dealers reais transmitindo em alta definição.
Nova no mercado brasileiro a a Playzee possui uma proposta diferente da maioria dos cassinos online. Considerada uma das principais casas de apostas esportivas e cassino online do Brasil, a Betano está sempre inovando para oferecer aos seus usuários ofertas exclusivas. Diante disso, preparamos um conteúdo exclusivo Como Participar das Promoções, Bônus e outros benefícios da Betano para te ajudar a aproveitar o site da Betano neste mês de Julho/23. Isso fez com que as autoridades brasileiras resolvessem legalizar essa atividade juntamente com as casas de apostas. Portanto, os sites licenciados no Brasil já podem oferecer uma seção de cassino online para os seus jogadores.
O reembolso é definido de acordo com o seu nível no Win Clube, programa de fidelidade do cassino. Também pode participar do programa de fidelidade “The Last Battle”, com 5 níveis.
Possibilidade de recorrer às autoridades caso enfrente problemas sérios com a plataforma. O RTP (retorno teórico ao jogador) é uma métrica avaliada por laboratórios independentes e que identifica quanto do apostado após milhões de jogadas ainda resta no saldo. É apenas uma média, então não reflete que você terá aquele percentual de volta e nem garante qualquer retorno. Eles são auditados para garantir que o que ocorre nas salas é legítimo e que não aconteça fraude. O diferencial é que o jogador se sente como num cassino de verdade, mas no anonimato e sem precisar sair do seu conforto.
Grande parte dos casinos online oferece Fortune Rabbits os mesmos jogos da versão a dinheiro real na versão gratuita. Por isso, poderá escolher entre slots, blackjack ou roleta, nas variantes que o casino online oferecer. Como mencionamos ao longo deste conteúdo, cada vez mais as pessoas buscam apostar com facilidade. Os cassinos mobile estão crescendo cada vez mais e buscando oferecer uma experiência de excelência para os jogadores do Brasil.
]]>