/*! elementor - v3.19.0 - 07-02-2024 */
(self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["modules_nested-elements_assets_js_editor_nested-element-types-base_js"],{
/***/ "../modules/nested-elements/assets/js/editor/nested-element-types-base.js":
/*!********************************************************************************!*\
!*** ../modules/nested-elements/assets/js/editor/nested-element-types-base.js ***!
\********************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = exports.NestedElementTypesBase = void 0;
var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"));
var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"));
var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"));
var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"));
var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"));
var _view = _interopRequireDefault(__webpack_require__(/*! ./views/view */ "../modules/nested-elements/assets/js/editor/views/view.js"));
var _empty = _interopRequireDefault(__webpack_require__(/*! ./views/empty */ "../modules/nested-elements/assets/js/editor/views/empty.js"));
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
/**
* @typedef {import('../../../../../assets/dev/js/editor/elements/types/base/element-base')} ElementBase
*/
var NestedElementTypesBase = /*#__PURE__*/function (_elementor$modules$el) {
(0, _inherits2.default)(NestedElementTypesBase, _elementor$modules$el);
var _super = _createSuper(NestedElementTypesBase);
function NestedElementTypesBase() {
(0, _classCallCheck2.default)(this, NestedElementTypesBase);
return _super.apply(this, arguments);
}
(0, _createClass2.default)(NestedElementTypesBase, [{
key: "getType",
value: function getType() {
elementorModules.ForceMethodImplementation();
}
}, {
key: "getView",
value: function getView() {
return _view.default;
}
}, {
key: "getEmptyView",
value: function getEmptyView() {
return _empty.default;
}
}, {
key: "getModel",
value: function getModel() {
return $e.components.get('nested-elements/nested-repeater').exports.NestedModelBase;
}
}]);
return NestedElementTypesBase;
}(elementor.modules.elements.types.Base);
exports.NestedElementTypesBase = NestedElementTypesBase;
var _default = NestedElementTypesBase;
exports["default"] = _default;
/***/ }),
/***/ "../modules/nested-elements/assets/js/editor/views/add-section-area.js":
/*!*****************************************************************************!*\
!*** ../modules/nested-elements/assets/js/editor/views/add-section-area.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 _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = AddSectionArea;
var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/* eslint-disable jsx-a11y/click-events-have-key-events */
function AddSectionArea(props) {
var addAreaElementRef = (0, _react.useRef)(),
containerHelper = elementor.helpers.container;
// Make droppable area.
(0, _react.useEffect)(function () {
var $addAreaElementRef = jQuery(addAreaElementRef.current),
defaultDroppableOptions = props.container.view.getDroppableOptions();
// Make some adjustments to behave like 'AddSectionArea', use default droppable options from container element.
defaultDroppableOptions.placeholder = false;
defaultDroppableOptions.items = '> .elementor-add-section-inner';
defaultDroppableOptions.hasDraggingOnChildClass = 'elementor-dragging-on-child';
// Make element drop-able.
$addAreaElementRef.html5Droppable(defaultDroppableOptions);
// Cleanup.
return function () {
$addAreaElementRef.html5Droppable('destroy');
};
}, []);
return /*#__PURE__*/_react.default.createElement("div", {
className: "elementor-add-section",
onClick: function onClick() {
return containerHelper.openEditMode(props.container);
},
ref: addAreaElementRef,
role: "button",
tabIndex: "0"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "elementor-add-section-inner"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "e-view elementor-add-new-section"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "elementor-add-section-area-button elementor-add-section-button",
onClick: function onClick() {
return props.setIsRenderPresets(true);
},
title: __('Add new container', 'elementor'),
role: "button",
tabIndex: "0"
}, /*#__PURE__*/_react.default.createElement("i", {
className: "eicon-plus"
})), /*#__PURE__*/_react.default.createElement("div", {
className: "elementor-add-section-drag-title"
}, __('Drag widgets here.', 'elementor')))));
}
AddSectionArea.propTypes = {
container: PropTypes.object.isRequired,
setIsRenderPresets: PropTypes.func.isRequired
};
/***/ }),
/***/ "../modules/nested-elements/assets/js/editor/views/empty.js":
/*!******************************************************************!*\
!*** ../modules/nested-elements/assets/js/editor/views/empty.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");
var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = Empty;
var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "react"));
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"));
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"));
var _addSectionArea = _interopRequireDefault(__webpack_require__(/*! ./add-section-area */ "../modules/nested-elements/assets/js/editor/views/add-section-area.js"));
var _selectPreset = _interopRequireDefault(__webpack_require__(/*! ./select-preset */ "../modules/nested-elements/assets/js/editor/views/select-preset.js"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function Empty(props) {
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
isRenderPresets = _useState2[0],
setIsRenderPresets = _useState2[1];
props = _objectSpread(_objectSpread({}, props), {}, {
setIsRenderPresets: setIsRenderPresets
});
return isRenderPresets ? /*#__PURE__*/_react.default.createElement(_selectPreset.default, props) : /*#__PURE__*/_react.default.createElement(_addSectionArea.default, props);
}
Empty.propTypes = {
container: PropTypes.object.isRequired
};
/***/ }),
/***/ "../modules/nested-elements/assets/js/editor/views/select-preset.js":
/*!**************************************************************************!*\
!*** ../modules/nested-elements/assets/js/editor/views/select-preset.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");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = SelectPreset;
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react"));
/* eslint-disable jsx-a11y/click-events-have-key-events */
function SelectPreset(props) {
var containerHelper = elementor.helpers.container,
onPresetSelected = function onPresetSelected(preset, container) {
var options = {
createWrapper: false
};
// Create new one by selected preset.
containerHelper.createContainerFromPreset(preset, container, options);
};
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
className: "elementor-add-section-close"
}, /*#__PURE__*/_react.default.createElement("i", {
onClick: function onClick() {
return props.setIsRenderPresets(false);
},
className: "eicon-close",
"aria-hidden": "true"
}), /*#__PURE__*/_react.default.createElement("span", {
className: "elementor-screen-only"
}, __('Close', 'elementor'))), /*#__PURE__*/_react.default.createElement("div", {
className: "e-view e-con-select-preset"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "e-con-select-preset__title"
}, __('Select your Structure', 'elementor')), /*#__PURE__*/_react.default.createElement("div", {
className: "e-con-select-preset__list"
}, elementor.presetsFactory.getContainerPresets().map(function (preset) {
return /*#__PURE__*/_react.default.createElement("div", {
onClick: function onClick() {
return onPresetSelected(preset, props.container);
},
key: preset,
className: "e-con-preset",
"data-preset": preset,
dangerouslySetInnerHTML: {
__html: elementor.presetsFactory.generateContainerPreset(preset)
},
role: "button",
tabIndex: "0"
});
}))));
}
SelectPreset.propTypes = {
container: PropTypes.object.isRequired,
setIsRenderPresets: PropTypes.func.isRequired
};
/***/ }),
/***/ "../modules/nested-elements/assets/js/editor/views/view.js":
/*!*****************************************************************!*\
!*** ../modules/nested-elements/assets/js/editor/views/view.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = exports.View = void 0;
var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"));
var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"));
var _get2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/get */ "../node_modules/@babel/runtime/helpers/get.js"));
var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"));
var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"));
var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"));
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var View = /*#__PURE__*/function (_$e$components$get$ex) {
(0, _inherits2.default)(View, _$e$components$get$ex);
var _super = _createSuper(View);
function View() {
(0, _classCallCheck2.default)(this, View);
return _super.apply(this, arguments);
}
(0, _createClass2.default)(View, [{
key: "events",
value: function events() {
var _this = this;
var events = (0, _get2.default)((0, _getPrototypeOf2.default)(View.prototype), "events", this).call(this);
events.click = function (e) {
// If the clicked Nested Element is not within the currently edited document, don't do anything with it.
if (elementor.documents.currentDocument.id.toString() !== e.target.closest('.elementor').dataset.elementorId) {
return;
}
var closest = e.target.closest('.elementor-element');
var model = _this.options.model,
view = _this;
// For clicks on container/widget.
if (['container', 'widget'].includes(closest === null || closest === void 0 ? void 0 : closest.dataset.element_type)) {
// eslint-disable-line camelcase
// In case the container empty, click should be handled by the EmptyView.
var container = elementor.getContainer(closest.dataset.id);
if (container.view.isEmpty()) {
return true;
}
// If not empty, open it.
model = container.model;
view = container.view;
}
e.stopPropagation();
$e.run('panel/editor/open', {
model: model,
view: view
});
};
return events;
}
/**
* Function renderHTML().
*
* The `renderHTML()` method is overridden as it causes redundant renders when removing focus from any nested element.
* This is because the original `renderHTML()` method sets `editModel.renderOnLeave = true;`.
*/
}, {
key: "renderHTML",
value: function renderHTML() {
var templateType = this.getTemplateType(),
editModel = this.getEditModel();
if ('js' === templateType) {
editModel.setHtmlCache();
this.render();
} else {
editModel.renderRemoteServer();
}
}
}]);
return View;
}($e.components.get('nested-elements/nested-repeater').exports.NestedViewBase);
exports.View = View;
var _default = View;
exports["default"] = _default;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js":
/*!***********************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/assertThisInitialized.js ***!
\***********************************************************************/
/***/ ((module) => {
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
module.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/defineProperty.js":
/*!****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/defineProperty.js ***!
\****************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toPropertyKey = __webpack_require__(/*! ./toPropertyKey.js */ "../node_modules/@babel/runtime/helpers/toPropertyKey.js");
function _defineProperty(obj, key, value) {
key = toPropertyKey(key);
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/get.js":
/*!*****************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/get.js ***!
\*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var superPropBase = __webpack_require__(/*! ./superPropBase.js */ "../node_modules/@babel/runtime/helpers/superPropBase.js");
function _get() {
if (typeof Reflect !== "undefined" && Reflect.get) {
module.exports = _get = Reflect.get.bind(), module.exports.__esModule = true, module.exports["default"] = module.exports;
} else {
module.exports = _get = function _get(target, property, receiver) {
var base = superPropBase(target, property);
if (!base) return;
var desc = Object.getOwnPropertyDescriptor(base, property);
if (desc.get) {
return desc.get.call(arguments.length < 3 ? target : receiver);
}
return desc.value;
}, module.exports.__esModule = true, module.exports["default"] = module.exports;
}
return _get.apply(this, arguments);
}
module.exports = _get, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js":
/*!****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/getPrototypeOf.js ***!
\****************************************************************/
/***/ ((module) => {
function _getPrototypeOf(o) {
module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
}, module.exports.__esModule = true, module.exports["default"] = module.exports;
return _getPrototypeOf(o);
}
module.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/inherits.js":
/*!**********************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/inherits.js ***!
\**********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js");
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
Object.defineProperty(subClass, "prototype", {
writable: false
});
if (superClass) setPrototypeOf(subClass, superClass);
}
module.exports = _inherits, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js":
/*!***************************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***!
\***************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var _typeof = (__webpack_require__(/*! ./typeof.js */ "../node_modules/@babel/runtime/helpers/typeof.js")["default"]);
var assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized.js */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js");
function _possibleConstructorReturn(self, call) {
if (call && (_typeof(call) === "object" || typeof call === "function")) {
return call;
} else if (call !== void 0) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return assertThisInitialized(self);
}
module.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js":
/*!****************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/setPrototypeOf.js ***!
\****************************************************************/
/***/ ((module) => {
function _setPrototypeOf(o, p) {
module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
}, module.exports.__esModule = true, module.exports["default"] = module.exports;
return _setPrototypeOf(o, p);
}
module.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ }),
/***/ "../node_modules/@babel/runtime/helpers/superPropBase.js":
/*!***************************************************************!*\
!*** ../node_modules/@babel/runtime/helpers/superPropBase.js ***!
\***************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var getPrototypeOf = __webpack_require__(/*! ./getPrototypeOf.js */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js");
function _superPropBase(object, property) {
while (!Object.prototype.hasOwnProperty.call(object, property)) {
object = getPrototypeOf(object);
if (object === null) break;
}
return object;
}
module.exports = _superPropBase, module.exports.__esModule = true, module.exports["default"] = module.exports;
/***/ })
}]);
//# sourceMappingURL=e8a7573e654d921656ab.bundle.js.map
Проджект-менеджер в маркетинговом агентстве что он делает и какова его роль в бизнес-коммуникациях ️ Блог Webpromo – KONKRET Warning: file_get_contents(/autoinstalator/wordpress/wp-includes/js/wp-emoji-loader.min.js): failed to open stream: No such file or directory in /autoinstalator/wordpress/wp-includes/formatting.php on line 5882
Еще один совет, которым могут неохотно делиться проджект-менеджеры, касается использования инструментов управления проектами. Они могут автоматизировать их project manager обязанности задачи и помочь с легкостью управлять проектами. Поиск идеальных инструментов часто занимает много времени и испытаний. Кроме того, приложения и методы, которые вы будете использовать, могут зависеть от вашего стиля работы.
Если человек научился ставить цели и управлять проектами, то из него выйдет хороший PM?
Очень важно, чтобы проджект-менеджер стартапа мог оперативно перестраивать работу, спокойно относиться к форс-мажорам и легко вносить корректировки в планирование. Например, если запущена масштабная маркетинговая кампания, или выход продукта ждут к определенной дате. Грамотный тайм-менеджмент и правильное планирование позволяют вовремя закрывать сроки. Но иногда допустимо вовремя выяснить, что для лучшего результата следует сдвинуть сроки, и исходя из этого подкорректировать время завершения проекта. Менеджер проекта несет ответственность за достижение целей проекта в рамках бюджета, за реализацию в указанный срок и за требуемый уровень качества. Ключевыми здесь являются понятия «цели», «бюджет», «срок» и «уровень качества».
Проджект-менеджер и основные показатели его работы
Да, он может и порой даже обязан интересоваться смежными областями, которые связаны с проектом. «В моей карьере проджект-менеджера самой большой проблемой было то, как справиться с тревогой, чтобы делать то, что делается в ситуации, когда мы не можем контролировать других. Опыт реализации проектов, взаимодействия (слушания) с другими людьми в качестве клиента, партнера или той же компании, изучения техники и, что не менее важно, всегда стремиться понять себя. Помимо общих правил управления проектами (разработка, планирование, исполнение, мониторинг и контроль, закрытие) — я советую проявлять сострадание и сдержанность. Люди будут расстроены, всё пойдет не так, как вы хотите, но как руководитель проекта вы — то связующее звено, которое должно держать всё вместе и двигаться вперед. Я верю, что смог достичь этого в своем проекте, и в результате мы смогли создать команду».
Почему на самом деле вы не хотите быть Project Manager
Следуйте рекомендациям ниже, сохраняйте уверенность в себе и верьте в успех проекта. Менеджер должен уметь создавать прочную связь между клиентом и своей командой. И будучи связующим звеном между ними, он полностью отвечает за качество этой связи.
Ключевые навыки менеджера в управлении проектами
С другой стороны, у вас может не получиться подобрать проект, над которым вы будете работать. Это означает, что вы получите небольшие проекты, с которыми будете тратить время впустую. Если вы только начинаете свою карьеру, это может оказаться для вас неразрешимой проблемой, поскольку у вас еще нет необходимых знаний, чтобы соответствующим образом управлять своим временем.
советов для новичков project manager на первом проекте
Жизнь менеджера сплошная печаль сдобренная плюшками. И это самая неблагодарная работа в команде разработки. Успех любого проекта, не важно это создание веб-сайта, подготовка и запуск новой рекламной кампании и т.д.
Живой онлайн-курс по управлению проектами от Web Academy полностью удовлетворяет все вышеперечисленные признаки хороших курсов.
Не стоит расстраиваться, если работа, которую вы будете выполнять, не будет работой всей вашей жизни.
Карьера в управлении проектами по-прежнему востребована, и ожидается, что в ближайшие десять лет годовая заработная плата вырастет.
Если вы или ваш клиент — стартапер, то целью проекта может стать продажа стартапа.
Эффективный проектный менеджер обладает глубоким пониманием целей проекта, может адаптироваться к изменениям и умело управляет рисками, чтобы обеспечить успешное выполнение проекта.
Не только надеятся, что клиент знает, что происходит, но и следить за тем, чтобы всё было правильно задокументировано. Вы поняли — это намного больше усилий, но это то, что дает результаты». Если вы только начинаете свою карьеру, ты должны найти такую рабочую среду, которая позволит расти и учиться у коллег.
Менеджер начинается, когда есть требование клиента с одной стороны, мнение архитектора — с другой. Ко всем переговорам стоит готовиться и подбирать аргументы заранее. Например, клиент эскалирует, что Иванова нужно уволить, потому что он пишет неграмотные письма.
Этот специалист ответственен за планирование, организацию и успешное выполнение проектов. Проджект-менеджер обеспечивает, чтобы проект соответствовал как временным рамкам, так и бюджету, а также отвечает за качество конечного продукта. Product Manager играет критическую роль в успехе продукта, обладая комплексным пониманием бизнеса, технологий и пользовательского опыта. Это профессия, требующая глубоких знаний в области продуктового менеджмента и навыков работы с различными командами и рыночными данными.
Project Manager играет критическую роль в достижении целей проекта, обеспечивая эффективное управление ресурсами, временем и бюджетом. Эта профессия требует высокого уровня организационных способностей, умения работать с людьми и владения методиками управления проектами. Проджект-менеджеры востребованы во многих отраслях, особенно в IT, строительстве, маркетинге, и многих других. Их универсальные навыки управления проектами позволяют успешно реализовывать проекты в различных секторах экономики. Проектный менеджер — фильтр правок между клиентом и командой.
Для подтверждения эффективной работы по управлению проектом не забывайте обновлять статус при каждой выполненной задаче. Руководству важно видеть на общедоступном плане, что проект двигается вперед. Это означает, чтобы вы успешно справляетесь со своей ролью и вам можно доверять в дальнейшей работе. Гибкость к планированию и реализации проекта поможет PM всегда оставаться с холодной головой, не впадать в панику и быть эффективным лидером команды в любой ситуации.
Всё-таки я придерживаюсь мысли, что должность PM в чистом виде — это стратегическая ошибка и гораздо полезнее иметь роль, которая в этой серии статей обозначена как Team Lead. Работать с PM-ами, которые не имеют технического опыта и не участвуют в разработке меня всегда раздражает. Конечно, при конвеерном производстве сайтов это может быть уместно, но если работа идёт над несколькими продуктами или сервисами — лучше иметь нормального лидера команды. Он не обязан быть лучшим технарём, но обязан разбираться во всем, что происходит в проекте, и уметь находить решения нетривиальных проблем. Большинство менеджеров имеют бакалаврский или магистерский диплом, связанный с менеджментом или управлением бизнесом.
Фасилитация инноваций требует сильных межличностных навыков у проектного менеджера. Он должен быть эффективным слушателем, уметь эмпатизировать и создавать доверие в команде. Только таким образом можно достичь открытого обмена идеями и поддержки в команде.