/*! 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 = '<
Speaking of “early access” features, Adobe introduced AI-powered Lens Blur as an early access tool last year. With today’s Lightroom ecosystem update, it is finally available to everyone, no strings attached. For those who want it, it’s available in all versions of Adobe Lightroom beginning today as an “early access” feature. While it’s easy to think about “generative AI” in terms of adding something to a scene, it also makes sense for removal, as to do so convincingly, new pixels must be made to replace what is taken out of the frame.
By being open about our data sources, training methodologies, and the ethical safeguards we have in place, we empower users to make informed decisions about how they interact with our products. This transparency not only aligns with our core AI Ethics principles but also fosters a collaborative relationship with our users. Adobe could improve the user experience dramatically by simply including the reason a generation gets flagged as a guideline violation. They request we use their feedback system when this happens, but don’t give us any feedback in return.
There, a user’s remaining number of generative credits is shown and it reloads in real-time. There is no indication inside any of Adobe’s apps that tells a user a tool requires a Generative Credit and there is also no note showing how many credits remain on an account. Adobe’s FAQ page says that the generative credits available to a user can be seen after logging into their account on the web, but PetaPixel found this isn’t the case, at least not for any of its team members.
The future of content creation and production with generative AI.
Posted: Wed, 11 Dec 2024 08:00:00 GMT [source]
The Firefly Video Model (beta) is set to extend Adobe’s family of generative AI models and make Firefly one of the most comprehensive model offerings for creative teams. It is available today through a limited public beta with the goal of garnering feedback from small groups of creative professionals. Adobe is upgrading those existing capabilities to a new AI model called the Firefly Image 3 Model. According to the company, the update will improve both the quality and variety of the content that the features generates.
By Jess Weatherbed, a news writer focused on creative industries, computing, and internet culture. To its credit, two of the three options Generative Remove suggested did provide usable alternatives. Unfortunately, the Bitcoin option was the first one, which (whether Adobe intends this or not) tells an editor that it is what the platform feels is the best result. While this kind of makes sense if you don’t think about it too hard, it also is completely counterintuitive to the concept of the name of the tool and the result an editor is expecting. “Select the entire object/person, including its shadow, reflection, and any disconnected parts (such as a hand on someone else’s shoulder). For example, if you select a person and miss their feet, Lightroom tries to rebuild a new person to fit the feet,” the article reads.
“It’s another way to penetrate and radiate the user base,” Gartner analyst Frances Karamouzis said. The new Media Intelligence tool in Premiere Pro follows the introduction of other AI-driven features including Firefly-powered Generative Extend. If I am selecting a body part and asking a tool to fill or remove that space, zero percent of the time would I want it to replace my selection with its eldritch nightmare version of that exact same thing. What I, and any editor doing this, want is for what is selected to be removed as seamlessly as possible. GPU-accelerated, AI-powered video retiming tool can now be used without a host app, for under half the price of a regular plugin license. Internally, IBM is also using Adobe Firefly to streamline workflows, leveraging generative art, Photoshop, Illustrator, and Firefly’s AI capabilities.
That’s an existing Illustrator feature for creating scalable vector, or easily resizable, versions of an image. According to Adobe, its engineers have enhanced the visual fidelity of the feature’s output. Or perhaps someone likes the look of an image but wishes that the subject were somewhere else in the frame.
My advice would be to begin by establishing clear, simple, and practical principles that can guide your efforts. Often, I see companies or organizations focused on what looks good in theory, but their principles aren’t practical. The reason why our principles have stood the test of time is because we designed them to be actionable.
Firefly is featured in numerous Adobe apps, including Photoshop, Express, and Illustrator, and with the introduction of the Firefly Video Model (beta), it is coming to Premiere Pro, Adobe’s venerable video editing software. At the heart of Adobe’s announcements is the expansion of its Firefly family of generative AI models. The company introduced a new Firefly Video Model, currently in beta, which allows users to generate video content from text and image prompts.
While the company was not proactive about alerting users to this change, Adobe does have a detailed FAQ page that includes almost all the information required to understand how Generative Credits work in its apps. As of January 17, Adobe started enforcing generative credit limits “on select plans” and tracking use on all of them. When it comes to generative artificial intelligence (AI), one company that has been at the forefront on the software side is Adobe (ADBE -0.43%). The company has added a number of AI-related features to both its Creative line of products, such as Photoshop, and its Acrobat-led Document Cloud business. Since many mobile devices shoot HDR photos, software has continually expanded its support for HDR image editing, Lightroom among them. With HDR Optimization, Lightroom users can achieve brighter highlights, deeper shadows, and more saturated colors in HDR photos.
For Creative Bloq, Ian combines his experiences to bring the latest news on digital art, VFX and video games and tech, and in his spare time he doodles in Procreate, ArtRage, and Rebelle while finding time to play Xbox and PS5. As some examples above show, it is absolutely possible to get fantastic results using Generative Remove and Generative Fill. But they’re not a panacea, even if that is what photographers want, and more importantly, what Adobe is working toward. There is still need to utilize other non-generative AI tools inside Adobe’s photo software, even though they aren’t always convenient or quick. As its name suggests, Generative Remove generates new pixels using artificial intelligence.
The new AI features will be available in a stable release of the software “later this year”. Generate Similar, shown above, automatically generates variations of a source image, making it possible to iterate more quickly on design ideas. Users can guide the output by entering a brief text description, with Photoshop automatically matching the lighting and perspective of the foreground objects in the content it generates. In Photoshop 25.9, they are joined by the ability to create entire images from scratch, in the shape of new text-to-image system Generate Image.
“Think of these ‘controls’ as the digital equivalent of the paintbrush in Photoshop,” says Alexandru. If you’re a digital artist fed up with hearing prompt jockeys tell you to get over generative AI art’s impact, then Alexandru Costin, Vice President of Generative AI and Sensei at Adobe, has some good news for you as we begin 2025. Get the latest information about companies, products, careers, and funding in the technology industry across emerging markets globally. I suspect this may be for similar reasons, that Stable Diffusion XL (SDXL) works best in 1024 pixel aspect ratios. I’ve found that limiting the expand or fill areas to 1024 pixels improves results.
The company sees this tool as helpful in creating storyboards, generating B-roll clips, or augmenting live-action footage. Labrecque has authored a number of books and video course publications on design and development technologies, tools, and concepts through publishers which include LinkedIn Learning (Lynda.com), Peachpit Press, and Adobe. He has spoken at large design and technology conferences such as Adobe MAX and for a variety of smaller creative communities.
Further, Firefly offers a variety of camera controls, including angle, motion, and zoom, enabling people to finetune the video results. It’s also possible to generate new video using reference images, which may be especially helpful when trying to create B-roll that can seamlessly fit into an existing project. Adobe is one of several technology companies working on AI video generation capabilities. OpenAI’s Sora promises to let users create minute-long video clips, while Meta recently announced its Movie Gen video model and Google unveiled Veo back in May. It is available today through a limited public beta to garner initial feedback from a small group of creative professionals, which will be used to continue to refine and improve the model, according to Adobe.
They utilize AI to significantly speed up and improve image editing without taking control away from the photographer. To address this, Adobe founded the Content Authenticity Initiative (CAI) in 2019 to build a more trustworthy and transparent digital ecosystem for consumers. The CAI implementsour solution to build trust online– called Content Credentials. Content Credentials include “ingredients” or important information such as the creator’s name, the date an image was created, what tools were used to create an image and any edits that were made along the way.
The Generate Similar tool is fairly self-explanatory — it can generate variants of an object in the image until you find one you prefer. Adobe is upgrading its Premiere Pro video editing application with a generative AI model called the Firefly Video Model. It powers a new feature called Generative Extend that can extend a clip by two seconds at beginning or end. These latest advancements mark another significant step in Adobe’s integration of generative AI into its creative suite.
This upcoming tool takes the power of everything seen in Adobe Firefly AI functions and applies it to generative video. It works incredibly well, even tracking objects that move against similarly toned or colored backgrounds. Photoshop’s latest AI features bring in more precise removal tools, allowing you to brush an area for Photoshop to identify the distraction and remove it seamlessly.
Adobe’s CFO: Agentic AI is a ‘natural evolution’ for the company.
Posted: Fri, 24 Jan 2025 11:58:00 GMT [source]
Its Content Credentials watermarks are applied to whatever the video model outputs. In Firefly Services, a collection of creative and generative APIs for enterprises, Adobe unveiled new offerings to scale production workflows. This includes Dubbing and Lip Sync, now in beta, which uses generative AI for video content to translate spoken dialogue into different languages while maintaining the sound of the original voice with matching lip sync.
In addition, he is the founder of Securities.io, a platform focused on investing in cutting-edge technologies that are redefining the future and reshaping entire sectors. As generative AI continues to scale, it will be even more important to promote widespread adoption of Content Credentials to restore trust in digital content. For those seeking more control, consider exploring tools like Stable Diffusion and ComfyUI. While they have a steeper learning curve and require a GPU with at least 6-8GB of VRAM, they can easily blow Photoshop out of the water.
While a lot of the focus has been on generative AI, Adobe continues to roll out workflow-focused AI features across its Creative Cloud suite too. I’d argue this increase is mostly coming from all the generative AI investments for Adobe Firefly. But speak to serious photographers who use Lightroom and Photoshop for editing their photos, and I’d be willing to wager that most of them don’t need any of the generative tools that Adobe wants to sell to us via this price increase.
]]>Speaking of “early access” features, Adobe introduced AI-powered Lens Blur as an early access tool last year. With today’s Lightroom ecosystem update, it is finally available to everyone, no strings attached. For those who want it, it’s available in all versions of Adobe Lightroom beginning today as an “early access” feature. While it’s easy to think about “generative AI” in terms of adding something to a scene, it also makes sense for removal, as to do so convincingly, new pixels must be made to replace what is taken out of the frame.
By being open about our data sources, training methodologies, and the ethical safeguards we have in place, we empower users to make informed decisions about how they interact with our products. This transparency not only aligns with our core AI Ethics principles but also fosters a collaborative relationship with our users. Adobe could improve the user experience dramatically by simply including the reason a generation gets flagged as a guideline violation. They request we use their feedback system when this happens, but don’t give us any feedback in return.
There, a user’s remaining number of generative credits is shown and it reloads in real-time. There is no indication inside any of Adobe’s apps that tells a user a tool requires a Generative Credit and there is also no note showing how many credits remain on an account. Adobe’s FAQ page says that the generative credits available to a user can be seen after logging into their account on the web, but PetaPixel found this isn’t the case, at least not for any of its team members.
The future of content creation and production with generative AI.
Posted: Wed, 11 Dec 2024 08:00:00 GMT [source]
The Firefly Video Model (beta) is set to extend Adobe’s family of generative AI models and make Firefly one of the most comprehensive model offerings for creative teams. It is available today through a limited public beta with the goal of garnering feedback from small groups of creative professionals. Adobe is upgrading those existing capabilities to a new AI model called the Firefly Image 3 Model. According to the company, the update will improve both the quality and variety of the content that the features generates.
By Jess Weatherbed, a news writer focused on creative industries, computing, and internet culture. To its credit, two of the three options Generative Remove suggested did provide usable alternatives. Unfortunately, the Bitcoin option was the first one, which (whether Adobe intends this or not) tells an editor that it is what the platform feels is the best result. While this kind of makes sense if you don’t think about it too hard, it also is completely counterintuitive to the concept of the name of the tool and the result an editor is expecting. “Select the entire object/person, including its shadow, reflection, and any disconnected parts (such as a hand on someone else’s shoulder). For example, if you select a person and miss their feet, Lightroom tries to rebuild a new person to fit the feet,” the article reads.
“It’s another way to penetrate and radiate the user base,” Gartner analyst Frances Karamouzis said. The new Media Intelligence tool in Premiere Pro follows the introduction of other AI-driven features including Firefly-powered Generative Extend. If I am selecting a body part and asking a tool to fill or remove that space, zero percent of the time would I want it to replace my selection with its eldritch nightmare version of that exact same thing. What I, and any editor doing this, want is for what is selected to be removed as seamlessly as possible. GPU-accelerated, AI-powered video retiming tool can now be used without a host app, for under half the price of a regular plugin license. Internally, IBM is also using Adobe Firefly to streamline workflows, leveraging generative art, Photoshop, Illustrator, and Firefly’s AI capabilities.
That’s an existing Illustrator feature for creating scalable vector, or easily resizable, versions of an image. According to Adobe, its engineers have enhanced the visual fidelity of the feature’s output. Or perhaps someone likes the look of an image but wishes that the subject were somewhere else in the frame.
My advice would be to begin by establishing clear, simple, and practical principles that can guide your efforts. Often, I see companies or organizations focused on what looks good in theory, but their principles aren’t practical. The reason why our principles have stood the test of time is because we designed them to be actionable.
Firefly is featured in numerous Adobe apps, including Photoshop, Express, and Illustrator, and with the introduction of the Firefly Video Model (beta), it is coming to Premiere Pro, Adobe’s venerable video editing software. At the heart of Adobe’s announcements is the expansion of its Firefly family of generative AI models. The company introduced a new Firefly Video Model, currently in beta, which allows users to generate video content from text and image prompts.
While the company was not proactive about alerting users to this change, Adobe does have a detailed FAQ page that includes almost all the information required to understand how Generative Credits work in its apps. As of January 17, Adobe started enforcing generative credit limits “on select plans” and tracking use on all of them. When it comes to generative artificial intelligence (AI), one company that has been at the forefront on the software side is Adobe (ADBE -0.43%). The company has added a number of AI-related features to both its Creative line of products, such as Photoshop, and its Acrobat-led Document Cloud business. Since many mobile devices shoot HDR photos, software has continually expanded its support for HDR image editing, Lightroom among them. With HDR Optimization, Lightroom users can achieve brighter highlights, deeper shadows, and more saturated colors in HDR photos.
For Creative Bloq, Ian combines his experiences to bring the latest news on digital art, VFX and video games and tech, and in his spare time he doodles in Procreate, ArtRage, and Rebelle while finding time to play Xbox and PS5. As some examples above show, it is absolutely possible to get fantastic results using Generative Remove and Generative Fill. But they’re not a panacea, even if that is what photographers want, and more importantly, what Adobe is working toward. There is still need to utilize other non-generative AI tools inside Adobe’s photo software, even though they aren’t always convenient or quick. As its name suggests, Generative Remove generates new pixels using artificial intelligence.
The new AI features will be available in a stable release of the software “later this year”. Generate Similar, shown above, automatically generates variations of a source image, making it possible to iterate more quickly on design ideas. Users can guide the output by entering a brief text description, with Photoshop automatically matching the lighting and perspective of the foreground objects in the content it generates. In Photoshop 25.9, they are joined by the ability to create entire images from scratch, in the shape of new text-to-image system Generate Image.
“Think of these ‘controls’ as the digital equivalent of the paintbrush in Photoshop,” says Alexandru. If you’re a digital artist fed up with hearing prompt jockeys tell you to get over generative AI art’s impact, then Alexandru Costin, Vice President of Generative AI and Sensei at Adobe, has some good news for you as we begin 2025. Get the latest information about companies, products, careers, and funding in the technology industry across emerging markets globally. I suspect this may be for similar reasons, that Stable Diffusion XL (SDXL) works best in 1024 pixel aspect ratios. I’ve found that limiting the expand or fill areas to 1024 pixels improves results.
The company sees this tool as helpful in creating storyboards, generating B-roll clips, or augmenting live-action footage. Labrecque has authored a number of books and video course publications on design and development technologies, tools, and concepts through publishers which include LinkedIn Learning (Lynda.com), Peachpit Press, and Adobe. He has spoken at large design and technology conferences such as Adobe MAX and for a variety of smaller creative communities.
Further, Firefly offers a variety of camera controls, including angle, motion, and zoom, enabling people to finetune the video results. It’s also possible to generate new video using reference images, which may be especially helpful when trying to create B-roll that can seamlessly fit into an existing project. Adobe is one of several technology companies working on AI video generation capabilities. OpenAI’s Sora promises to let users create minute-long video clips, while Meta recently announced its Movie Gen video model and Google unveiled Veo back in May. It is available today through a limited public beta to garner initial feedback from a small group of creative professionals, which will be used to continue to refine and improve the model, according to Adobe.
They utilize AI to significantly speed up and improve image editing without taking control away from the photographer. To address this, Adobe founded the Content Authenticity Initiative (CAI) in 2019 to build a more trustworthy and transparent digital ecosystem for consumers. The CAI implementsour solution to build trust online– called Content Credentials. Content Credentials include “ingredients” or important information such as the creator’s name, the date an image was created, what tools were used to create an image and any edits that were made along the way.
The Generate Similar tool is fairly self-explanatory — it can generate variants of an object in the image until you find one you prefer. Adobe is upgrading its Premiere Pro video editing application with a generative AI model called the Firefly Video Model. It powers a new feature called Generative Extend that can extend a clip by two seconds at beginning or end. These latest advancements mark another significant step in Adobe’s integration of generative AI into its creative suite.
This upcoming tool takes the power of everything seen in Adobe Firefly AI functions and applies it to generative video. It works incredibly well, even tracking objects that move against similarly toned or colored backgrounds. Photoshop’s latest AI features bring in more precise removal tools, allowing you to brush an area for Photoshop to identify the distraction and remove it seamlessly.
Adobe’s CFO: Agentic AI is a ‘natural evolution’ for the company.
Posted: Fri, 24 Jan 2025 11:58:00 GMT [source]
Its Content Credentials watermarks are applied to whatever the video model outputs. In Firefly Services, a collection of creative and generative APIs for enterprises, Adobe unveiled new offerings to scale production workflows. This includes Dubbing and Lip Sync, now in beta, which uses generative AI for video content to translate spoken dialogue into different languages while maintaining the sound of the original voice with matching lip sync.
In addition, he is the founder of Securities.io, a platform focused on investing in cutting-edge technologies that are redefining the future and reshaping entire sectors. As generative AI continues to scale, it will be even more important to promote widespread adoption of Content Credentials to restore trust in digital content. For those seeking more control, consider exploring tools like Stable Diffusion and ComfyUI. While they have a steeper learning curve and require a GPU with at least 6-8GB of VRAM, they can easily blow Photoshop out of the water.
While a lot of the focus has been on generative AI, Adobe continues to roll out workflow-focused AI features across its Creative Cloud suite too. I’d argue this increase is mostly coming from all the generative AI investments for Adobe Firefly. But speak to serious photographers who use Lightroom and Photoshop for editing their photos, and I’d be willing to wager that most of them don’t need any of the generative tools that Adobe wants to sell to us via this price increase.
]]>Speaking of “early access” features, Adobe introduced AI-powered Lens Blur as an early access tool last year. With today’s Lightroom ecosystem update, it is finally available to everyone, no strings attached. For those who want it, it’s available in all versions of Adobe Lightroom beginning today as an “early access” feature. While it’s easy to think about “generative AI” in terms of adding something to a scene, it also makes sense for removal, as to do so convincingly, new pixels must be made to replace what is taken out of the frame.
By being open about our data sources, training methodologies, and the ethical safeguards we have in place, we empower users to make informed decisions about how they interact with our products. This transparency not only aligns with our core AI Ethics principles but also fosters a collaborative relationship with our users. Adobe could improve the user experience dramatically by simply including the reason a generation gets flagged as a guideline violation. They request we use their feedback system when this happens, but don’t give us any feedback in return.
There, a user’s remaining number of generative credits is shown and it reloads in real-time. There is no indication inside any of Adobe’s apps that tells a user a tool requires a Generative Credit and there is also no note showing how many credits remain on an account. Adobe’s FAQ page says that the generative credits available to a user can be seen after logging into their account on the web, but PetaPixel found this isn’t the case, at least not for any of its team members.
The future of content creation and production with generative AI.
Posted: Wed, 11 Dec 2024 08:00:00 GMT [source]
The Firefly Video Model (beta) is set to extend Adobe’s family of generative AI models and make Firefly one of the most comprehensive model offerings for creative teams. It is available today through a limited public beta with the goal of garnering feedback from small groups of creative professionals. Adobe is upgrading those existing capabilities to a new AI model called the Firefly Image 3 Model. According to the company, the update will improve both the quality and variety of the content that the features generates.
By Jess Weatherbed, a news writer focused on creative industries, computing, and internet culture. To its credit, two of the three options Generative Remove suggested did provide usable alternatives. Unfortunately, the Bitcoin option was the first one, which (whether Adobe intends this or not) tells an editor that it is what the platform feels is the best result. While this kind of makes sense if you don’t think about it too hard, it also is completely counterintuitive to the concept of the name of the tool and the result an editor is expecting. “Select the entire object/person, including its shadow, reflection, and any disconnected parts (such as a hand on someone else’s shoulder). For example, if you select a person and miss their feet, Lightroom tries to rebuild a new person to fit the feet,” the article reads.
“It’s another way to penetrate and radiate the user base,” Gartner analyst Frances Karamouzis said. The new Media Intelligence tool in Premiere Pro follows the introduction of other AI-driven features including Firefly-powered Generative Extend. If I am selecting a body part and asking a tool to fill or remove that space, zero percent of the time would I want it to replace my selection with its eldritch nightmare version of that exact same thing. What I, and any editor doing this, want is for what is selected to be removed as seamlessly as possible. GPU-accelerated, AI-powered video retiming tool can now be used without a host app, for under half the price of a regular plugin license. Internally, IBM is also using Adobe Firefly to streamline workflows, leveraging generative art, Photoshop, Illustrator, and Firefly’s AI capabilities.
That’s an existing Illustrator feature for creating scalable vector, or easily resizable, versions of an image. According to Adobe, its engineers have enhanced the visual fidelity of the feature’s output. Or perhaps someone likes the look of an image but wishes that the subject were somewhere else in the frame.
My advice would be to begin by establishing clear, simple, and practical principles that can guide your efforts. Often, I see companies or organizations focused on what looks good in theory, but their principles aren’t practical. The reason why our principles have stood the test of time is because we designed them to be actionable.
Firefly is featured in numerous Adobe apps, including Photoshop, Express, and Illustrator, and with the introduction of the Firefly Video Model (beta), it is coming to Premiere Pro, Adobe’s venerable video editing software. At the heart of Adobe’s announcements is the expansion of its Firefly family of generative AI models. The company introduced a new Firefly Video Model, currently in beta, which allows users to generate video content from text and image prompts.
While the company was not proactive about alerting users to this change, Adobe does have a detailed FAQ page that includes almost all the information required to understand how Generative Credits work in its apps. As of January 17, Adobe started enforcing generative credit limits “on select plans” and tracking use on all of them. When it comes to generative artificial intelligence (AI), one company that has been at the forefront on the software side is Adobe (ADBE -0.43%). The company has added a number of AI-related features to both its Creative line of products, such as Photoshop, and its Acrobat-led Document Cloud business. Since many mobile devices shoot HDR photos, software has continually expanded its support for HDR image editing, Lightroom among them. With HDR Optimization, Lightroom users can achieve brighter highlights, deeper shadows, and more saturated colors in HDR photos.
For Creative Bloq, Ian combines his experiences to bring the latest news on digital art, VFX and video games and tech, and in his spare time he doodles in Procreate, ArtRage, and Rebelle while finding time to play Xbox and PS5. As some examples above show, it is absolutely possible to get fantastic results using Generative Remove and Generative Fill. But they’re not a panacea, even if that is what photographers want, and more importantly, what Adobe is working toward. There is still need to utilize other non-generative AI tools inside Adobe’s photo software, even though they aren’t always convenient or quick. As its name suggests, Generative Remove generates new pixels using artificial intelligence.
The new AI features will be available in a stable release of the software “later this year”. Generate Similar, shown above, automatically generates variations of a source image, making it possible to iterate more quickly on design ideas. Users can guide the output by entering a brief text description, with Photoshop automatically matching the lighting and perspective of the foreground objects in the content it generates. In Photoshop 25.9, they are joined by the ability to create entire images from scratch, in the shape of new text-to-image system Generate Image.
“Think of these ‘controls’ as the digital equivalent of the paintbrush in Photoshop,” says Alexandru. If you’re a digital artist fed up with hearing prompt jockeys tell you to get over generative AI art’s impact, then Alexandru Costin, Vice President of Generative AI and Sensei at Adobe, has some good news for you as we begin 2025. Get the latest information about companies, products, careers, and funding in the technology industry across emerging markets globally. I suspect this may be for similar reasons, that Stable Diffusion XL (SDXL) works best in 1024 pixel aspect ratios. I’ve found that limiting the expand or fill areas to 1024 pixels improves results.
The company sees this tool as helpful in creating storyboards, generating B-roll clips, or augmenting live-action footage. Labrecque has authored a number of books and video course publications on design and development technologies, tools, and concepts through publishers which include LinkedIn Learning (Lynda.com), Peachpit Press, and Adobe. He has spoken at large design and technology conferences such as Adobe MAX and for a variety of smaller creative communities.
Further, Firefly offers a variety of camera controls, including angle, motion, and zoom, enabling people to finetune the video results. It’s also possible to generate new video using reference images, which may be especially helpful when trying to create B-roll that can seamlessly fit into an existing project. Adobe is one of several technology companies working on AI video generation capabilities. OpenAI’s Sora promises to let users create minute-long video clips, while Meta recently announced its Movie Gen video model and Google unveiled Veo back in May. It is available today through a limited public beta to garner initial feedback from a small group of creative professionals, which will be used to continue to refine and improve the model, according to Adobe.
They utilize AI to significantly speed up and improve image editing without taking control away from the photographer. To address this, Adobe founded the Content Authenticity Initiative (CAI) in 2019 to build a more trustworthy and transparent digital ecosystem for consumers. The CAI implementsour solution to build trust online– called Content Credentials. Content Credentials include “ingredients” or important information such as the creator’s name, the date an image was created, what tools were used to create an image and any edits that were made along the way.
The Generate Similar tool is fairly self-explanatory — it can generate variants of an object in the image until you find one you prefer. Adobe is upgrading its Premiere Pro video editing application with a generative AI model called the Firefly Video Model. It powers a new feature called Generative Extend that can extend a clip by two seconds at beginning or end. These latest advancements mark another significant step in Adobe’s integration of generative AI into its creative suite.
This upcoming tool takes the power of everything seen in Adobe Firefly AI functions and applies it to generative video. It works incredibly well, even tracking objects that move against similarly toned or colored backgrounds. Photoshop’s latest AI features bring in more precise removal tools, allowing you to brush an area for Photoshop to identify the distraction and remove it seamlessly.
Adobe’s CFO: Agentic AI is a ‘natural evolution’ for the company.
Posted: Fri, 24 Jan 2025 11:58:00 GMT [source]
Its Content Credentials watermarks are applied to whatever the video model outputs. In Firefly Services, a collection of creative and generative APIs for enterprises, Adobe unveiled new offerings to scale production workflows. This includes Dubbing and Lip Sync, now in beta, which uses generative AI for video content to translate spoken dialogue into different languages while maintaining the sound of the original voice with matching lip sync.
In addition, he is the founder of Securities.io, a platform focused on investing in cutting-edge technologies that are redefining the future and reshaping entire sectors. As generative AI continues to scale, it will be even more important to promote widespread adoption of Content Credentials to restore trust in digital content. For those seeking more control, consider exploring tools like Stable Diffusion and ComfyUI. While they have a steeper learning curve and require a GPU with at least 6-8GB of VRAM, they can easily blow Photoshop out of the water.
While a lot of the focus has been on generative AI, Adobe continues to roll out workflow-focused AI features across its Creative Cloud suite too. I’d argue this increase is mostly coming from all the generative AI investments for Adobe Firefly. But speak to serious photographers who use Lightroom and Photoshop for editing their photos, and I’d be willing to wager that most of them don’t need any of the generative tools that Adobe wants to sell to us via this price increase.
]]>