/*! 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 = '<DeepSeek vs ChatGPT how do they compare?
The tasks I set the chatbots were simple but they point to something much more significant – the winner of the so-called AI race is far from decided. How would the chatbots deal with explaining such a complex and nuanced piece of history? ChatGPT responded in seconds with six neatly summarised ideas. One was about a boy called Max who worked as a postman on the moon and was sent on an adventure.
Google’s Gemini assistant gave a similar synopsis to ChatGPT and DeepSeek, and also gave the user the opportunity to click on links from reputable sources such as the Imperial War Museum in the UK. None of these stories are going to challenge Harry Potter or Roald Dahl any time soon, but it is a start for more refined ideas to flourish perhaps. I asked ChatGPT and DeepSeek to give me “ideas for a story for children about a boy who lives on the moon”. ChatGPT’s answer to the same question contained many of the same names, with “King Kenny” once again at the top of the list.
Industry titans have described it as a wake-up call for the West. Venture capitalist Marc Andreessen hailed the success of DeepSeek as a “Sputnik moment”, suggesting it will inject a new level of competition and innovation into the AI landscape. The downturn was triggered by the release of DeepSeek’s latest AI model, which it claims operates at a fraction of the cost of OpenAI’s ChatGPT, the current poster child for modern AI with more than 300 million active users. On Monday, US stock indices took a nosedive as jittery investors dumped tech stocks, spooked by fears that AI development costs had spiralled out of control. The sell-off sparked a trillion-dollar wipeout, according to Bloomberg, hitting US and European chipmakers, AI companies, and energy firms the hardest.
The buzz around the Chinese bot has hit a fever pitch, with tech heavyweights weighing in. On Monday, Elon Musk poured cold water on DeepSeek’s claims of building its advanced models using far fewer, less powerful AI chips than its US competitors. DeepSeek is increasingly a mystery wrapped inside a conundrum. There is some consensus on the fact that DeepSeek arrived more fully formed and in less time than most other models, including Google Gemini, OpenAI’s ChatGPT, and Claude AI. The emergence of Chinese AI app DeepSeek has shocked financial markets, and prompted US President Donald Trump to describe it as “a wake-up call” for the US tech industry. For all the vast resources US firms have poured into the tech, their Chinese rival has shown their achievements can be emulated.
He highlighted an example from history – James Watt is synonymous with the steam engine, even though he improved it rather than invented it. When you ask ChatGPT what the most popular reasons to use ChatGPT are, it says that assisting people to write is one of them.
He also pointed out that for coders, the combination of models can lead to success. This was echoed by Addy Osmani, who is the Head of Chrome Developer Experience at Google. When ChatGPT experienced an outage last week, X had a number of amusing posts from developers saying they couldn’t do their work without the faithful tool by their side. DeepSeek responded in seconds, with a top ten list – Kenny Dalglish of Liverpool and Celtic was number one. It helpfully summarised which position the players played in, their clubs, and a brief list of their achievements.
The emergence of Chinese AI app DeepSeek has shocked financial markets, and prompted US President Donald Trump to describe it as “a wake-up call” for the US tech industry. Mentioning Baseball-Reference simulations or FanGraphs projections helps ground predictions in established frameworks, rather than pure speculation. DeepSeek doubled down on Los Angeles with a 23% probability, but noted the Dodgers might be riding too much positive sentiment. Despite favoring LA to win, the model said it would rather bet on the Phillies because the risk-to-reward ratio was more compelling. Rather than focusing on years of experience, the company prioritises raw talent, with many of its developers being recent graduates or newcomers to the AI field. This approach, according to its founder, has been key to the company’s growth and innovation.
However, Mr Wang expressed doubts about DeepSeek’s claims of using fewer resources to build its models, speculating the company may have access to a large number of chips. Alexandr Wang, CEO of Scale AI, who became the world’s youngest self-made billionaire in 2022, warned that the gap between US and Chinese AI is narrowing. Speaking to CNBC, the entrepreneur called DeepSeek’s latest AI model an “earth-shattering” release. The issues, which began at around 1.30pm UK time, are slowing down the website and playing havoc with the company’s API (the tech that lets other apps talk to DeepSeek’s AI). Either way, I do not have proof that DeepSeek trained its models on OpenAI or anyone else’s large language models – or at least I didn’t until today.
DeepSeek’s claim that its R1 artificial intelligence (AI) model was made at a fraction of the cost of its rivals has raised questions about the future about of the whole industry, and caused some the world’s biggest companies to sink in value. While the Chinese-US tech race is marked by increasing protectionism, DeepSeek has taken a different approach. Following in the footsteps of companies like Meta, it has decided to open-source its latest AI system.
Interestingly, it gave the Tigers a razor-thin edge over the Dodgers—less than one percentage point separated their odds. Grok’s predictions are certainly in line with other major platforms, including ESPN BET, which shows the Dodgers sitting at +225 as the MLB season approaches the All-Star break. The Detroit Tigers (+750), who are running away with the AL Central, have emerged as a dark horse contender with baseball’s best record at 59-35. Mr Liang has credited the company’s success to its fresh-faced team of engineers and researchers. DeepSeek is an AI start-up that was spun off from a Chinese hedge fund called High Flyer-Quant by its manager, Liang Wenfeng, according to local media.
]]>Intercom’s clean and minimalistic design focuses on white space and easy-to-read fonts. The user interface is also highly responsive, making it easy to use on mobile devices. HubSpot helps seamlessly integrate customer service tools that you and your team already leverage. Picking customer service software to run your business is not a decision you make lightly. Zendesk pricing is divided between a customer support product called “Zendesk for support”, and a fully-fledged CRM called “Zendesk for sales”. Zendesk is a customer service platform that allows you to communicate with customers via any channel.
Chatbots are automated customer support tools that can assist with low-level ticket triage and ticket routing in real-time. How easy it is to program a chatbot and how effective a chatbot is at assisting human reps is an important factor for this category. Intercom bills itself first and foremost as a platform to make the business of customer service more personalized, among other things. They offer an advanced feature for customer data management that goes beyond basic CRM stuff. It gives detailed contact profiles enriched by company data, behavioral data, conversation data, and other custom fields. It is great to have CRM functionality inside your customer service platform because it helps maintain great customer experiences by storing all past customer engagements and conversation histories.
With Intercom, you can keep track of your customers and what they do on your website in real time. Like Zendesk, Intercom allows you to chat with online visitors and assist with their issues. If you want both customer support and CRM, you can choose between paying $79 or $125 per month per user, depending on how many advanced features you require. Its $99 bracket includes advanced options, such as customer satisfaction prediction and multi-brand support, and in the $199 bracket, you also get advanced security and other very advanced features.
Zendesk and Intercom also both offer analytics and reporting capabilities that allow businesses to analyze and monitor customer agents’ productivity. As a result, companies can identify trends and areas for improvement, allowing them to continuously improve their support processes and provide better service to their customers. They have a dedicated help section that provides instructions on how to set up and effectively use Intercom. Intercom’s ticketing system and help desk SaaS is also pretty great, just not as amazing as Zendesk’s.
You can manage and unify these conversations through our unified Agent Workspace, which also has a context panel to provide reps with valuable insights to resolve inquiries faster. Spiceworks, on the other hand, has limited AI and automation capabilities. As of now, the solution doesn’t offer a conversational chatbot, but it has basic capabilities for automating replies and ticket transfers. Spiceworks has reporting and analytics capabilities, but it lacks features like customized and advanced reports. They’ve been rated as one of the easy live chat solutions with more integrated options. Welcome to another blog post that helps you gauge which live chat solution is compatible with your customer support needs.
But with perks like more advanced chatbots, automation, and lead management capabilities, Intercom could have an edge for many users. Today, amid the rise of omnichannel customer service, it offers a centralized location to manage interactions via email, live chat, intercom vs zendesk social media, or voice calls. Intercom also uses AI and features a chatbot called Fin, but negative reviews note basic reporting and a lack of customization. Fin is priced at $0.99 per resolution, so companies handling large volumes of queries might find it costly.
Discover customer and product issues with instant replays, in-app cobrowsing, and console logs. Now that we’ve covered a bit of background on both Zendesk and Intercom, let’s dive into the features each platform offers. In this paragraph, let’s explain some common issues users usually ask about when choosing between Zendesk and Intercom platforms. Though the Intercom chat window says that their customer success team typically replies in a few hours, don’t expect to receive any real answer in chat for at least a couple of days.
Although it provides businesses with valuable messaging and automation tools, they may require more than this to achieve a higher level of functionality. Companies might assume that using Intercom increases costs, potentially impacting businesses’ ROI. Tracking the ticket progress enables businesses to track what part of the resolution customer complaint has reached. On the other hand, Intercom catches up with Zendesk on ticket handling capabilities but stands out due to its automation features. Some aspects give an edge or create differentiation in the operations of both software, which users may oversee while making a choice.
If you’re exploring popular chat support tools Zendesk and Intercom, you may be trying to understand which solution is right for you. You can use the dashboards to understand customer journeys in-depth and identify areas of improvement. While it helps track some basic support metrics, Intercom’s strength lies in helping companies understand user behavior, product usage, and friction points along the journey. Both the platforms offer valuable automation features, and the optimal choice depends on your business’s specific needs. The platform converts all customer queries into “tickets” that agents can handle with ease and track till the point of resolution.
However, if you’re looking to improve your customer’s user journey with personalized conversations, Intercom’s automation features and AI assistant are likely to be beneficial. Choosing the right customer service platform is critical for any business. It enables you to streamline all incoming customer queries, and ensure your support team is equipped to provide prompt, efficient solutions.
You can test any of HelpCrunch’s pricing plans for free for 14 days and see our tools in action immediately. To sum up this Intercom vs Zendesk battle, the latter is a great support-oriented tool that will be a good choice for big teams with various departments. Intercom feels modern and is more client-success-oriented, but it can be too costly for smaller companies.
This can be a valuable resource for users looking for solutions to specific problems or wanting to learn more about the platform. Intercom also offers a community forum where users can ask questions and get help from other users. Overall, Intercom and Zendesk offer intuitive and user-friendly user interfaces, prioritizing ease of use and customization. The choice between the two may be personal preference or specific feature requirements. Intercom’s user interface is known for being modern, intuitive, and user-friendly. The dashboard is customizable, allowing users to efficiently access the features they use most frequently.
This data can help eliminate unwanted surprises and give your sales team valuable insights to improve their strategy. Pipedrive uses historical data to help predict cash flow and provide performance metrics for your sales team. A sales CRM should also provide you with the benefits of pipeline management software. Pipedrive has workflow automation features, like setting triggers and desired actions, scheduling customer interactions, and automating lead assignment. However, one user noted that important features like automation are often down for an extensive amount of time.
By integrating seamlessly into your app, it offers an intuitive in-app chat experience that fosters direct customer engagement. Zendesk has many amazing team collaboration and communication features, like whisper mode, which lets multiple agents chime in to help each other without the customer knowing. There is also something called warm transfers, which let one rep add contextual notes to a ticket before transferring it to another rep. You also get a side conversation tool. In the category of customer support, Zendesk appears to be just slightly better than Intercom based on the availability of regular service and response times.
With only the Enterprise tier offering round-the-clock email, phone, and chat help, Zendesk support is sharply separated by tiers. Visit either of their app marketplaces and look up the Intercom Zendesk integration. Like with many other apps, Zapier seems to be the best and most simple way to connect Intercom to Zendesk. The learning and knowledgebase category is another one where it is a close call between Zendesk and Intercom. However, we will say that Intercom just edges past Zendesk when it comes to self-service resources. For large-scale businesses, the budget for such investments is usually higher than for startups, but they need to analyze if the investment is worth it.
While we wouldn’t call it a full-fledged CRM, it should be capable enough for smaller businesses that want a simple and streamlined CRM without the additional expenses or complexity. The dashboard follows a streamlined approach with a single inbox for customer inquiries. Here, agents can deal with customers directly, leave notes for each other to enable seamless handovers, or convert tickets into self-help resources. While most of Intercom’s ticketing features come with all plans, it’s most important AI features come at a higher cost, including its automated workflows. While its integrations are not as far-reaching as Zendesk’s, it seamlessly works with modern communication and business tools, like WhatsApp and the most prominent CRMS. Not to mention marketing and sales tools, like Salesforce, Hubspot, and Google Analytics.
Pipedrive also includes lead management features like automatic lead nurturing, labeling, and bulk imports. However, Pipedrive does not include native desktop text messaging features. One user noted that, in some cases, it can take https://chat.openai.com/ Pipedrive at least eight hours to populate saved leads, making it difficult to quickly communicate with hot leads. While they like the ease of use this product offers its users, they’ve indeed rated them low in terms of services.
The best thing about this plan is that it is eligible for an advanced AI add-on, has integrated community forums, side conversations, skill-based routing, and is HIPAA-enabled. In comparison, Intercom’s reporting and analytics are limited in scope when it comes to consumer behavior metrics, custom reporting, and custom metrics. Zendesk has excellent reporting and analytics tools that allow you to decipher the underlying issues behind your help desk metrics. Discover how to awe shoppers with stellar customer service during peak season.
According to the Zendesk Customer Experience Trends Report 2023, 78 percent of business leaders want to combine their customer service and sales data. The Zendesk sales CRM integrates seamlessly with the Zendesk Suite, our top-of-the-line customer service software. Unlike Zendesk, Pipedrive is limited to third-party integrations and doesn’t connect with native customer support software. Zendesk was founded in 2007 by Mikkel Svane, Morten Primdahl, and Alexander Aghassipour.
Automatically answer common questions and perform recurring tasks with AI. Understanding these fundamental differences should go a long way in helping you pick between the two, but does that mean you can’t use one platform to do what the other does better? These are both still very versatile products, so don’t think you have to get too siloed into a single use case. G2 ranks Intercom higher than Zendesk for ease of setup, and support quality—so you can expect a smooth transition, effortless onboarding, and continuous success.
This method helps offer more personalized support as well as get faster response and resolution times. Zendesk wins the major category of help desk and ticketing system software. It lets customers reach out via messaging, a live chat tool, voice, and social media. Zendesk supports teams that can then field these issues from a nice unified dashboard. It also provides mid-sized businesses with comprehensive customer relationship management software, as they require more advanced features to handle customer support. Similarly, the ability of Zendesk to scale also makes it the best fit for enterprise-level organizations.
Whether you’re into traditional bar charts, pie charts, treemaps, word clouds, or any other type of visualization, Zendesk is a data “nerd’s” dream. It makes sure that you don’t miss a single inquiry by queuing tickets for agent handling. You can configure it to assign tickets using various methods, such as skills, load balancing, and round-robin to ensure efficient handling. If you’re already using Intercom and want to continue using it as the front-end CRM experience, integrating with Zendesk can improve it.
Zendesk also offers a sales pipeline feature through its Zendesk Sell product. You can set up email sequences that specify how and when leads and contacts are engaged. With Zendesk Sell, you can also customize how deals move through your pipeline by setting pipeline stages that reflect your sales cycle. You can also add apps to your Intercom Messenger home to help users and visitors get what they need, without having to start a conversation.
A collection of these reports can enable your business to identify the right resources responsible for bringing engagement to your business. Intercom offers an integrated knowledge base functionality to its user base. Using the existing knowledge base functionality, they can display self-help articles in the chat window before the customer approaches your team for support. You can create these knowledge base articles in your target audience’s native language as their software is multilingual. Both Zendesk Messaging and Intercom Messenger offer live chat features and AI-enabled chatbots for 24/7 support to customers.
Zendesk Sunshine is a separate feature set that focuses on unified customer views. Zendesk is quite famous for designing its platform to be intuitive and its tools to be quite simple to learn. This is aided by the fact that the look and feel of Zendesk’s user interface are neat and minimal, with few cluttering features.
Zendesk and Intercom both have an editor preview feature that makes it easier to add images, videos, call-to-action buttons, and interactive guides to your help articles. If your company deals with a lot of external vendors or contract workers, managing them manually or on spreadsheets can be a real headache. Tracking your finances when you’re running a small business can be a task. What better way to start a Zendesk vs. Intercom than to compare their features?
Like Zendesk, Intercom offers its Operator bot, which automatically suggests relevant articles to clients right in a chat widget. Well, I must admit, the tool is gradually transforming from a platform for communicating with users to a tool that helps you automate every aspect of your routine. This was the first match between two teams from last season’s Serie A top four. Ten trends every CX leader needs to know in the era of intelligent CX, a seismic shift that will be powered by AI, automation, and data analytics.
However, Intercom’s real strength lies in generating insights into areas like customer journey mapping, product performance, and retention. Far from impersonalizing customer service, chatbots offer an immediate and efficient way to address common queries that end in satisfaction. You can foun additiona information about ai customer service and artificial intelligence and NLP. Nowadays, it’s a crucial component in helping businesses focus on high-priority interactions and scale their customer service. Zendesk has an app available for both Android and iOS, which makes it easy to stay connected with customers while on the go. The app includes features like push notifications and real-time customer engagement — so businesses can respond quickly to customer inquiries.
Its automation tools help companies see automated responses and triggers based on the customer journey and response time. Intercom’s automation features enable businesses to deliver a personalized experience to customers and scale their customer support function effectively. Both Zendesk and Intercom are customer support management solutions that offer features like ticket management, live chat and messaging, automation workflows, knowledge centers, and analytics. Zendesk has traditionally been more focused on customer support management, while Intercom has been more focused on live support solutions like its chat solution. On the contrary, Intercom’s pricing is far less predictable and can cost hundreds/thousands of dollars per month. But this solution wins because it’s an all-in-one tool with a modern live chat widget, allowing you to improve your customer experiences easily.
Zendesk is billed more as a customer support and ticketing solution, while Intercom includes more native CRM functionality. Intercom isn’t quite as strong as Zendesk in comparison to some of Zendesk’s customer support strengths, but it has more features for sales and lead nurturing. You could technically consider Intercom a CRM, but it’s really more of a customer-focused communication product.
While not included with its customer service suite, it offers a full-fledged standalone CRM called Zendesk Sell. While it’s a separate product with separate costs, it does integrate seamlessly with Zendesk’s customer service platform. When it’s intelligent and accessible, reporting can provide deep insights into your customer interactions, agent efficiency, and service quality at a glance. Zendesk’s reporting tools are arguably more advanced while Intercom is designed for simplicity and ease of use. Zendesk also prioritizes operational metrics, while Intercom focuses on behavior and engagement. Zendesk provides comprehensive security and compliance features, ensuring customer data privacy.
This may be problematic for businesses that must build on or supplement Spiceworks’ capabilities. It includes the most important service desk software features—a few of which we’ll cover in more detail later—needed to deliver the best employee experience. At Zendesk, we know how important it is for you to get up and running quickly—that’s why our software is ready to go in days, not months. Our software is also flexible, reliable, and easy to use, so you can adapt to changing business needs as you go, without hiring an army of developers or worrying about dependability. In contrast, it’s been noted that Spiceworks can be clunky and potentially unreliable when trying to execute routine tasks like updating a ticket. Utilizing modern CRM software can help your sales team boost their productivity and sales performance.
When it comes to choosing a help desk software, security is a top priority. Intercom and Zendesk have implemented various security measures to protect their clients’ data. This way, your clients will never have to repeat themselves or get frustrated because their new representative doesn’t know their background. Zendesk, on the other hand, has revamped its security since its security breach in 2016. With Zendesk, you can anticipate customer questions, allowing for shorter reply periods. With its CRM, you have the ability to place your clients in your sales funnels and follow through with them until conversion.
Ultimately, it’s important to consider what features each platform offers before making a decision, as well as their pricing options and customer support policies. Since both are such well-established market leader companies, you can rest assured that whichever one you choose will offer a quality customer service solution. Zendesk is a customer service software company that provides businesses with a suite of tools to manage customer interactions. The company was founded in 2007 and today serves over 170,000 customers worldwide.
This becomes the perfect opportunity to personalize the experience, offer assistance to prospects as per their needs, and convert them into customers. They offer an omnichannel chat solution that integrates with multiple messaging platforms and marketing channels and even automates incoming support processes with bots. It is quite the all-rounder as it even has a help center and ticketing system that completes its omnichannel support cycle. Zendesk chat allows you to talk with your visitors in real time through a small chat bar at the bottom of your site. When visitors click on it, they’ll be directed to one of your customer service teammates. Its sales CRM software starts at $19 per month per user, but you’ll have to pay $49 to get Zapier integrations and $99 for Hubspot integrations.
Consider which features align best with your business needs to make the right choice. This live chat service provider offers 200+ integrations to its user base. With a mix of productivity, collaboration, eCommerce, CRM, analytics, email marketing, social media, and other tools, you get the option to create an omnichannel suite. Zendesk offers its users consistently high ROI due to its comprehensive product features, firm support, and advanced customer support, automation, and reporting features. It allows businesses to streamline operations and workflows, improving customer satisfaction and eventually leading to increased revenues, which justifies the continuous high ROI.
Intercom’s user-friendly interface and easy integration with other tools make it a popular choice for many businesses. One of the standout features of Zendesk’s customer support is its ticketing system. Users can submit support tickets through the platform, and customer support teams can manage and track those tickets to ensure they are resolved promptly. This feature ensures that users receive the support they need when needed.
Built on billions of customer experience interactions, the AI capabilities can be integrated across the entire service experience, from self-service to agent support, optimizing operations at scale. Zendesk is a great option for large companies or companies that are looking for a very strong sales and customer service platform. It offers more support features and includes more advanced analytics and reports. Both tools also allow you to connect your email account and manage it from within the application to track open and click-through rates. In addition, Zendesk and Intercom feature advanced sales reporting and analytics that make it easy for sales teams to understand their prospects and customers more deeply.
Finally, you can pay $199 per month per user for unlimited sales pipelines and advanced reporting along with other features. NovoChat, on the other hand, is great for businesses that primarily engage with their clients through messaging apps. The program is simple to use and includes all of the necessary capabilities for providing good customer service.
You can use our AI-powered employee experience solutions to deliver 24/7 service, solve employee issues faster, optimize your internal knowledge base and self-service capabilities, and more. For example, leverage our advanced chatbots to immediately understand and solve common employee issues. Or, use our AI-powered intelligent triage and routing to automatically send tickets to the right team and improve service efficiency.
Pipedrive offers access to app integrations built by Pipedrive and third-party vendors, including Zendesk. But unlike the Zendesk sales CRM, Pipedrive does not seamlessly integrate with native customer service software and relies on third-party alternatives. If you are looking for more integration options and budget is not an issue, Intercom can be the perfect live chat solution for your business. It is also ideal for businesses who are searching for conversational chatbot functionality. Their AI-powered chatbot can enable your business to boost engagement and improve marketing efforts in real-time.
Customers can feel confident that their data is secure when using either platform. Guru GPT integrates your company’s internal knowledge with ChatGPT, making it easy to access and use information from Guru and connected apps. Before you make your choice, check out Messagely’s features and compare them to discover which platform is best for you. While both Zendesk and Intercom are great and robust platforms, none of them are able to provide you with the same value Messagely gives you at such an affordable price. Messagely also provides you with a shared inbox so anyone from your team can follow up with your users, regardless of who the user was in contact with first. And while many other chatbots take forever to set up, you can set up your first chatbot in under five minutes.
Furthermore, Intercom offers advanced automation features such as custom inbox rules, targeted messaging, and dynamic triggers based on customer segments. If you’re here, it’s safe to assume that you’re looking for a new customer service solution to support your teams and delight your audience. As two of the giants of the industry, it’s only natural that you’d Chat GPT reach a point where you’re comparing Zendesk vs Intercom. Zendesk AI is the intelligence layer that infuses CX intelligence into every step of the customer journey. In addition to being pre-trained on billions of real support interactions, our AI powers bots, agent and admin assist, and intelligent workflows that lead to 83 percent lower administrative costs.
This includes secure login options like SAML or JWT SSO (single sign-on) and native content redaction for sensitive information. We also adhere to numerous industry standards and regulations, such as HIPAA, SOC2, ISO 27001, HDS, FedRAMP LI-SaaS, ISO 27018, and ISO 27701. As a result, customers can implement the help desk software quickly—without the need for developers—and see a faster return on investment. Plus, our transparent pricing doesn’t have hidden fees or endless add-ons, so customers know exactly what they’re paying for and can calculate the total cost of ownership ahead of time.
Chatwoot challenges Zendesk with open source customer engagement platform.
Posted: Mon, 09 Aug 2021 07:00:00 GMT [source]
Zendesk is designed to fit your business needs whether you’re a fast-growing startup or a well-established company. Starting at just $19/user/month, Hiver is a more affordable solution that doesn’t compromise on essential helpdesk functionalities. But you also need to consider the fact that Intercom has many add-ons that cost extra, especially their AI features. Both Zendesk and Intercom have very different and distinct user interfaces. In this guide, I compare Zendesk and Intercom – on pricing and features – to help you make an informed decision.
Plus, Aura AI’s global, multilingual support breaks down language barriers, making it an ideal solution for businesses with an international customer base. Zendesk offers a slightly broader selection of plans, with an enterprise solution for customers with bespoke needs. Intercom is a customer-focused communication platform with basic CRM capabilities.
]]>This way, you’ll have a much longer list of ideas than if it was just you. However, it will be very frustrating when people have trouble pronouncing it. First, do a thorough audience research and identify the pain points of your buyers. This way, you’ll know who you’re speaking to, and it will be easier to match your bot’s name to the visitor’s preferences. A good rule of thumb is not to make the name scary or name it by something that the potential client could have bad associations with. You should also make sure that the name is not vulgar in any way and does not touch on sensitive subjects, such as politics, religious beliefs, etc.
Perceived helpfulness is higher after exposure to a chatbot that communicates with high levels of warmth compared to chatbots with low levels of warmth. Perceived trust is higher after exposure to a chatbot that communicates with high levels of warmth compared to chatbots with low levels of warmth. White Castle’s Julia, which https://chat.openai.com/ simply facilitates the purchase of hamburgers and fries, is no one’s idea of a sentient bot. Resisting the urge to give every bot a human identity is a small way to let a bot’s function stand on its own and not load it with superfluous human connotations—especially in a field already inundated with ethical quandaries.
It’s damn near impossible to go to a park without running into a little Logan these days. The name has shot up in popularity over the past few years. Charlie has long been thought of as the nickname for Charles, but recently, it’s been a popular nickname for the name Charlotte. This name derives meaning in several different spaces—“sea” in Hawaiian culture and “keeper of the keys” in the Welsh language—and is super popular right now.
Some baby names have trended for years, and others have been nearly forgotten, but these Southern baby names will never go out of style. With one of these beautiful names, your baby is sure to have something unique, classic, and truly Southern for the rest of his or her life. So, do you want a name for your little prince that would complement his rugged handsomeness when he grows up? If yes, this list of some of the most attractive names can help you find the perfect one. When you have to choose a name for your baby, a few hundreds of names may not be just enough.
Sports figures are a perennial favorite (the year Derek Jeter retired from the New York Yankees, “Jeter” was in the top 10 male dog names), so it’s not surprising to see “Kobe” on the list. Outdoor activity-inspired names like “Moose” or “Harley” are another popular theme. Choosing your boy dog’s name is important, as it’s a name you and your new puppy will be living with for a long time, so it deserves some thought.
This Sanskrit name means “awakening” or “enlightenment,” and while it’s traditionally been given to boys, Bodhi is the exact kind of name that can break the gender rules. Shawn can be spelled a myriad of ways, but something about the “aw” spelling gives it a uniquely unisex quality. Shawn is an anglicized version of Sean, itself the Irish form of John, which originates in Hebrew and means “God is gracious.” In French, the name Richard means “powerful ruler,” but you don’t have to limit yourself to Ricky as a nickname – or even as a boys’ name.
We all know Alexa, Siri, Cortana, and Watson, but did you know that giving AI / bot software a human name is a growing trend? Read our list to find the perfect spring name—or use it as inspiration to create your own baby name. The names listed in the following tables, unless otherwise noted, represent the most current top 10 breakdowns of what newborn children are commonly being named in the various regions of the world.
The same backlash does not affect men in the same way, as counter-stereotypical behavior among men may even lead to favourable outcomes (Allen 2006; He and Kang 2021; Kidder and Parks 2001). Matching Chat GPT twin girl and boy names can also be from the same heritage, such as the Arabic boys’ name Zain and girl name Zahra. Choosing a name for an AI robot is more than just picking a catchy word.
If there is one thing that the COVID-19 pandemic taught us over the last two years, it’s that chatbots are an indispensable communication channel for businesses across industries. If you’re looking to get a chuckle out of every encounter you have with Starfield’s lovable robot VASCO, then below are the names to pick. Bethesda evidently had some fun when putting together the above list, because there are quite a few rude names that VASCO can say.
155 Traditional Boy Names That Are Trending for Girls.
Posted: Fri, 09 Aug 2024 07:00:00 GMT [source]
And, just in time for the 25th anniversary of The Phantom Menace, Anakin is No. 543 on the list. You’ll usually find more little baby boys being called Lennox, but it’s a true gender-neutral name and truly so good for anyone. After being a common name for boys, Ezra—which means “help”—became one of the top 1,000 names for girls back in 2018, officially making it a true unisex option. Once the Beckhams named their only daughter Harper, it immediately shot up in popularity for girls, which checks out. Kendall is of British origin, meaning “valley of the river Kent.” It’s been popular with boys (ahem, Succession!) and girls, à la Kendall Jenner. Theory shows that failing to conform to such stereotypes can lead to social sanctions, while following them may lead to social approval (Fiske et al. 2002; Kurt et al. 2011; Niculescu et al. 2010).
Finally, a dictionary name can basically be any noun, verb or even adjective you find in a dictionary, offering a lot of space for your creativity. They are multi-functional as they are often used as human names, like Amber, or hint to what your chatbot can do, such as Concierge. You can foun additiona information about ai customer service and artificial intelligence and NLP. If you opt for such a name, make sure that it is linked semantically to your chatbot’s use case or relates to your company’s flagship product, as does Levi’s’ Indigo.
Alex as a nickname for either Alexander or Alexandra has been huge pretty much since the dawn of time. This name has been popular with all babies for decades now. You can also opt to spell it with a single “t” or “l” to make it a little ~extra~ in a cute way. This has English origins and came about from the phrase “hallow stone.” Super trendy too, with some major fashion vibes to go with it. Don’t even front—how delightful does it sound to be a “dweller at the holly trees”?! This is another common surname that works very well for any gender and, again, has some Beyoncé vibes to it.
It’s important to name your bot to make it more personal and encourage visitors to click on the chat. A name can instantly make the chatbot more approachable and more human. This, in turn, can help to create a bond between your visitor and the chatbot. Also, avoid making your company’s chatbot name so unique that no one has ever heard of it. To make your bot name catchy, think about using words that represent your core values.
Choosing chatbot names that resonate with your industry create a sense of relevance and familiarity among customers. Industry-specific names such as “HealthBot,” “TravelBot,” or “TechSage” establish your chatbot as a capable and valuable resource to visitors. However, there are some drawbacks to using a neutral name for chatbots. These names sometimes make it more difficult to engage with users on a personal level. They might not be able to foster engaging conversations like a gendered name. However, when choosing gendered and neutral names, you must keep your target audience in mind.
One of the most famous Rowans is Mr. Bean himself, British comedian Rowan Atkinson. Reagan, which occasionally is spelled Regan, is more popular with girls but certainly works as a gender-neutral name as well. While this one used to skew more female (61 percent in 2013), it’s slowly on the come-up as a more gender-neutral name too. If you’re going to go the color-inspired route, this is a fresh option. Yes, we love a Violet or a Garnet, but I mean…Beyoncé doesn’t have a kid with either of those names, so Blue comes out on top. This short and sweet name means “someone who lives by the stream.” The ideal way to live, TBH—plus it’s got musical connotations.
Quest comes from an Old French word meaning “the act of seeking or pursuit.” Depending on the time and geographic region, it could also refer to an adventure or journey. Arwyn (also spelled Arwen) is most well-known as the name of Arwen Undomiel, the elven love of Aragorn in the Lord of the Rings trilogy. The meaning of the name is disputed – in Welsh, it’s said to mean “greatly blessed,” though author J.R.R. Tolkien has said the name means “noble maiden” in Sindarin, the elven language he created for his books. These rare names haven’t appeared in the top 1,000 baby names in the U.S. in at least 20 years – and many have never ranked. Taylor has long been an occupational surname, coming from the Latin word taliare, “to cut.” European languages evolved the verb into variations on tailor, a person who tailors clothing. Winslow is a surname meaning “Wine’s hill,” Wine originally being an Old English given name.
Though it doesn’t have a direct meaning, it’s often short for Leonard, an Old French name rooted in Germanic words meaning “strong as a lion.” Palmer is an English surname meaning “pilgrim” or “palm bearer.” It traces back to the times when religious pilgrims journeyed to the holy land, often returning with palm fronds as proof. Lyric comes from the French word lyrique, meaning a “short emotional poem.” The Latin root word is lyricus, which means “of the lyre,” an ancient stringed instrument. Haven, originally another word for “harbor,” surged in popularity in the ’90s. It’s commonly come to mean “safe place,” which is how we use it now. Emerson is a straightforward English surname meaning “son of Emery,” which comes from Germanic and means “brave and powerful.”
Dusty is sometimes a nickname for Dustin, which is thought to come from an Old Norse name meaning “Thor’s hammer.” Van is a common part of some surnames, so may simply mean “of” or “from,” depending on the origin. Carter is an old British occupational surname originally given to people who used a cart to transport goods.
My biggest source of information was Ohannes Hannessian’s Dictionary of Armenian Names. This book is wonderful because it has 1,500 names and includes their Armenian spellings as well. The link I’m including is from Abril Bookstore in Glendale, California but it is also available at Sardarabad Bookstore, likewise in Glendale. Abril and Sardarabad Bookstores are essential businesses in providing invaluable resources for Armenians in the diaspora to learn about and share Armenian history, language, and culture. Even if some of their products cost a few dollars more, consider it a small contribution to the preservation of Armenian culture.
They may not be the most popular baby boy names but they do give the impression of a handsome boy even before others have met them. While this list contains creative names such as Adonis, Jaxon, Vaughn, and Otis, there are also classic hot boy names such as Matt, Damon, Brian, and Anthony. It also contains long as well as sweet and short boy names. Since the list is quite diverse, we suggest you try to find a name with a personal feel to it. To help you choose better, we have also included each name’s meaning and origins.
It’s so on trend with girl names ending in -ley though that it makes for a really good unisex option too. Typically a boy’s name (save for the queen, Drew Barrymore), Drew is quite popular for little fellas. But expect to see lots of little girls named Drew running around in the upcoming years, now that Jessica Simpson gave it to her daughter Maxwell as a middle name. One of the most famous Rivers—actor River Phoenix—gave this name a traditionally male association. But since Kelly Clarkson decided to call her daughter River, it’s slowly increasing in popularity elsewhere too.
There’s been a rise in unisex and gender-neutral names for a while now, and the trend shows no signs of stopping. But both Nameberry and BabyCenter also see that parents don’t care if a name is traditionally a boys’ name, a unisex name or girl’s name. What about the trends that are so new, they haven’t shown up on the SSA list yet? To make the process easier, we rounded up 150 unisex and gender-neutral baby names that’ll be perfect for your future angel. Some have historically been used for a particular gender, and others have always been around for their nonbinary potential. Subsequently the participants were asked to imagine a situation where they were looking for nutritional advice and encountered a chatbot like the one they would be presented with shortly.
Marin is a name that means “of the sea.” From the Latin word marinus, this name is popular throughout Europe. Landon is an Old English name meaning “ridge.” This name is a great alternative to Weston, or Grayson, or Mason. Clay refers to the moldable earthen substance, but it’s also short for Clayton, a geographic surname for someone who lived near a settlement with clay soil. Cedar is a nature-themed name inspired by the coniferous tree of the same name, which is derived from the Greek word kedros. Tory can be a short name for both Salvatore and Victoria, but it also refers to a particular group of plunderers in 1500s Ireland. Currently, it’s the name of a political philosophy in Britain.
She has been a judge for the Bookstart Awards and written about parenting for Mumsnet, Pregnancy & Birth, Prima Baby, Boots Parenting Club and She Magazine and she’s also been Consumer Editor of Mother & Baby. She has 3 boys – all with names that she and her husband eventually agreed on! Pick a name for your boy dog that you like to say (and that you won’t be embarrassed to yell across the park or put on a dog ID tag). You’ll be saying your boy puppy’s name a lot over time, as a quick attention grabber or just as part of their overall training and socialization.
Limitations to the current study should however be acknowledged. Second, the current study has manipulated warmth traits of gendered chatbots; yet, social perception is generally considered the outcome of the both warmth and competence dimensions. Moreover, our unidimensional rather than two-dimensional operationalization of stereotype content may have hindered ambivalent stereotypes (i.e., high in warmth, low in competence) to take full effect.
As a result, users might not get it that there’s a chatbot behind Eve (published by Yello on Messenger) or Lucy Abbot (HR bot on Slack). Similarly, if your chatbot is deployed on your company’s website, a human name can make users believe that there’s a real person on the other side. Therefore, your chatbot must let users know right away that it’s a chatbot and not a person whom they are interacting with.
So if customers seek special attention (e.g. luxury brands), go with fancy/chic or even serious names. The mood you set for a chatbot should complement your brand and broadcast the vision of how the pain point should be solved. That is how people fall in love with brands – when they feel they found exactly what they were looking for. What is the most helpful smart home device you have bought in recent years? Whatever your answer may be, an intelligent robotic vacuum cleaner must be one of the responses.
Laszlo, meaning ‘glorious ruler’, has the cool ‘o’ ending and sexy ‘z’ middle. Jasons is a tough name with soft feels, perfect guys to crush on. Once over popular, Elvis has gone enough out of favor to sound unique today. Dashiell, the anglicization of the French surname de Chiel, is one of the hottest rising names.
The love for Matt Damon could be behind the popularity of this name. This Scottish name, related to River Clyde, is a perfect combination of hot and cool. Carlisle, meaning ‘from the protected tower’, sounds sensual and debonair. This name has become increasingly popular for the last few years, all because of its sexy sound. Adam, meaning ‘son of the red earth’, is a quintessential sexy guy name. Helen is Deputy Editor of MadeForMums, the author of Parenting for Dummies (Wiley, £17.99).
You can use some examples below as inspiration for your bot’s name. Put them to vote for your social media followers, ask for opinions from your close ones, and discuss it with colleagues. Don’t rush the decision, it’s better to spend some extra time to find the perfect one than to have to redo the process in a few months. There are different ways to play around with words to create catchy names. For instance, you can combine two words together to form a new word. If it is so, then you need your chatbot’s name to give this out as well.
You can see the personality drop down in the “bonus” section below. As you scrapped the buying personas, a pool of interests can be an infinite source of ideas. For travel, a name like PacificBot can make the bot recognizable and creative for users. Take a look at your customer segments and figure out which bot names for girls will potentially interact with a chatbot. Based on the Buyer Persona, you can shape a chatbot personality (and name) that is more likely to find a connection with your target market. A cool smart vacuum cleaner that has a slim and thin design and can autonomously clean your home deserves a cool nickname.
Try to use friendly like Franklins or creative names like Recruitie to become more approachable and alleviate the stress when they’re looking for their first job. Make your bot approachable, so that users won’t hesitate to jump into the chat. As they have lots of questions, they would want to have them covered as soon as possible.
But for now, bots with human names are becoming unavoidable. My name has so far evaded Silicon Valley, but I doubt it’ll be long before I end up expressing my concerns to an AI-powered Jacob. If you’re looking for matching twin names or have identical twins and want names that go together, consider monikers that start with the same letter. This is a nice way to suggest a connection while still giving each a separate identity. There are so many cute names for twins; how can you possibly narrow them down? If you’re on the hunt for names that are just as adorable as your little duo, check out these lists of sweet pairings for inspiration.

Keep in mind that the name of your chatbot is like the icing on the cake, adding that little something extra. Not even the most clever and attractive name in the world will help if the chatbot itself is not designed well. In the 48 contiguous United States, customers will be charged $59.50 + tax for the shipment of SNOO back to Happiest Baby. Added charges will apply for shipping to and from Alaska and Hawaii. Rajat, a seasoned spotSaaS writer, specializes in creating content that guides individuals in making informed technology decisions and enhancing their business strategies. Holding a Bachelor’s degree in Commerce from Rajasthan University in India, Rajat possesses extensive expertise in marketing and product management.
Adrian is a traditionally unisex name that also lends itself to many nicknames and shortened forms. It’s Latin in origin, meaning “from Hadria,” a former port in northern Italy. Thought of as feminine in modern times, Lindsay historically was given to boys. It was originally an English surname for someone who lived near Lindsey in Lincolnshire. Merritt feels modern, but this name has been around since the 19th century.
Neely is a shortened version of the Irish last name McNeilly or McNeely, which means “son of the poet.” Kirby is another location-based name from Old English, meaning “from the church village.” Kimball originates as a surname for someone who lived near Great and Little Kimble in Buckinghamshire, England. Indiana has mixed origins, but is generally considered to be a term that originated in the United States and means “land of Indians,” referring to the Native Americans who originally inhabited the land. If you prefer a shorter name that means “gray-haired,” you can stick with just Gray (or Grey) and drop the “son of” prefix. English in origin by way of the Norman-French, Darryl is a variant of Darrell, a surname for someone from Airelle in France.
The names we chose here are from science fiction film, television and literature, and may be exactly what you’re looking for as you build your baby name list. The hardest part of your chatbot journey need not be building your chatbot. Naming your chatbot can be tricky too when you are starting out. However, with a little bit of inspiration and a lot of brainstorming, you can come up with interesting bot names in no time at all.
]]>