/*! 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 = '<>'; // Important! // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. var ReactPropTypes = { array: createPrimitiveTypeChecker('array'), bigint: createPrimitiveTypeChecker('bigint'), bool: createPrimitiveTypeChecker('boolean'), func: createPrimitiveTypeChecker('function'), number: createPrimitiveTypeChecker('number'), object: createPrimitiveTypeChecker('object'), string: createPrimitiveTypeChecker('string'), symbol: createPrimitiveTypeChecker('symbol'), any: createAnyTypeChecker(), arrayOf: createArrayOfTypeChecker, element: createElementTypeChecker(), elementType: createElementTypeTypeChecker(), instanceOf: createInstanceTypeChecker, node: createNodeChecker(), objectOf: createObjectOfTypeChecker, oneOf: createEnumTypeChecker, oneOfType: createUnionTypeChecker, shape: createShapeTypeChecker, exact: createStrictShapeTypeChecker, }; /** * inlined Object.is polyfill to avoid requiring consumers ship their own * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is */ /*eslint-disable no-self-compare*/ function is(x, y) { // SameValue algorithm if (x === y) { // Steps 1-5, 7-10 // Steps 6.b-6.e: +0 != -0 return x !== 0 || 1 / x === 1 / y; } else { // Step 6.a: NaN == NaN return x !== x && y !== y; } } /*eslint-enable no-self-compare*/ /** * We use an Error-like object for backward compatibility as people may call * PropTypes directly and inspect their output. However, we don't use real * Errors anymore. We don't inspect their stack anyway, and creating them * is prohibitively expensive if they are created too often, such as what * happens in oneOfType() for any type before the one that matched. */ function PropTypeError(message, data) { this.message = message; this.data = data && typeof data === 'object' ? data: {}; this.stack = ''; } // Make `instanceof Error` still work for returned errors. PropTypeError.prototype = Error.prototype; function createChainableTypeChecker(validate) { if (true) { var manualPropTypeCallCache = {}; var manualPropTypeWarningCount = 0; } function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { componentName = componentName || ANONYMOUS; propFullName = propFullName || propName; if (secret !== ReactPropTypesSecret) { if (throwOnDirectAccess) { // New behavior only for users of `prop-types` package var err = new Error( 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use `PropTypes.checkPropTypes()` to call them. ' + 'Read more at http://fb.me/use-check-prop-types' ); err.name = 'Invariant Violation'; throw err; } else if ( true && typeof console !== 'undefined') { // Old behavior for people using React.PropTypes var cacheKey = componentName + ':' + propName; if ( !manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors manualPropTypeWarningCount < 3 ) { printWarning( 'You are manually calling a React.PropTypes validation ' + 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.' ); manualPropTypeCallCache[cacheKey] = true; manualPropTypeWarningCount++; } } } if (props[propName] == null) { if (isRequired) { if (props[propName] === null) { return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); } return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); } return null; } else { return validate(props, propName, componentName, location, propFullName); } } var chainedCheckType = checkType.bind(null, false); chainedCheckType.isRequired = checkType.bind(null, true); return chainedCheckType; } function createPrimitiveTypeChecker(expectedType) { function validate(props, propName, componentName, location, propFullName, secret) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== expectedType) { // `propValue` being instance of, say, date/regexp, pass the 'object' // check, but we can offer a more precise error message here rather than // 'of type `object`'. var preciseType = getPreciseType(propValue); return new PropTypeError( 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'), {expectedType: expectedType} ); } return null; } return createChainableTypeChecker(validate); } function createAnyTypeChecker() { return createChainableTypeChecker(emptyFunctionThatReturnsNull); } function createArrayOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); } var propValue = props[propName]; if (!Array.isArray(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); } for (var i = 0; i < propValue.length; i++) { var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret); if (error instanceof Error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createElementTypeChecker() { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; if (!isValidElement(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); } return null; } return createChainableTypeChecker(validate); } function createElementTypeTypeChecker() { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; if (!ReactIs.isValidElementType(propValue)) { var propType = getPropType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.')); } return null; } return createChainableTypeChecker(validate); } function createInstanceTypeChecker(expectedClass) { function validate(props, propName, componentName, location, propFullName) { if (!(props[propName] instanceof expectedClass)) { var expectedClassName = expectedClass.name || ANONYMOUS; var actualClassName = getClassName(props[propName]); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); } return null; } return createChainableTypeChecker(validate); } function createEnumTypeChecker(expectedValues) { if (!Array.isArray(expectedValues)) { if (true) { if (arguments.length > 1) { printWarning( 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).' ); } else { printWarning('Invalid argument supplied to oneOf, expected an array.'); } } return emptyFunctionThatReturnsNull; } function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; for (var i = 0; i < expectedValues.length; i++) { if (is(propValue, expectedValues[i])) { return null; } } var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { var type = getPreciseType(value); if (type === 'symbol') { return String(value); } return value; }); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); } return createChainableTypeChecker(validate); } function createObjectOfTypeChecker(typeChecker) { function validate(props, propName, componentName, location, propFullName) { if (typeof typeChecker !== 'function') { return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); } var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); } for (var key in propValue) { if (has(propValue, key)) { var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error instanceof Error) { return error; } } } return null; } return createChainableTypeChecker(validate); } function createUnionTypeChecker(arrayOfTypeCheckers) { if (!Array.isArray(arrayOfTypeCheckers)) { true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : 0; return emptyFunctionThatReturnsNull; } for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; if (typeof checker !== 'function') { printWarning( 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.' ); return emptyFunctionThatReturnsNull; } } function validate(props, propName, componentName, location, propFullName) { var expectedTypes = []; for (var i = 0; i < arrayOfTypeCheckers.length; i++) { var checker = arrayOfTypeCheckers[i]; var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret); if (checkerResult == null) { return null; } if (checkerResult.data && has(checkerResult.data, 'expectedType')) { expectedTypes.push(checkerResult.data.expectedType); } } var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': ''; return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.')); } return createChainableTypeChecker(validate); } function createNodeChecker() { function validate(props, propName, componentName, location, propFullName) { if (!isNode(props[propName])) { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); } return null; } return createChainableTypeChecker(validate); } function invalidValidatorError(componentName, location, propFullName, key, type) { return new PropTypeError( (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.' ); } function createShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } for (var key in shapeTypes) { var checker = shapeTypes[key]; if (typeof checker !== 'function') { return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function createStrictShapeTypeChecker(shapeTypes) { function validate(props, propName, componentName, location, propFullName) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== 'object') { return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); } // We need to check all keys in case some are required but missing from props. var allKeys = assign({}, props[propName], shapeTypes); for (var key in allKeys) { var checker = shapeTypes[key]; if (has(shapeTypes, key) && typeof checker !== 'function') { return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); } if (!checker) { return new PropTypeError( 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ') ); } var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); if (error) { return error; } } return null; } return createChainableTypeChecker(validate); } function isNode(propValue) { switch (typeof propValue) { case 'number': case 'string': case 'undefined': return true; case 'boolean': return !propValue; case 'object': if (Array.isArray(propValue)) { return propValue.every(isNode); } if (propValue === null || isValidElement(propValue)) { return true; } var iteratorFn = getIteratorFn(propValue); if (iteratorFn) { var iterator = iteratorFn.call(propValue); var step; if (iteratorFn !== propValue.entries) { while (!(step = iterator.next()).done) { if (!isNode(step.value)) { return false; } } } else { // Iterator will provide entry [k,v] tuples rather than values. while (!(step = iterator.next()).done) { var entry = step.value; if (entry) { if (!isNode(entry[1])) { return false; } } } } } else { return false; } return true; default: return false; } } function isSymbol(propType, propValue) { // Native Symbol. if (propType === 'symbol') { return true; } // falsy value can't be a Symbol if (!propValue) { return false; } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' if (propValue['@@toStringTag'] === 'Symbol') { return true; } // Fallback for non-spec compliant Symbols which are polyfilled. if (typeof Symbol === 'function' && propValue instanceof Symbol) { return true; } return false; } // Equivalent of `typeof` but with special handling for array and regexp. function getPropType(propValue) { var propType = typeof propValue; if (Array.isArray(propValue)) { return 'array'; } if (propValue instanceof RegExp) { // Old webkits (at least until Android 4.0) return 'function' rather than // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ // passes PropTypes.object. return 'object'; } if (isSymbol(propType, propValue)) { return 'symbol'; } return propType; } // This handles more types than `getPropType`. Only used for error messages. // See `createPrimitiveTypeChecker`. function getPreciseType(propValue) { if (typeof propValue === 'undefined' || propValue === null) { return '' + propValue; } var propType = getPropType(propValue); if (propType === 'object') { if (propValue instanceof Date) { return 'date'; } else if (propValue instanceof RegExp) { return 'regexp'; } } return propType; } // Returns a string that is postfixed to a warning about an invalid type. // For example, "undefined" or "of type array" function getPostfixForTypeWarning(value) { var type = getPreciseType(value); switch (type) { case 'array': case 'object': return 'an ' + type; case 'boolean': case 'date': case 'regexp': return 'a ' + type; default: return type; } } // Returns class name of the object, if any. function getClassName(propValue) { if (!propValue.constructor || !propValue.constructor.name) { return ANONYMOUS; } return propValue.constructor.name; } ReactPropTypes.checkPropTypes = checkPropTypes; ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache; ReactPropTypes.PropTypes = ReactPropTypes; return ReactPropTypes; }; /***/ }), /***/ "../node_modules/prop-types/index.js": /*!*******************************************!*\ !*** ../node_modules/prop-types/index.js ***! \*******************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { /** * 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. */ if (true) { var ReactIs = __webpack_require__(/*! react-is */ "../node_modules/prop-types/node_modules/react-is/index.js"); // By explicitly using `prop-types` you are opting into new development behavior. // http://fb.me/prop-types-in-prod var throwOnDirectAccess = true; module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ "../node_modules/prop-types/factoryWithTypeCheckers.js")(ReactIs.isElement, throwOnDirectAccess); } else {} /***/ }), /***/ "../node_modules/prop-types/lib/ReactPropTypesSecret.js": /*!**************************************************************!*\ !*** ../node_modules/prop-types/lib/ReactPropTypesSecret.js ***! \**************************************************************/ /***/ ((module) => { "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 ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; module.exports = ReactPropTypesSecret; /***/ }), /***/ "../node_modules/prop-types/lib/has.js": /*!*********************************************!*\ !*** ../node_modules/prop-types/lib/has.js ***! \*********************************************/ /***/ ((module) => { module.exports = Function.call.bind(Object.prototype.hasOwnProperty); /***/ }), /***/ "../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js": /*!************************************************************************************!*\ !*** ../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js ***! \************************************************************************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; /** @license React v16.13.1 * react-is.development.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ if (true) { (function() { 'use strict'; // The Symbol used to tag the ReactElement-like types. If there is no native Symbol // nor polyfill, then a plain number is used for performance. var hasSymbol = typeof Symbol === 'function' && Symbol.for; var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary // (unstable) APIs that have been removed. Can we remove the symbols? var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8; var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9; var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5; var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6; var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7; function isValidElementType(type) { return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE); } function typeOf(object) { if (typeof object === 'object' && object !== null) { var $$typeof = object.$$typeof; switch ($$typeof) { case REACT_ELEMENT_TYPE: var type = object.type; switch (type) { case REACT_ASYNC_MODE_TYPE: case REACT_CONCURRENT_MODE_TYPE: case REACT_FRAGMENT_TYPE: case REACT_PROFILER_TYPE: case REACT_STRICT_MODE_TYPE: case REACT_SUSPENSE_TYPE: return type; default: var $$typeofType = type && type.$$typeof; switch ($$typeofType) { case REACT_CONTEXT_TYPE: case REACT_FORWARD_REF_TYPE: case REACT_LAZY_TYPE: case REACT_MEMO_TYPE: case REACT_PROVIDER_TYPE: return $$typeofType; default: return $$typeof; } } case REACT_PORTAL_TYPE: return $$typeof; } } return undefined; } // AsyncMode is deprecated along with isAsyncMode var AsyncMode = REACT_ASYNC_MODE_TYPE; var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; var ContextConsumer = REACT_CONTEXT_TYPE; var ContextProvider = REACT_PROVIDER_TYPE; var Element = REACT_ELEMENT_TYPE; var ForwardRef = REACT_FORWARD_REF_TYPE; var Fragment = REACT_FRAGMENT_TYPE; var Lazy = REACT_LAZY_TYPE; var Memo = REACT_MEMO_TYPE; var Portal = REACT_PORTAL_TYPE; var Profiler = REACT_PROFILER_TYPE; var StrictMode = REACT_STRICT_MODE_TYPE; var Suspense = REACT_SUSPENSE_TYPE; var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated function isAsyncMode(object) { { if (!hasWarnedAboutDeprecatedIsAsyncMode) { hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); } } return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; } function isConcurrentMode(object) { return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; } function isContextConsumer(object) { return typeOf(object) === REACT_CONTEXT_TYPE; } function isContextProvider(object) { return typeOf(object) === REACT_PROVIDER_TYPE; } function isElement(object) { return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; } function isForwardRef(object) { return typeOf(object) === REACT_FORWARD_REF_TYPE; } function isFragment(object) { return typeOf(object) === REACT_FRAGMENT_TYPE; } function isLazy(object) { return typeOf(object) === REACT_LAZY_TYPE; } function isMemo(object) { return typeOf(object) === REACT_MEMO_TYPE; } function isPortal(object) { return typeOf(object) === REACT_PORTAL_TYPE; } function isProfiler(object) { return typeOf(object) === REACT_PROFILER_TYPE; } function isStrictMode(object) { return typeOf(object) === REACT_STRICT_MODE_TYPE; } function isSuspense(object) { return typeOf(object) === REACT_SUSPENSE_TYPE; } exports.AsyncMode = AsyncMode; exports.ConcurrentMode = ConcurrentMode; exports.ContextConsumer = ContextConsumer; exports.ContextProvider = ContextProvider; exports.Element = Element; exports.ForwardRef = ForwardRef; exports.Fragment = Fragment; exports.Lazy = Lazy; exports.Memo = Memo; exports.Portal = Portal; exports.Profiler = Profiler; exports.StrictMode = StrictMode; exports.Suspense = Suspense; exports.isAsyncMode = isAsyncMode; exports.isConcurrentMode = isConcurrentMode; exports.isContextConsumer = isContextConsumer; exports.isContextProvider = isContextProvider; exports.isElement = isElement; exports.isForwardRef = isForwardRef; exports.isFragment = isFragment; exports.isLazy = isLazy; exports.isMemo = isMemo; exports.isPortal = isPortal; exports.isProfiler = isProfiler; exports.isStrictMode = isStrictMode; exports.isSuspense = isSuspense; exports.isValidElementType = isValidElementType; exports.typeOf = typeOf; })(); } /***/ }), /***/ "../node_modules/prop-types/node_modules/react-is/index.js": /*!*****************************************************************!*\ !*** ../node_modules/prop-types/node_modules/react-is/index.js ***! \*****************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; if (false) {} else { module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js"); } /***/ }), /***/ "../node_modules/react-dom/client.js": /*!*******************************************!*\ !*** ../node_modules/react-dom/client.js ***! \*******************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var m = __webpack_require__(/*! react-dom */ "react-dom"); if (false) {} else { var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; exports.createRoot = function(c, o) { i.usingClientEntryPoint = true; try { return m.createRoot(c, o); } finally { i.usingClientEntryPoint = false; } }; exports.hydrateRoot = function(c, h, o) { i.usingClientEntryPoint = true; try { return m.hydrateRoot(c, h, o); } finally { i.usingClientEntryPoint = false; } }; } /***/ }), /***/ "react": /*!************************!*\ !*** external "React" ***! \************************/ /***/ ((module) => { "use strict"; module.exports = React; /***/ }), /***/ "react-dom": /*!***************************!*\ !*** external "ReactDOM" ***! \***************************/ /***/ ((module) => { "use strict"; module.exports = ReactDOM; /***/ }), /***/ "@elementor/ui": /*!*********************************!*\ !*** external "elementorV2.ui" ***! \*********************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui; /***/ }), /***/ "@elementor/ui/Box": /*!****************************************!*\ !*** external "elementorV2.ui['Box']" ***! \****************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['Box']; /***/ }), /***/ "@elementor/ui/Button": /*!*******************************************!*\ !*** external "elementorV2.ui['Button']" ***! \*******************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['Button']; /***/ }), /***/ "@elementor/ui/Card": /*!*****************************************!*\ !*** external "elementorV2.ui['Card']" ***! \*****************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['Card']; /***/ }), /***/ "@elementor/ui/CardActions": /*!************************************************!*\ !*** external "elementorV2.ui['CardActions']" ***! \************************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['CardActions']; /***/ }), /***/ "@elementor/ui/CardContent": /*!************************************************!*\ !*** external "elementorV2.ui['CardContent']" ***! \************************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['CardContent']; /***/ }), /***/ "@elementor/ui/CardMedia": /*!**********************************************!*\ !*** external "elementorV2.ui['CardMedia']" ***! \**********************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['CardMedia']; /***/ }), /***/ "@elementor/ui/Dialog": /*!*******************************************!*\ !*** external "elementorV2.ui['Dialog']" ***! \*******************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['Dialog']; /***/ }), /***/ "@elementor/ui/DialogActions": /*!**************************************************!*\ !*** external "elementorV2.ui['DialogActions']" ***! \**************************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['DialogActions']; /***/ }), /***/ "@elementor/ui/DialogContent": /*!**************************************************!*\ !*** external "elementorV2.ui['DialogContent']" ***! \**************************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['DialogContent']; /***/ }), /***/ "@elementor/ui/DialogContentText": /*!******************************************************!*\ !*** external "elementorV2.ui['DialogContentText']" ***! \******************************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['DialogContentText']; /***/ }), /***/ "@elementor/ui/DialogHeader": /*!*************************************************!*\ !*** external "elementorV2.ui['DialogHeader']" ***! \*************************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['DialogHeader']; /***/ }), /***/ "@elementor/ui/DialogHeaderGroup": /*!******************************************************!*\ !*** external "elementorV2.ui['DialogHeaderGroup']" ***! \******************************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['DialogHeaderGroup']; /***/ }), /***/ "@elementor/ui/DialogTitle": /*!************************************************!*\ !*** external "elementorV2.ui['DialogTitle']" ***! \************************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['DialogTitle']; /***/ }), /***/ "@elementor/ui/Divider": /*!********************************************!*\ !*** external "elementorV2.ui['Divider']" ***! \********************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['Divider']; /***/ }), /***/ "@elementor/ui/Link": /*!*****************************************!*\ !*** external "elementorV2.ui['Link']" ***! \*****************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['Link']; /***/ }), /***/ "@elementor/ui/List": /*!*****************************************!*\ !*** external "elementorV2.ui['List']" ***! \*****************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['List']; /***/ }), /***/ "@elementor/ui/ListItem": /*!*********************************************!*\ !*** external "elementorV2.ui['ListItem']" ***! \*********************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['ListItem']; /***/ }), /***/ "@elementor/ui/ListItemButton": /*!***************************************************!*\ !*** external "elementorV2.ui['ListItemButton']" ***! \***************************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['ListItemButton']; /***/ }), /***/ "@elementor/ui/ListItemText": /*!*************************************************!*\ !*** external "elementorV2.ui['ListItemText']" ***! \*************************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['ListItemText']; /***/ }), /***/ "@elementor/ui/TextField": /*!**********************************************!*\ !*** external "elementorV2.ui['TextField']" ***! \**********************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['TextField']; /***/ }), /***/ "@elementor/ui/Typography": /*!***********************************************!*\ !*** external "elementorV2.ui['Typography']" ***! \***********************************************/ /***/ ((module) => { "use strict"; module.exports = elementorV2.ui['Typography']; /***/ }), /***/ "@wordpress/i18n": /*!**************************!*\ !*** external "wp.i18n" ***! \**************************/ /***/ ((module) => { "use strict"; module.exports = wp.i18n; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js": /*!******************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***! \******************************************************************/ /***/ ((module) => { function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } module.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js": /*!****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/arrayWithHoles.js ***! \****************************************************************/ /***/ ((module) => { function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } module.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/extends.js": /*!*********************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/extends.js ***! \*********************************************************/ /***/ ((module) => { function _extends() { return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, module.exports.__esModule = true, module.exports["default"] = module.exports, _extends.apply(null, arguments); } module.exports = _extends, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js": /*!***********************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! \***********************************************************************/ /***/ ((module) => { function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js": /*!**********************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***! \**********************************************************************/ /***/ ((module) => { function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } module.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/nonIterableRest.js": /*!*****************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/nonIterableRest.js ***! \*****************************************************************/ /***/ ((module) => { function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } module.exports = _nonIterableRest, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js": /*!**************************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js ***! \**************************************************************************/ /***/ ((module) => { function _objectDestructuringEmpty(t) { if (null == t) throw new TypeError("Cannot destructure " + t); } module.exports = _objectDestructuringEmpty, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/slicedToArray.js": /*!***************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/slicedToArray.js ***! \***************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles.js */ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js"); var iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit.js */ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js"); var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js"); var nonIterableRest = __webpack_require__(/*! ./nonIterableRest.js */ "../node_modules/@babel/runtime/helpers/nonIterableRest.js"); function _slicedToArray(r, e) { return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest(); } module.exports = _slicedToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/typeof.js": /*!********************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/typeof.js ***! \********************************************************/ /***/ ((module) => { function _typeof(o) { "@babel/helpers - typeof"; return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o); } module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }), /***/ "../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js": /*!****************************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***! \****************************************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ "../node_modules/@babel/runtime/helpers/arrayLikeToArray.js"); function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0; } } module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry needs to be wrapped in an IIFE because it needs to be in strict mode. (() => { "use strict"; /*!****************************************!*\ !*** ../modules/home/assets/js/app.js ***! \****************************************/ /* 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 _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); var _react2 = _interopRequireDefault(__webpack_require__(/*! elementor-utils/react */ "../assets/dev/js/utils/react.js")); var _ui = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); var _homeScreen = _interopRequireDefault(__webpack_require__(/*! ./components/home-screen */ "../modules/home/assets/js/components/home-screen.js")); var App = function App(props) { return /*#__PURE__*/_react.default.createElement(_ui.DirectionProvider, { rtl: props.isRTL }, /*#__PURE__*/_react.default.createElement(_ui.LocalizationProvider, null, /*#__PURE__*/_react.default.createElement(_ui.ThemeProvider, { colorScheme: 'light' }, /*#__PURE__*/_react.default.createElement(_homeScreen.default, { homeScreenData: props.homeScreenData, adminUrl: props.adminUrl })))); }; var isRTL = elementorCommon.config.isRTL, adminUrl = elementorAppConfig.admin_url, rootElement = document.querySelector('#e-home-screen'); App.propTypes = { isRTL: PropTypes.bool, adminUrl: PropTypes.string, homeScreenData: PropTypes.object }; _react2.default.render(/*#__PURE__*/_react.default.createElement(App, { isRTL: isRTL, homeScreenData: elementorHomeScreenData, adminUrl: adminUrl }), rootElement); })(); /******/ })() ; //# sourceMappingURL=e-home-screen.js.map Huippuluokan Online-Kasino Suomalaisille – Paok

Huippuluokan Online-Kasino Suomalaisille

casino days

Palvelua saa myös suomeksi, mutta pelaajan kannattaa huomioida että suomenkielinen tuki ei saata olla paikalla kaikkina vuorokauden aikoina. Vuonna 2020 Suomen markkinoille tullut CasinoDays on nettikasino, joka tarjoaa laajan pelivalikoiman tunnetuilta pelivalmistajilta ja upean tervetuliaisbonuksen uusille pelaajille. Casino Days bonus antaa uusille pelaajille 100% bonuksen 500 € asti ja 100 ilmaiskierrosta.

⃣ Onko Casino Days -arvostelussa eksklusiivinen bonus?

Uransa aikana hän on tutustunut yli 400 nettikasinoon ja kirjoittanut tuhansia arvosteluita testaten sekä kasinot että pelit huolellisesti. Taustalla Pasilla on viestinnän opintoja Jyväskylän Yliopistosta, joissa pääpaino on ollut kirjoittamisessa. Lisäksi kasino tarjoaa esimerkiksi viikottaisia käteisbonuksia tarjoavan VIP-ohjelman, johon voivat liittyä kaikki halukkaat kasinon pelaajat. Pelivalikoima on todella tärkeä, kun pelaaja valitsee nettikasinoita missä pelata. Aloittaakseen pelaamisen, pelaajan ei tarvitse rekisteröityä tai täyttää henkilökohtaisia tietoja, vaan riittää että pelaaja tekee talletuksen Briten avulla. CasinoDays nettikasino tarjoaa todella laajan pelivalikoiman ja nopeat rahansiirrot.

Myös sähköpostin kautta on mahdollista saada apua suomeksi. Sähköpostin kautta on hyvä asioida silloin, kun asialla ei ole tulenpalava kiire. Asiakaspalvelu toimii siten, että aluksi pelaaja etsii vastausta usein kysytyistä kysymyksistä. Mikäli vastausta ei löydy sitä kautta, nettikasino antaa mahdollisuuden ottaa yhteyttä live-chatin tai sähköpostin kautta.

⃣ Miten voitot kotiutetaan Casino Daysilla?

Casino Days on vuonna 2020 julkaistu verovapaa kasino, joka luottaa rahansiirroissa Brite-maksupalveluun. Nettikasinon operaattorina toimii Play Well Media Limited, jonka tunnetuin luomus on Buusti Kasino. Samalla kasinoalustalla seilaa myös kovaa nousua tekevä Big Boost Casino.

  • Kasino tiedottaa ulottuvillasi olevista tarjouksista suoraan sinulle, kunhan sallit pelitilisi asetuksissa markkinointiviestit.
  • Halusimme vielä tiivistää kaikista tärkeimmät seikat alapuolelle pienen UKK-osion muodossa, joka kannattaa ehdottomasti lukaista läpi.
  • Casino Daysin livekasinolla pääsee pelaamaan suosituimpia livepelejä mm.
  • Näissä kampanjoissa, joihin pääsee mukaan Casino Days -pelaajana, on jaossa huikean suuria voittopotteja.
  • Kolikkopelien lisäksi tarjolla on muutamia pöytäpelejä, kuten baccarattia, rulettia sekä blackjackia.
  • Ja voi pojat, pelivalmistajia tällä kasinolla on vaikka muille jakaa.
  • Pika-kasinot.comin pelaajille on tarjolla tervetulobonus, jossa saat 100% käteiskierrätysbonuksen 500 € asti ja 100 Book of Dead -ilmaiskierrosta.
  • Apua saa myös kattavasta UKK-osiosta, jossa on vastaus useaan kysymykseen.
  • Tutustu eksklusiivisiin bonustarjouksiin Casino Days -sivustolla.
  • Ilmaiskierrosten voitot tulee kierrättää 40-kertaa, ennen kuin kotiutus on mahdollinen ja aikaa kierrätykselle on varattuna 30 päivää.

Ihan perinteinen bonus ei kuitenkaan ole kyseessä, vaan tarjolla on niin kutsuttu non-sticky bonus, eli käteisbonus. Tämä tarkoittaa sitä, että bonusvarat lisätään omalle tilille vasta sen jälkeen, kun kierrätysvaatimus on täytetty. Casino Days tekee myös yhteistyötä monien arvostettujen yritysten kanssa. Jonkinlainen Casino Days -petos olisi siis hyvin kaukainen ajatus. Myös suuret pelitalot antavat vahvan laatutakuun sivuston toiminnalle. CasinoDays bonus tuplaa ensitalletuksen jopa 500 euroon asti.

Talletukset ja kotiutukset

Sen takia on syytä varautua siihen, että palvelua saa ainoastaan englanniksi. Luultavasti suomenkielisiä asiakaspalvelijoita on live-chatin linjoilla arkisin päiväsaikaan, joten silloin kannattaa yrittää, jos haluaa palvelua suomeksi. Kasinolla on käytössä niin sanottu esikierrätys, joka eroaa hieman perinteisestä kierrätysvaatimuksesta. Esikierrätyksessä pelaajan tulee ensin täyttää kierrätysvaatimus, jonka jälkeen bonusrahat vapautetaan pelaajan käyttöön.

Aivan kuten talletus, myös kotiutus tapahtuu Briten kautta ja maksu siirtyy suoraan omalle pankkitilille. Nosto tapahtuma itsessään on todella simppeli, pelaajan tulee vain siirtyä nosto-osioon, valittava kotiutettava summa ja vahvistettava maksu. Pikakasinoiden suurena etuna on se, että nostot näkyvät omalla tilillä tyypillisesti todella pian kotiutuksen jälkeen ja niin tapahtuu myös tällä sivustolla. Kannattaa kuitenkin jatkaa vielä lukemista, sillä seuraavaksi puhumme hieman tarkemmin bonuksen käyttöehdoista ja muista tarjolla olevista kampanjoista.

Casino Days pelit – Hurjan kokoinen pelivalikoima

Ainakaan tällä hetkellä Casinodays ilmaiskierrokset ilman talletusta eivät kuulu kampanjoihin, jos pelaajalla ei ole VIP-statusta. Ilman talletusta saatavissa bonuksissa on oletuksena 50€ voittokatto. CasinoDays on luotettava nettikasino, koska kasinon toimintaa valvoo arvostettu Viron Vero- ja Tullihallitus. Paneuduimme asiaan huolella ja voimme onneksi kertoa, että kyseessä on täysin laillinen kasino, jolla on vaadittavat luvat ja lisenssit kunnossa.

Casino Days Mobiili

Kotiutuksen tekemiseksi sinun on vain siirryttävä kasinon nosto-osioon, valittava kotiutettava summa ja vahvistettava tapahtuma. Tutustuimme tähän operaattoriin huolella ja voimme iloksemme kertoa, että Casino Days ei ole petos. Kyseessä on Viron laadukkaalla EMTA-lisenssillä varustettu pelipaikka, joka on huolehtinut kaikista turvallisuuteen vaikuttavista tekijöistä. Tämän lisenssin alla operoitavia sivustoja säädellään ja valvotaan tiukalla otteella, minkä ansiosta kyseisellä kasinolla uskaltaa ehdottomasti lähteä pelaamaan.

casino days

On useita syitä miksi kannattaa valita CasinoDays nettikasino seuraavaksi pelipaikaksi. CasinoDays tarjoaa makean tervetuliaisbonuksen uusille pelaajilleen, mutta myös ”vanhoja” pelaajia hemmotellaan jatkuvasti uusilla bonuksilla ja tarjouksilla. Sivuston peliaulasta löytyy tuhansittain pelejä alan parhaimmistolta, eikä suuresta tervetulobonuksesta voi valittaa. EMTA-lisenssi takaa turvallisen ja verovapaan pelielämyksen, josta päästään nauttimaan helposti Pay n Play -tyylillä. Verkkosivujen apua -osiosta löytyy myös avulias UKK-osio, joka vastaa tiivistetysti muutamaan yleiseen kysymykseen, joita sivuston käyttö pelaajien keskuudessa herättää. Ja jos näin ei tapahdu, saa tukeen yhteyden nopeasti napsauttamalla chat-kuvaketta.

Jos et vielä ole päässyt pelaamaan CasinoDays -sivustolle, on luvassa harvinaisen hyvää herkkua. Koska pääsimme kokeilemaan Casino Days ominaisuuksia ennen muita, on meillä tuoreimpia kokemuksia sen pikakasino ominaisuudesta. Live-pelien aulanäkymä on fiksusti koottu kokonaisuus, jossa pelejä voi tarkastella omissa, pelilajikohtaisissa osioissaan. Pelituottajan nimi näkyy pelikuvakkeen alla, mutta pelejä voi hakutoiminnon kautta etsiä myös tuottajasuodatuksella. Saat bonuksen käyttöösi, kun kierrätys on valmis ja tämän jälkeen bonus on käytännössä kierrätysvapaa. Bonuksen luonne kannattaa kuitenkin tiedostaa, ettei talletuksen jälkeen tule suru puseroon.

CasinoDays kokemuksia – ensimmäiset kokemukset

casino days

Yli 30 jackpot-pelin kategoria sisältää pääasiassa Games Globalin / Microgamingin supersuosittuja megaluokan progressiivisen jättipotin pelejä. Jopa useiden miljoonien eurojen päävoittoja hautovat esimerkiksi Mega Moolah Goddess, Juicy Joker Mega Moolah, Major Millions ja Sisters of Oz Wowpot. Pelit on kätevästi kategorisoitu esimerkiksi suosittuihin, uusiin, osto-ominaisuudella varustettuihin sekä Megaways-peleihin, joten löydät helposti etsimäsi. Miinusta tulee ainoastaan jackpot-kategorian puuttumisesta; jättipottipelit täytyy siis kaivaa esiin manuaalisesti.

Tämän kasinon peliaula on suorastaan lumoava eikä sitä voi kuin ihastella. Tarjolla on lähes 5000 erilaista slottia, joiden joukossa pelaajat pääsevät sukeltamaan moniin eri teemoihin. Tarjolla on kasinoiden ikisuosikkeja, kuumia uutuuksia sekä parhaita mobiilipelejä. Tarjonnasta vastaa alan kuumimpia studioita, kuten NetEnt, Pragmatic Play, Elk Studios ja monia muita. Peliaula on valtava, mutta Casino Days ei ole suinkaan panostanut vain määrään, sillä tarjolla on pelejä alan parhaimmistolta.

Casino Days – Suosittu Pelikohde Suomalaisten Keskuudessa

Turvallisuus on kaiken kulmakivi, mikä tulee nettikasinoiden toimintaan ja pelipaikkojen rehellisyys onkin hyvä varmistaa aina etukäteen. Siksi haluammekin aloittaa tämän arvostelun puhumalla operaattorin turvallisuudesta ja siihen vaikuttavista tekijöistä. Voimme kertoa jo tässä vaiheessa, että minkäänlainen Casino Days -petos ei ole kyseessä, vaan tältä operaattorilta löytyy vaadittavat luvat toimintansa pyörittämiseen. Lisäksi rupattelemme asiakaspalvelun kanssa ja selvitämme, kuinka ripeästi ongelmat ratkeavat. Tekstimme suuri painoarvo tulee tottakai olemaan Casino Daysin turvallisuudessa ja tulemme puhumaan tarkemmin esimerkiksi sivuston EMTA-lisenssistä.

Lisenssi ja turvallisuus

  • Kasinon käyttöliittymän lisäksi myös pelit on käännetty suomeksi, joten kielimuuria ei pääse syntymään.
  • Bonuskoodit.com sai vihiä nettikasinon uudistuksesta jo etukäteen ja olimme kärppänä paikalla keräämässä Casino Days kokemuksia heti päivityksen jälkeen.
  • Se on tehty mahdolliseksi poistamalla rekisteröinti kokonaan ja pelaajat pääsevät nyt heti kättelyssä tekemään ensimmäisen talletuksen.
  • Lisäksi sivustolta löytyy hakutoiminto, jonka avulla voit suoraan etsiä omia suosikkejasi.
  • Luultavasti suomenkielisiä asiakaspalvelijoita on live-chatin linjoilla arkisin päiväsaikaan, joten silloin kannattaa yrittää, jos haluaa palvelua suomeksi.
  • Tämä on käteiskierrätysbonus, eli bonus tulee käteisenä tilille, kun kierrätys on suoritettu.
  • Tämän lisenssin alla operoitavia sivustoja säädellään ja valvotaan tiukalla otteella, minkä ansiosta kyseisellä kasinolla uskaltaa ehdottomasti lähteä pelaamaan.
  • Ja mikä parasta, tilivapaan alustan ansiosta mobiilissa pelaaminen on todella helppoa ja aloitus onnistuu nopeasti ilman turhien lomakkeiden täyttöä.
  • Live-puolelta löytyy runsaasti yli 300 peliä, jotka koostuvat erilaisista pöydistä sekä show-peleistä.
  • Ja mikä parasta, hyppysissäsi on tällä helppokäyttöisellä, suomalaisille suunnitellulla sivustolla kerrassaan erinomainen, yli pelin valikoima.
  • Casino Daysin voi aivan yhtä hyvin ottaa haltuun mobiilissa, sillä sivusto toimii kuin valettu myös mobiililaitteilla.
  • Uusien nettikasinoiden kanssa on oltava aina varuillaan, sillä niiden joukkoon mahtuu myös petollista sakkia ja epärehellisiä operaattoreita.
  • Kyseessä oli siellä non-sticky-ominaisuus, jolloin bonuksen saattoi perua ennen kuin siirtyi oman talletussumman jälkeen käyttämään bonusrahaa.
  • Sivustolta löytyy esimerkiksi Tietoa meistä sekä Ohje ja UKK-sivut.
  • Mielestämme Casino Days on onnistunut kokoamaan todella hyvän pelivalikoiman, joka tarjoaa pelattavaa moneen eri makuun, vaikka bingo ja urheiluvedonlyönti jäävätkin täältä puuttumaan.

CasinoDays on omistanut sivun vastuulliselle pelaamiselle ja sen löytää sivuston oikeasta alareunasta. CasinoDays tarjoaa erilaisia keinoja pelaamisen tutkiskeluun, vähentämiseen tai lopettamiseen. Kun on aika päästä nauttimaan voitoista, täytyy pelaajan ensin kotiuttaa voitot pelitililtään. Voittojen kotiuttaminen onnistuu helposti ja nopeasti Brite-maksupalvelun avulla ja siihen tarvitaan ainoastaan verkkopankkitunnukset. CasinoDays on Pay N Play pikakasino, joten pelaamisen aloittaminen onnistuu helposti ja nopeasti, ilman rekisteröitymistä. CasinoDays on luotettava ja turvallinen valinta pelipaikaksi, sillä kyseessä on lisensoitu kasino.

Pelintuottajat

Melko kotimaiselta näyttävään järvimaisemaan on lisätty veden päällä kelluva pikkukasino! Casino Days onkin erinomaisesti suomalaisille pelaajille räätälöity pelipaikka aina käyttöliittymästä asiakaspalveluun. Casino Daysin voi aivan yhtä hyvin ottaa haltuun mobiilissa, sillä sivusto toimii kuin valettu myös mobiililaitteilla. Erillistä sovellusta ei kuitenkaan tarvitse ladata, sillä sivusto on valmiiksi optimoitu mobiililaitteille. Kasinolla voi siis suoraan vierailla puhelimella tai tabletilla, kunhan vain avaa kasinon etusivun laitteen selaimessa.

  • Täältä pääsee lukemaan tarkemmin esimerkiksi kasinon tarjoaman tervetuliaisbonuksen ehtoja.
  • Huomion arvoista on, että bonus ei ole tavan talletusbonus, joka lisätään talletuksesi päälle heti.
  • Emme aio jättää yhtään kiveä kääntämättä, vaan sukellamme syvälle kasinon pelivalikoimaan, bonuksiin sekä rahansiirtoihin.
  • Minimitalletus on 10 euroa, jolloin kasino antaa toisen 10 euroa ilmaista pelirahaa.
  • Kyseinen lisenssi on yksi alan arvostetuimmista ja tiukimmin säädellyistä pelilisensseistä, joten sen alaisena toimiviin operaattoreihin uskaltaa ehdottomasti luottaa.
  • Nykypäivänä mobiilikasinot vetävät vähintäänkin yhtä paljon pelaajia puoleensa kuin niiden vastaavat desktop versiot.
  • Tämä käy nykyään nopeasti ja pelaamaan pääsee muutamassa minuutissa, mikäli on uusi pelaaja.
  • Kannattaa pitää mielessä, että kasinobonusten lunastaminen ja käyttäminen ei koskaan ole pakollista.
  • Hyvä puoli on se että palvelu pelaa 24 tuntia vuorokaudessa reaaliaikaisessa live-chatissä.

Voittojen kotiuttaminen on helppoa CasinoDays nettikasinolta

casino days

Lucky Days voi varttuneemmille pelaajille tuoda mieleen vuosikymmenien takaisen, retrohenkisen ja supersuositun TV-sarjan Onnen päivät. Mainion Lucky Days Casinon teema ei kuitenkaan liity 1950-lukuun eikä Fonzieen vaan yksinkertaisesti hyvään onneen. Onnea ja vaurautta symboloi ja uskomuksen mukaan myös tuottaa kasinon söpö maskotti, Japanista kotoisin oleva Maneki Neko -kissa, joka vilkuttelee sinulle heti etusivulla. Sivustolla navigointi on tehty pelaajille todella helpoksi niin mobiililaitteilla kuin pöytäkoneellakin. Voisimme melkein todeta, että mobiililaitteella kasino näytti vielä hiukan paremmalta kuin tietokoneen puolella, sillä kaikki tarvittava oli heti käden ulottuvilla.

Asiakaspalvelua saatavilla ympäri vuorokauden

Casino Days on niin kutsuttu Pay N Play -kasino ja sen parissa rahansiirrot tapahtuvat maksunvälittäjä Briten avulla. Tämä tarkoittaa käytännössä sitä, että Casino Days talletukset ja kotiutukset hoidetaan omien suomalaisten verkkopankkitunnuksien avustuksella. Mikäli kaipaat kuitenkin PayPal -kasinoa, kannattaa tarkastaa muut arvostelemamme pelipaikat. Asiakaspalvelu toimii 24/7 ja tukea on saatavana myös suomeksi, mikä helpottaa asiointia merkittävästi. Helpoin ja nopein tapa ottaa yhteyttä on verkkosivuilta löytyvän chat-toiminnon kautta. Vaikka kyseessä olisi kuinka laadukas operaattori tahansa, eteen voi aina tulla erilaisia ongelmia ja kysymyksiä.

Jos haluat kuulla Casino Days kokemuksia tai saada tietoa VIP-eduista, peleistä ja maksuehdoista, lue meidän laatima Casino Days arvostelu lävitse. Esittelemme myös tervetuliaisbonuksen ja sen tärkeimmät ehdot läpikotaisin. Kuten jo aiemmin kerroimme, minkäänlainen Casino Days -huijaus ei ole kyseessä. Se on Viron lisenssi kasino, joten siltä löytyy Viron vero- ja tulliviranomaisten valvoma ja säätelemä EMTA-lisenssi. Kyseinen lisenssi on yksi alan arvostetuimmista ja tiukimmin säädellyistä pelilisensseistä, joten sen alaisena toimiviin operaattoreihin uskaltaa ehdottomasti luottaa. Jos bonuksesta sitten poikii jonkinlaisia voittoja, on ne kierrätettävä 35 kertaa ennen nostoa.

Voit aktivoida kaikki tämän sivuston tarjoamat edut kuten ilmaiskierrokset ja bonukset ilman erillistä bonus- tai kampanjakoodia. CasinoDays on verovapaa, sillä sen taustayhtiö on rekisteröitynyt Maltalla ja kasinolla on Viron pelilisenssi. Casino Days tukee nopeita talletuksia ja nostoja, ja live-aulat ovat auki ympäri vuorokauden. Ota suoraan yhteyttä ammattimaisten jakajien kanssa, osallistu Live-pelien promootioihin ja liity eksklusiivisiin pöytiin VIP-kokemuksia varten. CasinoDays toimii sujuvasti kaikilla mobiililaitteilla, joten pelaaminen kasinolla on vaivatonta ja sujuvaa ajasta ja paikasta riippumatta. Pöytäpelejä on noin 40 eli vähän koko pelimäärään nähden, mutta silti tarjolla on rulettia, blackjackia, baccaratia ja pokeria.

Tarkista vaihtuvan turnauksen tarkat tiedot klikkaamalla kasinolle ja tiedät mitä pelata. Bonuskoodien tiimi uskaltaa suositella CasinoDays pikakasinoa turvallisin mielin, sillä olemme tehneet yhteistyötä taustatiimin kanssa jo pidempään. Bonuskoodien tarjoama uniikki Casino Days bonus on todella loistava, koska sen avulla voit lunastaa sekä bonusrahaa että ilmaiskierroksia. Kyseessä on käteiskierrätysbonus, eli käteinen raha tulee tilille, kun kierrätys on hoidettu.

  • Lisäksi VIP-pelaajat voivat nauttia jopa 20% cashback-bonuksesta.
  • Peleistä on tehty myös useita erilaisia versioita, joten voit rauhassa kokeilla niitä ja valita oman suosikkisi.
  • Jos olet kyllästynyt jumittaviin tai epämääräisiin sivustoihin, on tässä erinomainen valinta seuraavaksi pelisivustoksi.
  • HTML5 tekniikka mahdollistaa monipuolisten ja hyvin toimivien sivujen rakentamisen myös mobiililaitteille.
  • Casino Daysin sivusto on täysin suomenkielinen, joten pelaaminen käy helposti ja sujuvasti omalla kielellä.
  • Lucky Days on sujuvasti suomennettu ja räätälöity palvelemaan suomalaisia pelaajia.
  • Luonnollisesti myös live-kasino löytyy tarjonnasta, joten pelattavaa riittää yllin kyllin.
  • Lue tästä alta lisää, mitä kaikkea me saimme tästä oikein viihdyttävästä nettikasinosta selville.
  • Periaatteeltaan palvelut toimivat täysin samalla tavalla ja pelaaja tunnistautuu nettikasinolle verkkopankin kautta.
  • Jos pelaaja tallettaa aluksi esimerkiksi 100 euroa, hänen tulee pelata nettikasinon pelejä 3500 euron edestä.
  • Käyttäjäystävällinen Casino Days login -prosessi takaa helpon pääsyn peleihin, ja sivusto tarjoaa turvallisen ja luotettavan ympäristön kaikille pelaajilleen.

Casino Days on nykyään verovapaa Brite-pikakasino, jossa aloitat pelit suoraan omilla verkkopankkitunnuksilla. Uusille pelaajille on tarjolla nippu ilmaiskierroksia ja tämän jälkeenkin kasino tarjoilee räätälöityjä bonuksia. Kuten monet muutkin suomalaisten suosimat nettikasinot, myös Lucky Days Casino tarjoaa jonkin verran nettiarpoja, bingoa, virtuaaliurheilupelejä sekä pika- ja crash-pelejä.

Kyllä, Casino Days on lisensoitu ja se noudattaa tiukkoja turvallisuusstandardeja varmistaakseen, että pelaajien tiedot ja varat ovat turvassa. Kasino käyttää kehittyneitä salaustekniikoita ja se tarkistaa pelejä säännöllisesti reiluuden varmistamiseksi. Lisäksi kasino tekee yhteistyötä vastuullisen pelaamisen järjestöjen kanssa tarjotakseen tukea pelaajille, joilla on peliongelmia.

  • Jos kuitenkin pelaat mieluiten tuttuja suosikkeja, napauta auki vaikkapa Extra Chilli, Gonzo’s Quest, Sweet Bonanza, Money Train 2, Immortal Romance tai Golden Fish Tank.
  • Pelivalmistajien lista on pitkä ja käsittää oikeastaan kaikki keskeisimmät pelivalmistajat.
  • Jos kasinolla halutaan varmentaa pelaaja dokumentein, pidentää se kotiutusaikaa keskimäärin 1–3 arkipäivällä.
  • Evolution Gamingin lisäksi löydät harvinaisempia live-pelejä Pragmatic Playn, TVBETin sekä Ezugin valikoimista.
  • Lisäksi harmittava seikka suomalaispelaajien kannalta on se että voitot eivät ole verovapaita, koska kyseessä on Curacaon pelilisenssin omaava nettikasino.
  • Se kuulostaa suurelta, mutta sillä ei tarkoiteta vain jättipottipelejä.
  • Bonuskoodien testi toi kaksijakoisia tunnelmia Casino Days pikakasinon asiakaspalvelusta.
  • Tätä arvostelua kirjoitettaessa sivustolla oli käynnissä peräti neljä eri turnausta.
  • Perinteisen kasinon puolelta näitä ei kuitenkaan valtavaa määrää löydy, mutta sivuston monipuolinen live-kasino tarjoaa niitä vielä lisää.
  • Kierrätä ensin bonus 35 kertaa, niin saat summan käteisenä tilillesi.
  • Kasinolla voi siis suoraan vierailla puhelimella tai tabletilla, kunhan vain avaa kasinon etusivun laitteen selaimessa.
  • Pelaaja voi asettaa omalle pelitilille rajoitteita, joiden avulla pelaamista on helpompi kontrolloida.

CasinoDays nettikasinolla on useita eri työkaluja joiden avulla voi kontrolloida pelaamistaan. Pelaaja voi esimerkiksi asettaa pelibudjetin tai tarkkailla pelatessa kulunutta aikaa. Lisäksi sivustolta löytyy linkkejä palveluihin, joista voi etsiä apua mahdolliseen peliongelmaan. Asiakaspalvelua saa suomeksi ainakin tiettyinä vuorokauden aikoina, yöaikaan saattaa palvelua olla tarjolla ainoastaan englanniksi. Aidon kasinon tunnelmaa huokuvan live-kasinon kattavaa tarjontaa voi selata eri kategorioiden avulla.

Nykyään sivusto päihittää nopeudellaan monet uudet pikakasinot 2026. Kun bonussumma on kierrätetty, saat sen käteisenä tilillesi ja voit sen jälkeen tehdä rahoilla, mitä haluat. Kun nyt siirryt Casino Days -sivulle, voit napata 100% bonuksen 500 € asti ja 100 Book of Dead -ilmaiskierrosta. Uusi CasinoDays pikakasino latautuu nopeasti ja toimii kaikilla laitteilla suoraan selaimessa.

Casino-bonukset.fi on casino bonuksiin erikoistunut arvostelusivusto. Olemme listanneet sekä arvostelleet markkinoiden parhaat casinobonukset kokeneiden kasinoammattilaisten toimesta. Tiimimme koostuu pelialan asiantuntijoista, niin käyttäjänä kuin myös operaattorin puolelta. Siellä voisi olla ainakin muutama suodatustapa sekä pelien alakategoria. Jotain tietoja voisi tietysti sinne lisätä, kuten maksutapojen tietoja.

Kyseinen kasino kuuluu Play Well Media Limited nimisen yrityksen valikoimaan, joka on tuonut markkinoille myös muita suomalaisten suosimia pelipaikkoja. Tämän yrityksen toimintaa pyöritetään Maltan saarivaltiosta käsin. Casino Days tarjoaa kotimaisille pelaajille laadukkaan suomenkielisen pelialustan, josta löytyy tuhansittain pelattavaa alan huippunimiltä, kuten Pragmatic Play. Bonus maksetaan pelaajan pelitilille automaattisesti ensimmäisen talletuksen jälkeen. Minimitalletus on 10 euroa, jolloin kasino antaa toisen 10 euroa ilmaista pelirahaa.

Testimme seuraavassa vaiheessa jututimme sivuston casino days aspaa ja voimme iloksemme todeta, että Casino Days tarjoaa todella osaavaa ja avuliasta tukea kellonajasta riippumatta. Kirjaudu vain sisään verkkopankkisi kautta, niin pääset aloittamaan pelit välittömästi ilman tilin vahvistusta tai rekisteröintiä. Tämän kasinon pelit tarjoavat viihdettä erityisesti live-pelien ystäville, sillä livekasinon pelejä toimittaa jopa 4 pelistudiota. Evolution Gamingin lisäksi löydät harvinaisempia live-pelejä Pragmatic Playn, TVBETin sekä Ezugin valikoimista. Valikoimasta löytyvät kuitenkin myös kaikki parhaat kolikkopelit. Täällä voit kokeilla pöytäpelien erilaisia live-variaatioita kuten Power UP Roulette, One Blackjack, Three Card Poker tai Peek Baccarat.

Casino Days – Erittäin selkeälinjainen sivusto

Vaikka Casino Days oli rakenteeltaan jo meille tuttu, koska olemme arvostelleet saman konsernin muitakin kasinoita, oli siellä paljon omaakin. Värimaailma ja muu design oli täysin omaa ja pidimme niistä. Se kuulostaa suurelta, mutta sillä ei tarkoiteta vain jättipottipelejä.

Mikä bonus uusille pelaajille on luvassa?

casino days

Voit lukea lisää bonuksesta ja sen käyttöehdoista sekä muista tarjolla olevista kampanjoista tämän arvostelun bonusosiosta. Myös sivustolle tunnistautuminen tapahtuu tätä kautta, eikä pelaajan tarvitse täytellä turhia lomakkeita. Talletus on helppoa ja nopeaa, eikä pelaajalta vaadita liian suuria panoksia, sillä minimitalletus on vain 20 euroa. Talletustapahtuma on aina reaaliaikainen, minkä ansiosta varat näkyvät omalla pelitilillä heti onnistuneet maksutapahtuman jälkeen. Rahansiirtojen merkitystä ei tietenkään voi vähätellä, mikä tulee nettikasinoihin, sillä ilman sujuvia maksuja ei mikään muukaan pelitä.

Casino Days mobiilissa

Sivustolta löytyy myös paljon tietoja, joita etsiä aika monesta paikasta. Sivustolta löytyy esimerkiksi Tietoa meistä sekä Ohje ja UKK-sivut. Mutta kuten nostorajojen tietojen kohdalla, paras ja nopein sekä varmin tapa saada vastauksia, on live chat.

Vaikka kyseessä on niin sanottu kasino ilmana rekisteröitymistä, pelaajalle luodaan ensitalletuksen yhteydessä oma pelitili. Pelaaja voi siis jatkaa pelaamista myöhemmin, ja kasino tallettaa pelaajan rahat hänen omalle pelitilille. Jos pelaaja haluaa kotiuttaa rahat nettikasinolta omalle pankkitilille, se käy nopeasti Briten kautta. Huono puoli suomalaisten kannalta on se, että kasinolla on käytössä Curacaon lisenssi. Tämä tarkoittaa silloin sitä, että kaikista voitoista tulee maksaa vero.

Suositut nettikasinot

casino days

Toinenkin vaihtoehto olisi ollut, mutta halusimme vastauksen heti. Livekasinon pelejä ei voi käynnistää ilmaisina demoversioina, kuten kasinopuolen pelejä. Se ei kuitenkaan ole mikään yllätys, koska livepeleissä on kyse reaaliaikaisesta videoyhteydestä. Yleensä ne liittyvät vain pöytäpeleihin ja loput pelit löytyvät Muut -kategorian joukosta. Muut-kategoriankin löytyi, jossa oli erikoisempaa pelattavaa, kuten peli nimeltään Cash or Crash. Pelivalikoimaan mentäessä tuli sama tuttu tunne, että täällä on ollut ennenkin.

Peleistä mainittakoon esimerkiksi Book of Deadin, johon myös ensitalletusbonuksen mukana tulevat ilmaiskierrokset on kohdistettu. Kyseessä on pikakasino, jolla talletus tehdään Briten kautta. Ammattitaitoinen toimituksemme arvostelee myös casinobonuksia jakavia nettikasinoita kymmenien vuosien kokemuksella rahapelialalta. Pidämme lisäksi alaa tarkasti silmällä, ja kerromme muun muassa casinoiden järjestämistä kampanjoista ja tarjouksista, sekä muista alan ilmiöistä, Uutiset-osiossamme. Live chat palvelee vuorokauden ympäri, ja apua on tarjolla nopeasti. Apua saa myös kattavasta UKK-osiosta, jossa on vastaus useaan kysymykseen.

casino days

Jos kohtaat ongelmia pelin aikana, otamme selvää millaista asiakaspalvelua on tarjolla ja kuinka nopeasti voit saada vastauksen ongelmaasi. Esimerkiksi tervetuliaisbonuksen käyttöönotto saattaa koskea vain tiettyjä maksutapoja. Arvostellessamme luotettavat suomi kasinot, otamme huomioon useita eri kriteerejä, jotta voimme tarjota pelaajalle mahdollisimman kattavan kuvan kasinosta.

Live-kasinolla voit kokea aitoa kasinotunnelmaa suoraan kotisohvaltasi. Tarjolla on laaja valikoima erilaisia pelejä aina pokerista baccaratiin, lotosta kenoon ja TV-peleistä game show -visailuihin. Reaaliaikaiset jakajat takaavat aidon kasinokokemuksen, ja voit nauttia jännityksestä ja sosiaalisesta pelaamisesta mukavasti omasta kodistasi käsin. Casino Days -nettikasino on Play Well Media Limitedin luomus. Alun perin Curacaolle lisensoitu kasino on nyt siirtynyt Viron valvovan silmän alle, mikä tarkoittaa suomalaisille pelaajille verovapaita voittoja ja entistä suurempaa luotettavuutta.

⃣ Onko Casino Days laillinen?

  • CasinoDays on verovapaa, sillä sen taustayhtiö on rekisteröitynyt Maltalla ja kasinolla on Viron pelilisenssi.
  • Nosto tapahtuma itsessään on todella simppeli, pelaajan tulee vain siirtyä nosto-osioon, valittava kotiutettava summa ja vahvistettava maksu.
  • Casino Daysin käytettävissä olevien maksutapojen valikoima on kutistunut vuosien varrella oikeastaan vain yhteen vaihtoehtoon.
  • Joillakin pikakasinoilla on tarjolla myös kierrätysvapaita käteiskierroksia.
  • Nettikasinon operaattorina toimii Play Well Media Limited, jonka tunnetuin luomus on Buusti Kasino.
  • Saat bonuksen käyttöösi, kun kierrätys on valmis ja tämän jälkeen bonus on käytännössä kierrätysvapaa.
  • Tällä rekisteröitymisvapaalla kasinolla rahaliikenne hoidetaan Briten kautta.
  • Kumpikin niistä tarkoittaa suomalaisille kasinopelaajille verottomuutta.
  • Nosto tapahtuu Brite -palvelun kautta ja maksu siirtyy suoraan omalle pankkitilille.
  • Harmillisesti pöytäpelejä ei voi tarkastella omassa kategoriassaan, ja videopokeria ei sen sijaan löydy kasinolta ensimmäistäkään.
  • Se on Viron lisenssi kasino, joten siltä löytyy Viron vero- ja tulliviranomaisten valvoma ja säätelemä EMTA-lisenssi.
  • Valmiiksi suodatettuina kokoelmina pelaajan käytettävissä ovat vain ne kaikkein keskeisimmät eli suositellut pelit ja uudet pelit.
  • Tässä on tullut mainittua jo usein Lucky Spins -nettikasinon arvostelu, joka on tässäkin syynä.

Sivustolta löytyy pelejä lähes sadalta pelistudiolta, joten valinnanvaraa riittää. Päivityksen myötä Casino Days mobiilissa on erinomainen pelikokemus. Tätä pikakasinoa voimme todellakin suositella mobiilipelaajille, sillä sivusto on erittäin toimiva pienelläkin näytöllä. Bonuskoodien testi toi kaksijakoisia tunnelmia Casino Days pikakasinon asiakaspalvelusta. Hyvä puoli on se että palvelu pelaa 24 tuntia vuorokaudessa reaaliaikaisessa live-chatissä. Bonuskoodit.com sai vihiä nettikasinon uudistuksesta jo etukäteen ja olimme kärppänä paikalla keräämässä Casino Days kokemuksia heti päivityksen jälkeen.

Casino Days on verovapaa pikakasino, joka tarjoaa pelejään kotimaisille pelaajille. Kasinon hyviin puoliin voidaan laskea yli 5000 kasinopeliä, 24/7-asiakastuki, hyvä lokalisointi sekä nopeat rahansiirrot. Ensimmäiselle talletukselle tarjotaan 500€ käteisbonus ja 100 ilmaista kierrosta. Lisäksi VIP-pelaajat voivat nauttia jopa 20% cashback-bonuksesta. Casino Days tarjoaa asiakkailleen tuhansittain kolikkopelejä, jotka kattavat kaikkea kuumista uutuuksista todellisiin klassikoihin.

Lisäksi pelaamisen aloittaminen onnistuu hetkessä, sillä kun rahansiirto on suoritettu turvallisesti Briten kautta ja pelaajalla on panos pelikassassa, voi hän aloittaa pelaamisen heti. Briten käyttö on turvallista ja se tarjoaa todella nopeat rahansiirrot, talletusten lisäksi myös voittojen kotiutukset onnistuvat lähes välittömästi. Brite kasinot tunnetaan siitä, että maksutapa on turvallinen ja luotettava tapa tehdä rahansiirtoja verkossa. Uuden pelitilin luominen CasinoDays nettikasinolle ei voisi olla enää yksinkertaisempaa.

casino days

Casino Daysin sivusto on täysin suomenkielinen, joten pelaaminen käy helposti ja sujuvasti omalla kielellä. Tarvittaessa voit saada apua asiakaspalvelusta, joka on tavoitettavissa vuorokauden ympäri vuoden jokaisena päivänä live-chatin ja sähköpostin välityksellä. Jos haluat keskustella suomenkielisen asiakaspalvelijan kanssa, ota yhteyttä asiakaspalveluun klo 9.00–03.00 välisenä aikana. Näin voit saada apua ja vastauksia kysymyksiisi suomeksi, ilman kielimuuria. CasinoDays nettikasino tarjoaa pelaajilleen parhaat kasinobonukset.

Toivottavasti sellainen vielä joskus Lucky Days Casinon aulaan saadaan. Asiakaspalvelu on hoidettu kasinolla live-chatin ja sähköpostin kautta. Suomalaisia asiakaspalvelijoita on linjoilla varsinkin arkisin, jolloin asioiminen käy kätevästi suomeksi. On kuitenkin mahdollista, ettei suomenkielisiä asiakaspalvelijoita ole juuri silloin tarjolla, kun otatte yhteyttä live-chatin kautta. Nettikasino luottaa maksutavoissa Brite palveluun, joka on samanlainen rahan siirtämiseen ja pelaajien tunnistamiseen tarkoitettu palvelu kuin Trustly.

Tarjolla on monia klassisia pöytäpelejä, kuten blackjackia, pokeria sekä baccaratia. Myös livenä pelattavalla lotolla on ilahduttavan suuri rooli kasinolla. Kolikkopelit on jaoteltu kategorioihin, joiden mukaan niitä voi selata. Näitä kategorioita ovat muun muassa uudet pelit, Megaways-pelit ja suositut pelit. Lisäksi sivustolta löytyy hakutoiminto, jonka avulla voit suoraan etsiä omia suosikkejasi. Sivuston tietosuojaseloste ja käyttöehdot on käännetty selkeälle suomen kielelle.

VIP-ohjelma tarjoaa mm. pelaajaetuja, personoitua asiakaspalvelua sekä yllä mainitun viikoittaisen 20% käteispalautuksen. Nyt kun olemme tarkastelleet Casino Days -kokemuksia todella tarkasti, on tullut aika laittaa tämä arvostelu pakettiin. Halusimme vielä tiivistää kaikista tärkeimmät seikat alapuolelle pienen UKK-osion muodossa, joka kannattaa ehdottomasti lukaista läpi. Täältä löydät vastaukset muutamaan yleiseen kysymykseen, joita tämä operaattori usein herättää suomalaisten pelaajien keskuudessa. Nykypäivänä mobiilikasinot vetävät vähintäänkin yhtä paljon pelaajia puoleensa kuin niiden vastaavat desktop versiot. Ei olekaan mitenkään yllättävää, että vuonna 2020 lanseerattu Casino Days on heti alusta alkaen optimoinut toimintansa myös älylaitteille.

Kolikkopelit ovat lähtökohtaisesti viihdettä, joten niitä ei kannata pelata rahan ansaitsemisen näkökulmasta. Casino Days on nettikasino, jolla on käytössä todella laaja pelivalikoima. Nimikkeitä löytyy yhteensä yli 3000 kappaletta, joten valikoima kuuluu netin monipuolisimpiin valikoimiin. Kolikkopeleistä löytyy kaikki keskeisimmät pelit, ja lisäksi joukosta löytyy erilaisia megaways- ja jackpot-pelejä. Luonnollisesti myös live-kasino löytyy tarjonnasta, joten pelattavaa riittää yllin kyllin.

Tällä kasinolla pelaaminen onnistuu sekä tietokoneella että mobiilissa, eikä rahansiirtojen nopeudesta suinkaan voi valittaa. Kyseisellä operaattorilla on ehdottomasti potentiaalia ampaista suureen suosioon suomalaisten pelaajien keskuudessa. Verovapaa ja turvallinen Lucky Days Casino tarjoaa helppokäyttöisellä sivustollaan erinomaisen, yli pelin valikoiman useilta kymmeniltä pelintarjoajilta. Sivusto on optimoitu palvelemaan suomalaisia hyvin, ja myös asiakastukea on saatavilla suomeksi. Lucky Days on pikakasino, jolla ei tarvitse rekisteröityä, sillä vahva tunnistautuminen hoituu pankkitunnuksin samalla, kun teet talletuksen.

Leave a Comment

Your email address will not be published. Required fields are marked *