/******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 6411: /***/ (function(module, exports) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! autosize 4.0.4 license: MIT http://www.jacklmoore.com/autosize */ (function (global, factory) { if (true) { !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else { var mod; } })(this, function (module, exports) { 'use strict'; var map = typeof Map === "function" ? new Map() : function () { var keys = []; var values = []; return { has: function has(key) { return keys.indexOf(key) > -1; }, get: function get(key) { return values[keys.indexOf(key)]; }, set: function set(key, value) { if (keys.indexOf(key) === -1) { keys.push(key); values.push(value); } }, delete: function _delete(key) { var index = keys.indexOf(key); if (index > -1) { keys.splice(index, 1); values.splice(index, 1); } } }; }(); var createEvent = function createEvent(name) { return new Event(name, { bubbles: true }); }; try { new Event('test'); } catch (e) { // IE does not support `new Event()` createEvent = function createEvent(name) { var evt = document.createEvent('Event'); evt.initEvent(name, true, false); return evt; }; } function assign(ta) { if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return; var heightOffset = null; var clientWidth = null; var cachedHeight = null; function init() { var style = window.getComputedStyle(ta, null); if (style.resize === 'vertical') { ta.style.resize = 'none'; } else if (style.resize === 'both') { ta.style.resize = 'horizontal'; } if (style.boxSizing === 'content-box') { heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom)); } else { heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth); } // Fix when a textarea is not on document body and heightOffset is Not a Number if (isNaN(heightOffset)) { heightOffset = 0; } update(); } function changeOverflow(value) { { // Chrome/Safari-specific fix: // When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space // made available by removing the scrollbar. The following forces the necessary text reflow. var width = ta.style.width; ta.style.width = '0px'; // Force reflow: /* jshint ignore:start */ ta.offsetWidth; /* jshint ignore:end */ ta.style.width = width; } ta.style.overflowY = value; } function getParentOverflows(el) { var arr = []; while (el && el.parentNode && el.parentNode instanceof Element) { if (el.parentNode.scrollTop) { arr.push({ node: el.parentNode, scrollTop: el.parentNode.scrollTop }); } el = el.parentNode; } return arr; } function resize() { if (ta.scrollHeight === 0) { // If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM. return; } var overflows = getParentOverflows(ta); var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240) ta.style.height = ''; ta.style.height = ta.scrollHeight + heightOffset + 'px'; // used to check if an update is actually necessary on window.resize clientWidth = ta.clientWidth; // prevents scroll-position jumping overflows.forEach(function (el) { el.node.scrollTop = el.scrollTop; }); if (docTop) { document.documentElement.scrollTop = docTop; } } function update() { resize(); var styleHeight = Math.round(parseFloat(ta.style.height)); var computed = window.getComputedStyle(ta, null); // Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box var actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight; // The actual height not matching the style height (set via the resize method) indicates that // the max-height has been exceeded, in which case the overflow should be allowed. if (actualHeight < styleHeight) { if (computed.overflowY === 'hidden') { changeOverflow('scroll'); resize(); actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight; } } else { // Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands. if (computed.overflowY !== 'hidden') { changeOverflow('hidden'); resize(); actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight; } } if (cachedHeight !== actualHeight) { cachedHeight = actualHeight; var evt = createEvent('autosize:resized'); try { ta.dispatchEvent(evt); } catch (err) { // Firefox will throw an error on dispatchEvent for a detached element // https://bugzilla.mozilla.org/show_bug.cgi?id=889376 } } } var pageResize = function pageResize() { if (ta.clientWidth !== clientWidth) { update(); } }; var destroy = function (style) { window.removeEventListener('resize', pageResize, false); ta.removeEventListener('input', update, false); ta.removeEventListener('keyup', update, false); ta.removeEventListener('autosize:destroy', destroy, false); ta.removeEventListener('autosize:update', update, false); Object.keys(style).forEach(function (key) { ta.style[key] = style[key]; }); map.delete(ta); }.bind(ta, { height: ta.style.height, resize: ta.style.resize, overflowY: ta.style.overflowY, overflowX: ta.style.overflowX, wordWrap: ta.style.wordWrap }); ta.addEventListener('autosize:destroy', destroy, false); // IE9 does not fire onpropertychange or oninput for deletions, // so binding to onkeyup to catch most of those events. // There is no way that I know of to detect something like 'cut' in IE9. if ('onpropertychange' in ta && 'oninput' in ta) { ta.addEventListener('keyup', update, false); } window.addEventListener('resize', pageResize, false); ta.addEventListener('input', update, false); ta.addEventListener('autosize:update', update, false); ta.style.overflowX = 'hidden'; ta.style.wordWrap = 'break-word'; map.set(ta, { destroy: destroy, update: update }); init(); } function destroy(ta) { var methods = map.get(ta); if (methods) { methods.destroy(); } } function update(ta) { var methods = map.get(ta); if (methods) { methods.update(); } } var autosize = null; // Do nothing in Node.js environment and IE8 (or lower) if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') { autosize = function autosize(el) { return el; }; autosize.destroy = function (el) { return el; }; autosize.update = function (el) { return el; }; } else { autosize = function autosize(el, options) { if (el) { Array.prototype.forEach.call(el.length ? el : [el], function (x) { return assign(x, options); }); } return el; }; autosize.destroy = function (el) { if (el) { Array.prototype.forEach.call(el.length ? el : [el], destroy); } return el; }; autosize.update = function (el) { if (el) { Array.prototype.forEach.call(el.length ? el : [el], update); } return el; }; } exports.default = autosize; module.exports = exports['default']; }); /***/ }), /***/ 4403: /***/ (function(module, exports) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ /* global define */ (function () { 'use strict'; var hasOwn = {}.hasOwnProperty; var nativeCodeString = '[native code]'; function classNames() { var classes = []; for (var i = 0; i < arguments.length; i++) { var arg = arguments[i]; if (!arg) continue; var argType = typeof arg; if (argType === 'string' || argType === 'number') { classes.push(arg); } else if (Array.isArray(arg)) { if (arg.length) { var inner = classNames.apply(null, arg); if (inner) { classes.push(inner); } } } else if (argType === 'object') { if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) { classes.push(arg.toString()); continue; } for (var key in arg) { if (hasOwn.call(arg, key) && arg[key]) { classes.push(key); } } } } return classes.join(' '); } if ( true && module.exports) { classNames.default = classNames; module.exports = classNames; } else if (true) { // register as 'classnames', consistent with npm package name !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { return classNames; }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else {} }()); /***/ }), /***/ 4827: /***/ (function(module) { // This code has been refactored for 140 bytes // You can see the original here: https://github.com/twolfson/computedStyle/blob/04cd1da2e30fa45844f95f5cb1ac898e9b9ef050/lib/computedStyle.js var computedStyle = function (el, prop, getComputedStyle) { getComputedStyle = window.getComputedStyle; // In one fell swoop return ( // If we have getComputedStyle getComputedStyle ? // Query it // TODO: From CSS-Query notes, we might need (node, null) for FF getComputedStyle(el) : // Otherwise, we are in IE and use currentStyle el.currentStyle )[ // Switch to camelCase for CSSOM // DEV: Grabbed from jQuery // https://github.com/jquery/jquery/blob/1.9-stable/src/css.js#L191-L194 // https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L593-L597 prop.replace(/-(\w)/gi, function (word, letter) { return letter.toUpperCase(); }) ]; }; module.exports = computedStyle; /***/ }), /***/ 9894: /***/ (function(module, __unused_webpack_exports, __webpack_require__) { // Load in dependencies var computedStyle = __webpack_require__(4827); /** * Calculate the `line-height` of a given node * @param {HTMLElement} node Element to calculate line height of. Must be in the DOM. * @returns {Number} `line-height` of the element in pixels */ function lineHeight(node) { // Grab the line-height via style var lnHeightStr = computedStyle(node, 'line-height'); var lnHeight = parseFloat(lnHeightStr, 10); // If the lineHeight did not contain a unit (i.e. it was numeric), convert it to ems (e.g. '2.3' === '2.3em') if (lnHeightStr === lnHeight + '') { // Save the old lineHeight style and update the em unit to the element var _lnHeightStyle = node.style.lineHeight; node.style.lineHeight = lnHeightStr + 'em'; // Calculate the em based height lnHeightStr = computedStyle(node, 'line-height'); lnHeight = parseFloat(lnHeightStr, 10); // Revert the lineHeight style if (_lnHeightStyle) { node.style.lineHeight = _lnHeightStyle; } else { delete node.style.lineHeight; } } // If the lineHeight is in `pt`, convert it to pixels (4px for 3pt) // DEV: `em` units are converted to `pt` in IE6 // Conversion ratio from https://developer.mozilla.org/en-US/docs/Web/CSS/length if (lnHeightStr.indexOf('pt') !== -1) { lnHeight *= 4; lnHeight /= 3; // Otherwise, if the lineHeight is in `mm`, convert it to pixels (96px for 25.4mm) } else if (lnHeightStr.indexOf('mm') !== -1) { lnHeight *= 96; lnHeight /= 25.4; // Otherwise, if the lineHeight is in `cm`, convert it to pixels (96px for 2.54cm) } else if (lnHeightStr.indexOf('cm') !== -1) { lnHeight *= 96; lnHeight /= 2.54; // Otherwise, if the lineHeight is in `in`, convert it to pixels (96px for 1in) } else if (lnHeightStr.indexOf('in') !== -1) { lnHeight *= 96; // Otherwise, if the lineHeight is in `pc`, convert it to pixels (12pt for 1pc) } else if (lnHeightStr.indexOf('pc') !== -1) { lnHeight *= 16; } // Continue our computation lnHeight = Math.round(lnHeight); // If the line-height is "normal", calculate by font-size if (lnHeightStr === 'normal') { // Create a temporary node var nodeName = node.nodeName; var _node = document.createElement(nodeName); _node.innerHTML = ' '; // If we have a text area, reset it to only 1 row // https://github.com/twolfson/line-height/issues/4 if (nodeName.toUpperCase() === 'TEXTAREA') { _node.setAttribute('rows', '1'); } // Set the font-size of the element var fontSizeStr = computedStyle(node, 'font-size'); _node.style.fontSize = fontSizeStr; // Remove default padding/border which can affect offset height // https://github.com/twolfson/line-height/issues/4 // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight _node.style.padding = '0px'; _node.style.border = '0px'; // Append it to the body var body = document.body; body.appendChild(_node); // Assume the line height of the element is the height var height = _node.offsetHeight; lnHeight = height; // Remove our child from the DOM body.removeChild(_node); } // Return the calculated height return lnHeight; } // Export lineHeight module.exports = lineHeight; /***/ }), /***/ 5372: /***/ (function(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 ReactPropTypesSecret = __webpack_require__(9567); function emptyFunction() {} function emptyFunctionWithReset() {} emptyFunctionWithReset.resetWarningCache = emptyFunction; module.exports = function() { function shim(props, propName, componentName, location, propFullName, secret) { if (secret === ReactPropTypesSecret) { // It is still safe when called from React. return; } var err = new Error( 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types' ); err.name = 'Invariant Violation'; throw err; }; shim.isRequired = shim; function getShim() { return shim; }; // Important! // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`. var ReactPropTypes = { array: shim, bigint: shim, bool: shim, func: shim, number: shim, object: shim, string: shim, symbol: shim, any: shim, arrayOf: getShim, element: shim, elementType: shim, instanceOf: getShim, node: shim, objectOf: getShim, oneOf: getShim, oneOfType: getShim, shape: getShim, exact: getShim, checkPropTypes: emptyFunctionWithReset, resetWarningCache: emptyFunction }; ReactPropTypes.PropTypes = ReactPropTypes; return ReactPropTypes; }; /***/ }), /***/ 2652: /***/ (function(module, __unused_webpack_exports, __webpack_require__) { /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ if (false) { var throwOnDirectAccess, ReactIs; } else { // By explicitly using `prop-types` you are opting into new production behavior. // http://fb.me/prop-types-in-prod module.exports = __webpack_require__(5372)(); } /***/ }), /***/ 9567: /***/ (function(module) { "use strict"; /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; module.exports = ReactPropTypesSecret; /***/ }), /***/ 5438: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (this && this.__assign) || Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) t[p[i]] = s[p[i]]; return t; }; exports.__esModule = true; var React = __webpack_require__(9196); var PropTypes = __webpack_require__(2652); var autosize = __webpack_require__(6411); var _getLineHeight = __webpack_require__(9894); var getLineHeight = _getLineHeight; var RESIZED = "autosize:resized"; /** * A light replacement for built-in textarea component * which automaticaly adjusts its height to match the content */ var TextareaAutosizeClass = /** @class */ (function (_super) { __extends(TextareaAutosizeClass, _super); function TextareaAutosizeClass() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.state = { lineHeight: null }; _this.textarea = null; _this.onResize = function (e) { if (_this.props.onResize) { _this.props.onResize(e); } }; _this.updateLineHeight = function () { if (_this.textarea) { _this.setState({ lineHeight: getLineHeight(_this.textarea) }); } }; _this.onChange = function (e) { var onChange = _this.props.onChange; _this.currentValue = e.currentTarget.value; onChange && onChange(e); }; return _this; } TextareaAutosizeClass.prototype.componentDidMount = function () { var _this = this; var _a = this.props, maxRows = _a.maxRows, async = _a.async; if (typeof maxRows === "number") { this.updateLineHeight(); } if (typeof maxRows === "number" || async) { /* the defer is needed to: - force "autosize" to activate the scrollbar when this.props.maxRows is passed - support StyledComponents (see #71) */ setTimeout(function () { return _this.textarea && autosize(_this.textarea); }); } else { this.textarea && autosize(this.textarea); } if (this.textarea) { this.textarea.addEventListener(RESIZED, this.onResize); } }; TextareaAutosizeClass.prototype.componentWillUnmount = function () { if (this.textarea) { this.textarea.removeEventListener(RESIZED, this.onResize); autosize.destroy(this.textarea); } }; TextareaAutosizeClass.prototype.render = function () { var _this = this; var _a = this, _b = _a.props, onResize = _b.onResize, maxRows = _b.maxRows, onChange = _b.onChange, style = _b.style, innerRef = _b.innerRef, children = _b.children, props = __rest(_b, ["onResize", "maxRows", "onChange", "style", "innerRef", "children"]), lineHeight = _a.state.lineHeight; var maxHeight = maxRows && lineHeight ? lineHeight * maxRows : null; return (React.createElement("textarea", __assign({}, props, { onChange: this.onChange, style: maxHeight ? __assign({}, style, { maxHeight: maxHeight }) : style, ref: function (element) { _this.textarea = element; if (typeof _this.props.innerRef === 'function') { _this.props.innerRef(element); } else if (_this.props.innerRef) { _this.props.innerRef.current = element; } } }), children)); }; TextareaAutosizeClass.prototype.componentDidUpdate = function () { this.textarea && autosize.update(this.textarea); }; TextareaAutosizeClass.defaultProps = { rows: 1, async: false }; TextareaAutosizeClass.propTypes = { rows: PropTypes.number, maxRows: PropTypes.number, onResize: PropTypes.func, innerRef: PropTypes.any, async: PropTypes.bool }; return TextareaAutosizeClass; }(React.Component)); exports.TextareaAutosize = React.forwardRef(function (props, ref) { return React.createElement(TextareaAutosizeClass, __assign({}, props, { innerRef: ref })); }); /***/ }), /***/ 773: /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; var __webpack_unused_export__; __webpack_unused_export__ = true; var TextareaAutosize_1 = __webpack_require__(5438); exports.Z = TextareaAutosize_1.TextareaAutosize; /***/ }), /***/ 4793: /***/ (function(module) { var characterMap = { "À": "A", "Á": "A", "Â": "A", "Ã": "A", "Ä": "A", "Å": "A", "Ấ": "A", "Ắ": "A", "Ẳ": "A", "Ẵ": "A", "Ặ": "A", "Æ": "AE", "Ầ": "A", "Ằ": "A", "Ȃ": "A", "Ç": "C", "Ḉ": "C", "È": "E", "É": "E", "Ê": "E", "Ë": "E", "Ế": "E", "Ḗ": "E", "Ề": "E", "Ḕ": "E", "Ḝ": "E", "Ȇ": "E", "Ì": "I", "Í": "I", "Î": "I", "Ï": "I", "Ḯ": "I", "Ȋ": "I", "Ð": "D", "Ñ": "N", "Ò": "O", "Ó": "O", "Ô": "O", "Õ": "O", "Ö": "O", "Ø": "O", "Ố": "O", "Ṍ": "O", "Ṓ": "O", "Ȏ": "O", "Ù": "U", "Ú": "U", "Û": "U", "Ü": "U", "Ý": "Y", "à": "a", "á": "a", "â": "a", "ã": "a", "ä": "a", "å": "a", "ấ": "a", "ắ": "a", "ẳ": "a", "ẵ": "a", "ặ": "a", "æ": "ae", "ầ": "a", "ằ": "a", "ȃ": "a", "ç": "c", "ḉ": "c", "è": "e", "é": "e", "ê": "e", "ë": "e", "ế": "e", "ḗ": "e", "ề": "e", "ḕ": "e", "ḝ": "e", "ȇ": "e", "ì": "i", "í": "i", "î": "i", "ï": "i", "ḯ": "i", "ȋ": "i", "ð": "d", "ñ": "n", "ò": "o", "ó": "o", "ô": "o", "õ": "o", "ö": "o", "ø": "o", "ố": "o", "ṍ": "o", "ṓ": "o", "ȏ": "o", "ù": "u", "ú": "u", "û": "u", "ü": "u", "ý": "y", "ÿ": "y", "Ā": "A", "ā": "a", "Ă": "A", "ă": "a", "Ą": "A", "ą": "a", "Ć": "C", "ć": "c", "Ĉ": "C", "ĉ": "c", "Ċ": "C", "ċ": "c", "Č": "C", "č": "c", "C̆": "C", "c̆": "c", "Ď": "D", "ď": "d", "Đ": "D", "đ": "d", "Ē": "E", "ē": "e", "Ĕ": "E", "ĕ": "e", "Ė": "E", "ė": "e", "Ę": "E", "ę": "e", "Ě": "E", "ě": "e", "Ĝ": "G", "Ǵ": "G", "ĝ": "g", "ǵ": "g", "Ğ": "G", "ğ": "g", "Ġ": "G", "ġ": "g", "Ģ": "G", "ģ": "g", "Ĥ": "H", "ĥ": "h", "Ħ": "H", "ħ": "h", "Ḫ": "H", "ḫ": "h", "Ĩ": "I", "ĩ": "i", "Ī": "I", "ī": "i", "Ĭ": "I", "ĭ": "i", "Į": "I", "į": "i", "İ": "I", "ı": "i", "IJ": "IJ", "ij": "ij", "Ĵ": "J", "ĵ": "j", "Ķ": "K", "ķ": "k", "Ḱ": "K", "ḱ": "k", "K̆": "K", "k̆": "k", "Ĺ": "L", "ĺ": "l", "Ļ": "L", "ļ": "l", "Ľ": "L", "ľ": "l", "Ŀ": "L", "ŀ": "l", "Ł": "l", "ł": "l", "Ḿ": "M", "ḿ": "m", "M̆": "M", "m̆": "m", "Ń": "N", "ń": "n", "Ņ": "N", "ņ": "n", "Ň": "N", "ň": "n", "ʼn": "n", "N̆": "N", "n̆": "n", "Ō": "O", "ō": "o", "Ŏ": "O", "ŏ": "o", "Ő": "O", "ő": "o", "Œ": "OE", "œ": "oe", "P̆": "P", "p̆": "p", "Ŕ": "R", "ŕ": "r", "Ŗ": "R", "ŗ": "r", "Ř": "R", "ř": "r", "R̆": "R", "r̆": "r", "Ȓ": "R", "ȓ": "r", "Ś": "S", "ś": "s", "Ŝ": "S", "ŝ": "s", "Ş": "S", "Ș": "S", "ș": "s", "ş": "s", "Š": "S", "š": "s", "Ţ": "T", "ţ": "t", "ț": "t", "Ț": "T", "Ť": "T", "ť": "t", "Ŧ": "T", "ŧ": "t", "T̆": "T", "t̆": "t", "Ũ": "U", "ũ": "u", "Ū": "U", "ū": "u", "Ŭ": "U", "ŭ": "u", "Ů": "U", "ů": "u", "Ű": "U", "ű": "u", "Ų": "U", "ų": "u", "Ȗ": "U", "ȗ": "u", "V̆": "V", "v̆": "v", "Ŵ": "W", "ŵ": "w", "Ẃ": "W", "ẃ": "w", "X̆": "X", "x̆": "x", "Ŷ": "Y", "ŷ": "y", "Ÿ": "Y", "Y̆": "Y", "y̆": "y", "Ź": "Z", "ź": "z", "Ż": "Z", "ż": "z", "Ž": "Z", "ž": "z", "ſ": "s", "ƒ": "f", "Ơ": "O", "ơ": "o", "Ư": "U", "ư": "u", "Ǎ": "A", "ǎ": "a", "Ǐ": "I", "ǐ": "i", "Ǒ": "O", "ǒ": "o", "Ǔ": "U", "ǔ": "u", "Ǖ": "U", "ǖ": "u", "Ǘ": "U", "ǘ": "u", "Ǚ": "U", "ǚ": "u", "Ǜ": "U", "ǜ": "u", "Ứ": "U", "ứ": "u", "Ṹ": "U", "ṹ": "u", "Ǻ": "A", "ǻ": "a", "Ǽ": "AE", "ǽ": "ae", "Ǿ": "O", "ǿ": "o", "Þ": "TH", "þ": "th", "Ṕ": "P", "ṕ": "p", "Ṥ": "S", "ṥ": "s", "X́": "X", "x́": "x", "Ѓ": "Г", "ѓ": "г", "Ќ": "К", "ќ": "к", "A̋": "A", "a̋": "a", "E̋": "E", "e̋": "e", "I̋": "I", "i̋": "i", "Ǹ": "N", "ǹ": "n", "Ồ": "O", "ồ": "o", "Ṑ": "O", "ṑ": "o", "Ừ": "U", "ừ": "u", "Ẁ": "W", "ẁ": "w", "Ỳ": "Y", "ỳ": "y", "Ȁ": "A", "ȁ": "a", "Ȅ": "E", "ȅ": "e", "Ȉ": "I", "ȉ": "i", "Ȍ": "O", "ȍ": "o", "Ȑ": "R", "ȑ": "r", "Ȕ": "U", "ȕ": "u", "B̌": "B", "b̌": "b", "Č̣": "C", "č̣": "c", "Ê̌": "E", "ê̌": "e", "F̌": "F", "f̌": "f", "Ǧ": "G", "ǧ": "g", "Ȟ": "H", "ȟ": "h", "J̌": "J", "ǰ": "j", "Ǩ": "K", "ǩ": "k", "M̌": "M", "m̌": "m", "P̌": "P", "p̌": "p", "Q̌": "Q", "q̌": "q", "Ř̩": "R", "ř̩": "r", "Ṧ": "S", "ṧ": "s", "V̌": "V", "v̌": "v", "W̌": "W", "w̌": "w", "X̌": "X", "x̌": "x", "Y̌": "Y", "y̌": "y", "A̧": "A", "a̧": "a", "B̧": "B", "b̧": "b", "Ḑ": "D", "ḑ": "d", "Ȩ": "E", "ȩ": "e", "Ɛ̧": "E", "ɛ̧": "e", "Ḩ": "H", "ḩ": "h", "I̧": "I", "i̧": "i", "Ɨ̧": "I", "ɨ̧": "i", "M̧": "M", "m̧": "m", "O̧": "O", "o̧": "o", "Q̧": "Q", "q̧": "q", "U̧": "U", "u̧": "u", "X̧": "X", "x̧": "x", "Z̧": "Z", "z̧": "z", }; var chars = Object.keys(characterMap).join('|'); var allAccents = new RegExp(chars, 'g'); var firstAccent = new RegExp(chars, ''); var removeAccents = function(string) { return string.replace(allAccents, function(match) { return characterMap[match]; }); }; var hasAccents = function(string) { return !!string.match(firstAccent); }; module.exports = removeAccents; module.exports.has = hasAccents; module.exports.remove = removeAccents; /***/ }), /***/ 9196: /***/ (function(module) { "use strict"; module.exports = window["React"]; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ !function() { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function() { return module['default']; } : /******/ function() { return module; }; /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be in strict mode. !function() { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, { "AlignmentToolbar": function() { return /* reexport */ AlignmentToolbar; }, "Autocomplete": function() { return /* reexport */ Autocomplete; }, "AutosaveMonitor": function() { return /* reexport */ autosave_monitor; }, "BlockAlignmentToolbar": function() { return /* reexport */ BlockAlignmentToolbar; }, "BlockControls": function() { return /* reexport */ BlockControls; }, "BlockEdit": function() { return /* reexport */ BlockEdit; }, "BlockEditorKeyboardShortcuts": function() { return /* reexport */ BlockEditorKeyboardShortcuts; }, "BlockFormatControls": function() { return /* reexport */ BlockFormatControls; }, "BlockIcon": function() { return /* reexport */ BlockIcon; }, "BlockInspector": function() { return /* reexport */ BlockInspector; }, "BlockList": function() { return /* reexport */ BlockList; }, "BlockMover": function() { return /* reexport */ BlockMover; }, "BlockNavigationDropdown": function() { return /* reexport */ BlockNavigationDropdown; }, "BlockSelectionClearer": function() { return /* reexport */ BlockSelectionClearer; }, "BlockSettingsMenu": function() { return /* reexport */ BlockSettingsMenu; }, "BlockTitle": function() { return /* reexport */ BlockTitle; }, "BlockToolbar": function() { return /* reexport */ BlockToolbar; }, "ColorPalette": function() { return /* reexport */ ColorPalette; }, "ContrastChecker": function() { return /* reexport */ ContrastChecker; }, "CopyHandler": function() { return /* reexport */ CopyHandler; }, "DefaultBlockAppender": function() { return /* reexport */ DefaultBlockAppender; }, "DocumentOutline": function() { return /* reexport */ document_outline; }, "DocumentOutlineCheck": function() { return /* reexport */ check; }, "EditorHistoryRedo": function() { return /* reexport */ editor_history_redo; }, "EditorHistoryUndo": function() { return /* reexport */ editor_history_undo; }, "EditorKeyboardShortcutsRegister": function() { return /* reexport */ register_shortcuts; }, "EditorNotices": function() { return /* reexport */ editor_notices; }, "EditorProvider": function() { return /* reexport */ provider; }, "EditorSnackbars": function() { return /* reexport */ EditorSnackbars; }, "EntitiesSavedStates": function() { return /* reexport */ EntitiesSavedStates; }, "ErrorBoundary": function() { return /* reexport */ error_boundary; }, "FontSizePicker": function() { return /* reexport */ FontSizePicker; }, "InnerBlocks": function() { return /* reexport */ InnerBlocks; }, "Inserter": function() { return /* reexport */ Inserter; }, "InspectorAdvancedControls": function() { return /* reexport */ InspectorAdvancedControls; }, "InspectorControls": function() { return /* reexport */ InspectorControls; }, "LocalAutosaveMonitor": function() { return /* reexport */ local_autosave_monitor; }, "MediaPlaceholder": function() { return /* reexport */ MediaPlaceholder; }, "MediaUpload": function() { return /* reexport */ MediaUpload; }, "MediaUploadCheck": function() { return /* reexport */ MediaUploadCheck; }, "MultiSelectScrollIntoView": function() { return /* reexport */ MultiSelectScrollIntoView; }, "NavigableToolbar": function() { return /* reexport */ NavigableToolbar; }, "ObserveTyping": function() { return /* reexport */ ObserveTyping; }, "PageAttributesCheck": function() { return /* reexport */ page_attributes_check; }, "PageAttributesOrder": function() { return /* reexport */ order; }, "PageAttributesParent": function() { return /* reexport */ page_attributes_parent; }, "PageTemplate": function() { return /* reexport */ post_template; }, "PanelColorSettings": function() { return /* reexport */ PanelColorSettings; }, "PlainText": function() { return /* reexport */ PlainText; }, "PostAuthor": function() { return /* reexport */ post_author; }, "PostAuthorCheck": function() { return /* reexport */ PostAuthorCheck; }, "PostComments": function() { return /* reexport */ post_comments; }, "PostExcerpt": function() { return /* reexport */ post_excerpt; }, "PostExcerptCheck": function() { return /* reexport */ post_excerpt_check; }, "PostFeaturedImage": function() { return /* reexport */ post_featured_image; }, "PostFeaturedImageCheck": function() { return /* reexport */ post_featured_image_check; }, "PostFormat": function() { return /* reexport */ PostFormat; }, "PostFormatCheck": function() { return /* reexport */ post_format_check; }, "PostLastRevision": function() { return /* reexport */ post_last_revision; }, "PostLastRevisionCheck": function() { return /* reexport */ post_last_revision_check; }, "PostLockedModal": function() { return /* reexport */ PostLockedModal; }, "PostPendingStatus": function() { return /* reexport */ post_pending_status; }, "PostPendingStatusCheck": function() { return /* reexport */ post_pending_status_check; }, "PostPingbacks": function() { return /* reexport */ post_pingbacks; }, "PostPreviewButton": function() { return /* reexport */ post_preview_button; }, "PostPublishButton": function() { return /* reexport */ post_publish_button; }, "PostPublishButtonLabel": function() { return /* reexport */ label; }, "PostPublishPanel": function() { return /* reexport */ post_publish_panel; }, "PostSavedState": function() { return /* reexport */ PostSavedState; }, "PostSchedule": function() { return /* reexport */ PostSchedule; }, "PostScheduleCheck": function() { return /* reexport */ post_schedule_check; }, "PostScheduleLabel": function() { return /* reexport */ PostScheduleLabel; }, "PostSlug": function() { return /* reexport */ post_slug; }, "PostSlugCheck": function() { return /* reexport */ PostSlugCheck; }, "PostSticky": function() { return /* reexport */ post_sticky; }, "PostStickyCheck": function() { return /* reexport */ post_sticky_check; }, "PostSwitchToDraftButton": function() { return /* reexport */ post_switch_to_draft_button; }, "PostTaxonomies": function() { return /* reexport */ post_taxonomies; }, "PostTaxonomiesCheck": function() { return /* reexport */ post_taxonomies_check; }, "PostTaxonomiesFlatTermSelector": function() { return /* reexport */ FlatTermSelector; }, "PostTaxonomiesHierarchicalTermSelector": function() { return /* reexport */ HierarchicalTermSelector; }, "PostTextEditor": function() { return /* reexport */ PostTextEditor; }, "PostTitle": function() { return /* reexport */ post_title; }, "PostTrash": function() { return /* reexport */ PostTrash; }, "PostTrashCheck": function() { return /* reexport */ post_trash_check; }, "PostTypeSupportCheck": function() { return /* reexport */ post_type_support_check; }, "PostURL": function() { return /* reexport */ PostURL; }, "PostURLCheck": function() { return /* reexport */ PostURLCheck; }, "PostURLLabel": function() { return /* reexport */ PostURLLabel; }, "PostVisibility": function() { return /* reexport */ PostVisibility; }, "PostVisibilityCheck": function() { return /* reexport */ post_visibility_check; }, "PostVisibilityLabel": function() { return /* reexport */ PostVisibilityLabel; }, "RichText": function() { return /* reexport */ RichText; }, "RichTextShortcut": function() { return /* reexport */ RichTextShortcut; }, "RichTextToolbarButton": function() { return /* reexport */ RichTextToolbarButton; }, "ServerSideRender": function() { return /* reexport */ (external_wp_serverSideRender_default()); }, "SkipToSelectedBlock": function() { return /* reexport */ SkipToSelectedBlock; }, "TableOfContents": function() { return /* reexport */ table_of_contents; }, "TextEditorGlobalKeyboardShortcuts": function() { return /* reexport */ TextEditorGlobalKeyboardShortcuts; }, "ThemeSupportCheck": function() { return /* reexport */ theme_support_check; }, "URLInput": function() { return /* reexport */ URLInput; }, "URLInputButton": function() { return /* reexport */ URLInputButton; }, "URLPopover": function() { return /* reexport */ URLPopover; }, "UnsavedChangesWarning": function() { return /* reexport */ UnsavedChangesWarning; }, "VisualEditorGlobalKeyboardShortcuts": function() { return /* reexport */ visual_editor_shortcuts; }, "Warning": function() { return /* reexport */ Warning; }, "WordCount": function() { return /* reexport */ WordCount; }, "WritingFlow": function() { return /* reexport */ WritingFlow; }, "__unstableRichTextInputEvent": function() { return /* reexport */ __unstableRichTextInputEvent; }, "cleanForSlug": function() { return /* reexport */ cleanForSlug; }, "createCustomColorsHOC": function() { return /* reexport */ createCustomColorsHOC; }, "getColorClassName": function() { return /* reexport */ getColorClassName; }, "getColorObjectByAttributeValues": function() { return /* reexport */ getColorObjectByAttributeValues; }, "getColorObjectByColorValue": function() { return /* reexport */ getColorObjectByColorValue; }, "getFontSize": function() { return /* reexport */ getFontSize; }, "getFontSizeClass": function() { return /* reexport */ getFontSizeClass; }, "getTemplatePartIcon": function() { return /* reexport */ getTemplatePartIcon; }, "mediaUpload": function() { return /* reexport */ mediaUpload; }, "store": function() { return /* reexport */ store_store; }, "storeConfig": function() { return /* reexport */ storeConfig; }, "transformStyles": function() { return /* reexport */ external_wp_blockEditor_namespaceObject.transformStyles; }, "usePostScheduleLabel": function() { return /* reexport */ usePostScheduleLabel; }, "usePostURLLabel": function() { return /* reexport */ usePostURLLabel; }, "usePostVisibilityLabel": function() { return /* reexport */ usePostVisibilityLabel; }, "userAutocompleter": function() { return /* reexport */ user; }, "withColorContext": function() { return /* reexport */ withColorContext; }, "withColors": function() { return /* reexport */ withColors; }, "withFontSizes": function() { return /* reexport */ withFontSizes; } }); // NAMESPACE OBJECT: ./node_modules/@wordpress/editor/build-module/store/selectors.js var selectors_namespaceObject = {}; __webpack_require__.r(selectors_namespaceObject); __webpack_require__.d(selectors_namespaceObject, { "__experimentalGetDefaultTemplatePartAreas": function() { return __experimentalGetDefaultTemplatePartAreas; }, "__experimentalGetDefaultTemplateType": function() { return __experimentalGetDefaultTemplateType; }, "__experimentalGetDefaultTemplateTypes": function() { return __experimentalGetDefaultTemplateTypes; }, "__experimentalGetTemplateInfo": function() { return __experimentalGetTemplateInfo; }, "__unstableIsEditorReady": function() { return __unstableIsEditorReady; }, "canInsertBlockType": function() { return canInsertBlockType; }, "canUserUseUnfilteredHTML": function() { return canUserUseUnfilteredHTML; }, "didPostSaveRequestFail": function() { return didPostSaveRequestFail; }, "didPostSaveRequestSucceed": function() { return didPostSaveRequestSucceed; }, "getActivePostLock": function() { return getActivePostLock; }, "getAdjacentBlockClientId": function() { return getAdjacentBlockClientId; }, "getAutosaveAttribute": function() { return getAutosaveAttribute; }, "getBlock": function() { return getBlock; }, "getBlockAttributes": function() { return getBlockAttributes; }, "getBlockCount": function() { return getBlockCount; }, "getBlockHierarchyRootClientId": function() { return getBlockHierarchyRootClientId; }, "getBlockIndex": function() { return getBlockIndex; }, "getBlockInsertionPoint": function() { return getBlockInsertionPoint; }, "getBlockListSettings": function() { return getBlockListSettings; }, "getBlockMode": function() { return getBlockMode; }, "getBlockName": function() { return getBlockName; }, "getBlockOrder": function() { return getBlockOrder; }, "getBlockRootClientId": function() { return getBlockRootClientId; }, "getBlockSelectionEnd": function() { return getBlockSelectionEnd; }, "getBlockSelectionStart": function() { return getBlockSelectionStart; }, "getBlocks": function() { return getBlocks; }, "getBlocksByClientId": function() { return getBlocksByClientId; }, "getClientIdsOfDescendants": function() { return getClientIdsOfDescendants; }, "getClientIdsWithDescendants": function() { return getClientIdsWithDescendants; }, "getCurrentPost": function() { return getCurrentPost; }, "getCurrentPostAttribute": function() { return getCurrentPostAttribute; }, "getCurrentPostId": function() { return getCurrentPostId; }, "getCurrentPostLastRevisionId": function() { return getCurrentPostLastRevisionId; }, "getCurrentPostRevisionsCount": function() { return getCurrentPostRevisionsCount; }, "getCurrentPostType": function() { return getCurrentPostType; }, "getEditedPostAttribute": function() { return getEditedPostAttribute; }, "getEditedPostContent": function() { return getEditedPostContent; }, "getEditedPostPreviewLink": function() { return getEditedPostPreviewLink; }, "getEditedPostSlug": function() { return getEditedPostSlug; }, "getEditedPostVisibility": function() { return getEditedPostVisibility; }, "getEditorBlocks": function() { return getEditorBlocks; }, "getEditorSelection": function() { return getEditorSelection; }, "getEditorSelectionEnd": function() { return getEditorSelectionEnd; }, "getEditorSelectionStart": function() { return getEditorSelectionStart; }, "getEditorSettings": function() { return getEditorSettings; }, "getFirstMultiSelectedBlockClientId": function() { return getFirstMultiSelectedBlockClientId; }, "getGlobalBlockCount": function() { return getGlobalBlockCount; }, "getInserterItems": function() { return getInserterItems; }, "getLastMultiSelectedBlockClientId": function() { return getLastMultiSelectedBlockClientId; }, "getMultiSelectedBlockClientIds": function() { return getMultiSelectedBlockClientIds; }, "getMultiSelectedBlocks": function() { return getMultiSelectedBlocks; }, "getMultiSelectedBlocksEndClientId": function() { return getMultiSelectedBlocksEndClientId; }, "getMultiSelectedBlocksStartClientId": function() { return getMultiSelectedBlocksStartClientId; }, "getNextBlockClientId": function() { return getNextBlockClientId; }, "getPermalink": function() { return getPermalink; }, "getPermalinkParts": function() { return getPermalinkParts; }, "getPostEdits": function() { return getPostEdits; }, "getPostLockUser": function() { return getPostLockUser; }, "getPostTypeLabel": function() { return getPostTypeLabel; }, "getPreviousBlockClientId": function() { return getPreviousBlockClientId; }, "getSelectedBlock": function() { return getSelectedBlock; }, "getSelectedBlockClientId": function() { return getSelectedBlockClientId; }, "getSelectedBlockCount": function() { return getSelectedBlockCount; }, "getSelectedBlocksInitialCaretPosition": function() { return getSelectedBlocksInitialCaretPosition; }, "getStateBeforeOptimisticTransaction": function() { return getStateBeforeOptimisticTransaction; }, "getSuggestedPostFormat": function() { return getSuggestedPostFormat; }, "getTemplate": function() { return getTemplate; }, "getTemplateLock": function() { return getTemplateLock; }, "hasChangedContent": function() { return hasChangedContent; }, "hasEditorRedo": function() { return hasEditorRedo; }, "hasEditorUndo": function() { return hasEditorUndo; }, "hasInserterItems": function() { return hasInserterItems; }, "hasMultiSelection": function() { return hasMultiSelection; }, "hasNonPostEntityChanges": function() { return hasNonPostEntityChanges; }, "hasSelectedBlock": function() { return hasSelectedBlock; }, "hasSelectedInnerBlock": function() { return hasSelectedInnerBlock; }, "inSomeHistory": function() { return inSomeHistory; }, "isAncestorMultiSelected": function() { return isAncestorMultiSelected; }, "isAutosavingPost": function() { return isAutosavingPost; }, "isBlockInsertionPointVisible": function() { return isBlockInsertionPointVisible; }, "isBlockMultiSelected": function() { return isBlockMultiSelected; }, "isBlockSelected": function() { return isBlockSelected; }, "isBlockValid": function() { return isBlockValid; }, "isBlockWithinSelection": function() { return isBlockWithinSelection; }, "isCaretWithinFormattedText": function() { return isCaretWithinFormattedText; }, "isCleanNewPost": function() { return isCleanNewPost; }, "isCurrentPostPending": function() { return isCurrentPostPending; }, "isCurrentPostPublished": function() { return isCurrentPostPublished; }, "isCurrentPostScheduled": function() { return isCurrentPostScheduled; }, "isDeletingPost": function() { return isDeletingPost; }, "isEditedPostAutosaveable": function() { return isEditedPostAutosaveable; }, "isEditedPostBeingScheduled": function() { return isEditedPostBeingScheduled; }, "isEditedPostDateFloating": function() { return isEditedPostDateFloating; }, "isEditedPostDirty": function() { return isEditedPostDirty; }, "isEditedPostEmpty": function() { return isEditedPostEmpty; }, "isEditedPostNew": function() { return isEditedPostNew; }, "isEditedPostPublishable": function() { return isEditedPostPublishable; }, "isEditedPostSaveable": function() { return isEditedPostSaveable; }, "isFirstMultiSelectedBlock": function() { return isFirstMultiSelectedBlock; }, "isMultiSelecting": function() { return isMultiSelecting; }, "isPermalinkEditable": function() { return isPermalinkEditable; }, "isPostAutosavingLocked": function() { return isPostAutosavingLocked; }, "isPostLockTakeover": function() { return isPostLockTakeover; }, "isPostLocked": function() { return isPostLocked; }, "isPostSavingLocked": function() { return isPostSavingLocked; }, "isPreviewingPost": function() { return isPreviewingPost; }, "isPublishSidebarEnabled": function() { return isPublishSidebarEnabled; }, "isPublishingPost": function() { return isPublishingPost; }, "isSavingNonPostEntityChanges": function() { return isSavingNonPostEntityChanges; }, "isSavingPost": function() { return isSavingPost; }, "isSelectionEnabled": function() { return isSelectionEnabled; }, "isTyping": function() { return isTyping; }, "isValidTemplate": function() { return isValidTemplate; } }); // NAMESPACE OBJECT: ./node_modules/@wordpress/editor/build-module/store/actions.js var actions_namespaceObject = {}; __webpack_require__.r(actions_namespaceObject); __webpack_require__.d(actions_namespaceObject, { "__experimentalTearDownEditor": function() { return __experimentalTearDownEditor; }, "autosave": function() { return autosave; }, "clearSelectedBlock": function() { return clearSelectedBlock; }, "createUndoLevel": function() { return createUndoLevel; }, "disablePublishSidebar": function() { return disablePublishSidebar; }, "editPost": function() { return editPost; }, "enablePublishSidebar": function() { return enablePublishSidebar; }, "enterFormattedText": function() { return enterFormattedText; }, "exitFormattedText": function() { return exitFormattedText; }, "hideInsertionPoint": function() { return hideInsertionPoint; }, "insertBlock": function() { return insertBlock; }, "insertBlocks": function() { return insertBlocks; }, "insertDefaultBlock": function() { return insertDefaultBlock; }, "lockPostAutosaving": function() { return lockPostAutosaving; }, "lockPostSaving": function() { return lockPostSaving; }, "mergeBlocks": function() { return mergeBlocks; }, "moveBlockToPosition": function() { return moveBlockToPosition; }, "moveBlocksDown": function() { return moveBlocksDown; }, "moveBlocksUp": function() { return moveBlocksUp; }, "multiSelect": function() { return multiSelect; }, "receiveBlocks": function() { return receiveBlocks; }, "redo": function() { return redo; }, "refreshPost": function() { return refreshPost; }, "removeBlock": function() { return removeBlock; }, "removeBlocks": function() { return removeBlocks; }, "replaceBlock": function() { return replaceBlock; }, "replaceBlocks": function() { return replaceBlocks; }, "resetBlocks": function() { return resetBlocks; }, "resetEditorBlocks": function() { return resetEditorBlocks; }, "resetPost": function() { return resetPost; }, "savePost": function() { return savePost; }, "selectBlock": function() { return selectBlock; }, "setTemplateValidity": function() { return setTemplateValidity; }, "setupEditor": function() { return setupEditor; }, "setupEditorState": function() { return setupEditorState; }, "showInsertionPoint": function() { return showInsertionPoint; }, "startMultiSelect": function() { return startMultiSelect; }, "startTyping": function() { return startTyping; }, "stopMultiSelect": function() { return stopMultiSelect; }, "stopTyping": function() { return stopTyping; }, "synchronizeTemplate": function() { return synchronizeTemplate; }, "toggleBlockMode": function() { return toggleBlockMode; }, "toggleSelection": function() { return toggleSelection; }, "trashPost": function() { return trashPost; }, "undo": function() { return undo; }, "unlockPostAutosaving": function() { return unlockPostAutosaving; }, "unlockPostSaving": function() { return unlockPostSaving; }, "updateBlock": function() { return updateBlock; }, "updateBlockAttributes": function() { return updateBlockAttributes; }, "updateBlockListSettings": function() { return updateBlockListSettings; }, "updateEditorSettings": function() { return updateEditorSettings; }, "updatePost": function() { return updatePost; }, "updatePostLock": function() { return updatePostLock; } }); ;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } ;// CONCATENATED MODULE: external ["wp","element"] var external_wp_element_namespaceObject = window["wp"]["element"]; ;// CONCATENATED MODULE: external "lodash" var external_lodash_namespaceObject = window["lodash"]; ;// CONCATENATED MODULE: external ["wp","blocks"] var external_wp_blocks_namespaceObject = window["wp"]["blocks"]; ;// CONCATENATED MODULE: external ["wp","data"] var external_wp_data_namespaceObject = window["wp"]["data"]; ;// CONCATENATED MODULE: external ["wp","coreData"] var external_wp_coreData_namespaceObject = window["wp"]["coreData"]; ;// CONCATENATED MODULE: external ["wp","compose"] var external_wp_compose_namespaceObject = window["wp"]["compose"]; ;// CONCATENATED MODULE: external ["wp","hooks"] var external_wp_hooks_namespaceObject = window["wp"]["hooks"]; ;// CONCATENATED MODULE: external ["wp","blockEditor"] var external_wp_blockEditor_namespaceObject = window["wp"]["blockEditor"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/defaults.js /** * WordPress dependencies */ /** * The default post editor settings. * * @property {boolean|Array} allowedBlockTypes Allowed block types * @property {boolean} richEditingEnabled Whether rich editing is enabled or not * @property {boolean} codeEditingEnabled Whether code editing is enabled or not * @property {boolean} enableCustomFields Whether the WordPress custom fields are enabled or not. * true = the user has opted to show the Custom Fields panel at the bottom of the editor. * false = the user has opted to hide the Custom Fields panel at the bottom of the editor. * undefined = the current environment does not support Custom Fields, so the option toggle in Preferences -> Panels to enable the Custom Fields panel is not displayed. * @property {number} autosaveInterval How often in seconds the post will be auto-saved via the REST API. * @property {number} localAutosaveInterval How often in seconds the post will be backed up to sessionStorage. * @property {Array?} availableTemplates The available post templates * @property {boolean} disablePostFormats Whether or not the post formats are disabled * @property {Array?} allowedMimeTypes List of allowed mime types and file extensions * @property {number} maxUploadFileSize Maximum upload file size * @property {boolean} supportsLayout Whether the editor supports layouts. */ const EDITOR_SETTINGS_DEFAULTS = { ...external_wp_blockEditor_namespaceObject.SETTINGS_DEFAULTS, richEditingEnabled: true, codeEditingEnabled: true, enableCustomFields: undefined, supportsLayout: true }; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/reducer.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Returns a post attribute value, flattening nested rendered content using its * raw value in place of its original object form. * * @param {*} value Original value. * * @return {*} Raw value. */ function getPostRawValue(value) { if (value && 'object' === typeof value && 'raw' in value) { return value.raw; } return value; } /** * Returns true if the two object arguments have the same keys, or false * otherwise. * * @param {Object} a First object. * @param {Object} b Second object. * * @return {boolean} Whether the two objects have the same keys. */ function hasSameKeys(a, b) { const keysA = Object.keys(a).sort(); const keysB = Object.keys(b).sort(); return keysA.length === keysB.length && keysA.every((key, index) => keysB[index] === key); } /** * Returns true if, given the currently dispatching action and the previously * dispatched action, the two actions are editing the same post property, or * false otherwise. * * @param {Object} action Currently dispatching action. * @param {Object} previousAction Previously dispatched action. * * @return {boolean} Whether actions are updating the same post property. */ function isUpdatingSamePostProperty(action, previousAction) { return action.type === 'EDIT_POST' && hasSameKeys(action.edits, previousAction.edits); } /** * Returns true if, given the currently dispatching action and the previously * dispatched action, the two actions are modifying the same property such that * undo history should be batched. * * @param {Object} action Currently dispatching action. * @param {Object} previousAction Previously dispatched action. * * @return {boolean} Whether to overwrite present state. */ function shouldOverwriteState(action, previousAction) { if (action.type === 'RESET_EDITOR_BLOCKS') { return !action.shouldCreateUndoLevel; } if (!previousAction || action.type !== previousAction.type) { return false; } return isUpdatingSamePostProperty(action, previousAction); } function postId() { let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; let action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'SETUP_EDITOR_STATE': return action.post.id; } return state; } function postType() { let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; let action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'SETUP_EDITOR_STATE': return action.post.type; } return state; } /** * Reducer returning whether the post blocks match the defined template or not. * * @param {Object} state Current state. * @param {Object} action Dispatched action. * * @return {boolean} Updated state. */ function template() { let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { isValid: true }; let action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'SET_TEMPLATE_VALIDITY': return { ...state, isValid: action.isValid }; } return state; } /** * Reducer returning current network request state (whether a request to * the WP REST API is in progress, successful, or failed). * * @param {Object} state Current state. * @param {Object} action Dispatched action. * * @return {Object} Updated state. */ function saving() { let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; let action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'REQUEST_POST_UPDATE_START': case 'REQUEST_POST_UPDATE_FINISH': return { pending: action.type === 'REQUEST_POST_UPDATE_START', options: action.options || {} }; } return state; } /** * Reducer returning deleting post request state. * * @param {Object} state Current state. * @param {Object} action Dispatched action. * * @return {Object} Updated state. */ function deleting() { let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; let action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'REQUEST_POST_DELETE_START': case 'REQUEST_POST_DELETE_FINISH': return { pending: action.type === 'REQUEST_POST_DELETE_START' }; } return state; } /** * Post Lock State. * * @typedef {Object} PostLockState * * @property {boolean} isLocked Whether the post is locked. * @property {?boolean} isTakeover Whether the post editing has been taken over. * @property {?boolean} activePostLock Active post lock value. * @property {?Object} user User that took over the post. */ /** * Reducer returning the post lock status. * * @param {PostLockState} state Current state. * @param {Object} action Dispatched action. * * @return {PostLockState} Updated state. */ function postLock() { let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { isLocked: false }; let action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'UPDATE_POST_LOCK': return action.lock; } return state; } /** * Post saving lock. * * When post saving is locked, the post cannot be published or updated. * * @param {PostLockState} state Current state. * @param {Object} action Dispatched action. * * @return {PostLockState} Updated state. */ function postSavingLock() { let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; let action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'LOCK_POST_SAVING': return { ...state, [action.lockName]: true }; case 'UNLOCK_POST_SAVING': { const { [action.lockName]: removedLockName, ...restState } = state; return restState; } } return state; } /** * Post autosaving lock. * * When post autosaving is locked, the post will not autosave. * * @param {PostLockState} state Current state. * @param {Object} action Dispatched action. * * @return {PostLockState} Updated state. */ function postAutosavingLock() { let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; let action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'LOCK_POST_AUTOSAVING': return { ...state, [action.lockName]: true }; case 'UNLOCK_POST_AUTOSAVING': { const { [action.lockName]: removedLockName, ...restState } = state; return restState; } } return state; } /** * Reducer returning whether the editor is ready to be rendered. * The editor is considered ready to be rendered once * the post object is loaded properly and the initial blocks parsed. * * @param {boolean} state * @param {Object} action * * @return {boolean} Updated state. */ function isReady() { let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; let action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'SETUP_EDITOR_STATE': return true; case 'TEAR_DOWN_EDITOR': return false; } return state; } /** * Reducer returning the post editor setting. * * @param {Object} state Current state. * @param {Object} action Dispatched action. * * @return {Object} Updated state. */ function editorSettings() { let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : EDITOR_SETTINGS_DEFAULTS; let action = arguments.length > 1 ? arguments[1] : undefined; switch (action.type) { case 'UPDATE_EDITOR_SETTINGS': return { ...state, ...action.settings }; } return state; } /* harmony default export */ var reducer = ((0,external_wp_data_namespaceObject.combineReducers)({ postId, postType, saving, deleting, postLock, template, postSavingLock, isReady, editorSettings, postAutosavingLock })); ;// CONCATENATED MODULE: ./node_modules/rememo/rememo.js /** @typedef {(...args: any[]) => *[]} GetDependants */ /** @typedef {() => void} Clear */ /** * @typedef {{ * getDependants: GetDependants, * clear: Clear * }} EnhancedSelector */ /** * Internal cache entry. * * @typedef CacheNode * * @property {?CacheNode|undefined} [prev] Previous node. * @property {?CacheNode|undefined} [next] Next node. * @property {*[]} args Function arguments for cache entry. * @property {*} val Function result. */ /** * @typedef Cache * * @property {Clear} clear Function to clear cache. * @property {boolean} [isUniqueByDependants] Whether dependants are valid in * considering cache uniqueness. A cache is unique if dependents are all arrays * or objects. * @property {CacheNode?} [head] Cache head. * @property {*[]} [lastDependants] Dependants from previous invocation. */ /** * Arbitrary value used as key for referencing cache object in WeakMap tree. * * @type {{}} */ var LEAF_KEY = {}; /** * Returns the first argument as the sole entry in an array. * * @template T * * @param {T} value Value to return. * * @return {[T]} Value returned as entry in array. */ function arrayOf(value) { return [value]; } /** * Returns true if the value passed is object-like, or false otherwise. A value * is object-like if it can support property assignment, e.g. object or array. * * @param {*} value Value to test. * * @return {boolean} Whether value is object-like. */ function isObjectLike(value) { return !!value && 'object' === typeof value; } /** * Creates and returns a new cache object. * * @return {Cache} Cache object. */ function createCache() { /** @type {Cache} */ var cache = { clear: function () { cache.head = null; }, }; return cache; } /** * Returns true if entries within the two arrays are strictly equal by * reference from a starting index. * * @param {*[]} a First array. * @param {*[]} b Second array. * @param {number} fromIndex Index from which to start comparison. * * @return {boolean} Whether arrays are shallowly equal. */ function isShallowEqual(a, b, fromIndex) { var i; if (a.length !== b.length) { return false; } for (i = fromIndex; i < a.length; i++) { if (a[i] !== b[i]) { return false; } } return true; } /** * Returns a memoized selector function. The getDependants function argument is * called before the memoized selector and is expected to return an immutable * reference or array of references on which the selector depends for computing * its own return value. The memoize cache is preserved only as long as those * dependant references remain the same. If getDependants returns a different * reference(s), the cache is cleared and the selector value regenerated. * * @template {(...args: *[]) => *} S * * @param {S} selector Selector function. * @param {GetDependants=} getDependants Dependant getter returning an array of * references used in cache bust consideration. */ /* harmony default export */ function rememo(selector, getDependants) { /** @type {WeakMap<*,*>} */ var rootCache; /** @type {GetDependants} */ var normalizedGetDependants = getDependants ? getDependants : arrayOf; /** * Returns the cache for a given dependants array. When possible, a WeakMap * will be used to create a unique cache for each set of dependants. This * is feasible due to the nature of WeakMap in allowing garbage collection * to occur on entries where the key object is no longer referenced. Since * WeakMap requires the key to be an object, this is only possible when the * dependant is object-like. The root cache is created as a hierarchy where * each top-level key is the first entry in a dependants set, the value a * WeakMap where each key is the next dependant, and so on. This continues * so long as the dependants are object-like. If no dependants are object- * like, then the cache is shared across all invocations. * * @see isObjectLike * * @param {*[]} dependants Selector dependants. * * @return {Cache} Cache object. */ function getCache(dependants) { var caches = rootCache, isUniqueByDependants = true, i, dependant, map, cache; for (i = 0; i < dependants.length; i++) { dependant = dependants[i]; // Can only compose WeakMap from object-like key. if (!isObjectLike(dependant)) { isUniqueByDependants = false; break; } // Does current segment of cache already have a WeakMap? if (caches.has(dependant)) { // Traverse into nested WeakMap. caches = caches.get(dependant); } else { // Create, set, and traverse into a new one. map = new WeakMap(); caches.set(dependant, map); caches = map; } } // We use an arbitrary (but consistent) object as key for the last item // in the WeakMap to serve as our running cache. if (!caches.has(LEAF_KEY)) { cache = createCache(); cache.isUniqueByDependants = isUniqueByDependants; caches.set(LEAF_KEY, cache); } return caches.get(LEAF_KEY); } /** * Resets root memoization cache. */ function clear() { rootCache = new WeakMap(); } /* eslint-disable jsdoc/check-param-names */ /** * The augmented selector call, considering first whether dependants have * changed before passing it to underlying memoize function. * * @param {*} source Source object for derivation. * @param {...*} extraArgs Additional arguments to pass to selector. * * @return {*} Selector result. */ /* eslint-enable jsdoc/check-param-names */ function callSelector(/* source, ...extraArgs */) { var len = arguments.length, cache, node, i, args, dependants; // Create copy of arguments (avoid leaking deoptimization). args = new Array(len); for (i = 0; i < len; i++) { args[i] = arguments[i]; } dependants = normalizedGetDependants.apply(null, args); cache = getCache(dependants); // If not guaranteed uniqueness by dependants (primitive type), shallow // compare against last dependants and, if references have changed, // destroy cache to recalculate result. if (!cache.isUniqueByDependants) { if ( cache.lastDependants && !isShallowEqual(dependants, cache.lastDependants, 0) ) { cache.clear(); } cache.lastDependants = dependants; } node = cache.head; while (node) { // Check whether node arguments match arguments if (!isShallowEqual(node.args, args, 1)) { node = node.next; continue; } // At this point we can assume we've found a match // Surface matched node to head if not already if (node !== cache.head) { // Adjust siblings to point to each other. /** @type {CacheNode} */ (node.prev).next = node.next; if (node.next) { node.next.prev = node.prev; } node.next = cache.head; node.prev = null; /** @type {CacheNode} */ (cache.head).prev = node; cache.head = node; } // Return immediately return node.val; } // No cached value found. Continue to insertion phase: node = /** @type {CacheNode} */ ({ // Generate the result from original function val: selector.apply(null, args), }); // Avoid including the source object in the cache. args[0] = null; node.args = args; // Don't need to check whether node is already head, since it would // have been returned above already if it was // Shift existing head down list if (cache.head) { cache.head.prev = node; node.next = cache.head; } cache.head = node; return node.val; } callSelector.getDependants = normalizedGetDependants; callSelector.clear = clear; clear(); return /** @type {S & EnhancedSelector} */ (callSelector); } ;// CONCATENATED MODULE: external ["wp","date"] var external_wp_date_namespaceObject = window["wp"]["date"]; ;// CONCATENATED MODULE: external ["wp","url"] var external_wp_url_namespaceObject = window["wp"]["url"]; ;// CONCATENATED MODULE: external ["wp","deprecated"] var external_wp_deprecated_namespaceObject = window["wp"]["deprecated"]; var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_namespaceObject); ;// CONCATENATED MODULE: external ["wp","primitives"] var external_wp_primitives_namespaceObject = window["wp"]["primitives"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/layout.js /** * WordPress dependencies */ const layout = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M18 5.5H6a.5.5 0 00-.5.5v3h13V6a.5.5 0 00-.5-.5zm.5 5H10v8h8a.5.5 0 00.5-.5v-7.5zm-10 0h-3V18a.5.5 0 00.5.5h2.5v-8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z" })); /* harmony default export */ var library_layout = (layout); ;// CONCATENATED MODULE: external ["wp","preferences"] var external_wp_preferences_namespaceObject = window["wp"]["preferences"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/constants.js /** * Set of post properties for which edits should assume a merging behavior, * assuming an object value. * * @type {Set} */ const EDIT_MERGE_PROPERTIES = new Set(['meta']); /** * Constant for the store module (or reducer) key. * * @type {string} */ const STORE_NAME = 'core/editor'; const SAVE_POST_NOTICE_ID = 'SAVE_POST_NOTICE_ID'; const TRASH_POST_NOTICE_ID = 'TRASH_POST_NOTICE_ID'; const PERMALINK_POSTNAME_REGEX = /%(?:postname|pagename)%/; const ONE_MINUTE_IN_MS = 60 * 1000; const AUTOSAVE_PROPERTIES = ['title', 'excerpt', 'content']; ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/header.js /** * WordPress dependencies */ const header = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M18.5 10.5H10v8h8a.5.5 0 00.5-.5v-7.5zm-10 0h-3V18a.5.5 0 00.5.5h2.5v-8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z" })); /* harmony default export */ var library_header = (header); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/footer.js /** * WordPress dependencies */ const footer = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { fillRule: "evenodd", d: "M18 5.5h-8v8h8.5V6a.5.5 0 00-.5-.5zm-9.5 8h-3V6a.5.5 0 01.5-.5h2.5v8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z" })); /* harmony default export */ var library_footer = (footer); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/sidebar.js /** * WordPress dependencies */ const sidebar = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M18 5.5H6a.5.5 0 00-.5.5v3h13V6a.5.5 0 00-.5-.5zm.5 5H10v8h8a.5.5 0 00.5-.5v-7.5zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z" })); /* harmony default export */ var library_sidebar = (sidebar); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/symbol-filled.js /** * WordPress dependencies */ const symbolFilled = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M21.3 10.8l-5.6-5.6c-.7-.7-1.8-.7-2.5 0l-5.6 5.6c-.7.7-.7 1.8 0 2.5l5.6 5.6c.3.3.8.5 1.2.5s.9-.2 1.2-.5l5.6-5.6c.8-.7.8-1.9.1-2.5zm-17.6 1L10 5.5l-1-1-6.3 6.3c-.7.7-.7 1.8 0 2.5L9 19.5l1.1-1.1-6.3-6.3c-.2 0-.2-.2-.1-.3z" })); /* harmony default export */ var symbol_filled = (symbolFilled); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/utils/get-template-part-icon.js /** * WordPress dependencies */ /** * Helper function to retrieve the corresponding icon by name. * * @param {string} iconName The name of the icon. * * @return {Object} The corresponding icon. */ function getTemplatePartIcon(iconName) { if ('header' === iconName) { return library_header; } else if ('footer' === iconName) { return library_footer; } else if ('sidebar' === iconName) { return library_sidebar; } return symbol_filled; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/selectors.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * Shared reference to an empty object for cases where it is important to avoid * returning a new object reference on every invocation, as in a connected or * other pure component which performs `shouldComponentUpdate` check on props. * This should be used as a last resort, since the normalized data should be * maintained by the reducer result in state. */ const EMPTY_OBJECT = {}; /** * Shared reference to an empty array for cases where it is important to avoid * returning a new array reference on every invocation, as in a connected or * other pure component which performs `shouldComponentUpdate` check on props. * This should be used as a last resort, since the normalized data should be * maintained by the reducer result in state. */ const EMPTY_ARRAY = []; /** * Returns true if any past editor history snapshots exist, or false otherwise. * * @param {Object} state Global application state. * * @return {boolean} Whether undo history exists. */ const hasEditorUndo = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => { return select(external_wp_coreData_namespaceObject.store).hasUndo(); }); /** * Returns true if any future editor history snapshots exist, or false * otherwise. * * @param {Object} state Global application state. * * @return {boolean} Whether redo history exists. */ const hasEditorRedo = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => { return select(external_wp_coreData_namespaceObject.store).hasRedo(); }); /** * Returns true if the currently edited post is yet to be saved, or false if * the post has been saved. * * @param {Object} state Global application state. * * @return {boolean} Whether the post is new. */ function isEditedPostNew(state) { return getCurrentPost(state).status === 'auto-draft'; } /** * Returns true if content includes unsaved changes, or false otherwise. * * @param {Object} state Editor state. * * @return {boolean} Whether content includes unsaved changes. */ function hasChangedContent(state) { const edits = getPostEdits(state); return 'blocks' in edits || // `edits` is intended to contain only values which are different from // the saved post, so the mere presence of a property is an indicator // that the value is different than what is known to be saved. While // content in Visual mode is represented by the blocks state, in Text // mode it is tracked by `edits.content`. 'content' in edits; } /** * Returns true if there are unsaved values for the current edit session, or * false if the editing state matches the saved or new post. * * @param {Object} state Global application state. * * @return {boolean} Whether unsaved values exist. */ const isEditedPostDirty = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { // Edits should contain only fields which differ from the saved post (reset // at initial load and save complete). Thus, a non-empty edits state can be // inferred to contain unsaved values. const postType = getCurrentPostType(state); const postId = getCurrentPostId(state); if (select(external_wp_coreData_namespaceObject.store).hasEditsForEntityRecord('postType', postType, postId)) { return true; } return false; }); /** * Returns true if there are unsaved edits for entities other than * the editor's post, and false otherwise. * * @param {Object} state Global application state. * * @return {boolean} Whether there are edits or not. */ const hasNonPostEntityChanges = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { const dirtyEntityRecords = select(external_wp_coreData_namespaceObject.store).__experimentalGetDirtyEntityRecords(); const { type, id } = getCurrentPost(state); return dirtyEntityRecords.some(entityRecord => entityRecord.kind !== 'postType' || entityRecord.name !== type || entityRecord.key !== id); }); /** * Returns true if there are no unsaved values for the current edit session and * if the currently edited post is new (has never been saved before). * * @param {Object} state Global application state. * * @return {boolean} Whether new post and unsaved values exist. */ function isCleanNewPost(state) { return !isEditedPostDirty(state) && isEditedPostNew(state); } /** * Returns the post currently being edited in its last known saved state, not * including unsaved edits. Returns an object containing relevant default post * values if the post has not yet been saved. * * @param {Object} state Global application state. * * @return {Object} Post object. */ const getCurrentPost = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { const postId = getCurrentPostId(state); const postType = getCurrentPostType(state); const post = select(external_wp_coreData_namespaceObject.store).getRawEntityRecord('postType', postType, postId); if (post) { return post; } // This exists for compatibility with the previous selector behavior // which would guarantee an object return based on the editor reducer's // default empty object state. return EMPTY_OBJECT; }); /** * Returns the post type of the post currently being edited. * * @param {Object} state Global application state. * * @return {string} Post type. */ function getCurrentPostType(state) { return state.postType; } /** * Returns the ID of the post currently being edited, or null if the post has * not yet been saved. * * @param {Object} state Global application state. * * @return {?number} ID of current post. */ function getCurrentPostId(state) { return state.postId; } /** * Returns the number of revisions of the post currently being edited. * * @param {Object} state Global application state. * * @return {number} Number of revisions. */ function getCurrentPostRevisionsCount(state) { var _getCurrentPost$_link, _getCurrentPost$_link2, _getCurrentPost$_link3, _getCurrentPost$_link4; return (_getCurrentPost$_link = (_getCurrentPost$_link2 = getCurrentPost(state)._links) === null || _getCurrentPost$_link2 === void 0 ? void 0 : (_getCurrentPost$_link3 = _getCurrentPost$_link2['version-history']) === null || _getCurrentPost$_link3 === void 0 ? void 0 : (_getCurrentPost$_link4 = _getCurrentPost$_link3[0]) === null || _getCurrentPost$_link4 === void 0 ? void 0 : _getCurrentPost$_link4.count) !== null && _getCurrentPost$_link !== void 0 ? _getCurrentPost$_link : 0; } /** * Returns the last revision ID of the post currently being edited, * or null if the post has no revisions. * * @param {Object} state Global application state. * * @return {?number} ID of the last revision. */ function getCurrentPostLastRevisionId(state) { var _getCurrentPost$_link5, _getCurrentPost$_link6, _getCurrentPost$_link7, _getCurrentPost$_link8; return (_getCurrentPost$_link5 = (_getCurrentPost$_link6 = getCurrentPost(state)._links) === null || _getCurrentPost$_link6 === void 0 ? void 0 : (_getCurrentPost$_link7 = _getCurrentPost$_link6['predecessor-version']) === null || _getCurrentPost$_link7 === void 0 ? void 0 : (_getCurrentPost$_link8 = _getCurrentPost$_link7[0]) === null || _getCurrentPost$_link8 === void 0 ? void 0 : _getCurrentPost$_link8.id) !== null && _getCurrentPost$_link5 !== void 0 ? _getCurrentPost$_link5 : null; } /** * Returns any post values which have been changed in the editor but not yet * been saved. * * @param {Object} state Global application state. * * @return {Object} Object of key value pairs comprising unsaved edits. */ const getPostEdits = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { const postType = getCurrentPostType(state); const postId = getCurrentPostId(state); return select(external_wp_coreData_namespaceObject.store).getEntityRecordEdits('postType', postType, postId) || EMPTY_OBJECT; }); /** * Returns an attribute value of the saved post. * * @param {Object} state Global application state. * @param {string} attributeName Post attribute name. * * @return {*} Post attribute value. */ function getCurrentPostAttribute(state, attributeName) { switch (attributeName) { case 'type': return getCurrentPostType(state); case 'id': return getCurrentPostId(state); default: const post = getCurrentPost(state); if (!post.hasOwnProperty(attributeName)) { break; } return getPostRawValue(post[attributeName]); } } /** * Returns a single attribute of the post being edited, preferring the unsaved * edit if one exists, but merging with the attribute value for the last known * saved state of the post (this is needed for some nested attributes like meta). * * @param {Object} state Global application state. * @param {string} attributeName Post attribute name. * * @return {*} Post attribute value. */ const getNestedEditedPostProperty = (state, attributeName) => { const edits = getPostEdits(state); if (!edits.hasOwnProperty(attributeName)) { return getCurrentPostAttribute(state, attributeName); } return { ...getCurrentPostAttribute(state, attributeName), ...edits[attributeName] }; }; /** * Returns a single attribute of the post being edited, preferring the unsaved * edit if one exists, but falling back to the attribute for the last known * saved state of the post. * * @param {Object} state Global application state. * @param {string} attributeName Post attribute name. * * @return {*} Post attribute value. */ function getEditedPostAttribute(state, attributeName) { // Special cases. switch (attributeName) { case 'content': return getEditedPostContent(state); } // Fall back to saved post value if not edited. const edits = getPostEdits(state); if (!edits.hasOwnProperty(attributeName)) { return getCurrentPostAttribute(state, attributeName); } // Merge properties are objects which contain only the patch edit in state, // and thus must be merged with the current post attribute. if (EDIT_MERGE_PROPERTIES.has(attributeName)) { return getNestedEditedPostProperty(state, attributeName); } return edits[attributeName]; } /** * Returns an attribute value of the current autosave revision for a post, or * null if there is no autosave for the post. * * @deprecated since 5.6. Callers should use the `getAutosave( postType, postId, userId )` selector * from the '@wordpress/core-data' package and access properties on the returned * autosave object using getPostRawValue. * * @param {Object} state Global application state. * @param {string} attributeName Autosave attribute name. * * @return {*} Autosave attribute value. */ const getAutosaveAttribute = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (state, attributeName) => { var _select$getCurrentUse; if (!AUTOSAVE_PROPERTIES.includes(attributeName) && attributeName !== 'preview_link') { return; } const postType = getCurrentPostType(state); const postId = getCurrentPostId(state); const currentUserId = (_select$getCurrentUse = select(external_wp_coreData_namespaceObject.store).getCurrentUser()) === null || _select$getCurrentUse === void 0 ? void 0 : _select$getCurrentUse.id; const autosave = select(external_wp_coreData_namespaceObject.store).getAutosave(postType, postId, currentUserId); if (autosave) { return getPostRawValue(autosave[attributeName]); } }); /** * Returns the current visibility of the post being edited, preferring the * unsaved value if different than the saved post. The return value is one of * "private", "password", or "public". * * @param {Object} state Global application state. * * @return {string} Post visibility. */ function getEditedPostVisibility(state) { const status = getEditedPostAttribute(state, 'status'); if (status === 'private') { return 'private'; } const password = getEditedPostAttribute(state, 'password'); if (password) { return 'password'; } return 'public'; } /** * Returns true if post is pending review. * * @param {Object} state Global application state. * * @return {boolean} Whether current post is pending review. */ function isCurrentPostPending(state) { return getCurrentPost(state).status === 'pending'; } /** * Return true if the current post has already been published. * * @param {Object} state Global application state. * @param {Object?} currentPost Explicit current post for bypassing registry selector. * * @return {boolean} Whether the post has been published. */ function isCurrentPostPublished(state, currentPost) { const post = currentPost || getCurrentPost(state); return ['publish', 'private'].indexOf(post.status) !== -1 || post.status === 'future' && !(0,external_wp_date_namespaceObject.isInTheFuture)(new Date(Number((0,external_wp_date_namespaceObject.getDate)(post.date)) - ONE_MINUTE_IN_MS)); } /** * Returns true if post is already scheduled. * * @param {Object} state Global application state. * * @return {boolean} Whether current post is scheduled to be posted. */ function isCurrentPostScheduled(state) { return getCurrentPost(state).status === 'future' && !isCurrentPostPublished(state); } /** * Return true if the post being edited can be published. * * @param {Object} state Global application state. * * @return {boolean} Whether the post can been published. */ function isEditedPostPublishable(state) { const post = getCurrentPost(state); // TODO: Post being publishable should be superset of condition of post // being saveable. Currently this restriction is imposed at UI. // // See: (`isButtonEnabled` assigned by `isSaveable`). return isEditedPostDirty(state) || ['publish', 'private', 'future'].indexOf(post.status) === -1; } /** * Returns true if the post can be saved, or false otherwise. A post must * contain a title, an excerpt, or non-empty content to be valid for save. * * @param {Object} state Global application state. * * @return {boolean} Whether the post can be saved. */ function isEditedPostSaveable(state) { if (isSavingPost(state)) { return false; } // TODO: Post should not be saveable if not dirty. Cannot be added here at // this time since posts where meta boxes are present can be saved even if // the post is not dirty. Currently this restriction is imposed at UI, but // should be moved here. // // See: `isEditedPostPublishable` (includes `isEditedPostDirty` condition) // See: (`forceIsDirty` prop) // See: (`forceIsDirty` prop) // See: https://github.com/WordPress/gutenberg/pull/4184. return !!getEditedPostAttribute(state, 'title') || !!getEditedPostAttribute(state, 'excerpt') || !isEditedPostEmpty(state) || external_wp_element_namespaceObject.Platform.OS === 'native'; } /** * Returns true if the edited post has content. A post has content if it has at * least one saveable block or otherwise has a non-empty content property * assigned. * * @param {Object} state Global application state. * * @return {boolean} Whether post has content. */ function isEditedPostEmpty(state) { // While the condition of truthy content string is sufficient to determine // emptiness, testing saveable blocks length is a trivial operation. Since // this function can be called frequently, optimize for the fast case as a // condition of the mere existence of blocks. Note that the value of edited // content takes precedent over block content, and must fall through to the // default logic. const blocks = getEditorBlocks(state); if (blocks.length) { // Pierce the abstraction of the serializer in knowing that blocks are // joined with newlines such that even if every individual block // produces an empty save result, the serialized content is non-empty. if (blocks.length > 1) { return false; } // There are two conditions under which the optimization cannot be // assumed, and a fallthrough to getEditedPostContent must occur: // // 1. getBlocksForSerialization has special treatment in omitting a // single unmodified default block. // 2. Comment delimiters are omitted for a freeform or unregistered // block in its serialization. The freeform block specifically may // produce an empty string in its saved output. // // For all other content, the single block is assumed to make a post // non-empty, if only by virtue of its own comment delimiters. const blockName = blocks[0].name; if (blockName !== (0,external_wp_blocks_namespaceObject.getDefaultBlockName)() && blockName !== (0,external_wp_blocks_namespaceObject.getFreeformContentHandlerName)()) { return false; } } return !getEditedPostContent(state); } /** * Returns true if the post can be autosaved, or false otherwise. * * @param {Object} state Global application state. * @param {Object} autosave A raw autosave object from the REST API. * * @return {boolean} Whether the post can be autosaved. */ const isEditedPostAutosaveable = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { var _select$getCurrentUse2; // A post must contain a title, an excerpt, or non-empty content to be valid for autosaving. if (!isEditedPostSaveable(state)) { return false; } // A post is not autosavable when there is a post autosave lock. if (isPostAutosavingLocked(state)) { return false; } const postType = getCurrentPostType(state); const postId = getCurrentPostId(state); const hasFetchedAutosave = select(external_wp_coreData_namespaceObject.store).hasFetchedAutosaves(postType, postId); const currentUserId = (_select$getCurrentUse2 = select(external_wp_coreData_namespaceObject.store).getCurrentUser()) === null || _select$getCurrentUse2 === void 0 ? void 0 : _select$getCurrentUse2.id; // Disable reason - this line causes the side-effect of fetching the autosave // via a resolver, moving below the return would result in the autosave never // being fetched. // eslint-disable-next-line @wordpress/no-unused-vars-before-return const autosave = select(external_wp_coreData_namespaceObject.store).getAutosave(postType, postId, currentUserId); // If any existing autosaves have not yet been fetched, this function is // unable to determine if the post is autosaveable, so return false. if (!hasFetchedAutosave) { return false; } // If we don't already have an autosave, the post is autosaveable. if (!autosave) { return true; } // To avoid an expensive content serialization, use the content dirtiness // flag in place of content field comparison against the known autosave. // This is not strictly accurate, and relies on a tolerance toward autosave // request failures for unnecessary saves. if (hasChangedContent(state)) { return true; } // If the title or excerpt has changed, the post is autosaveable. return ['title', 'excerpt'].some(field => getPostRawValue(autosave[field]) !== getEditedPostAttribute(state, field)); }); /** * Return true if the post being edited is being scheduled. Preferring the * unsaved status values. * * @param {Object} state Global application state. * * @return {boolean} Whether the post has been published. */ function isEditedPostBeingScheduled(state) { const date = getEditedPostAttribute(state, 'date'); // Offset the date by one minute (network latency). const checkedDate = new Date(Number((0,external_wp_date_namespaceObject.getDate)(date)) - ONE_MINUTE_IN_MS); return (0,external_wp_date_namespaceObject.isInTheFuture)(checkedDate); } /** * Returns whether the current post should be considered to have a "floating" * date (i.e. that it would publish "Immediately" rather than at a set time). * * Unlike in the PHP backend, the REST API returns a full date string for posts * where the 0000-00-00T00:00:00 placeholder is present in the database. To * infer that a post is set to publish "Immediately" we check whether the date * and modified date are the same. * * @param {Object} state Editor state. * * @return {boolean} Whether the edited post has a floating date value. */ function isEditedPostDateFloating(state) { const date = getEditedPostAttribute(state, 'date'); const modified = getEditedPostAttribute(state, 'modified'); // This should be the status of the persisted post // It shouldn't use the "edited" status otherwise it breaks the // inferred post data floating status // See https://github.com/WordPress/gutenberg/issues/28083. const status = getCurrentPost(state).status; if (status === 'draft' || status === 'auto-draft' || status === 'pending') { return date === modified || date === null; } return false; } /** * Returns true if the post is currently being deleted, or false otherwise. * * @param {Object} state Editor state. * * @return {boolean} Whether post is being deleted. */ function isDeletingPost(state) { return !!state.deleting.pending; } /** * Returns true if the post is currently being saved, or false otherwise. * * @param {Object} state Global application state. * * @return {boolean} Whether post is being saved. */ const isSavingPost = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { const postType = getCurrentPostType(state); const postId = getCurrentPostId(state); return select(external_wp_coreData_namespaceObject.store).isSavingEntityRecord('postType', postType, postId); }); /** * Returns true if non-post entities are currently being saved, or false otherwise. * * @param {Object} state Global application state. * * @return {boolean} Whether non-post entities are being saved. */ const isSavingNonPostEntityChanges = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { const entitiesBeingSaved = select(external_wp_coreData_namespaceObject.store).__experimentalGetEntitiesBeingSaved(); const { type, id } = getCurrentPost(state); return entitiesBeingSaved.some(entityRecord => entityRecord.kind !== 'postType' || entityRecord.name !== type || entityRecord.key !== id); }); /** * Returns true if a previous post save was attempted successfully, or false * otherwise. * * @param {Object} state Global application state. * * @return {boolean} Whether the post was saved successfully. */ const didPostSaveRequestSucceed = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { const postType = getCurrentPostType(state); const postId = getCurrentPostId(state); return !select(external_wp_coreData_namespaceObject.store).getLastEntitySaveError('postType', postType, postId); }); /** * Returns true if a previous post save was attempted but failed, or false * otherwise. * * @param {Object} state Global application state. * * @return {boolean} Whether the post save failed. */ const didPostSaveRequestFail = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { const postType = getCurrentPostType(state); const postId = getCurrentPostId(state); return !!select(external_wp_coreData_namespaceObject.store).getLastEntitySaveError('postType', postType, postId); }); /** * Returns true if the post is autosaving, or false otherwise. * * @param {Object} state Global application state. * * @return {boolean} Whether the post is autosaving. */ function isAutosavingPost(state) { var _state$saving$options; if (!isSavingPost(state)) { return false; } return Boolean((_state$saving$options = state.saving.options) === null || _state$saving$options === void 0 ? void 0 : _state$saving$options.isAutosave); } /** * Returns true if the post is being previewed, or false otherwise. * * @param {Object} state Global application state. * * @return {boolean} Whether the post is being previewed. */ function isPreviewingPost(state) { var _state$saving$options2; if (!isSavingPost(state)) { return false; } return Boolean((_state$saving$options2 = state.saving.options) === null || _state$saving$options2 === void 0 ? void 0 : _state$saving$options2.isPreview); } /** * Returns the post preview link * * @param {Object} state Global application state. * * @return {string?} Preview Link. */ function getEditedPostPreviewLink(state) { if (state.saving.pending || isSavingPost(state)) { return; } let previewLink = getAutosaveAttribute(state, 'preview_link'); // Fix for issue: https://github.com/WordPress/gutenberg/issues/33616 // If the post is draft, ignore the preview link from the autosave record, // because the preview could be a stale autosave if the post was switched from // published to draft. // See: https://github.com/WordPress/gutenberg/pull/37952. if (!previewLink || 'draft' === getCurrentPost(state).status) { previewLink = getEditedPostAttribute(state, 'link'); if (previewLink) { previewLink = (0,external_wp_url_namespaceObject.addQueryArgs)(previewLink, { preview: true }); } } const featuredImageId = getEditedPostAttribute(state, 'featured_media'); if (previewLink && featuredImageId) { return (0,external_wp_url_namespaceObject.addQueryArgs)(previewLink, { _thumbnail_id: featuredImageId }); } return previewLink; } /** * Returns a suggested post format for the current post, inferred only if there * is a single block within the post and it is of a type known to match a * default post format. Returns null if the format cannot be determined. * * @param {Object} state Global application state. * * @return {?string} Suggested post format. */ function getSuggestedPostFormat(state) { const blocks = getEditorBlocks(state); if (blocks.length > 2) return null; let name; // If there is only one block in the content of the post grab its name // so we can derive a suitable post format from it. if (blocks.length === 1) { name = blocks[0].name; // Check for core/embed `video` and `audio` eligible suggestions. if (name === 'core/embed') { var _blocks$0$attributes; const provider = (_blocks$0$attributes = blocks[0].attributes) === null || _blocks$0$attributes === void 0 ? void 0 : _blocks$0$attributes.providerNameSlug; if (['youtube', 'vimeo'].includes(provider)) { name = 'core/video'; } else if (['spotify', 'soundcloud'].includes(provider)) { name = 'core/audio'; } } } // If there are two blocks in the content and the last one is a text blocks // grab the name of the first one to also suggest a post format from it. if (blocks.length === 2 && blocks[1].name === 'core/paragraph') { name = blocks[0].name; } // We only convert to default post formats in core. switch (name) { case 'core/image': return 'image'; case 'core/quote': case 'core/pullquote': return 'quote'; case 'core/gallery': return 'gallery'; case 'core/video': return 'video'; case 'core/audio': return 'audio'; default: return null; } } /** * Returns the content of the post being edited. * * @param {Object} state Global application state. * * @return {string} Post content. */ const getEditedPostContent = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { const postId = getCurrentPostId(state); const postType = getCurrentPostType(state); const record = select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord('postType', postType, postId); if (record) { if (typeof record.content === 'function') { return record.content(record); } else if (record.blocks) { return (0,external_wp_blocks_namespaceObject.__unstableSerializeAndClean)(record.blocks); } else if (record.content) { return record.content; } } return ''; }); /** * Returns true if the post is being published, or false otherwise. * * @param {Object} state Global application state. * * @return {boolean} Whether post is being published. */ function isPublishingPost(state) { return isSavingPost(state) && !isCurrentPostPublished(state) && getEditedPostAttribute(state, 'status') === 'publish'; } /** * Returns whether the permalink is editable or not. * * @param {Object} state Editor state. * * @return {boolean} Whether or not the permalink is editable. */ function isPermalinkEditable(state) { const permalinkTemplate = getEditedPostAttribute(state, 'permalink_template'); return PERMALINK_POSTNAME_REGEX.test(permalinkTemplate); } /** * Returns the permalink for the post. * * @param {Object} state Editor state. * * @return {?string} The permalink, or null if the post is not viewable. */ function getPermalink(state) { const permalinkParts = getPermalinkParts(state); if (!permalinkParts) { return null; } const { prefix, postName, suffix } = permalinkParts; if (isPermalinkEditable(state)) { return prefix + postName + suffix; } return prefix; } /** * Returns the slug for the post being edited, preferring a manually edited * value if one exists, then a sanitized version of the current post title, and * finally the post ID. * * @param {Object} state Editor state. * * @return {string} The current slug to be displayed in the editor */ function getEditedPostSlug(state) { return getEditedPostAttribute(state, 'slug') || (0,external_wp_url_namespaceObject.cleanForSlug)(getEditedPostAttribute(state, 'title')) || getCurrentPostId(state); } /** * Returns the permalink for a post, split into it's three parts: the prefix, * the postName, and the suffix. * * @param {Object} state Editor state. * * @return {Object} An object containing the prefix, postName, and suffix for * the permalink, or null if the post is not viewable. */ function getPermalinkParts(state) { const permalinkTemplate = getEditedPostAttribute(state, 'permalink_template'); if (!permalinkTemplate) { return null; } const postName = getEditedPostAttribute(state, 'slug') || getEditedPostAttribute(state, 'generated_slug'); const [prefix, suffix] = permalinkTemplate.split(PERMALINK_POSTNAME_REGEX); return { prefix, postName, suffix }; } /** * Returns whether the post is locked. * * @param {Object} state Global application state. * * @return {boolean} Is locked. */ function isPostLocked(state) { return state.postLock.isLocked; } /** * Returns whether post saving is locked. * * @param {Object} state Global application state. * * @return {boolean} Is locked. */ function isPostSavingLocked(state) { return Object.keys(state.postSavingLock).length > 0; } /** * Returns whether post autosaving is locked. * * @param {Object} state Global application state. * * @return {boolean} Is locked. */ function isPostAutosavingLocked(state) { return Object.keys(state.postAutosavingLock).length > 0; } /** * Returns whether the edition of the post has been taken over. * * @param {Object} state Global application state. * * @return {boolean} Is post lock takeover. */ function isPostLockTakeover(state) { return state.postLock.isTakeover; } /** * Returns details about the post lock user. * * @param {Object} state Global application state. * * @return {Object} A user object. */ function getPostLockUser(state) { return state.postLock.user; } /** * Returns the active post lock. * * @param {Object} state Global application state. * * @return {Object} The lock object. */ function getActivePostLock(state) { return state.postLock.activePostLock; } /** * Returns whether or not the user has the unfiltered_html capability. * * @param {Object} state Editor state. * * @return {boolean} Whether the user can or can't post unfiltered HTML. */ function canUserUseUnfilteredHTML(state) { var _getCurrentPost$_link9; return Boolean((_getCurrentPost$_link9 = getCurrentPost(state)._links) === null || _getCurrentPost$_link9 === void 0 ? void 0 : _getCurrentPost$_link9.hasOwnProperty('wp:action-unfiltered-html')); } /** * Returns whether the pre-publish panel should be shown * or skipped when the user clicks the "publish" button. * * @return {boolean} Whether the pre-publish panel should be shown or not. */ const isPublishSidebarEnabled = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => () => !!select(external_wp_preferences_namespaceObject.store).get('core/edit-post', 'isPublishSidebarEnabled')); /** * Return the current block list. * * @param {Object} state * @return {Array} Block list. */ function getEditorBlocks(state) { return getEditedPostAttribute(state, 'blocks') || EMPTY_ARRAY; } /** * A block selection object. * * @typedef {Object} WPBlockSelection * * @property {string} clientId A block client ID. * @property {string} attributeKey A block attribute key. * @property {number} offset An attribute value offset, based on the rich * text value. See `wp.richText.create`. */ /** * Returns the current selection start. * * @param {Object} state * @return {WPBlockSelection} The selection start. * * @deprecated since Gutenberg 10.0.0. */ function getEditorSelectionStart(state) { var _getEditedPostAttribu; external_wp_deprecated_default()("select('core/editor').getEditorSelectionStart", { since: '5.8', alternative: "select('core/editor').getEditorSelection" }); return (_getEditedPostAttribu = getEditedPostAttribute(state, 'selection')) === null || _getEditedPostAttribu === void 0 ? void 0 : _getEditedPostAttribu.selectionStart; } /** * Returns the current selection end. * * @param {Object} state * @return {WPBlockSelection} The selection end. * * @deprecated since Gutenberg 10.0.0. */ function getEditorSelectionEnd(state) { var _getEditedPostAttribu2; external_wp_deprecated_default()("select('core/editor').getEditorSelectionStart", { since: '5.8', alternative: "select('core/editor').getEditorSelection" }); return (_getEditedPostAttribu2 = getEditedPostAttribute(state, 'selection')) === null || _getEditedPostAttribu2 === void 0 ? void 0 : _getEditedPostAttribu2.selectionEnd; } /** * Returns the current selection. * * @param {Object} state * @return {WPBlockSelection} The selection end. */ function getEditorSelection(state) { return getEditedPostAttribute(state, 'selection'); } /** * Is the editor ready * * @param {Object} state * @return {boolean} is Ready. */ function __unstableIsEditorReady(state) { return state.isReady; } /** * Returns the post editor settings. * * @param {Object} state Editor state. * * @return {Object} The editor settings object. */ function getEditorSettings(state) { return state.editorSettings; } /* * Backward compatibility */ /** * Returns state object prior to a specified optimist transaction ID, or `null` * if the transaction corresponding to the given ID cannot be found. * * @deprecated since Gutenberg 9.7.0. */ function getStateBeforeOptimisticTransaction() { external_wp_deprecated_default()("select('core/editor').getStateBeforeOptimisticTransaction", { since: '5.7', hint: 'No state history is kept on this store anymore' }); return null; } /** * Returns true if an optimistic transaction is pending commit, for which the * before state satisfies the given predicate function. * * @deprecated since Gutenberg 9.7.0. */ function inSomeHistory() { external_wp_deprecated_default()("select('core/editor').inSomeHistory", { since: '5.7', hint: 'No state history is kept on this store anymore' }); return false; } function getBlockEditorSelector(name) { return (0,external_wp_data_namespaceObject.createRegistrySelector)(select => function (state) { external_wp_deprecated_default()("`wp.data.select( 'core/editor' )." + name + '`', { since: '5.3', alternative: "`wp.data.select( 'core/block-editor' )." + name + '`', version: '6.2' }); for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } return select(external_wp_blockEditor_namespaceObject.store)[name](...args); }); } /** * @see getBlockName in core/block-editor store. */ const getBlockName = getBlockEditorSelector('getBlockName'); /** * @see isBlockValid in core/block-editor store. */ const isBlockValid = getBlockEditorSelector('isBlockValid'); /** * @see getBlockAttributes in core/block-editor store. */ const getBlockAttributes = getBlockEditorSelector('getBlockAttributes'); /** * @see getBlock in core/block-editor store. */ const getBlock = getBlockEditorSelector('getBlock'); /** * @see getBlocks in core/block-editor store. */ const getBlocks = getBlockEditorSelector('getBlocks'); /** * @see getClientIdsOfDescendants in core/block-editor store. */ const getClientIdsOfDescendants = getBlockEditorSelector('getClientIdsOfDescendants'); /** * @see getClientIdsWithDescendants in core/block-editor store. */ const getClientIdsWithDescendants = getBlockEditorSelector('getClientIdsWithDescendants'); /** * @see getGlobalBlockCount in core/block-editor store. */ const getGlobalBlockCount = getBlockEditorSelector('getGlobalBlockCount'); /** * @see getBlocksByClientId in core/block-editor store. */ const getBlocksByClientId = getBlockEditorSelector('getBlocksByClientId'); /** * @see getBlockCount in core/block-editor store. */ const getBlockCount = getBlockEditorSelector('getBlockCount'); /** * @see getBlockSelectionStart in core/block-editor store. */ const getBlockSelectionStart = getBlockEditorSelector('getBlockSelectionStart'); /** * @see getBlockSelectionEnd in core/block-editor store. */ const getBlockSelectionEnd = getBlockEditorSelector('getBlockSelectionEnd'); /** * @see getSelectedBlockCount in core/block-editor store. */ const getSelectedBlockCount = getBlockEditorSelector('getSelectedBlockCount'); /** * @see hasSelectedBlock in core/block-editor store. */ const hasSelectedBlock = getBlockEditorSelector('hasSelectedBlock'); /** * @see getSelectedBlockClientId in core/block-editor store. */ const getSelectedBlockClientId = getBlockEditorSelector('getSelectedBlockClientId'); /** * @see getSelectedBlock in core/block-editor store. */ const getSelectedBlock = getBlockEditorSelector('getSelectedBlock'); /** * @see getBlockRootClientId in core/block-editor store. */ const getBlockRootClientId = getBlockEditorSelector('getBlockRootClientId'); /** * @see getBlockHierarchyRootClientId in core/block-editor store. */ const getBlockHierarchyRootClientId = getBlockEditorSelector('getBlockHierarchyRootClientId'); /** * @see getAdjacentBlockClientId in core/block-editor store. */ const getAdjacentBlockClientId = getBlockEditorSelector('getAdjacentBlockClientId'); /** * @see getPreviousBlockClientId in core/block-editor store. */ const getPreviousBlockClientId = getBlockEditorSelector('getPreviousBlockClientId'); /** * @see getNextBlockClientId in core/block-editor store. */ const getNextBlockClientId = getBlockEditorSelector('getNextBlockClientId'); /** * @see getSelectedBlocksInitialCaretPosition in core/block-editor store. */ const getSelectedBlocksInitialCaretPosition = getBlockEditorSelector('getSelectedBlocksInitialCaretPosition'); /** * @see getMultiSelectedBlockClientIds in core/block-editor store. */ const getMultiSelectedBlockClientIds = getBlockEditorSelector('getMultiSelectedBlockClientIds'); /** * @see getMultiSelectedBlocks in core/block-editor store. */ const getMultiSelectedBlocks = getBlockEditorSelector('getMultiSelectedBlocks'); /** * @see getFirstMultiSelectedBlockClientId in core/block-editor store. */ const getFirstMultiSelectedBlockClientId = getBlockEditorSelector('getFirstMultiSelectedBlockClientId'); /** * @see getLastMultiSelectedBlockClientId in core/block-editor store. */ const getLastMultiSelectedBlockClientId = getBlockEditorSelector('getLastMultiSelectedBlockClientId'); /** * @see isFirstMultiSelectedBlock in core/block-editor store. */ const isFirstMultiSelectedBlock = getBlockEditorSelector('isFirstMultiSelectedBlock'); /** * @see isBlockMultiSelected in core/block-editor store. */ const isBlockMultiSelected = getBlockEditorSelector('isBlockMultiSelected'); /** * @see isAncestorMultiSelected in core/block-editor store. */ const isAncestorMultiSelected = getBlockEditorSelector('isAncestorMultiSelected'); /** * @see getMultiSelectedBlocksStartClientId in core/block-editor store. */ const getMultiSelectedBlocksStartClientId = getBlockEditorSelector('getMultiSelectedBlocksStartClientId'); /** * @see getMultiSelectedBlocksEndClientId in core/block-editor store. */ const getMultiSelectedBlocksEndClientId = getBlockEditorSelector('getMultiSelectedBlocksEndClientId'); /** * @see getBlockOrder in core/block-editor store. */ const getBlockOrder = getBlockEditorSelector('getBlockOrder'); /** * @see getBlockIndex in core/block-editor store. */ const getBlockIndex = getBlockEditorSelector('getBlockIndex'); /** * @see isBlockSelected in core/block-editor store. */ const isBlockSelected = getBlockEditorSelector('isBlockSelected'); /** * @see hasSelectedInnerBlock in core/block-editor store. */ const hasSelectedInnerBlock = getBlockEditorSelector('hasSelectedInnerBlock'); /** * @see isBlockWithinSelection in core/block-editor store. */ const isBlockWithinSelection = getBlockEditorSelector('isBlockWithinSelection'); /** * @see hasMultiSelection in core/block-editor store. */ const hasMultiSelection = getBlockEditorSelector('hasMultiSelection'); /** * @see isMultiSelecting in core/block-editor store. */ const isMultiSelecting = getBlockEditorSelector('isMultiSelecting'); /** * @see isSelectionEnabled in core/block-editor store. */ const isSelectionEnabled = getBlockEditorSelector('isSelectionEnabled'); /** * @see getBlockMode in core/block-editor store. */ const getBlockMode = getBlockEditorSelector('getBlockMode'); /** * @see isTyping in core/block-editor store. */ const isTyping = getBlockEditorSelector('isTyping'); /** * @see isCaretWithinFormattedText in core/block-editor store. */ const isCaretWithinFormattedText = getBlockEditorSelector('isCaretWithinFormattedText'); /** * @see getBlockInsertionPoint in core/block-editor store. */ const getBlockInsertionPoint = getBlockEditorSelector('getBlockInsertionPoint'); /** * @see isBlockInsertionPointVisible in core/block-editor store. */ const isBlockInsertionPointVisible = getBlockEditorSelector('isBlockInsertionPointVisible'); /** * @see isValidTemplate in core/block-editor store. */ const isValidTemplate = getBlockEditorSelector('isValidTemplate'); /** * @see getTemplate in core/block-editor store. */ const getTemplate = getBlockEditorSelector('getTemplate'); /** * @see getTemplateLock in core/block-editor store. */ const getTemplateLock = getBlockEditorSelector('getTemplateLock'); /** * @see canInsertBlockType in core/block-editor store. */ const canInsertBlockType = getBlockEditorSelector('canInsertBlockType'); /** * @see getInserterItems in core/block-editor store. */ const getInserterItems = getBlockEditorSelector('getInserterItems'); /** * @see hasInserterItems in core/block-editor store. */ const hasInserterItems = getBlockEditorSelector('hasInserterItems'); /** * @see getBlockListSettings in core/block-editor store. */ const getBlockListSettings = getBlockEditorSelector('getBlockListSettings'); /** * Returns the default template types. * * @param {Object} state Global application state. * * @return {Object} The template types. */ function __experimentalGetDefaultTemplateTypes(state) { var _getEditorSettings; return (_getEditorSettings = getEditorSettings(state)) === null || _getEditorSettings === void 0 ? void 0 : _getEditorSettings.defaultTemplateTypes; } /** * Returns the default template part areas. * * @param {Object} state Global application state. * * @return {Array} The template part areas. */ const __experimentalGetDefaultTemplatePartAreas = rememo(state => { var _getEditorSettings2; const areas = ((_getEditorSettings2 = getEditorSettings(state)) === null || _getEditorSettings2 === void 0 ? void 0 : _getEditorSettings2.defaultTemplatePartAreas) || []; return areas === null || areas === void 0 ? void 0 : areas.map(item => { return { ...item, icon: getTemplatePartIcon(item.icon) }; }); }, state => { var _getEditorSettings3; return [(_getEditorSettings3 = getEditorSettings(state)) === null || _getEditorSettings3 === void 0 ? void 0 : _getEditorSettings3.defaultTemplatePartAreas]; }); /** * Returns a default template type searched by slug. * * @param {Object} state Global application state. * @param {string} slug The template type slug. * * @return {Object} The template type. */ const __experimentalGetDefaultTemplateType = rememo((state, slug) => { var _Object$values$find; const templateTypes = __experimentalGetDefaultTemplateTypes(state); if (!templateTypes) { return EMPTY_OBJECT; } return (_Object$values$find = Object.values(templateTypes).find(type => type.slug === slug)) !== null && _Object$values$find !== void 0 ? _Object$values$find : EMPTY_OBJECT; }, (state, slug) => [__experimentalGetDefaultTemplateTypes(state), slug]); /** * Given a template entity, return information about it which is ready to be * rendered, such as the title, description, and icon. * * @param {Object} state Global application state. * @param {Object} template The template for which we need information. * @return {Object} Information about the template, including title, description, and icon. */ function __experimentalGetTemplateInfo(state, template) { var _experimentalGetDefa; if (!template) { return EMPTY_OBJECT; } const { description, slug, title, area } = template; const { title: defaultTitle, description: defaultDescription } = __experimentalGetDefaultTemplateType(state, slug); const templateTitle = typeof title === 'string' ? title : title === null || title === void 0 ? void 0 : title.rendered; const templateDescription = typeof description === 'string' ? description : description === null || description === void 0 ? void 0 : description.raw; const templateIcon = ((_experimentalGetDefa = __experimentalGetDefaultTemplatePartAreas(state).find(item => area === item.area)) === null || _experimentalGetDefa === void 0 ? void 0 : _experimentalGetDefa.icon) || library_layout; return { title: templateTitle && templateTitle !== slug ? templateTitle : defaultTitle || slug, description: templateDescription || defaultDescription, icon: templateIcon }; } /** * Returns a post type label depending on the current post. * * @param {Object} state Global application state. * * @return {string|undefined} The post type label if available, otherwise undefined. */ const getPostTypeLabel = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => { var _postType$labels; const currentPostType = getCurrentPostType(state); const postType = select(external_wp_coreData_namespaceObject.store).getPostType(currentPostType); // Disable reason: Post type labels object is shaped like this. // eslint-disable-next-line camelcase return postType === null || postType === void 0 ? void 0 : (_postType$labels = postType.labels) === null || _postType$labels === void 0 ? void 0 : _postType$labels.singular_name; }); ;// CONCATENATED MODULE: external ["wp","apiFetch"] var external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"]; var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject); ;// CONCATENATED MODULE: external ["wp","notices"] var external_wp_notices_namespaceObject = window["wp"]["notices"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/local-autosave.js /** * Function returning a sessionStorage key to set or retrieve a given post's * automatic session backup. * * Keys are crucially prefixed with 'wp-autosave-' so that wp-login.php's * `loggedout` handler can clear sessionStorage of any user-private content. * * @see https://github.com/WordPress/wordpress-develop/blob/6dad32d2aed47e6c0cf2aee8410645f6d7aba6bd/src/wp-login.php#L103 * * @param {string} postId Post ID. * @param {boolean} isPostNew Whether post new. * * @return {string} sessionStorage key */ function postKey(postId, isPostNew) { return `wp-autosave-block-editor-post-${isPostNew ? 'auto-draft' : postId}`; } function localAutosaveGet(postId, isPostNew) { return window.sessionStorage.getItem(postKey(postId, isPostNew)); } function localAutosaveSet(postId, isPostNew, title, content, excerpt) { window.sessionStorage.setItem(postKey(postId, isPostNew), JSON.stringify({ post_title: title, content, excerpt })); } function localAutosaveClear(postId, isPostNew) { window.sessionStorage.removeItem(postKey(postId, isPostNew)); } ;// CONCATENATED MODULE: external ["wp","i18n"] var external_wp_i18n_namespaceObject = window["wp"]["i18n"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/utils/notice-builder.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * External dependencies */ /** * Builds the arguments for a success notification dispatch. * * @param {Object} data Incoming data to build the arguments from. * * @return {Array} Arguments for dispatch. An empty array signals no * notification should be sent. */ function getNotificationArgumentsForSaveSuccess(data) { const { previousPost, post, postType } = data; // Autosaves are neither shown a notice nor redirected. if ((0,external_lodash_namespaceObject.get)(data.options, ['isAutosave'])) { return []; } // No notice is shown after trashing a post if (post.status === 'trash' && previousPost.status !== 'trash') { return []; } const publishStatus = ['publish', 'private', 'future']; const isPublished = (0,external_lodash_namespaceObject.includes)(publishStatus, previousPost.status); const willPublish = (0,external_lodash_namespaceObject.includes)(publishStatus, post.status); let noticeMessage; let shouldShowLink = (0,external_lodash_namespaceObject.get)(postType, ['viewable'], false); let isDraft; // Always should a notice, which will be spoken for accessibility. if (!isPublished && !willPublish) { // If saving a non-published post, don't show notice. noticeMessage = (0,external_wp_i18n_namespaceObject.__)('Draft saved.'); isDraft = true; } else if (isPublished && !willPublish) { // If undoing publish status, show specific notice. noticeMessage = postType.labels.item_reverted_to_draft; shouldShowLink = false; } else if (!isPublished && willPublish) { // If publishing or scheduling a post, show the corresponding // publish message. noticeMessage = { publish: postType.labels.item_published, private: postType.labels.item_published_privately, future: postType.labels.item_scheduled }[post.status]; } else { // Generic fallback notice. noticeMessage = postType.labels.item_updated; } const actions = []; if (shouldShowLink) { actions.push({ label: isDraft ? (0,external_wp_i18n_namespaceObject.__)('View Preview') : postType.labels.view_item, url: post.link }); } return [noticeMessage, { id: SAVE_POST_NOTICE_ID, type: 'snackbar', actions }]; } /** * Builds the fail notification arguments for dispatch. * * @param {Object} data Incoming data to build the arguments with. * * @return {Array} Arguments for dispatch. An empty array signals no * notification should be sent. */ function getNotificationArgumentsForSaveFail(data) { const { post, edits, error } = data; if (error && 'rest_autosave_no_changes' === error.code) { // Autosave requested a new autosave, but there were no changes. This shouldn't // result in an error notice for the user. return []; } const publishStatus = ['publish', 'private', 'future']; const isPublished = publishStatus.indexOf(post.status) !== -1; // If the post was being published, we show the corresponding publish error message // Unless we publish an "updating failed" message. const messages = { publish: (0,external_wp_i18n_namespaceObject.__)('Publishing failed.'), private: (0,external_wp_i18n_namespaceObject.__)('Publishing failed.'), future: (0,external_wp_i18n_namespaceObject.__)('Scheduling failed.') }; let noticeMessage = !isPublished && publishStatus.indexOf(edits.status) !== -1 ? messages[edits.status] : (0,external_wp_i18n_namespaceObject.__)('Updating failed.'); // Check if message string contains HTML. Notice text is currently only // supported as plaintext, and stripping the tags may muddle the meaning. if (error.message && !/<\/?[^>]*>/.test(error.message)) { noticeMessage = [noticeMessage, error.message].join(' '); } return [noticeMessage, { id: SAVE_POST_NOTICE_ID }]; } /** * Builds the trash fail notification arguments for dispatch. * * @param {Object} data * * @return {Array} Arguments for dispatch. */ function getNotificationArgumentsForTrashFail(data) { return [data.error.message && data.error.code !== 'unknown_error' ? data.error.message : (0,external_wp_i18n_namespaceObject.__)('Trashing failed'), { id: TRASH_POST_NOTICE_ID }]; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/actions.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Returns an action generator used in signalling that editor has initialized with * the specified post object and editor settings. * * @param {Object} post Post object. * @param {Object} edits Initial edited attributes object. * @param {Array?} template Block Template. */ const setupEditor = (post, edits, template) => _ref => { let { dispatch } = _ref; dispatch.setupEditorState(post); // Apply a template for new posts only, if exists. const isNewPost = post.status === 'auto-draft'; if (isNewPost && template) { // In order to ensure maximum of a single parse during setup, edits are // included as part of editor setup action. Assume edited content as // canonical if provided, falling back to post. let content; if ('content' in edits) { content = edits.content; } else { content = post.content.raw; } let blocks = (0,external_wp_blocks_namespaceObject.parse)(content); blocks = (0,external_wp_blocks_namespaceObject.synchronizeBlocksWithTemplate)(blocks, template); dispatch.resetEditorBlocks(blocks, { __unstableShouldCreateUndoLevel: false }); } if (edits && Object.values(edits).some(_ref2 => { var _post$key$raw, _post$key; let [key, edit] = _ref2; return edit !== ((_post$key$raw = (_post$key = post[key]) === null || _post$key === void 0 ? void 0 : _post$key.raw) !== null && _post$key$raw !== void 0 ? _post$key$raw : post[key]); })) { dispatch.editPost(edits); } }; /** * Returns an action object signalling that the editor is being destroyed and * that any necessary state or side-effect cleanup should occur. * * @return {Object} Action object. */ function __experimentalTearDownEditor() { return { type: 'TEAR_DOWN_EDITOR' }; } /** * Returns an action object used in signalling that the latest version of the * post has been received, either by initialization or save. * * @deprecated Since WordPress 6.0. */ function resetPost() { external_wp_deprecated_default()("wp.data.dispatch( 'core/editor' ).resetPost", { since: '6.0', version: '6.3', alternative: 'Initialize the editor with the setupEditorState action' }); return { type: 'DO_NOTHING' }; } /** * Returns an action object used in signalling that a patch of updates for the * latest version of the post have been received. * * @return {Object} Action object. * @deprecated since Gutenberg 9.7.0. */ function updatePost() { external_wp_deprecated_default()("wp.data.dispatch( 'core/editor' ).updatePost", { since: '5.7', alternative: 'Use the core entities store instead' }); return { type: 'DO_NOTHING' }; } /** * Returns an action object used to setup the editor state when first opening * an editor. * * @param {Object} post Post object. * * @return {Object} Action object. */ function setupEditorState(post) { return { type: 'SETUP_EDITOR_STATE', post }; } /** * Returns an action object used in signalling that attributes of the post have * been edited. * * @param {Object} edits Post attributes to edit. * @param {Object} options Options for the edit. */ const editPost = (edits, options) => _ref3 => { let { select, registry } = _ref3; const { id, type } = select.getCurrentPost(); registry.dispatch(external_wp_coreData_namespaceObject.store).editEntityRecord('postType', type, id, edits, options); }; /** * Action for saving the current post in the editor. * * @param {Object} options */ const savePost = function () { let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return async _ref4 => { let { select, dispatch, registry } = _ref4; if (!select.isEditedPostSaveable()) { return; } const content = select.getEditedPostContent(); if (!options.isAutosave) { dispatch.editPost({ content }, { undoIgnore: true }); } const previousRecord = select.getCurrentPost(); const edits = { id: previousRecord.id, ...registry.select(external_wp_coreData_namespaceObject.store).getEntityRecordNonTransientEdits('postType', previousRecord.type, previousRecord.id), content }; dispatch({ type: 'REQUEST_POST_UPDATE_START', options }); await registry.dispatch(external_wp_coreData_namespaceObject.store).saveEntityRecord('postType', previousRecord.type, edits, options); dispatch({ type: 'REQUEST_POST_UPDATE_FINISH', options }); const error = registry.select(external_wp_coreData_namespaceObject.store).getLastEntitySaveError('postType', previousRecord.type, previousRecord.id); if (error) { const args = getNotificationArgumentsForSaveFail({ post: previousRecord, edits, error }); if (args.length) { registry.dispatch(external_wp_notices_namespaceObject.store).createErrorNotice(...args); } } else { const updatedRecord = select.getCurrentPost(); const args = getNotificationArgumentsForSaveSuccess({ previousPost: previousRecord, post: updatedRecord, postType: await registry.resolveSelect(external_wp_coreData_namespaceObject.store).getPostType(updatedRecord.type), options }); if (args.length) { registry.dispatch(external_wp_notices_namespaceObject.store).createSuccessNotice(...args); } // Make sure that any edits after saving create an undo level and are // considered for change detection. if (!options.isAutosave) { registry.dispatch(external_wp_blockEditor_namespaceObject.store).__unstableMarkLastChangeAsPersistent(); } } }; }; /** * Action for refreshing the current post. * * @deprecated Since WordPress 6.0. */ function refreshPost() { external_wp_deprecated_default()("wp.data.dispatch( 'core/editor' ).refreshPost", { since: '6.0', version: '6.3', alternative: 'Use the core entities store instead' }); return { type: 'DO_NOTHING' }; } /** * Action for trashing the current post in the editor. */ const trashPost = () => async _ref5 => { let { select, dispatch, registry } = _ref5; const postTypeSlug = select.getCurrentPostType(); const postType = await registry.resolveSelect(external_wp_coreData_namespaceObject.store).getPostType(postTypeSlug); registry.dispatch(external_wp_notices_namespaceObject.store).removeNotice(TRASH_POST_NOTICE_ID); const { rest_base: restBase, rest_namespace: restNamespace = 'wp/v2' } = postType; dispatch({ type: 'REQUEST_POST_DELETE_START' }); try { const post = select.getCurrentPost(); await external_wp_apiFetch_default()({ path: `/${restNamespace}/${restBase}/${post.id}`, method: 'DELETE' }); await dispatch.savePost(); } catch (error) { registry.dispatch(external_wp_notices_namespaceObject.store).createErrorNotice(...getNotificationArgumentsForTrashFail({ error })); } dispatch({ type: 'REQUEST_POST_DELETE_FINISH' }); }; /** * Action that autosaves the current post. This * includes server-side autosaving (default) and client-side (a.k.a. local) * autosaving (e.g. on the Web, the post might be committed to Session * Storage). * * @param {Object?} options Extra flags to identify the autosave. */ const autosave = function () { let { local = false, ...options } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return async _ref6 => { let { select, dispatch } = _ref6; if (local) { const post = select.getCurrentPost(); const isPostNew = select.isEditedPostNew(); const title = select.getEditedPostAttribute('title'); const content = select.getEditedPostAttribute('content'); const excerpt = select.getEditedPostAttribute('excerpt'); localAutosaveSet(post.id, isPostNew, title, content, excerpt); } else { await dispatch.savePost({ isAutosave: true, ...options }); } }; }; /** * Action that restores last popped state in undo history. */ const redo = () => _ref7 => { let { registry } = _ref7; registry.dispatch(external_wp_coreData_namespaceObject.store).redo(); }; /** * Action that pops a record from undo history and undoes the edit. */ const undo = () => _ref8 => { let { registry } = _ref8; registry.dispatch(external_wp_coreData_namespaceObject.store).undo(); }; /** * Action that creates an undo history record. * * @deprecated Since WordPress 6.0 */ function createUndoLevel() { external_wp_deprecated_default()("wp.data.dispatch( 'core/editor' ).createUndoLevel", { since: '6.0', version: '6.3', alternative: 'Use the core entities store instead' }); return { type: 'DO_NOTHING' }; } /** * Action that locks the editor. * * @param {Object} lock Details about the post lock status, user, and nonce. * @return {Object} Action object. */ function updatePostLock(lock) { return { type: 'UPDATE_POST_LOCK', lock }; } /** * Enable the publish sidebar. */ const enablePublishSidebar = () => _ref9 => { let { registry } = _ref9; registry.dispatch(external_wp_preferences_namespaceObject.store).set('core/edit-post', 'isPublishSidebarEnabled', true); }; /** * Disables the publish sidebar. */ const disablePublishSidebar = () => _ref10 => { let { registry } = _ref10; registry.dispatch(external_wp_preferences_namespaceObject.store).set('core/edit-post', 'isPublishSidebarEnabled', false); }; /** * Action that locks post saving. * * @param {string} lockName The lock name. * * @example * ``` * const { subscribe } = wp.data; * * const initialPostStatus = wp.data.select( 'core/editor' ).getEditedPostAttribute( 'status' ); * * // Only allow publishing posts that are set to a future date. * if ( 'publish' !== initialPostStatus ) { * * // Track locking. * let locked = false; * * // Watch for the publish event. * let unssubscribe = subscribe( () => { * const currentPostStatus = wp.data.select( 'core/editor' ).getEditedPostAttribute( 'status' ); * if ( 'publish' !== currentPostStatus ) { * * // Compare the post date to the current date, lock the post if the date isn't in the future. * const postDate = new Date( wp.data.select( 'core/editor' ).getEditedPostAttribute( 'date' ) ); * const currentDate = new Date(); * if ( postDate.getTime() <= currentDate.getTime() ) { * if ( ! locked ) { * locked = true; * wp.data.dispatch( 'core/editor' ).lockPostSaving( 'futurelock' ); * } * } else { * if ( locked ) { * locked = false; * wp.data.dispatch( 'core/editor' ).unlockPostSaving( 'futurelock' ); * } * } * } * } ); * } * ``` * * @return {Object} Action object */ function lockPostSaving(lockName) { return { type: 'LOCK_POST_SAVING', lockName }; } /** * Action that unlocks post saving. * * @param {string} lockName The lock name. * * @example * ``` * // Unlock post saving with the lock key `mylock`: * wp.data.dispatch( 'core/editor' ).unlockPostSaving( 'mylock' ); * ``` * * @return {Object} Action object */ function unlockPostSaving(lockName) { return { type: 'UNLOCK_POST_SAVING', lockName }; } /** * Action that locks post autosaving. * * @param {string} lockName The lock name. * * @example * ``` * // Lock post autosaving with the lock key `mylock`: * wp.data.dispatch( 'core/editor' ).lockPostAutosaving( 'mylock' ); * ``` * * @return {Object} Action object */ function lockPostAutosaving(lockName) { return { type: 'LOCK_POST_AUTOSAVING', lockName }; } /** * Action that unlocks post autosaving. * * @param {string} lockName The lock name. * * @example * ``` * // Unlock post saving with the lock key `mylock`: * wp.data.dispatch( 'core/editor' ).unlockPostAutosaving( 'mylock' ); * ``` * * @return {Object} Action object */ function unlockPostAutosaving(lockName) { return { type: 'UNLOCK_POST_AUTOSAVING', lockName }; } /** * Returns an action object used to signal that the blocks have been updated. * * @param {Array} blocks Block Array. * @param {?Object} options Optional options. */ const resetEditorBlocks = function (blocks) { let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return _ref11 => { let { select, dispatch, registry } = _ref11; const { __unstableShouldCreateUndoLevel, selection } = options; const edits = { blocks, selection }; if (__unstableShouldCreateUndoLevel !== false) { const { id, type } = select.getCurrentPost(); const noChange = registry.select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord('postType', type, id).blocks === edits.blocks; if (noChange) { registry.dispatch(external_wp_coreData_namespaceObject.store).__unstableCreateUndoLevel('postType', type, id); return; } // We create a new function here on every persistent edit // to make sure the edit makes the post dirty and creates // a new undo level. edits.content = _ref12 => { let { blocks: blocksForSerialization = [] } = _ref12; return (0,external_wp_blocks_namespaceObject.__unstableSerializeAndClean)(blocksForSerialization); }; } dispatch.editPost(edits); }; }; /* * Returns an action object used in signalling that the post editor settings have been updated. * * @param {Object} settings Updated settings * * @return {Object} Action object */ function updateEditorSettings(settings) { return { type: 'UPDATE_EDITOR_SETTINGS', settings }; } /** * Backward compatibility */ const getBlockEditorAction = name => function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ref13 => { let { registry } = _ref13; external_wp_deprecated_default()("`wp.data.dispatch( 'core/editor' )." + name + '`', { since: '5.3', alternative: "`wp.data.dispatch( 'core/block-editor' )." + name + '`', version: '6.2' }); registry.dispatch(external_wp_blockEditor_namespaceObject.store)[name](...args); }; }; /** * @see resetBlocks in core/block-editor store. */ const resetBlocks = getBlockEditorAction('resetBlocks'); /** * @see receiveBlocks in core/block-editor store. */ const receiveBlocks = getBlockEditorAction('receiveBlocks'); /** * @see updateBlock in core/block-editor store. */ const updateBlock = getBlockEditorAction('updateBlock'); /** * @see updateBlockAttributes in core/block-editor store. */ const updateBlockAttributes = getBlockEditorAction('updateBlockAttributes'); /** * @see selectBlock in core/block-editor store. */ const selectBlock = getBlockEditorAction('selectBlock'); /** * @see startMultiSelect in core/block-editor store. */ const startMultiSelect = getBlockEditorAction('startMultiSelect'); /** * @see stopMultiSelect in core/block-editor store. */ const stopMultiSelect = getBlockEditorAction('stopMultiSelect'); /** * @see multiSelect in core/block-editor store. */ const multiSelect = getBlockEditorAction('multiSelect'); /** * @see clearSelectedBlock in core/block-editor store. */ const clearSelectedBlock = getBlockEditorAction('clearSelectedBlock'); /** * @see toggleSelection in core/block-editor store. */ const toggleSelection = getBlockEditorAction('toggleSelection'); /** * @see replaceBlocks in core/block-editor store. */ const replaceBlocks = getBlockEditorAction('replaceBlocks'); /** * @see replaceBlock in core/block-editor store. */ const replaceBlock = getBlockEditorAction('replaceBlock'); /** * @see moveBlocksDown in core/block-editor store. */ const moveBlocksDown = getBlockEditorAction('moveBlocksDown'); /** * @see moveBlocksUp in core/block-editor store. */ const moveBlocksUp = getBlockEditorAction('moveBlocksUp'); /** * @see moveBlockToPosition in core/block-editor store. */ const moveBlockToPosition = getBlockEditorAction('moveBlockToPosition'); /** * @see insertBlock in core/block-editor store. */ const insertBlock = getBlockEditorAction('insertBlock'); /** * @see insertBlocks in core/block-editor store. */ const insertBlocks = getBlockEditorAction('insertBlocks'); /** * @see showInsertionPoint in core/block-editor store. */ const showInsertionPoint = getBlockEditorAction('showInsertionPoint'); /** * @see hideInsertionPoint in core/block-editor store. */ const hideInsertionPoint = getBlockEditorAction('hideInsertionPoint'); /** * @see setTemplateValidity in core/block-editor store. */ const setTemplateValidity = getBlockEditorAction('setTemplateValidity'); /** * @see synchronizeTemplate in core/block-editor store. */ const synchronizeTemplate = getBlockEditorAction('synchronizeTemplate'); /** * @see mergeBlocks in core/block-editor store. */ const mergeBlocks = getBlockEditorAction('mergeBlocks'); /** * @see removeBlocks in core/block-editor store. */ const removeBlocks = getBlockEditorAction('removeBlocks'); /** * @see removeBlock in core/block-editor store. */ const removeBlock = getBlockEditorAction('removeBlock'); /** * @see toggleBlockMode in core/block-editor store. */ const toggleBlockMode = getBlockEditorAction('toggleBlockMode'); /** * @see startTyping in core/block-editor store. */ const startTyping = getBlockEditorAction('startTyping'); /** * @see stopTyping in core/block-editor store. */ const stopTyping = getBlockEditorAction('stopTyping'); /** * @see enterFormattedText in core/block-editor store. */ const enterFormattedText = getBlockEditorAction('enterFormattedText'); /** * @see exitFormattedText in core/block-editor store. */ const exitFormattedText = getBlockEditorAction('exitFormattedText'); /** * @see insertDefaultBlock in core/block-editor store. */ const insertDefaultBlock = getBlockEditorAction('insertDefaultBlock'); /** * @see updateBlockListSettings in core/block-editor store. */ const updateBlockListSettings = getBlockEditorAction('updateBlockListSettings'); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/store/index.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Post editor data store configuration. * * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#registerStore * * @type {Object} */ const storeConfig = { reducer: reducer, selectors: selectors_namespaceObject, actions: actions_namespaceObject }; /** * Store definition for the editor namespace. * * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore * * @type {Object} */ const store_store = (0,external_wp_data_namespaceObject.createReduxStore)(STORE_NAME, { ...storeConfig }); (0,external_wp_data_namespaceObject.register)(store_store); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/hooks/custom-sources-backwards-compatibility.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** @typedef {import('@wordpress/compose').WPHigherOrderComponent} WPHigherOrderComponent */ /** @typedef {import('@wordpress/blocks').WPBlockSettings} WPBlockSettings */ /** * Object whose keys are the names of block attributes, where each value * represents the meta key to which the block attribute is intended to save. * * @see https://developer.wordpress.org/reference/functions/register_meta/ * * @typedef {Object} WPMetaAttributeMapping */ /** * Given a mapping of attribute names (meta source attributes) to their * associated meta key, returns a higher order component that overrides its * `attributes` and `setAttributes` props to sync any changes with the edited * post's meta keys. * * @param {WPMetaAttributeMapping} metaAttributes Meta attribute mapping. * * @return {WPHigherOrderComponent} Higher-order component. */ const createWithMetaAttributeSource = metaAttributes => (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(BlockEdit => _ref => { let { attributes, setAttributes, ...props } = _ref; const postType = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getCurrentPostType(), []); const [meta, setMeta] = (0,external_wp_coreData_namespaceObject.useEntityProp)('postType', postType, 'meta'); const mergedAttributes = (0,external_wp_element_namespaceObject.useMemo)(() => ({ ...attributes, ...(0,external_lodash_namespaceObject.mapValues)(metaAttributes, metaKey => meta[metaKey]) }), [attributes, meta]); return (0,external_wp_element_namespaceObject.createElement)(BlockEdit, _extends({ attributes: mergedAttributes, setAttributes: nextAttributes => { const nextMeta = Object.fromEntries(Object.entries( // Filter to intersection of keys between the updated // attributes and those with an associated meta key. (0,external_lodash_namespaceObject.pickBy)(nextAttributes, (value, key) => metaAttributes[key])).map(_ref2 => { let [attributeKey, value] = _ref2; return [// Rename the keys to the expected meta key name. metaAttributes[attributeKey], value]; })); if (!(0,external_lodash_namespaceObject.isEmpty)(nextMeta)) { setMeta(nextMeta); } setAttributes(nextAttributes); } }, props)); }, 'withMetaAttributeSource'); /** * Filters a registered block's settings to enhance a block's `edit` component * to upgrade meta-sourced attributes to use the post's meta entity property. * * @param {WPBlockSettings} settings Registered block settings. * * @return {WPBlockSettings} Filtered block settings. */ function shimAttributeSource(settings) { /** @type {WPMetaAttributeMapping} */ const metaAttributes = (0,external_lodash_namespaceObject.mapValues)((0,external_lodash_namespaceObject.pickBy)(settings.attributes, { source: 'meta' }), 'meta'); if (!(0,external_lodash_namespaceObject.isEmpty)(metaAttributes)) { settings.edit = createWithMetaAttributeSource(metaAttributes)(settings.edit); } return settings; } (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/editor/custom-sources-backwards-compatibility/shim-attribute-source', shimAttributeSource); // The above filter will only capture blocks registered after the filter was // added. There may already be blocks registered by this point, and those must // be updated to apply the shim. // // The following implementation achieves this, albeit with a couple caveats: // - Only blocks registered on the global store will be modified. // - The block settings are directly mutated, since there is currently no // mechanism to update an existing block registration. This is the reason for // `getBlockType` separate from `getBlockTypes`, since the latter returns a // _copy_ of the block registration (i.e. the mutation would not affect the // actual registered block settings). // // `getBlockTypes` or `getBlockType` implementation could change in the future // in regards to creating settings clones, but the corresponding end-to-end // tests for meta blocks should cover against any potential regressions. // // In the future, we could support updating block settings, at which point this // implementation could use that mechanism instead. (0,external_wp_data_namespaceObject.select)(external_wp_blocks_namespaceObject.store).getBlockTypes().map(_ref3 => { let { name } = _ref3; return (0,external_wp_data_namespaceObject.select)(external_wp_blocks_namespaceObject.store).getBlockType(name); }).forEach(shimAttributeSource); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/autocompleters/user.js /** * WordPress dependencies */ /** @typedef {import('@wordpress/components').WPCompleter} WPCompleter */ function getUserLabel(user) { const avatar = user.avatar_urls && user.avatar_urls[24] ? (0,external_wp_element_namespaceObject.createElement)("img", { className: "editor-autocompleters__user-avatar", alt: "", src: user.avatar_urls[24] }) : (0,external_wp_element_namespaceObject.createElement)("span", { className: "editor-autocompleters__no-avatar" }); return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, avatar, (0,external_wp_element_namespaceObject.createElement)("span", { className: "editor-autocompleters__user-name" }, user.name), (0,external_wp_element_namespaceObject.createElement)("span", { className: "editor-autocompleters__user-slug" }, user.slug)); } /** * A user mentions completer. * * @type {WPCompleter} */ /* harmony default export */ var user = ({ name: 'users', className: 'editor-autocompleters__user', triggerPrefix: '@', useItems(filterValue) { const users = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getUsers } = select(external_wp_coreData_namespaceObject.store); return getUsers({ context: 'view', search: encodeURIComponent(filterValue) }); }, [filterValue]); const options = (0,external_wp_element_namespaceObject.useMemo)(() => users ? users.map(user => ({ key: `user-${user.slug}`, value: user, label: getUserLabel(user) })) : [], [users]); return [options]; }, getOptionCompletion(user) { return `@${user.slug}`; } }); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/hooks/default-autocompleters.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function setDefaultCompleters() { let completers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; // Provide copies so filters may directly modify them. completers.push((0,external_lodash_namespaceObject.clone)(user)); return completers; } (0,external_wp_hooks_namespaceObject.addFilter)('editor.Autocomplete.completers', 'editor/autocompleters/set-default-completers', setDefaultCompleters); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/hooks/index.js /** * Internal dependencies */ ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/autocompleters/index.js ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/autosave-monitor/index.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * AutosaveMonitor invokes `props.autosave()` within at most `interval` seconds after an unsaved change is detected. * * The logic is straightforward: a check is performed every `props.interval` seconds. If any changes are detected, `props.autosave()` is called. * The time between the change and the autosave varies but is no larger than `props.interval` seconds. Refer to the code below for more details, such as * the specific way of detecting changes. * * There are two caveats: * * If `props.isAutosaveable` happens to be false at a time of checking for changes, the check is retried every second. * * The timer may be disabled by setting `props.disableIntervalChecks` to `true`. In that mode, any change will immediately trigger `props.autosave()`. */ class AutosaveMonitor extends external_wp_element_namespaceObject.Component { constructor(props) { super(props); this.needsAutosave = !!(props.isDirty && props.isAutosaveable); } componentDidMount() { if (!this.props.disableIntervalChecks) { this.setAutosaveTimer(); } } componentDidUpdate(prevProps) { if (this.props.disableIntervalChecks) { if (this.props.editsReference !== prevProps.editsReference) { this.props.autosave(); } return; } if (this.props.interval !== prevProps.interval) { clearTimeout(this.timerId); this.setAutosaveTimer(); } if (!this.props.isDirty) { this.needsAutosave = false; return; } if (this.props.isAutosaving && !prevProps.isAutosaving) { this.needsAutosave = false; return; } if (this.props.editsReference !== prevProps.editsReference) { this.needsAutosave = true; } } componentWillUnmount() { clearTimeout(this.timerId); } setAutosaveTimer() { let timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props.interval * 1000; this.timerId = setTimeout(() => { this.autosaveTimerHandler(); }, timeout); } autosaveTimerHandler() { if (!this.props.isAutosaveable) { this.setAutosaveTimer(1000); return; } if (this.needsAutosave) { this.needsAutosave = false; this.props.autosave(); } this.setAutosaveTimer(); } render() { return null; } } /* harmony default export */ var autosave_monitor = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)((select, ownProps) => { const { getReferenceByDistinctEdits } = select(external_wp_coreData_namespaceObject.store); const { isEditedPostDirty, isEditedPostAutosaveable, isAutosavingPost, getEditorSettings } = select(store_store); const { interval = getEditorSettings().autosaveInterval } = ownProps; return { editsReference: getReferenceByDistinctEdits(), isDirty: isEditedPostDirty(), isAutosaveable: isEditedPostAutosaveable(), isAutosaving: isAutosavingPost(), interval }; }), (0,external_wp_data_namespaceObject.withDispatch)((dispatch, ownProps) => ({ autosave() { const { autosave = dispatch(store_store).autosave } = ownProps; autosave(); } }))])(AutosaveMonitor)); ;// CONCATENATED MODULE: external ["wp","richText"] var external_wp_richText_namespaceObject = window["wp"]["richText"]; // EXTERNAL MODULE: ./node_modules/classnames/index.js var classnames = __webpack_require__(4403); var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/document-outline/item.js /** * External dependencies */ const TableOfContentsItem = _ref => { let { children, isValid, level, href, onSelect } = _ref; return (0,external_wp_element_namespaceObject.createElement)("li", { className: classnames_default()('document-outline__item', `is-${level.toLowerCase()}`, { 'is-invalid': !isValid }) }, (0,external_wp_element_namespaceObject.createElement)("a", { href: href, className: "document-outline__button", onClick: onSelect }, (0,external_wp_element_namespaceObject.createElement)("span", { className: "document-outline__emdash", "aria-hidden": "true" }), (0,external_wp_element_namespaceObject.createElement)("strong", { className: "document-outline__level" }, level), (0,external_wp_element_namespaceObject.createElement)("span", { className: "document-outline__item-content" }, children))); }; /* harmony default export */ var document_outline_item = (TableOfContentsItem); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/document-outline/index.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Module constants */ const emptyHeadingContent = (0,external_wp_element_namespaceObject.createElement)("em", null, (0,external_wp_i18n_namespaceObject.__)('(Empty heading)')); const incorrectLevelContent = [(0,external_wp_element_namespaceObject.createElement)("br", { key: "incorrect-break" }), (0,external_wp_element_namespaceObject.createElement)("em", { key: "incorrect-message" }, (0,external_wp_i18n_namespaceObject.__)('(Incorrect heading level)'))]; const singleH1Headings = [(0,external_wp_element_namespaceObject.createElement)("br", { key: "incorrect-break-h1" }), (0,external_wp_element_namespaceObject.createElement)("em", { key: "incorrect-message-h1" }, (0,external_wp_i18n_namespaceObject.__)('(Your theme may already use a H1 for the post title)'))]; const multipleH1Headings = [(0,external_wp_element_namespaceObject.createElement)("br", { key: "incorrect-break-multiple-h1" }), (0,external_wp_element_namespaceObject.createElement)("em", { key: "incorrect-message-multiple-h1" }, (0,external_wp_i18n_namespaceObject.__)('(Multiple H1 headings are not recommended)'))]; /** * Returns an array of heading blocks enhanced with the following properties: * level - An integer with the heading level. * isEmpty - Flag indicating if the heading has no content. * * @param {?Array} blocks An array of blocks. * * @return {Array} An array of heading blocks enhanced with the properties described above. */ const computeOutlineHeadings = function () { let blocks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; return blocks.flatMap(function () { let block = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (block.name === 'core/heading') { return { ...block, level: block.attributes.level, isEmpty: isEmptyHeading(block) }; } return computeOutlineHeadings(block.innerBlocks); }); }; const isEmptyHeading = heading => !heading.attributes.content || heading.attributes.content.length === 0; const DocumentOutline = _ref => { let { blocks = [], title, onSelect, isTitleSupported, hasOutlineItemsDisabled } = _ref; const headings = computeOutlineHeadings(blocks); if (headings.length < 1) { return null; } let prevHeadingLevel = 1; // Not great but it's the simplest way to locate the title right now. const titleNode = document.querySelector('.editor-post-title__input'); const hasTitle = isTitleSupported && title && titleNode; const countByLevel = headings.reduce((acc, heading) => ({ ...acc, [heading.level]: (acc[heading.level] || 0) + 1 }), {}); const hasMultipleH1 = countByLevel[1] > 1; return (0,external_wp_element_namespaceObject.createElement)("div", { className: "document-outline" }, (0,external_wp_element_namespaceObject.createElement)("ul", null, hasTitle && (0,external_wp_element_namespaceObject.createElement)(document_outline_item, { level: (0,external_wp_i18n_namespaceObject.__)('Title'), isValid: true, onSelect: onSelect, href: `#${titleNode.id}`, isDisabled: hasOutlineItemsDisabled }, title), headings.map((item, index) => { // Headings remain the same, go up by one, or down by any amount. // Otherwise there are missing levels. const isIncorrectLevel = item.level > prevHeadingLevel + 1; const isValid = !item.isEmpty && !isIncorrectLevel && !!item.level && (item.level !== 1 || !hasMultipleH1 && !hasTitle); prevHeadingLevel = item.level; return (0,external_wp_element_namespaceObject.createElement)(document_outline_item, { key: index, level: `H${item.level}`, isValid: isValid, isDisabled: hasOutlineItemsDisabled, href: `#block-${item.clientId}`, onSelect: onSelect }, item.isEmpty ? emptyHeadingContent : (0,external_wp_richText_namespaceObject.getTextContent)((0,external_wp_richText_namespaceObject.create)({ html: item.attributes.content })), isIncorrectLevel && incorrectLevelContent, item.level === 1 && hasMultipleH1 && multipleH1Headings, hasTitle && item.level === 1 && !hasMultipleH1 && singleH1Headings); }))); }; /* harmony default export */ var document_outline = ((0,external_wp_compose_namespaceObject.compose)((0,external_wp_data_namespaceObject.withSelect)(select => { var _postType$supports$ti, _postType$supports; const { getBlocks } = select(external_wp_blockEditor_namespaceObject.store); const { getEditedPostAttribute } = select(store_store); const { getPostType } = select(external_wp_coreData_namespaceObject.store); const postType = getPostType(getEditedPostAttribute('type')); return { title: getEditedPostAttribute('title'), blocks: getBlocks(), isTitleSupported: (_postType$supports$ti = postType === null || postType === void 0 ? void 0 : (_postType$supports = postType.supports) === null || _postType$supports === void 0 ? void 0 : _postType$supports.title) !== null && _postType$supports$ti !== void 0 ? _postType$supports$ti : false }; }))(DocumentOutline)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/document-outline/check.js /** * External dependencies */ /** * WordPress dependencies */ function DocumentOutlineCheck(_ref) { let { blocks, children } = _ref; const headings = (0,external_lodash_namespaceObject.filter)(blocks, block => block.name === 'core/heading'); if (headings.length < 1) { return null; } return children; } /* harmony default export */ var check = ((0,external_wp_data_namespaceObject.withSelect)(select => ({ blocks: select(external_wp_blockEditor_namespaceObject.store).getBlocks() }))(DocumentOutlineCheck)); ;// CONCATENATED MODULE: external ["wp","keyboardShortcuts"] var external_wp_keyboardShortcuts_namespaceObject = window["wp"]["keyboardShortcuts"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/global-keyboard-shortcuts/save-shortcut.js /** * WordPress dependencies */ /** * Internal dependencies */ function SaveShortcut(_ref) { let { resetBlocksOnSave } = _ref; const { resetEditorBlocks, savePost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const { isEditedPostDirty, getPostEdits, isPostSavingLocked } = (0,external_wp_data_namespaceObject.useSelect)(store_store); (0,external_wp_keyboardShortcuts_namespaceObject.useShortcut)('core/editor/save', event => { event.preventDefault(); /** * Do not save the post if post saving is locked. */ if (isPostSavingLocked()) { return; } // TODO: This should be handled in the `savePost` effect in // considering `isSaveable`. See note on `isEditedPostSaveable` // selector about dirtiness and meta-boxes. // // See: `isEditedPostSaveable` if (!isEditedPostDirty()) { return; } // The text editor requires that editor blocks are updated for a // save to work correctly. Usually this happens when the textarea // for the code editors blurs, but the shortcut can be used without // blurring the textarea. if (resetBlocksOnSave) { const postEdits = getPostEdits(); if (postEdits.content && typeof postEdits.content === 'string') { const blocks = (0,external_wp_blocks_namespaceObject.parse)(postEdits.content); resetEditorBlocks(blocks); } } savePost(); }); return null; } /* harmony default export */ var save_shortcut = (SaveShortcut); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/global-keyboard-shortcuts/visual-editor-shortcuts.js /** * WordPress dependencies */ /** * Internal dependencies */ function VisualEditorGlobalKeyboardShortcuts() { const { redo, undo } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); (0,external_wp_keyboardShortcuts_namespaceObject.useShortcut)('core/editor/undo', event => { undo(); event.preventDefault(); }); (0,external_wp_keyboardShortcuts_namespaceObject.useShortcut)('core/editor/redo', event => { redo(); event.preventDefault(); }); return (0,external_wp_element_namespaceObject.createElement)(save_shortcut, null); } /* harmony default export */ var visual_editor_shortcuts = (VisualEditorGlobalKeyboardShortcuts); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/global-keyboard-shortcuts/text-editor-shortcuts.js /** * Internal dependencies */ function TextEditorGlobalKeyboardShortcuts() { return (0,external_wp_element_namespaceObject.createElement)(save_shortcut, { resetBlocksOnSave: true }); } ;// CONCATENATED MODULE: external ["wp","keycodes"] var external_wp_keycodes_namespaceObject = window["wp"]["keycodes"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/global-keyboard-shortcuts/register-shortcuts.js /** * WordPress dependencies */ function EditorKeyboardShortcutsRegister() { // Registering the shortcuts. const { registerShortcut } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_keyboardShortcuts_namespaceObject.store); (0,external_wp_element_namespaceObject.useEffect)(() => { registerShortcut({ name: 'core/editor/save', category: 'global', description: (0,external_wp_i18n_namespaceObject.__)('Save your changes.'), keyCombination: { modifier: 'primary', character: 's' } }); registerShortcut({ name: 'core/editor/undo', category: 'global', description: (0,external_wp_i18n_namespaceObject.__)('Undo your last changes.'), keyCombination: { modifier: 'primary', character: 'z' } }); registerShortcut({ name: 'core/editor/redo', category: 'global', description: (0,external_wp_i18n_namespaceObject.__)('Redo your last undo.'), keyCombination: { modifier: 'primaryShift', character: 'z' }, // Disable on Apple OS because it conflicts with the browser's // history shortcut. It's a fine alias for both Windows and Linux. // Since there's no conflict for Ctrl+Shift+Z on both Windows and // Linux, we keep it as the default for consistency. aliases: (0,external_wp_keycodes_namespaceObject.isAppleOS)() ? [] : [{ modifier: 'primary', character: 'y' }] }); }, [registerShortcut]); return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockEditorKeyboardShortcuts.Register, null); } /* harmony default export */ var register_shortcuts = (EditorKeyboardShortcutsRegister); ;// CONCATENATED MODULE: external ["wp","components"] var external_wp_components_namespaceObject = window["wp"]["components"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/redo.js /** * WordPress dependencies */ const redo_redo = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M15.6 6.5l-1.1 1 2.9 3.3H8c-.9 0-1.7.3-2.3.9-1.4 1.5-1.4 4.2-1.4 5.6v.2h1.5v-.3c0-1.1 0-3.5 1-4.5.3-.3.7-.5 1.3-.5h9.2L14.5 15l1.1 1.1 4.6-4.6-4.6-5z" })); /* harmony default export */ var library_redo = (redo_redo); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/undo.js /** * WordPress dependencies */ const undo_undo = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M18.3 11.7c-.6-.6-1.4-.9-2.3-.9H6.7l2.9-3.3-1.1-1-4.5 5L8.5 16l1-1-2.7-2.7H16c.5 0 .9.2 1.3.5 1 1 1 3.4 1 4.5v.3h1.5v-.2c0-1.5 0-4.3-1.5-5.7z" })); /* harmony default export */ var library_undo = (undo_undo); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/editor-history/redo.js /** * WordPress dependencies */ /** * Internal dependencies */ function EditorHistoryRedo(props, ref) { const shortcut = (0,external_wp_keycodes_namespaceObject.isAppleOS)() ? external_wp_keycodes_namespaceObject.displayShortcut.primaryShift('z') : external_wp_keycodes_namespaceObject.displayShortcut.primary('y'); const hasRedo = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).hasEditorRedo(), []); const { redo } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, _extends({}, props, { ref: ref, icon: !(0,external_wp_i18n_namespaceObject.isRTL)() ? library_redo : library_undo /* translators: button label text should, if possible, be under 16 characters. */ , label: (0,external_wp_i18n_namespaceObject.__)('Redo'), shortcut: shortcut // If there are no redo levels we don't want to actually disable this // button, because it will remove focus for keyboard users. // See: https://github.com/WordPress/gutenberg/issues/3486 , "aria-disabled": !hasRedo, onClick: hasRedo ? redo : undefined, className: "editor-history__redo" })); } /* harmony default export */ var editor_history_redo = ((0,external_wp_element_namespaceObject.forwardRef)(EditorHistoryRedo)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/editor-history/undo.js /** * WordPress dependencies */ /** * Internal dependencies */ function EditorHistoryUndo(props, ref) { const hasUndo = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).hasEditorUndo(), []); const { undo } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, _extends({}, props, { ref: ref, icon: !(0,external_wp_i18n_namespaceObject.isRTL)() ? library_undo : library_redo /* translators: button label text should, if possible, be under 16 characters. */ , label: (0,external_wp_i18n_namespaceObject.__)('Undo'), shortcut: external_wp_keycodes_namespaceObject.displayShortcut.primary('z') // If there are no undo levels we don't want to actually disable this // button, because it will remove focus for keyboard users. // See: https://github.com/WordPress/gutenberg/issues/3486 , "aria-disabled": !hasUndo, onClick: hasUndo ? undo : undefined, className: "editor-history__undo" })); } /* harmony default export */ var editor_history_undo = ((0,external_wp_element_namespaceObject.forwardRef)(EditorHistoryUndo)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/template-validation-notice/index.js /** * WordPress dependencies */ function TemplateValidationNotice(_ref) { let { isValid, ...props } = _ref; if (isValid) { return null; } const confirmSynchronization = () => { if ( // eslint-disable-next-line no-alert window.confirm((0,external_wp_i18n_namespaceObject.__)('Resetting the template may result in loss of content, do you want to continue?'))) { props.synchronizeTemplate(); } }; return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Notice, { className: "editor-template-validation-notice", isDismissible: false, status: "warning", actions: [{ label: (0,external_wp_i18n_namespaceObject.__)('Keep it as is'), onClick: props.resetTemplateValidity }, { label: (0,external_wp_i18n_namespaceObject.__)('Reset the template'), onClick: confirmSynchronization }] }, (0,external_wp_i18n_namespaceObject.__)('The content of your post doesn’t match the template assigned to your post type.')); } /* harmony default export */ var template_validation_notice = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => ({ isValid: select(external_wp_blockEditor_namespaceObject.store).isValidTemplate() })), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => { const { setTemplateValidity, synchronizeTemplate } = dispatch(external_wp_blockEditor_namespaceObject.store); return { resetTemplateValidity: () => setTemplateValidity(true), synchronizeTemplate }; })])(TemplateValidationNotice)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/editor-notices/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function EditorNotices(_ref) { let { notices, onRemove } = _ref; const dismissibleNotices = (0,external_lodash_namespaceObject.filter)(notices, { isDismissible: true, type: 'default' }); const nonDismissibleNotices = (0,external_lodash_namespaceObject.filter)(notices, { isDismissible: false, type: 'default' }); return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.NoticeList, { notices: nonDismissibleNotices, className: "components-editor-notices__pinned" }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.NoticeList, { notices: dismissibleNotices, className: "components-editor-notices__dismissible", onRemove: onRemove }, (0,external_wp_element_namespaceObject.createElement)(template_validation_notice, null))); } /* harmony default export */ var editor_notices = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => ({ notices: select(external_wp_notices_namespaceObject.store).getNotices() })), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({ onRemove: dispatch(external_wp_notices_namespaceObject.store).removeNotice }))])(EditorNotices)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/editor-snackbars/index.js /** * External dependencies */ /** * WordPress dependencies */ function EditorSnackbars() { const notices = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_notices_namespaceObject.store).getNotices(), []); const { removeNotice } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store); const snackbarNotices = (0,external_lodash_namespaceObject.filter)(notices, { type: 'snackbar' }); return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SnackbarList, { notices: snackbarNotices, className: "components-editor-notices__snackbar", onRemove: removeNotice }); } ;// CONCATENATED MODULE: external ["wp","htmlEntities"] var external_wp_htmlEntities_namespaceObject = window["wp"]["htmlEntities"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/entities-saved-states/entity-record-item.js /** * WordPress dependencies */ /** * Internal dependencies */ function EntityRecordItem(_ref) { let { record, checked, onChange, closePanel } = _ref; const { name, kind, title, key } = record; const parentBlockId = (0,external_wp_data_namespaceObject.useSelect)(select => { var _blocks$; // Get entity's blocks. const { blocks = [] } = select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord(kind, name, key); // Get parents of the entity's first block. const parents = select(external_wp_blockEditor_namespaceObject.store).getBlockParents((_blocks$ = blocks[0]) === null || _blocks$ === void 0 ? void 0 : _blocks$.clientId); // Return closest parent block's clientId. return parents[parents.length - 1]; }, []); // Handle templates that might use default descriptive titles. const entityRecordTitle = (0,external_wp_data_namespaceObject.useSelect)(select => { if ('postType' !== kind || 'wp_template' !== name) { return title; } const template = select(external_wp_coreData_namespaceObject.store).getEditedEntityRecord(kind, name, key); return select(store_store).__experimentalGetTemplateInfo(template).title; }, [name, kind, title, key]); const isSelected = (0,external_wp_data_namespaceObject.useSelect)(select => { const selectedBlockId = select(external_wp_blockEditor_namespaceObject.store).getSelectedBlockClientId(); return selectedBlockId === parentBlockId; }, [parentBlockId]); const isSelectedText = isSelected ? (0,external_wp_i18n_namespaceObject.__)('Selected') : (0,external_wp_i18n_namespaceObject.__)('Select'); const { selectBlock } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store); const selectParentBlock = (0,external_wp_element_namespaceObject.useCallback)(() => selectBlock(parentBlockId), [parentBlockId]); const selectAndDismiss = (0,external_wp_element_namespaceObject.useCallback)(() => { selectBlock(parentBlockId); closePanel(); }, [parentBlockId]); return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelRow, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, { label: (0,external_wp_element_namespaceObject.createElement)("strong", null, (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(entityRecordTitle) || (0,external_wp_i18n_namespaceObject.__)('Untitled')), checked: checked, onChange: onChange }), parentBlockId ? (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { onClick: selectParentBlock, className: "entities-saved-states__find-entity", disabled: isSelected }, isSelectedText), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { onClick: selectAndDismiss, className: "entities-saved-states__find-entity-small", disabled: isSelected }, isSelectedText)) : null); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/entities-saved-states/entity-type-list.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function getEntityDescription(entity, count) { switch (entity) { case 'site': return 1 === count ? (0,external_wp_i18n_namespaceObject.__)('This change will affect your whole site.') : (0,external_wp_i18n_namespaceObject.__)('These changes will affect your whole site.'); case 'wp_template': return (0,external_wp_i18n_namespaceObject.__)('This change will affect pages and posts that use this template.'); case 'page': case 'post': return (0,external_wp_i18n_namespaceObject.__)('The following content has been modified.'); } } function EntityTypeList(_ref) { let { list, unselectedEntities, setUnselectedEntities, closePanel } = _ref; const count = list.length; const firstRecord = list[0]; const entityConfig = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getEntityConfig(firstRecord.kind, firstRecord.name), [firstRecord.kind, firstRecord.name]); const { name } = firstRecord; let entityLabel = entityConfig.label; if (name === 'wp_template_part') { entityLabel = 1 === count ? (0,external_wp_i18n_namespaceObject.__)('Template Part') : (0,external_wp_i18n_namespaceObject.__)('Template Parts'); } // Set description based on type of entity. const description = getEntityDescription(name, count); return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, { title: entityLabel, initialOpen: true }, description && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelRow, null, description), list.map(record => { return (0,external_wp_element_namespaceObject.createElement)(EntityRecordItem, { key: record.key || record.property, record: record, checked: !(0,external_lodash_namespaceObject.some)(unselectedEntities, elt => elt.kind === record.kind && elt.name === record.name && elt.key === record.key && elt.property === record.property), onChange: value => setUnselectedEntities(record, value), closePanel: closePanel }); })); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/entities-saved-states/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const TRANSLATED_SITE_PROPERTIES = { title: (0,external_wp_i18n_namespaceObject.__)('Title'), description: (0,external_wp_i18n_namespaceObject.__)('Tagline'), site_logo: (0,external_wp_i18n_namespaceObject.__)('Logo'), site_icon: (0,external_wp_i18n_namespaceObject.__)('Icon'), show_on_front: (0,external_wp_i18n_namespaceObject.__)('Show on front'), page_on_front: (0,external_wp_i18n_namespaceObject.__)('Page on front') }; const PUBLISH_ON_SAVE_ENTITIES = [{ kind: 'postType', name: 'wp_navigation' }]; function EntitiesSavedStates(_ref) { let { close } = _ref; const saveButtonRef = (0,external_wp_element_namespaceObject.useRef)(); const { dirtyEntityRecords } = (0,external_wp_data_namespaceObject.useSelect)(select => { const dirtyRecords = select(external_wp_coreData_namespaceObject.store).__experimentalGetDirtyEntityRecords(); // Remove site object and decouple into its edited pieces. const dirtyRecordsWithoutSite = dirtyRecords.filter(record => !(record.kind === 'root' && record.name === 'site')); const siteEdits = select(external_wp_coreData_namespaceObject.store).getEntityRecordEdits('root', 'site'); const siteEditsAsEntities = []; for (const property in siteEdits) { siteEditsAsEntities.push({ kind: 'root', name: 'site', title: TRANSLATED_SITE_PROPERTIES[property] || property, property }); } const dirtyRecordsWithSiteItems = [...dirtyRecordsWithoutSite, ...siteEditsAsEntities]; return { dirtyEntityRecords: dirtyRecordsWithSiteItems }; }, []); const { editEntityRecord, saveEditedEntityRecord, __experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store); const { __unstableMarkLastChangeAsPersistent } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store); const { createSuccessNotice, createErrorNotice } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store); // To group entities by type. const partitionedSavables = (0,external_lodash_namespaceObject.groupBy)(dirtyEntityRecords, 'name'); // Sort entity groups. const { site: siteSavables, wp_template: templateSavables, wp_template_part: templatePartSavables, ...contentSavables } = partitionedSavables; const sortedPartitionedSavables = [siteSavables, templateSavables, templatePartSavables, ...Object.values(contentSavables)].filter(Array.isArray); // Unchecked entities to be ignored by save function. const [unselectedEntities, _setUnselectedEntities] = (0,external_wp_element_namespaceObject.useState)([]); const setUnselectedEntities = (_ref2, checked) => { let { kind, name, key, property } = _ref2; if (checked) { _setUnselectedEntities(unselectedEntities.filter(elt => elt.kind !== kind || elt.name !== name || elt.key !== key || elt.property !== property)); } else { _setUnselectedEntities([...unselectedEntities, { kind, name, key, property }]); } }; const saveCheckedEntities = () => { const entitiesToSave = dirtyEntityRecords.filter(_ref3 => { let { kind, name, key, property } = _ref3; return !(0,external_lodash_namespaceObject.some)(unselectedEntities, elt => elt.kind === kind && elt.name === name && elt.key === key && elt.property === property); }); close(entitiesToSave); const siteItemsToSave = []; const pendingSavedRecords = []; entitiesToSave.forEach(_ref4 => { let { kind, name, key, property } = _ref4; if ('root' === kind && 'site' === name) { siteItemsToSave.push(property); } else { if (PUBLISH_ON_SAVE_ENTITIES.some(typeToPublish => typeToPublish.kind === kind && typeToPublish.name === name)) { editEntityRecord(kind, name, key, { status: 'publish' }); } pendingSavedRecords.push(saveEditedEntityRecord(kind, name, key)); } }); if (siteItemsToSave.length) { pendingSavedRecords.push(saveSpecifiedEntityEdits('root', 'site', undefined, siteItemsToSave)); } __unstableMarkLastChangeAsPersistent(); Promise.all(pendingSavedRecords).then(values => { if (values.some(value => typeof value === 'undefined')) { createErrorNotice((0,external_wp_i18n_namespaceObject.__)('Saving failed.')); } else { createSuccessNotice((0,external_wp_i18n_namespaceObject.__)('Site updated.'), { type: 'snackbar' }); } }).catch(error => createErrorNotice(`${(0,external_wp_i18n_namespaceObject.__)('Saving failed.')} ${error}`)); }; // Explicitly define this with no argument passed. Using `close` on // its own will use the event object in place of the expected saved entities. const dismissPanel = (0,external_wp_element_namespaceObject.useCallback)(() => close(), [close]); const [saveDialogRef, saveDialogProps] = (0,external_wp_compose_namespaceObject.__experimentalUseDialog)({ onClose: () => dismissPanel() }); return (0,external_wp_element_namespaceObject.createElement)("div", _extends({ ref: saveDialogRef }, saveDialogProps, { className: "entities-saved-states__panel" }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Flex, { className: "entities-saved-states__panel-header", gap: 2 }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, { isBlock: true, as: external_wp_components_namespaceObject.Button, ref: saveButtonRef, variant: "primary", disabled: dirtyEntityRecords.length - unselectedEntities.length === 0, onClick: saveCheckedEntities, className: "editor-entities-saved-states__save-button" }, (0,external_wp_i18n_namespaceObject.__)('Save')), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, { isBlock: true, as: external_wp_components_namespaceObject.Button, variant: "secondary", onClick: dismissPanel }, (0,external_wp_i18n_namespaceObject.__)('Cancel'))), (0,external_wp_element_namespaceObject.createElement)("div", { className: "entities-saved-states__text-prompt" }, (0,external_wp_element_namespaceObject.createElement)("strong", null, (0,external_wp_i18n_namespaceObject.__)('Are you ready to save?')), (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('The following changes have been made to your site, templates, and content.'))), sortedPartitionedSavables.map(list => { return (0,external_wp_element_namespaceObject.createElement)(EntityTypeList, { key: list[0].name, list: list, closePanel: dismissPanel, unselectedEntities: unselectedEntities, setUnselectedEntities: setUnselectedEntities }); })); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/error-boundary/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function CopyButton(_ref) { let { text, children } = _ref; const ref = (0,external_wp_compose_namespaceObject.useCopyToClipboard)(text); return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { variant: "secondary", ref: ref }, children); } class ErrorBoundary extends external_wp_element_namespaceObject.Component { constructor() { super(...arguments); this.reboot = this.reboot.bind(this); this.getContent = this.getContent.bind(this); this.state = { error: null }; } componentDidCatch(error) { this.setState({ error }); (0,external_wp_hooks_namespaceObject.doAction)('editor.ErrorBoundary.errorLogged', error); } reboot() { this.props.onError(); } getContent() { try { // While `select` in a component is generally discouraged, it is // used here because it (a) reduces the chance of data loss in the // case of additional errors by performing a direct retrieval and // (b) avoids the performance cost associated with unnecessary // content serialization throughout the lifetime of a non-erroring // application. return (0,external_wp_data_namespaceObject.select)(store_store).getEditedPostContent(); } catch (error) {} } render() { const { error } = this.state; if (!error) { return this.props.children; } return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.Warning, { className: "editor-error-boundary", actions: [(0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { key: "recovery", onClick: this.reboot, variant: "secondary" }, (0,external_wp_i18n_namespaceObject.__)('Attempt Recovery')), (0,external_wp_element_namespaceObject.createElement)(CopyButton, { key: "copy-post", text: this.getContent }, (0,external_wp_i18n_namespaceObject.__)('Copy Post Text')), (0,external_wp_element_namespaceObject.createElement)(CopyButton, { key: "copy-error", text: error.stack }, (0,external_wp_i18n_namespaceObject.__)('Copy Error'))] }, (0,external_wp_i18n_namespaceObject.__)('The editor has encountered an unexpected error.')); } } /* harmony default export */ var error_boundary = (ErrorBoundary); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/local-autosave-monitor/index.js /** * WordPress dependencies */ /** * Internal dependencies */ const requestIdleCallback = window.requestIdleCallback ? window.requestIdleCallback : window.requestAnimationFrame; let hasStorageSupport; let uniqueId = 0; /** * Function which returns true if the current environment supports browser * sessionStorage, or false otherwise. The result of this function is cached and * reused in subsequent invocations. */ const hasSessionStorageSupport = () => { if (typeof hasStorageSupport === 'undefined') { try { // Private Browsing in Safari 10 and earlier will throw an error when // attempting to set into sessionStorage. The test here is intentional in // causing a thrown error as condition bailing from local autosave. window.sessionStorage.setItem('__wpEditorTestSessionStorage', ''); window.sessionStorage.removeItem('__wpEditorTestSessionStorage'); hasStorageSupport = true; } catch (error) { hasStorageSupport = false; } } return hasStorageSupport; }; /** * Custom hook which manages the creation of a notice prompting the user to * restore a local autosave, if one exists. */ function useAutosaveNotice() { const { postId, isEditedPostNew, hasRemoteAutosave } = (0,external_wp_data_namespaceObject.useSelect)(select => ({ postId: select(store_store).getCurrentPostId(), isEditedPostNew: select(store_store).isEditedPostNew(), hasRemoteAutosave: !!select(store_store).getEditorSettings().autosave }), []); const { getEditedPostAttribute } = (0,external_wp_data_namespaceObject.useSelect)(store_store); const { createWarningNotice, removeNotice } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store); const { editPost, resetEditorBlocks } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); (0,external_wp_element_namespaceObject.useEffect)(() => { let localAutosave = localAutosaveGet(postId, isEditedPostNew); if (!localAutosave) { return; } try { localAutosave = JSON.parse(localAutosave); } catch (error) { // Not usable if it can't be parsed. return; } const { post_title: title, content, excerpt } = localAutosave; const edits = { title, content, excerpt }; { // Only display a notice if there is a difference between what has been // saved and that which is stored in sessionStorage. const hasDifference = Object.keys(edits).some(key => { return edits[key] !== getEditedPostAttribute(key); }); if (!hasDifference) { // If there is no difference, it can be safely ejected from storage. localAutosaveClear(postId, isEditedPostNew); return; } } if (hasRemoteAutosave) { return; } const noticeId = `wpEditorAutosaveRestore${++uniqueId}`; createWarningNotice((0,external_wp_i18n_namespaceObject.__)('The backup of this post in your browser is different from the version below.'), { id: noticeId, actions: [{ label: (0,external_wp_i18n_namespaceObject.__)('Restore the backup'), onClick() { const { content: editsContent, ...editsWithoutContent } = edits; editPost(editsWithoutContent); resetEditorBlocks((0,external_wp_blocks_namespaceObject.parse)(edits.content)); removeNotice(noticeId); } }] }); }, [isEditedPostNew, postId]); } /** * Custom hook which ejects a local autosave after a successful save occurs. */ function useAutosavePurge() { const { postId, isEditedPostNew, isDirty, isAutosaving, didError } = (0,external_wp_data_namespaceObject.useSelect)(select => ({ postId: select(store_store).getCurrentPostId(), isEditedPostNew: select(store_store).isEditedPostNew(), isDirty: select(store_store).isEditedPostDirty(), isAutosaving: select(store_store).isAutosavingPost(), didError: select(store_store).didPostSaveRequestFail() }), []); const lastIsDirty = (0,external_wp_element_namespaceObject.useRef)(isDirty); const lastIsAutosaving = (0,external_wp_element_namespaceObject.useRef)(isAutosaving); (0,external_wp_element_namespaceObject.useEffect)(() => { if (!didError && (lastIsAutosaving.current && !isAutosaving || lastIsDirty.current && !isDirty)) { localAutosaveClear(postId, isEditedPostNew); } lastIsDirty.current = isDirty; lastIsAutosaving.current = isAutosaving; }, [isDirty, isAutosaving, didError]); // Once the isEditedPostNew changes from true to false, let's clear the auto-draft autosave. const wasEditedPostNew = (0,external_wp_compose_namespaceObject.usePrevious)(isEditedPostNew); const prevPostId = (0,external_wp_compose_namespaceObject.usePrevious)(postId); (0,external_wp_element_namespaceObject.useEffect)(() => { if (prevPostId === postId && wasEditedPostNew && !isEditedPostNew) { localAutosaveClear(postId, true); } }, [isEditedPostNew, postId]); } function LocalAutosaveMonitor() { const { autosave } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const deferredAutosave = (0,external_wp_element_namespaceObject.useCallback)(() => { requestIdleCallback(() => autosave({ local: true })); }, []); useAutosaveNotice(); useAutosavePurge(); const { localAutosaveInterval } = (0,external_wp_data_namespaceObject.useSelect)(select => ({ localAutosaveInterval: select(store_store).getEditorSettings().localAutosaveInterval }), []); return (0,external_wp_element_namespaceObject.createElement)(autosave_monitor, { interval: localAutosaveInterval, autosave: deferredAutosave }); } /* harmony default export */ var local_autosave_monitor = ((0,external_wp_compose_namespaceObject.ifCondition)(hasSessionStorageSupport)(LocalAutosaveMonitor)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/page-attributes/check.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PageAttributesCheck(_ref) { let { children } = _ref; const postType = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getEditedPostAttribute } = select(store_store); const { getPostType } = select(external_wp_coreData_namespaceObject.store); return getPostType(getEditedPostAttribute('type')); }, []); const supportsPageAttributes = (0,external_lodash_namespaceObject.get)(postType, ['supports', 'page-attributes'], false); // Only render fields if post type supports page attributes or available templates exist. if (!supportsPageAttributes) { return null; } return children; } /* harmony default export */ var page_attributes_check = (PageAttributesCheck); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-type-support-check/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * A component which renders its own children only if the current editor post * type supports one of the given `supportKeys` prop. * * @param {Object} props Props. * @param {string} [props.postType] Current post type. * @param {WPElement} props.children Children to be rendered if post * type supports. * @param {(string|string[])} props.supportKeys String or string array of keys * to test. * * @return {WPComponent} The component to be rendered. */ function PostTypeSupportCheck(_ref) { let { postType, children, supportKeys } = _ref; let isSupported = true; if (postType) { isSupported = (0,external_lodash_namespaceObject.some)((0,external_lodash_namespaceObject.castArray)(supportKeys), key => !!postType.supports[key]); } if (!isSupported) { return null; } return children; } /* harmony default export */ var post_type_support_check = ((0,external_wp_data_namespaceObject.withSelect)(select => { const { getEditedPostAttribute } = select(store_store); const { getPostType } = select(external_wp_coreData_namespaceObject.store); return { postType: getPostType(getEditedPostAttribute('type')) }; })(PostTypeSupportCheck)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/page-attributes/order.js /** * WordPress dependencies */ /** * Internal dependencies */ const PageAttributesOrder = _ref => { let { onUpdateOrder, order = 0 } = _ref; const [orderInput, setOrderInput] = (0,external_wp_element_namespaceObject.useState)(null); const setUpdatedOrder = value => { var _value$trim; setOrderInput(value); const newOrder = Number(value); if (Number.isInteger(newOrder) && ((_value$trim = value.trim) === null || _value$trim === void 0 ? void 0 : _value$trim.call(value)) !== '') { onUpdateOrder(Number(value)); } }; const value = orderInput === null ? order : orderInput; return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, { className: "editor-page-attributes__order", type: "number", label: (0,external_wp_i18n_namespaceObject.__)('Order'), value: value, onChange: setUpdatedOrder, size: 6, onBlur: () => { setOrderInput(null); } }); }; function PageAttributesOrderWithChecks(props) { return (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, { supportKeys: "page-attributes" }, (0,external_wp_element_namespaceObject.createElement)(PageAttributesOrder, props)); } /* harmony default export */ var order = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { return { order: select(store_store).getEditedPostAttribute('menu_order') }; }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({ onUpdateOrder(order) { dispatch(store_store).editPost({ menu_order: order }); } }))])(PageAttributesOrderWithChecks)); // EXTERNAL MODULE: ./node_modules/remove-accents/index.js var remove_accents = __webpack_require__(4793); var remove_accents_default = /*#__PURE__*/__webpack_require__.n(remove_accents); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/utils/terms.js /** * External dependencies */ /** * Returns terms in a tree form. * * @param {Array} flatTerms Array of terms in flat format. * * @return {Array} Array of terms in tree format. */ function buildTermsTree(flatTerms) { const flatTermsWithParentAndChildren = flatTerms.map(term => { return { children: [], parent: null, ...term }; }); const termsByParent = (0,external_lodash_namespaceObject.groupBy)(flatTermsWithParentAndChildren, 'parent'); if (termsByParent.null && termsByParent.null.length) { return flatTermsWithParentAndChildren; } const fillWithChildren = terms => { return terms.map(term => { const children = termsByParent[term.id]; return { ...term, children: children && children.length ? fillWithChildren(children) : [] }; }); }; return fillWithChildren(termsByParent['0'] || []); } // Lodash unescape function handles ' but not ' which may be return in some API requests. const unescapeString = arg => { return (0,external_lodash_namespaceObject.unescape)(arg.replace(''', "'")); }; /** * Returns a term object with name unescaped. * The unescape of the name property is done using lodash unescape function. * * @param {Object} term The term object to unescape. * * @return {Object} Term object with name property unescaped. */ const unescapeTerm = term => { return { ...term, name: unescapeString(term.name) }; }; /** * Returns an array of term objects with names unescaped. * The unescape of each term is performed using the unescapeTerm function. * * @param {Object[]} terms Array of term objects to unescape. * * @return {Object[]} Array of term objects unescaped. */ const unescapeTerms = terms => { return (0,external_lodash_namespaceObject.map)(terms, unescapeTerm); }; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/page-attributes/parent.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function getTitle(post) { var _post$title; return post !== null && post !== void 0 && (_post$title = post.title) !== null && _post$title !== void 0 && _post$title.rendered ? (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(post.title.rendered) : `#${post.id} (${(0,external_wp_i18n_namespaceObject.__)('no title')})`; } const getItemPriority = (name, searchValue) => { const normalizedName = remove_accents_default()(name || '').toLowerCase(); const normalizedSearch = remove_accents_default()(searchValue || '').toLowerCase(); if (normalizedName === normalizedSearch) { return 0; } if (normalizedName.startsWith(normalizedSearch)) { return normalizedName.length; } return Infinity; }; function PageAttributesParent() { const { editPost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const [fieldValue, setFieldValue] = (0,external_wp_element_namespaceObject.useState)(false); const { parentPost, parentPostId, items, postType } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getPostType, getEntityRecords, getEntityRecord } = select(external_wp_coreData_namespaceObject.store); const { getCurrentPostId, getEditedPostAttribute } = select(store_store); const postTypeSlug = getEditedPostAttribute('type'); const pageId = getEditedPostAttribute('parent'); const pType = getPostType(postTypeSlug); const postId = getCurrentPostId(); const isHierarchical = (0,external_lodash_namespaceObject.get)(pType, ['hierarchical'], false); const query = { per_page: 100, exclude: postId, parent_exclude: postId, orderby: 'menu_order', order: 'asc', _fields: 'id,title,parent' }; // Perform a search when the field is changed. if (!!fieldValue) { query.search = fieldValue; } return { parentPostId: pageId, parentPost: pageId ? getEntityRecord('postType', postTypeSlug, pageId) : null, items: isHierarchical ? getEntityRecords('postType', postTypeSlug, query) : [], postType: pType }; }, [fieldValue]); const isHierarchical = (0,external_lodash_namespaceObject.get)(postType, ['hierarchical'], false); const parentPageLabel = (0,external_lodash_namespaceObject.get)(postType, ['labels', 'parent_item_colon']); const pageItems = items || []; const parentOptions = (0,external_wp_element_namespaceObject.useMemo)(() => { const getOptionsFromTree = function (tree) { let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; const mappedNodes = tree.map(treeNode => [{ value: treeNode.id, label: '— '.repeat(level) + (0,external_lodash_namespaceObject.unescape)(treeNode.name), rawName: treeNode.name }, ...getOptionsFromTree(treeNode.children || [], level + 1)]); const sortedNodes = mappedNodes.sort((_ref, _ref2) => { let [a] = _ref; let [b] = _ref2; const priorityA = getItemPriority(a.rawName, fieldValue); const priorityB = getItemPriority(b.rawName, fieldValue); return priorityA >= priorityB ? 1 : -1; }); return sortedNodes.flat(); }; let tree = pageItems.map(item => ({ id: item.id, parent: item.parent, name: getTitle(item) })); // Only build a hierarchical tree when not searching. if (!fieldValue) { tree = buildTermsTree(tree); } const opts = getOptionsFromTree(tree); // Ensure the current parent is in the options list. const optsHasParent = (0,external_lodash_namespaceObject.find)(opts, item => item.value === parentPostId); if (parentPost && !optsHasParent) { opts.unshift({ value: parentPostId, label: getTitle(parentPost) }); } return opts; }, [pageItems, fieldValue]); if (!isHierarchical || !parentPageLabel) { return null; } /** * Handle user input. * * @param {string} inputValue The current value of the input field. */ const handleKeydown = inputValue => { setFieldValue(inputValue); }; /** * Handle author selection. * * @param {Object} selectedPostId The selected Author. */ const handleChange = selectedPostId => { editPost({ parent: selectedPostId }); }; return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ComboboxControl, { className: "editor-page-attributes__parent", label: parentPageLabel, value: parentPostId, options: parentOptions, onFilterValueChange: (0,external_lodash_namespaceObject.debounce)(handleKeydown, 300), onChange: handleChange }); } /* harmony default export */ var page_attributes_parent = (PageAttributesParent); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-template/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PostTemplate() { const { availableTemplates, selectedTemplate, isViewable } = (0,external_wp_data_namespaceObject.useSelect)(select => { var _getPostType$viewable, _getPostType; const { getEditedPostAttribute, getEditorSettings, getCurrentPostType } = select(store_store); const { getPostType } = select(external_wp_coreData_namespaceObject.store); return { selectedTemplate: getEditedPostAttribute('template'), availableTemplates: getEditorSettings().availableTemplates, isViewable: (_getPostType$viewable = (_getPostType = getPostType(getCurrentPostType())) === null || _getPostType === void 0 ? void 0 : _getPostType.viewable) !== null && _getPostType$viewable !== void 0 ? _getPostType$viewable : false }; }, []); const { editPost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); if (!isViewable || (0,external_lodash_namespaceObject.isEmpty)(availableTemplates)) { return null; } return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SelectControl, { label: (0,external_wp_i18n_namespaceObject.__)('Template:'), value: selectedTemplate, onChange: templateSlug => { editPost({ template: templateSlug || '' }); }, options: (0,external_lodash_namespaceObject.map)(availableTemplates, (templateName, templateSlug) => ({ value: templateSlug, label: templateName })) }); } /* harmony default export */ var post_template = (PostTemplate); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-author/constants.js const AUTHORS_QUERY = { who: 'authors', per_page: 50, _fields: 'id,name', context: 'view' // Allows non-admins to perform requests. }; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-author/combobox.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PostAuthorCombobox() { const [fieldValue, setFieldValue] = (0,external_wp_element_namespaceObject.useState)(); const { authorId, isLoading, authors, postAuthor } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getUser, getUsers, isResolving } = select(external_wp_coreData_namespaceObject.store); const { getEditedPostAttribute } = select(store_store); const author = getUser(getEditedPostAttribute('author'), { context: 'view' }); const query = { ...AUTHORS_QUERY }; if (fieldValue) { query.search = fieldValue; } return { authorId: getEditedPostAttribute('author'), postAuthor: author, authors: getUsers(query), isLoading: isResolving('core', 'getUsers', [query]) }; }, [fieldValue]); const { editPost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const authorOptions = (0,external_wp_element_namespaceObject.useMemo)(() => { const fetchedAuthors = (authors !== null && authors !== void 0 ? authors : []).map(author => { return { value: author.id, label: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(author.name) }; }); // Ensure the current author is included in the dropdown list. const foundAuthor = fetchedAuthors.findIndex(_ref => { let { value } = _ref; return (postAuthor === null || postAuthor === void 0 ? void 0 : postAuthor.id) === value; }); if (foundAuthor < 0 && postAuthor) { return [{ value: postAuthor.id, label: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(postAuthor.name) }, ...fetchedAuthors]; } return fetchedAuthors; }, [authors, postAuthor]); /** * Handle author selection. * * @param {number} postAuthorId The selected Author. */ const handleSelect = postAuthorId => { if (!postAuthorId) { return; } editPost({ author: postAuthorId }); }; /** * Handle user input. * * @param {string} inputValue The current value of the input field. */ const handleKeydown = inputValue => { setFieldValue(inputValue); }; if (!postAuthor) { return null; } return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ComboboxControl, { label: (0,external_wp_i18n_namespaceObject.__)('Author'), options: authorOptions, value: authorId, onFilterValueChange: (0,external_lodash_namespaceObject.debounce)(handleKeydown, 300), onChange: handleSelect, isLoading: isLoading, allowReset: false }); } /* harmony default export */ var combobox = (PostAuthorCombobox); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-author/select.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostAuthorSelect() { const { editPost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const { postAuthor, authors } = (0,external_wp_data_namespaceObject.useSelect)(select => { return { postAuthor: select(store_store).getEditedPostAttribute('author'), authors: select(external_wp_coreData_namespaceObject.store).getUsers(AUTHORS_QUERY) }; }, []); const authorOptions = (0,external_wp_element_namespaceObject.useMemo)(() => { return (authors !== null && authors !== void 0 ? authors : []).map(author => { return { value: author.id, label: (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(author.name) }; }); }, [authors]); const setAuthorId = value => { const author = Number(value); editPost({ author }); }; return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SelectControl, { className: "post-author-selector", label: (0,external_wp_i18n_namespaceObject.__)('Author'), options: authorOptions, onChange: setAuthorId, value: postAuthor }); } /* harmony default export */ var post_author_select = (PostAuthorSelect); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-author/index.js /** * WordPress dependencies */ /** * Internal dependencies */ const minimumUsersForCombobox = 25; function PostAuthor() { const showCombobox = (0,external_wp_data_namespaceObject.useSelect)(select => { const authors = select(external_wp_coreData_namespaceObject.store).getUsers(AUTHORS_QUERY); return (authors === null || authors === void 0 ? void 0 : authors.length) >= minimumUsersForCombobox; }, []); if (showCombobox) { return (0,external_wp_element_namespaceObject.createElement)(combobox, null); } return (0,external_wp_element_namespaceObject.createElement)(post_author_select, null); } /* harmony default export */ var post_author = (PostAuthor); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-author/check.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PostAuthorCheck(_ref) { let { children } = _ref; const { hasAssignAuthorAction, hasAuthors } = (0,external_wp_data_namespaceObject.useSelect)(select => { const post = select(store_store).getCurrentPost(); const authors = select(external_wp_coreData_namespaceObject.store).getUsers(AUTHORS_QUERY); return { hasAssignAuthorAction: (0,external_lodash_namespaceObject.get)(post, ['_links', 'wp:action-assign-author'], false), hasAuthors: (authors === null || authors === void 0 ? void 0 : authors.length) >= 1 }; }, []); if (!hasAssignAuthorAction || !hasAuthors) { return null; } return (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, { supportKeys: "author" }, children); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-comments/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostComments(_ref) { let { commentStatus = 'open', ...props } = _ref; const onToggleComments = () => props.editPost({ comment_status: commentStatus === 'open' ? 'closed' : 'open' }); return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, { label: (0,external_wp_i18n_namespaceObject.__)('Allow comments'), checked: commentStatus === 'open', onChange: onToggleComments }); } /* harmony default export */ var post_comments = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { return { commentStatus: select(store_store).getEditedPostAttribute('comment_status') }; }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({ editPost: dispatch(store_store).editPost }))])(PostComments)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-excerpt/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostExcerpt(_ref) { let { excerpt, onUpdateExcerpt } = _ref; return (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-excerpt" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextareaControl, { label: (0,external_wp_i18n_namespaceObject.__)('Write an excerpt (optional)'), className: "editor-post-excerpt__textarea", onChange: value => onUpdateExcerpt(value), value: excerpt }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ExternalLink, { href: (0,external_wp_i18n_namespaceObject.__)('https://wordpress.org/support/article/settings-sidebar/#excerpt') }, (0,external_wp_i18n_namespaceObject.__)('Learn more about manual excerpts'))); } /* harmony default export */ var post_excerpt = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { return { excerpt: select(store_store).getEditedPostAttribute('excerpt') }; }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({ onUpdateExcerpt(excerpt) { dispatch(store_store).editPost({ excerpt }); } }))])(PostExcerpt)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-excerpt/check.js /** * Internal dependencies */ function PostExcerptCheck(props) { return (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, _extends({}, props, { supportKeys: "excerpt" })); } /* harmony default export */ var post_excerpt_check = (PostExcerptCheck); ;// CONCATENATED MODULE: external ["wp","blob"] var external_wp_blob_namespaceObject = window["wp"]["blob"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/theme-support-check/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function ThemeSupportCheck(_ref) { let { themeSupports, children, postType, supportKeys } = _ref; const isSupported = (0,external_lodash_namespaceObject.some)((0,external_lodash_namespaceObject.castArray)(supportKeys), key => { const supported = (0,external_lodash_namespaceObject.get)(themeSupports, [key], false); // 'post-thumbnails' can be boolean or an array of post types. // In the latter case, we need to verify `postType` exists // within `supported`. If `postType` isn't passed, then the check // should fail. if ('post-thumbnails' === key && Array.isArray(supported)) { return (0,external_lodash_namespaceObject.includes)(supported, postType); } return supported; }); if (!isSupported) { return null; } return children; } /* harmony default export */ var theme_support_check = ((0,external_wp_data_namespaceObject.withSelect)(select => { const { getThemeSupports } = select(external_wp_coreData_namespaceObject.store); const { getEditedPostAttribute } = select(store_store); return { postType: getEditedPostAttribute('type'), themeSupports: getThemeSupports() }; })(ThemeSupportCheck)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-featured-image/check.js /** * Internal dependencies */ function PostFeaturedImageCheck(props) { return (0,external_wp_element_namespaceObject.createElement)(theme_support_check, { supportKeys: "post-thumbnails" }, (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, _extends({}, props, { supportKeys: "thumbnail" }))); } /* harmony default export */ var post_featured_image_check = (PostFeaturedImageCheck); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-featured-image/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const ALLOWED_MEDIA_TYPES = ['image']; // Used when labels from post type were not yet loaded or when they are not present. const DEFAULT_FEATURE_IMAGE_LABEL = (0,external_wp_i18n_namespaceObject.__)('Featured image'); const DEFAULT_SET_FEATURE_IMAGE_LABEL = (0,external_wp_i18n_namespaceObject.__)('Set featured image'); const DEFAULT_REMOVE_FEATURE_IMAGE_LABEL = (0,external_wp_i18n_namespaceObject.__)('Remove image'); const instructions = (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('To edit the featured image, you need permission to upload media.')); function getMediaDetails(media, postId) { var _media$media_details$, _media$media_details, _media$media_details$2, _media$media_details2; if (!media) { return {}; } const defaultSize = (0,external_wp_hooks_namespaceObject.applyFilters)('editor.PostFeaturedImage.imageSize', 'large', media.id, postId); if (defaultSize in ((_media$media_details$ = media === null || media === void 0 ? void 0 : (_media$media_details = media.media_details) === null || _media$media_details === void 0 ? void 0 : _media$media_details.sizes) !== null && _media$media_details$ !== void 0 ? _media$media_details$ : {})) { return { mediaWidth: media.media_details.sizes[defaultSize].width, mediaHeight: media.media_details.sizes[defaultSize].height, mediaSourceUrl: media.media_details.sizes[defaultSize].source_url }; } // Use fallbackSize when defaultSize is not available. const fallbackSize = (0,external_wp_hooks_namespaceObject.applyFilters)('editor.PostFeaturedImage.imageSize', 'thumbnail', media.id, postId); if (fallbackSize in ((_media$media_details$2 = media === null || media === void 0 ? void 0 : (_media$media_details2 = media.media_details) === null || _media$media_details2 === void 0 ? void 0 : _media$media_details2.sizes) !== null && _media$media_details$2 !== void 0 ? _media$media_details$2 : {})) { return { mediaWidth: media.media_details.sizes[fallbackSize].width, mediaHeight: media.media_details.sizes[fallbackSize].height, mediaSourceUrl: media.media_details.sizes[fallbackSize].source_url }; } // Use full image size when fallbackSize and defaultSize are not available. return { mediaWidth: media.media_details.width, mediaHeight: media.media_details.height, mediaSourceUrl: media.source_url }; } function PostFeaturedImage(_ref) { var _media$media_details$3, _media$media_details$4; let { currentPostId, featuredImageId, onUpdateImage, onRemoveImage, media, postType, noticeUI, noticeOperations } = _ref; const [isLoading, setIsLoading] = (0,external_wp_element_namespaceObject.useState)(false); const mediaUpload = (0,external_wp_data_namespaceObject.useSelect)(select => { return select(external_wp_blockEditor_namespaceObject.store).getSettings().mediaUpload; }, []); const postLabel = (0,external_lodash_namespaceObject.get)(postType, ['labels'], {}); const { mediaWidth, mediaHeight, mediaSourceUrl } = getMediaDetails(media, currentPostId); function onDropFiles(filesList) { mediaUpload({ allowedTypes: ['image'], filesList, onFileChange(_ref2) { let [image] = _ref2; if ((0,external_wp_blob_namespaceObject.isBlobURL)(image === null || image === void 0 ? void 0 : image.url)) { setIsLoading(true); return; } onUpdateImage(image); setIsLoading(false); }, onError(message) { noticeOperations.removeAllNotices(); noticeOperations.createErrorNotice(message); } }); } return (0,external_wp_element_namespaceObject.createElement)(post_featured_image_check, null, noticeUI, (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-featured-image" }, media && (0,external_wp_element_namespaceObject.createElement)("div", { id: `editor-post-featured-image-${featuredImageId}-describedby`, className: "hidden" }, media.alt_text && (0,external_wp_i18n_namespaceObject.sprintf)( // Translators: %s: The selected image alt text. (0,external_wp_i18n_namespaceObject.__)('Current image: %s'), media.alt_text), !media.alt_text && (0,external_wp_i18n_namespaceObject.sprintf)( // Translators: %s: The selected image filename. (0,external_wp_i18n_namespaceObject.__)('The current image has no alternative text. The file name is: %s'), ((_media$media_details$3 = media.media_details.sizes) === null || _media$media_details$3 === void 0 ? void 0 : (_media$media_details$4 = _media$media_details$3.full) === null || _media$media_details$4 === void 0 ? void 0 : _media$media_details$4.file) || media.slug)), (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.MediaUploadCheck, { fallback: instructions }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.MediaUpload, { title: postLabel.featured_image || DEFAULT_FEATURE_IMAGE_LABEL, onSelect: onUpdateImage, unstableFeaturedImageFlow: true, allowedTypes: ALLOWED_MEDIA_TYPES, modalClass: "editor-post-featured-image__media-modal", render: _ref3 => { let { open } = _ref3; return (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-featured-image__container" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { className: !featuredImageId ? 'editor-post-featured-image__toggle' : 'editor-post-featured-image__preview', onClick: open, "aria-label": !featuredImageId ? null : (0,external_wp_i18n_namespaceObject.__)('Edit or update the image'), "aria-describedby": !featuredImageId ? null : `editor-post-featured-image-${featuredImageId}-describedby` }, !!featuredImageId && media && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ResponsiveWrapper, { naturalWidth: mediaWidth, naturalHeight: mediaHeight, isInline: true }, (0,external_wp_element_namespaceObject.createElement)("img", { src: mediaSourceUrl, alt: "" })), isLoading && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Spinner, null), !featuredImageId && !isLoading && (postLabel.set_featured_image || DEFAULT_SET_FEATURE_IMAGE_LABEL)), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.DropZone, { onFilesDrop: onDropFiles })); }, value: featuredImageId })), !!featuredImageId && (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.MediaUploadCheck, null, media && (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.MediaUpload, { title: postLabel.featured_image || DEFAULT_FEATURE_IMAGE_LABEL, onSelect: onUpdateImage, unstableFeaturedImageFlow: true, allowedTypes: ALLOWED_MEDIA_TYPES, modalClass: "editor-post-featured-image__media-modal", render: _ref4 => { let { open } = _ref4; return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { onClick: open, variant: "secondary" }, (0,external_wp_i18n_namespaceObject.__)('Replace Image')); } }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { onClick: onRemoveImage, variant: "link", isDestructive: true }, postLabel.remove_featured_image || DEFAULT_REMOVE_FEATURE_IMAGE_LABEL)))); } const applyWithSelect = (0,external_wp_data_namespaceObject.withSelect)(select => { const { getMedia, getPostType } = select(external_wp_coreData_namespaceObject.store); const { getCurrentPostId, getEditedPostAttribute } = select(store_store); const featuredImageId = getEditedPostAttribute('featured_media'); return { media: featuredImageId ? getMedia(featuredImageId, { context: 'view' }) : null, currentPostId: getCurrentPostId(), postType: getPostType(getEditedPostAttribute('type')), featuredImageId }; }); const applyWithDispatch = (0,external_wp_data_namespaceObject.withDispatch)((dispatch, _ref5, _ref6) => { let { noticeOperations } = _ref5; let { select } = _ref6; const { editPost } = dispatch(store_store); return { onUpdateImage(image) { editPost({ featured_media: image.id }); }, onDropImage(filesList) { select(external_wp_blockEditor_namespaceObject.store).getSettings().mediaUpload({ allowedTypes: ['image'], filesList, onFileChange(_ref7) { let [image] = _ref7; editPost({ featured_media: image.id }); }, onError(message) { noticeOperations.removeAllNotices(); noticeOperations.createErrorNotice(message); } }); }, onRemoveImage() { editPost({ featured_media: 0 }); } }; }); /* harmony default export */ var post_featured_image = ((0,external_wp_compose_namespaceObject.compose)(external_wp_components_namespaceObject.withNotices, applyWithSelect, applyWithDispatch, (0,external_wp_components_namespaceObject.withFilters)('editor.PostFeaturedImage'))(PostFeaturedImage)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-format/check.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostFormatCheck(_ref) { let { disablePostFormats, ...props } = _ref; return !disablePostFormats && (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, _extends({}, props, { supportKeys: "post-formats" })); } /* harmony default export */ var post_format_check = ((0,external_wp_data_namespaceObject.withSelect)(select => { const editorSettings = select(store_store).getEditorSettings(); return { disablePostFormats: editorSettings.disablePostFormats }; })(PostFormatCheck)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-format/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ // All WP post formats, sorted alphabetically by translated name. const POST_FORMATS = [{ id: 'aside', caption: (0,external_wp_i18n_namespaceObject.__)('Aside') }, { id: 'audio', caption: (0,external_wp_i18n_namespaceObject.__)('Audio') }, { id: 'chat', caption: (0,external_wp_i18n_namespaceObject.__)('Chat') }, { id: 'gallery', caption: (0,external_wp_i18n_namespaceObject.__)('Gallery') }, { id: 'image', caption: (0,external_wp_i18n_namespaceObject.__)('Image') }, { id: 'link', caption: (0,external_wp_i18n_namespaceObject.__)('Link') }, { id: 'quote', caption: (0,external_wp_i18n_namespaceObject.__)('Quote') }, { id: 'standard', caption: (0,external_wp_i18n_namespaceObject.__)('Standard') }, { id: 'status', caption: (0,external_wp_i18n_namespaceObject.__)('Status') }, { id: 'video', caption: (0,external_wp_i18n_namespaceObject.__)('Video') }].sort((a, b) => { const normalizedA = a.caption.toUpperCase(); const normalizedB = b.caption.toUpperCase(); if (normalizedA < normalizedB) { return -1; } if (normalizedA > normalizedB) { return 1; } return 0; }); function PostFormat() { const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(PostFormat); const postFormatSelectorId = `post-format-selector-${instanceId}`; const { postFormat, suggestedFormat, supportedFormats } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getEditedPostAttribute, getSuggestedPostFormat } = select(store_store); const _postFormat = getEditedPostAttribute('format'); const themeSupports = select(external_wp_coreData_namespaceObject.store).getThemeSupports(); return { postFormat: _postFormat !== null && _postFormat !== void 0 ? _postFormat : 'standard', suggestedFormat: getSuggestedPostFormat(), supportedFormats: themeSupports.formats }; }, []); const formats = POST_FORMATS.filter(format => { // Ensure current format is always in the set. // The current format may not be a format supported by the theme. return (0,external_lodash_namespaceObject.includes)(supportedFormats, format.id) || postFormat === format.id; }); const suggestion = (0,external_lodash_namespaceObject.find)(formats, format => format.id === suggestedFormat); const { editPost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const onUpdatePostFormat = format => editPost({ format }); return (0,external_wp_element_namespaceObject.createElement)(post_format_check, null, (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-format" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SelectControl, { label: (0,external_wp_i18n_namespaceObject.__)('Post Format'), value: postFormat, onChange: format => onUpdatePostFormat(format), id: postFormatSelectorId, options: formats.map(format => ({ label: format.caption, value: format.id })) }), suggestion && suggestion.id !== postFormat && (0,external_wp_element_namespaceObject.createElement)("p", { className: "editor-post-format__suggestion" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { variant: "link", onClick: () => onUpdatePostFormat(suggestion.id) }, (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: post format */ (0,external_wp_i18n_namespaceObject.__)('Apply suggested format: %s'), suggestion.caption))))); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/backup.js /** * WordPress dependencies */ const backup = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M5.5 12h1.75l-2.5 3-2.5-3H4a8 8 0 113.134 6.35l.907-1.194A6.5 6.5 0 105.5 12zm9.53 1.97l-2.28-2.28V8.5a.75.75 0 00-1.5 0V12a.747.747 0 00.218.529l1.282-.84-1.28.842 2.5 2.5a.75.75 0 101.06-1.061z" })); /* harmony default export */ var library_backup = (backup); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-last-revision/check.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostLastRevisionCheck(_ref) { let { lastRevisionId, revisionsCount, children } = _ref; if (!lastRevisionId || revisionsCount < 2) { return null; } return (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, { supportKeys: "revisions" }, children); } /* harmony default export */ var post_last_revision_check = ((0,external_wp_data_namespaceObject.withSelect)(select => { const { getCurrentPostLastRevisionId, getCurrentPostRevisionsCount } = select(store_store); return { lastRevisionId: getCurrentPostLastRevisionId(), revisionsCount: getCurrentPostRevisionsCount() }; })(PostLastRevisionCheck)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-last-revision/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function LastRevision(_ref) { let { lastRevisionId, revisionsCount } = _ref; return (0,external_wp_element_namespaceObject.createElement)(post_last_revision_check, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { href: (0,external_wp_url_namespaceObject.addQueryArgs)('revision.php', { revision: lastRevisionId, gutenberg: true }), className: "editor-post-last-revision__title", icon: library_backup }, (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %d: number of revisions */ (0,external_wp_i18n_namespaceObject._n)('%d Revision', '%d Revisions', revisionsCount), revisionsCount))); } /* harmony default export */ var post_last_revision = ((0,external_wp_data_namespaceObject.withSelect)(select => { const { getCurrentPostLastRevisionId, getCurrentPostRevisionsCount } = select(store_store); return { lastRevisionId: getCurrentPostLastRevisionId(), revisionsCount: getCurrentPostRevisionsCount() }; })(LastRevision)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-locked-modal/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PostLockedModal() { const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(PostLockedModal); const hookName = 'core/editor/post-locked-modal-' + instanceId; const { autosave, updatePostLock } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const { isLocked, isTakeover, user, postId, postLockUtils, activePostLock, postType, previewLink } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { isPostLocked, isPostLockTakeover, getPostLockUser, getCurrentPostId, getActivePostLock, getEditedPostAttribute, getEditedPostPreviewLink, getEditorSettings } = select(store_store); const { getPostType } = select(external_wp_coreData_namespaceObject.store); return { isLocked: isPostLocked(), isTakeover: isPostLockTakeover(), user: getPostLockUser(), postId: getCurrentPostId(), postLockUtils: getEditorSettings().postLockUtils, activePostLock: getActivePostLock(), postType: getPostType(getEditedPostAttribute('type')), previewLink: getEditedPostPreviewLink() }; }, []); (0,external_wp_element_namespaceObject.useEffect)(() => { /** * Keep the lock refreshed. * * When the user does not send a heartbeat in a heartbeat-tick * the user is no longer editing and another user can start editing. * * @param {Object} data Data to send in the heartbeat request. */ function sendPostLock(data) { if (isLocked) { return; } data['wp-refresh-post-lock'] = { lock: activePostLock, post_id: postId }; } /** * Refresh post locks: update the lock string or show the dialog if somebody has taken over editing. * * @param {Object} data Data received in the heartbeat request */ function receivePostLock(data) { if (!data['wp-refresh-post-lock']) { return; } const received = data['wp-refresh-post-lock']; if (received.lock_error) { // Auto save and display the takeover modal. autosave(); updatePostLock({ isLocked: true, isTakeover: true, user: { name: received.lock_error.name, avatar: received.lock_error.avatar_src_2x } }); } else if (received.new_lock) { updatePostLock({ isLocked: false, activePostLock: received.new_lock }); } } /** * Unlock the post before the window is exited. */ function releasePostLock() { if (isLocked || !activePostLock) { return; } const data = new window.FormData(); data.append('action', 'wp-remove-post-lock'); data.append('_wpnonce', postLockUtils.unlockNonce); data.append('post_ID', postId); data.append('active_post_lock', activePostLock); if (window.navigator.sendBeacon) { window.navigator.sendBeacon(postLockUtils.ajaxUrl, data); } else { const xhr = new window.XMLHttpRequest(); xhr.open('POST', postLockUtils.ajaxUrl, false); xhr.send(data); } } // Details on these events on the Heartbeat API docs // https://developer.wordpress.org/plugins/javascript/heartbeat-api/ (0,external_wp_hooks_namespaceObject.addAction)('heartbeat.send', hookName, sendPostLock); (0,external_wp_hooks_namespaceObject.addAction)('heartbeat.tick', hookName, receivePostLock); window.addEventListener('beforeunload', releasePostLock); return () => { (0,external_wp_hooks_namespaceObject.removeAction)('heartbeat.send', hookName); (0,external_wp_hooks_namespaceObject.removeAction)('heartbeat.tick', hookName); window.removeEventListener('beforeunload', releasePostLock); }; }, []); if (!isLocked) { return null; } const userDisplayName = user.name; const userAvatar = user.avatar; const unlockUrl = (0,external_wp_url_namespaceObject.addQueryArgs)('post.php', { 'get-post-lock': '1', lockKey: true, post: postId, action: 'edit', _wpnonce: postLockUtils.nonce }); const allPostsUrl = (0,external_wp_url_namespaceObject.addQueryArgs)('edit.php', { post_type: (0,external_lodash_namespaceObject.get)(postType, ['slug']) }); const allPostsLabel = (0,external_wp_i18n_namespaceObject.__)('Exit editor'); return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Modal, { title: isTakeover ? (0,external_wp_i18n_namespaceObject.__)('Someone else has taken over this post') : (0,external_wp_i18n_namespaceObject.__)('This post is already being edited'), focusOnMount: true, shouldCloseOnClickOutside: false, shouldCloseOnEsc: false, isDismissible: false, className: "editor-post-locked-modal" }, !!userAvatar && (0,external_wp_element_namespaceObject.createElement)("img", { src: userAvatar, alt: (0,external_wp_i18n_namespaceObject.__)('Avatar'), className: "editor-post-locked-modal__avatar", width: 64, height: 64 }), (0,external_wp_element_namespaceObject.createElement)("div", null, !!isTakeover && (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_element_namespaceObject.createInterpolateElement)(userDisplayName ? (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: user's display name */ (0,external_wp_i18n_namespaceObject.__)('%s now has editing control of this post (). Don’t worry, your changes up to this moment have been saved.'), userDisplayName) : (0,external_wp_i18n_namespaceObject.__)('Another user now has editing control of this post (). Don’t worry, your changes up to this moment have been saved.'), { strong: (0,external_wp_element_namespaceObject.createElement)("strong", null), PreviewLink: (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ExternalLink, { href: previewLink }, (0,external_wp_i18n_namespaceObject.__)('preview')) })), !isTakeover && (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_element_namespaceObject.createInterpolateElement)(userDisplayName ? (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: user's display name */ (0,external_wp_i18n_namespaceObject.__)('%s is currently working on this post (), which means you cannot make changes, unless you take over.'), userDisplayName) : (0,external_wp_i18n_namespaceObject.__)('Another user is currently working on this post (), which means you cannot make changes, unless you take over.'), { strong: (0,external_wp_element_namespaceObject.createElement)("strong", null), PreviewLink: (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ExternalLink, { href: previewLink }, (0,external_wp_i18n_namespaceObject.__)('preview')) })), (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('If you take over, the other user will lose editing control to the post, but their changes will be saved.'))), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Flex, { className: "editor-post-locked-modal__buttons", justify: "flex-end", expanded: false }, !isTakeover && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { variant: "tertiary", href: unlockUrl }, (0,external_wp_i18n_namespaceObject.__)('Take over'))), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FlexItem, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { variant: "primary", href: allPostsUrl }, allPostsLabel))))); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-pending-status/check.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PostPendingStatusCheck(_ref) { let { hasPublishAction, isPublished, children } = _ref; if (isPublished || !hasPublishAction) { return null; } return children; } /* harmony default export */ var post_pending_status_check = ((0,external_wp_compose_namespaceObject.compose)((0,external_wp_data_namespaceObject.withSelect)(select => { const { isCurrentPostPublished, getCurrentPostType, getCurrentPost } = select(store_store); return { hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false), isPublished: isCurrentPostPublished(), postType: getCurrentPostType() }; }))(PostPendingStatusCheck)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-pending-status/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostPendingStatus(_ref) { let { status, onUpdateStatus } = _ref; const togglePendingStatus = () => { const updatedStatus = status === 'pending' ? 'draft' : 'pending'; onUpdateStatus(updatedStatus); }; return (0,external_wp_element_namespaceObject.createElement)(post_pending_status_check, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, { label: (0,external_wp_i18n_namespaceObject.__)('Pending review'), checked: status === 'pending', onChange: togglePendingStatus })); } /* harmony default export */ var post_pending_status = ((0,external_wp_compose_namespaceObject.compose)((0,external_wp_data_namespaceObject.withSelect)(select => ({ status: select(store_store).getEditedPostAttribute('status') })), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({ onUpdateStatus(status) { dispatch(store_store).editPost({ status }); } })))(PostPendingStatus)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-pingbacks/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostPingbacks(_ref) { let { pingStatus = 'open', ...props } = _ref; const onTogglePingback = () => props.editPost({ ping_status: pingStatus === 'open' ? 'closed' : 'open' }); return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, { label: (0,external_wp_i18n_namespaceObject.__)('Allow pingbacks & trackbacks'), checked: pingStatus === 'open', onChange: onTogglePingback }); } /* harmony default export */ var post_pingbacks = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { return { pingStatus: select(store_store).getEditedPostAttribute('ping_status') }; }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({ editPost: dispatch(store_store).editPost }))])(PostPingbacks)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-preview-button/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function writeInterstitialMessage(targetDocument) { let markup = (0,external_wp_element_namespaceObject.renderToString)((0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-preview-button__interstitial-message" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 96 96" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Path, { className: "outer", d: "M48 12c19.9 0 36 16.1 36 36S67.9 84 48 84 12 67.9 12 48s16.1-36 36-36", fill: "none" }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Path, { className: "inner", d: "M69.5 46.4c0-3.9-1.4-6.7-2.6-8.8-1.6-2.6-3.1-4.9-3.1-7.5 0-2.9 2.2-5.7 5.4-5.7h.4C63.9 19.2 56.4 16 48 16c-11.2 0-21 5.7-26.7 14.4h2.1c3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3L40 67.5l7-20.9L42 33c-1.7-.1-3.3-.3-3.3-.3-1.7-.1-1.5-2.7.2-2.6 0 0 5.3.4 8.4.4 3.3 0 8.5-.4 8.5-.4 1.7-.1 1.9 2.4.2 2.6 0 0-1.7.2-3.7.3l11.5 34.3 3.3-10.4c1.6-4.5 2.4-7.8 2.4-10.5zM16.1 48c0 12.6 7.3 23.5 18 28.7L18.8 35c-1.7 4-2.7 8.4-2.7 13zm32.5 2.8L39 78.6c2.9.8 5.9 1.3 9 1.3 3.7 0 7.3-.6 10.6-1.8-.1-.1-.2-.3-.2-.4l-9.8-26.9zM76.2 36c0 3.2-.6 6.9-2.4 11.4L64 75.6c9.5-5.5 15.9-15.8 15.9-27.6 0-5.5-1.4-10.8-3.9-15.3.1 1 .2 2.1.2 3.3z", fill: "none" })), (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('Generating preview…')))); markup += ` `; /** * Filters the interstitial message shown when generating previews. * * @param {string} markup The preview interstitial markup. */ markup = (0,external_wp_hooks_namespaceObject.applyFilters)('editor.PostPreview.interstitialMarkup', markup); targetDocument.write(markup); targetDocument.title = (0,external_wp_i18n_namespaceObject.__)('Generating preview…'); targetDocument.close(); } class PostPreviewButton extends external_wp_element_namespaceObject.Component { constructor() { super(...arguments); this.buttonRef = (0,external_wp_element_namespaceObject.createRef)(); this.openPreviewWindow = this.openPreviewWindow.bind(this); } componentDidUpdate(prevProps) { const { previewLink } = this.props; // This relies on the window being responsible to unset itself when // navigation occurs or a new preview window is opened, to avoid // unintentional forceful redirects. if (previewLink && !prevProps.previewLink) { this.setPreviewWindowLink(previewLink); } } /** * Sets the preview window's location to the given URL, if a preview window * exists and is not closed. * * @param {string} url URL to assign as preview window location. */ setPreviewWindowLink(url) { const { previewWindow } = this; if (previewWindow && !previewWindow.closed) { previewWindow.location = url; if (this.buttonRef.current) { this.buttonRef.current.focus(); } } } getWindowTarget() { const { postId } = this.props; return `wp-preview-${postId}`; } openPreviewWindow(event) { // Our Preview button has its 'href' and 'target' set correctly for a11y // purposes. Unfortunately, though, we can't rely on the default 'click' // handler since sometimes it incorrectly opens a new tab instead of reusing // the existing one. // https://github.com/WordPress/gutenberg/pull/8330 event.preventDefault(); // Open up a Preview tab if needed. This is where we'll show the preview. if (!this.previewWindow || this.previewWindow.closed) { this.previewWindow = window.open('', this.getWindowTarget()); } // Focus the Preview tab. This might not do anything, depending on the browser's // and user's preferences. // https://html.spec.whatwg.org/multipage/interaction.html#dom-window-focus this.previewWindow.focus(); if ( // If we don't need to autosave the post before previewing, then we simply // load the Preview URL in the Preview tab. !this.props.isAutosaveable || // Do not save or overwrite the post, if the post is already locked. this.props.isPostLocked) { this.setPreviewWindowLink(event.target.href); return; } // Request an autosave. This happens asynchronously and causes the component // to update when finished. if (this.props.isDraft) { this.props.savePost({ isPreview: true }); } else { this.props.autosave({ isPreview: true }); } // Display a 'Generating preview' message in the Preview tab while we wait for the // autosave to finish. writeInterstitialMessage(this.previewWindow.document); } render() { const { previewLink, currentPostLink, isSaveable, role } = this.props; // Link to the `?preview=true` URL if we have it, since this lets us see // changes that were autosaved since the post was last published. Otherwise, // just link to the post's URL. const href = previewLink || currentPostLink; const classNames = classnames_default()({ 'editor-post-preview': !this.props.className }, this.props.className); return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { variant: !this.props.className ? 'tertiary' : undefined, className: classNames, href: href, target: this.getWindowTarget(), disabled: !isSaveable, onClick: this.openPreviewWindow, ref: this.buttonRef, role: role }, this.props.textContent ? this.props.textContent : (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_i18n_namespaceObject._x)('Preview', 'imperative verb'), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.VisuallyHidden, { as: "span" }, /* translators: accessibility text */ (0,external_wp_i18n_namespaceObject.__)('(opens in a new tab)')))); } } /* harmony default export */ var post_preview_button = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)((select, _ref) => { let { forcePreviewLink, forceIsAutosaveable } = _ref; const { getCurrentPostId, getCurrentPostAttribute, getEditedPostAttribute, isEditedPostSaveable, isEditedPostAutosaveable, getEditedPostPreviewLink, isPostLocked } = select(store_store); const { getPostType } = select(external_wp_coreData_namespaceObject.store); const previewLink = getEditedPostPreviewLink(); const postType = getPostType(getEditedPostAttribute('type')); return { postId: getCurrentPostId(), currentPostLink: getCurrentPostAttribute('link'), previewLink: forcePreviewLink !== undefined ? forcePreviewLink : previewLink, isSaveable: isEditedPostSaveable(), isAutosaveable: forceIsAutosaveable || isEditedPostAutosaveable(), isViewable: (0,external_lodash_namespaceObject.get)(postType, ['viewable'], false), isDraft: ['draft', 'auto-draft'].indexOf(getEditedPostAttribute('status')) !== -1, isPostLocked: isPostLocked() }; }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => ({ autosave: dispatch(store_store).autosave, savePost: dispatch(store_store).savePost })), (0,external_wp_compose_namespaceObject.ifCondition)(_ref2 => { let { isViewable } = _ref2; return isViewable; })])(PostPreviewButton)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-button/label.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PublishButtonLabel(_ref) { let { isPublished, isBeingScheduled, isSaving, isPublishing, hasPublishAction, isAutosaving, hasNonPostEntityChanges } = _ref; if (isPublishing) { /* translators: button label text should, if possible, be under 16 characters. */ return (0,external_wp_i18n_namespaceObject.__)('Publishing…'); } else if (isPublished && isSaving && !isAutosaving) { /* translators: button label text should, if possible, be under 16 characters. */ return (0,external_wp_i18n_namespaceObject.__)('Updating…'); } else if (isBeingScheduled && isSaving && !isAutosaving) { /* translators: button label text should, if possible, be under 16 characters. */ return (0,external_wp_i18n_namespaceObject.__)('Scheduling…'); } if (!hasPublishAction) { return hasNonPostEntityChanges ? (0,external_wp_i18n_namespaceObject.__)('Submit for Review…') : (0,external_wp_i18n_namespaceObject.__)('Submit for Review'); } else if (isPublished) { return hasNonPostEntityChanges ? (0,external_wp_i18n_namespaceObject.__)('Update…') : (0,external_wp_i18n_namespaceObject.__)('Update'); } else if (isBeingScheduled) { return hasNonPostEntityChanges ? (0,external_wp_i18n_namespaceObject.__)('Schedule…') : (0,external_wp_i18n_namespaceObject.__)('Schedule'); } return (0,external_wp_i18n_namespaceObject.__)('Publish'); } /* harmony default export */ var label = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)((select, _ref2) => { let { forceIsSaving } = _ref2; const { isCurrentPostPublished, isEditedPostBeingScheduled, isSavingPost, isPublishingPost, getCurrentPost, getCurrentPostType, isAutosavingPost } = select(store_store); return { isPublished: isCurrentPostPublished(), isBeingScheduled: isEditedPostBeingScheduled(), isSaving: forceIsSaving || isSavingPost(), isPublishing: isPublishingPost(), hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false), postType: getCurrentPostType(), isAutosaving: isAutosavingPost() }; })])(PublishButtonLabel)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-button/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const noop = () => {}; class PostPublishButton extends external_wp_element_namespaceObject.Component { constructor(props) { super(props); this.buttonNode = (0,external_wp_element_namespaceObject.createRef)(); this.createOnClick = this.createOnClick.bind(this); this.closeEntitiesSavedStates = this.closeEntitiesSavedStates.bind(this); this.state = { entitiesSavedStatesCallback: false }; } componentDidMount() { if (this.props.focusOnMount) { this.buttonNode.current.focus(); } } createOnClick(callback) { var _this = this; return function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } const { hasNonPostEntityChanges, setEntitiesSavedStatesCallback } = _this.props; // If a post with non-post entities is published, but the user // elects to not save changes to the non-post entities, those // entities will still be dirty when the Publish button is clicked. // We also need to check that the `setEntitiesSavedStatesCallback` // prop was passed. See https://github.com/WordPress/gutenberg/pull/37383 if (hasNonPostEntityChanges && setEntitiesSavedStatesCallback) { // The modal for multiple entity saving will open, // hold the callback for saving/publishing the post // so that we can call it if the post entity is checked. _this.setState({ entitiesSavedStatesCallback: () => callback(...args) }); // Open the save panel by setting its callback. // To set a function on the useState hook, we must set it // with another function (() => myFunction). Passing the // function on its own will cause an error when called. setEntitiesSavedStatesCallback(() => _this.closeEntitiesSavedStates); return noop; } return callback(...args); }; } closeEntitiesSavedStates(savedEntities) { const { postType, postId } = this.props; const { entitiesSavedStatesCallback } = this.state; this.setState({ entitiesSavedStatesCallback: false }, () => { if (savedEntities && (0,external_lodash_namespaceObject.some)(savedEntities, elt => elt.kind === 'postType' && elt.name === postType && elt.key === postId)) { // The post entity was checked, call the held callback from `createOnClick`. entitiesSavedStatesCallback(); } }); } render() { const { forceIsDirty, forceIsSaving, hasPublishAction, isBeingScheduled, isOpen, isPostSavingLocked, isPublishable, isPublished, isSaveable, isSaving, isAutoSaving, isToggle, onSave, onStatusChange, onSubmit = noop, onToggle, visibility, hasNonPostEntityChanges, isSavingNonPostEntityChanges } = this.props; const isButtonDisabled = (isSaving || forceIsSaving || !isSaveable || isPostSavingLocked || !isPublishable && !forceIsDirty) && (!hasNonPostEntityChanges || isSavingNonPostEntityChanges); const isToggleDisabled = (isPublished || isSaving || forceIsSaving || !isSaveable || !isPublishable && !forceIsDirty) && (!hasNonPostEntityChanges || isSavingNonPostEntityChanges); let publishStatus; if (!hasPublishAction) { publishStatus = 'pending'; } else if (visibility === 'private') { publishStatus = 'private'; } else if (isBeingScheduled) { publishStatus = 'future'; } else { publishStatus = 'publish'; } const onClickButton = () => { if (isButtonDisabled) { return; } onSubmit(); onStatusChange(publishStatus); onSave(); }; const onClickToggle = () => { if (isToggleDisabled) { return; } onToggle(); }; const buttonProps = { 'aria-disabled': isButtonDisabled, className: 'editor-post-publish-button', isBusy: !isAutoSaving && isSaving && isPublished, variant: 'primary', onClick: this.createOnClick(onClickButton) }; const toggleProps = { 'aria-disabled': isToggleDisabled, 'aria-expanded': isOpen, className: 'editor-post-publish-panel__toggle', isBusy: isSaving && isPublished, variant: 'primary', onClick: this.createOnClick(onClickToggle) }; const toggleChildren = isBeingScheduled ? (0,external_wp_i18n_namespaceObject.__)('Schedule…') : (0,external_wp_i18n_namespaceObject.__)('Publish'); const buttonChildren = (0,external_wp_element_namespaceObject.createElement)(label, { forceIsSaving: forceIsSaving, hasNonPostEntityChanges: hasNonPostEntityChanges }); const componentProps = isToggle ? toggleProps : buttonProps; const componentChildren = isToggle ? toggleChildren : buttonChildren; return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, _extends({ ref: this.buttonNode }, componentProps, { className: classnames_default()(componentProps.className, 'editor-post-publish-button__button', { 'has-changes-dot': hasNonPostEntityChanges }) }), componentChildren)); } } /* harmony default export */ var post_publish_button = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { const { isSavingPost, isAutosavingPost, isEditedPostBeingScheduled, getEditedPostVisibility, isCurrentPostPublished, isEditedPostSaveable, isEditedPostPublishable, isPostSavingLocked, getCurrentPost, getCurrentPostType, getCurrentPostId, hasNonPostEntityChanges, isSavingNonPostEntityChanges } = select(store_store); const _isAutoSaving = isAutosavingPost(); return { isSaving: isSavingPost() || _isAutoSaving, isAutoSaving: _isAutoSaving, isBeingScheduled: isEditedPostBeingScheduled(), visibility: getEditedPostVisibility(), isSaveable: isEditedPostSaveable(), isPostSavingLocked: isPostSavingLocked(), isPublishable: isEditedPostPublishable(), isPublished: isCurrentPostPublished(), hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false), postType: getCurrentPostType(), postId: getCurrentPostId(), hasNonPostEntityChanges: hasNonPostEntityChanges(), isSavingNonPostEntityChanges: isSavingNonPostEntityChanges() }; }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => { const { editPost, savePost } = dispatch(store_store); return { onStatusChange: status => editPost({ status }, { undoIgnore: true }), onSave: savePost }; })])(PostPublishButton)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/close-small.js /** * WordPress dependencies */ const closeSmall = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z" })); /* harmony default export */ var close_small = (closeSmall); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/wordpress.js /** * WordPress dependencies */ const wordpress = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "-2 -2 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01C4.12 2.69 6.87 1.11 10 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z" })); /* harmony default export */ var library_wordpress = (wordpress); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-visibility/utils.js /** * WordPress dependencies */ const visibilityOptions = { public: { label: (0,external_wp_i18n_namespaceObject.__)('Public'), info: (0,external_wp_i18n_namespaceObject.__)('Visible to everyone.') }, private: { label: (0,external_wp_i18n_namespaceObject.__)('Private'), info: (0,external_wp_i18n_namespaceObject.__)('Only visible to site admins and editors.') }, password: { label: (0,external_wp_i18n_namespaceObject.__)('Password protected'), info: (0,external_wp_i18n_namespaceObject.__)('Only those with the password can view this post.') } }; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-visibility/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostVisibility(_ref) { let { onClose } = _ref; const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(PostVisibility); const { status, visibility, password } = (0,external_wp_data_namespaceObject.useSelect)(select => ({ status: select(store_store).getEditedPostAttribute('status'), visibility: select(store_store).getEditedPostVisibility(), password: select(store_store).getEditedPostAttribute('password') })); const { editPost, savePost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const [hasPassword, setHasPassword] = (0,external_wp_element_namespaceObject.useState)(!!password); const [showPrivateConfirmDialog, setShowPrivateConfirmDialog] = (0,external_wp_element_namespaceObject.useState)(false); const setPublic = () => { editPost({ status: visibility === 'private' ? 'draft' : status, password: '' }); setHasPassword(false); }; const setPrivate = () => { setShowPrivateConfirmDialog(true); }; const confirmPrivate = () => { editPost({ status: 'private', password: '' }); setHasPassword(false); setShowPrivateConfirmDialog(false); savePost(); }; const handleDialogCancel = () => { setShowPrivateConfirmDialog(false); }; const setPasswordProtected = () => { editPost({ status: visibility === 'private' ? 'draft' : status, password: password || '' }); setHasPassword(true); }; const updatePassword = event => { editPost({ password: event.target.value }); }; return (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-visibility" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalInspectorPopoverHeader, { title: (0,external_wp_i18n_namespaceObject.__)('Visibility'), help: (0,external_wp_i18n_namespaceObject.__)('Control how this post is viewed.'), onClose: onClose }), (0,external_wp_element_namespaceObject.createElement)("fieldset", { className: "editor-post-visibility__fieldset" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.VisuallyHidden, { as: "legend" }, (0,external_wp_i18n_namespaceObject.__)('Visibility')), (0,external_wp_element_namespaceObject.createElement)(PostVisibilityChoice, { instanceId: instanceId, value: "public", label: visibilityOptions["public"].label, info: visibilityOptions["public"].info, checked: visibility === 'public' && !hasPassword, onChange: setPublic }), (0,external_wp_element_namespaceObject.createElement)(PostVisibilityChoice, { instanceId: instanceId, value: "private", label: visibilityOptions["private"].label, info: visibilityOptions["private"].info, checked: visibility === 'private', onChange: setPrivate }), (0,external_wp_element_namespaceObject.createElement)(PostVisibilityChoice, { instanceId: instanceId, value: "password", label: visibilityOptions.password.label, info: visibilityOptions.password.info, checked: hasPassword, onChange: setPasswordProtected }), hasPassword && (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-visibility__password" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.VisuallyHidden, { as: "label", htmlFor: `editor-post-visibility__password-input-${instanceId}` }, (0,external_wp_i18n_namespaceObject.__)('Create password')), (0,external_wp_element_namespaceObject.createElement)("input", { className: "editor-post-visibility__password-input", id: `editor-post-visibility__password-input-${instanceId}`, type: "text", onChange: updatePassword, value: password, placeholder: (0,external_wp_i18n_namespaceObject.__)('Use a secure password') }))), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalConfirmDialog, { isOpen: showPrivateConfirmDialog, onConfirm: confirmPrivate, onCancel: handleDialogCancel }, (0,external_wp_i18n_namespaceObject.__)('Would you like to privately publish this post now?'))); } function PostVisibilityChoice(_ref2) { let { instanceId, value, label, info, ...props } = _ref2; return (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-visibility__choice" }, (0,external_wp_element_namespaceObject.createElement)("input", _extends({ type: "radio", name: `editor-post-visibility__setting-${instanceId}`, value: value, id: `editor-post-${value}-${instanceId}`, "aria-describedby": `editor-post-${value}-${instanceId}-description`, className: "editor-post-visibility__radio" }, props)), (0,external_wp_element_namespaceObject.createElement)("label", { htmlFor: `editor-post-${value}-${instanceId}`, className: "editor-post-visibility__label" }, label), (0,external_wp_element_namespaceObject.createElement)("p", { id: `editor-post-${value}-${instanceId}-description`, className: "editor-post-visibility__info" }, info)); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-visibility/label.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostVisibilityLabel() { return usePostVisibilityLabel(); } function usePostVisibilityLabel() { var _visibilityOptions$vi; const visibility = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getEditedPostVisibility()); return (_visibilityOptions$vi = visibilityOptions[visibility]) === null || _visibilityOptions$vi === void 0 ? void 0 : _visibilityOptions$vi.label; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-schedule/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function getDayOfTheMonth() { let date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date(); let firstDay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; const d = new Date(date); return new Date(d.getFullYear(), d.getMonth() + (firstDay ? 0 : 1), firstDay ? 1 : 0).toISOString(); } function PostSchedule(_ref) { let { onClose } = _ref; const { postDate, postType } = (0,external_wp_data_namespaceObject.useSelect)(select => ({ postDate: select(store_store).getEditedPostAttribute('date'), postType: select(store_store).getCurrentPostType() }), []); const { editPost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const onUpdateDate = date => editPost({ date }); const [previewedMonth, setPreviewedMonth] = (0,external_wp_element_namespaceObject.useState)(getDayOfTheMonth(postDate)); // Pick up published and schduled site posts. const eventsByPostType = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_coreData_namespaceObject.store).getEntityRecords('postType', postType, { status: 'publish,future', after: getDayOfTheMonth(previewedMonth), before: getDayOfTheMonth(previewedMonth, false), exclude: [select(store_store).getCurrentPostId()] }), [previewedMonth, postType]); const events = (0,external_wp_element_namespaceObject.useMemo)(() => (eventsByPostType || []).map(_ref2 => { let { title, type, date: eventDate } = _ref2; return { title: title === null || title === void 0 ? void 0 : title.rendered, type, date: new Date(eventDate) }; }), [eventsByPostType]); const settings = (0,external_wp_date_namespaceObject.getSettings)(); // To know if the current timezone is a 12 hour time with look for "a" in the time format // We also make sure this a is not escaped by a "/" const is12HourTime = /a(?!\\)/i.test(settings.formats.time.toLowerCase() // Test only the lower case a. .replace(/\\\\/g, '') // Replace "//" with empty strings. .split('').reverse().join('') // Reverse the string and test for "a" not followed by a slash. ); return (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalPublishDateTimePicker, { currentDate: postDate, onChange: onUpdateDate, is12Hour: is12HourTime, events: events, onMonthPreviewed: setPreviewedMonth, onClose: onClose }); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-schedule/label.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostScheduleLabel(props) { return usePostScheduleLabel(props); } function usePostScheduleLabel() { let { full = false } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; const { date, isFloating } = (0,external_wp_data_namespaceObject.useSelect)(select => ({ date: select(store_store).getEditedPostAttribute('date'), isFloating: select(store_store).isEditedPostDateFloating() }), []); return full ? getFullPostScheduleLabel(date) : getPostScheduleLabel(date, { isFloating }); } function getFullPostScheduleLabel(dateAttribute) { const date = (0,external_wp_date_namespaceObject.getDate)(dateAttribute); const timezoneAbbreviation = getTimezoneAbbreviation(); const formattedDate = (0,external_wp_date_namespaceObject.dateI18n)( // translators: If using a space between 'g:i' and 'a', use a non-breaking sapce. (0,external_wp_i18n_namespaceObject._x)('F j, Y g:i\xa0a', 'post schedule full date format'), date); return (0,external_wp_i18n_namespaceObject.isRTL)() ? `${timezoneAbbreviation} ${formattedDate}` : `${formattedDate} ${timezoneAbbreviation}`; } function getPostScheduleLabel(dateAttribute) { let { isFloating = false, now = new Date() } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!dateAttribute || isFloating) { return (0,external_wp_i18n_namespaceObject.__)('Immediately'); } // If the user timezone does not equal the site timezone then using words // like 'tomorrow' is confusing, so show the full date. if (!isTimezoneSameAsSiteTimezone(now)) { return getFullPostScheduleLabel(dateAttribute); } const date = (0,external_wp_date_namespaceObject.getDate)(dateAttribute); if (isSameDay(date, now)) { return (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s: Time of day the post is scheduled for. (0,external_wp_i18n_namespaceObject.__)('Today at %s'), // translators: If using a space between 'g:i' and 'a', use a non-breaking sapce. (0,external_wp_date_namespaceObject.dateI18n)((0,external_wp_i18n_namespaceObject._x)('g:i\xa0a', 'post schedule time format'), date)); } const tomorrow = new Date(now); tomorrow.setDate(tomorrow.getDate() + 1); if (isSameDay(date, tomorrow)) { return (0,external_wp_i18n_namespaceObject.sprintf)( // translators: %s: Time of day the post is scheduled for. (0,external_wp_i18n_namespaceObject.__)('Tomorrow at %s'), // translators: If using a space between 'g:i' and 'a', use a non-breaking sapce. (0,external_wp_date_namespaceObject.dateI18n)((0,external_wp_i18n_namespaceObject._x)('g:i\xa0a', 'post schedule time format'), date)); } if (date.getFullYear() === now.getFullYear()) { return (0,external_wp_date_namespaceObject.dateI18n)( // translators: If using a space between 'g:i' and 'a', use a non-breaking sapce. (0,external_wp_i18n_namespaceObject._x)('F j g:i\xa0a', 'post schedule date format without year'), date); } return (0,external_wp_date_namespaceObject.dateI18n)( // translators: Use a non-breaking space between 'g:i' and 'a' if appropriate. (0,external_wp_i18n_namespaceObject._x)('F j, Y g:i\xa0a', 'post schedule full date format'), date); } function getTimezoneAbbreviation() { const { timezone } = (0,external_wp_date_namespaceObject.getSettings)(); if (timezone.abbr && isNaN(Number(timezone.abbr))) { return timezone.abbr; } const symbol = timezone.offset < 0 ? '' : '+'; return `UTC${symbol}${timezone.offset}`; } function isTimezoneSameAsSiteTimezone(date) { const { timezone } = (0,external_wp_date_namespaceObject.getSettings)(); const siteOffset = Number(timezone.offset); const dateOffset = -1 * (date.getTimezoneOffset() / 60); return siteOffset === dateOffset; } function isSameDay(left, right) { return left.getDate() === right.getDate() && left.getMonth() === right.getMonth() && left.getFullYear() === right.getFullYear(); } ;// CONCATENATED MODULE: external ["wp","a11y"] var external_wp_a11y_namespaceObject = window["wp"]["a11y"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-taxonomies/most-used-terms.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const MIN_MOST_USED_TERMS = 3; const DEFAULT_QUERY = { per_page: 10, orderby: 'count', order: 'desc', hide_empty: true, _fields: 'id,name,count', context: 'view' }; function MostUsedTerms(_ref) { let { onSelect, taxonomy } = _ref; const { _terms, showTerms } = (0,external_wp_data_namespaceObject.useSelect)(select => { const mostUsedTerms = select(external_wp_coreData_namespaceObject.store).getEntityRecords('taxonomy', taxonomy.slug, DEFAULT_QUERY); return { _terms: mostUsedTerms, showTerms: (mostUsedTerms === null || mostUsedTerms === void 0 ? void 0 : mostUsedTerms.length) >= MIN_MOST_USED_TERMS }; }, []); if (!showTerms) { return null; } const terms = unescapeTerms(_terms); const label = (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', 'most_used']); return (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-taxonomies__flat-term-most-used" }, (0,external_wp_element_namespaceObject.createElement)("h3", { className: "editor-post-taxonomies__flat-term-most-used-label" }, label), (0,external_wp_element_namespaceObject.createElement)("ul", { role: "list", className: "editor-post-taxonomies__flat-term-most-used-list" }, terms.map(term => (0,external_wp_element_namespaceObject.createElement)("li", { key: term.id }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { variant: "link", onClick: () => onSelect(term) }, term.name))))); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-taxonomies/flat-term-selector.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * Shared reference to an empty array for cases where it is important to avoid * returning a new array reference on every invocation. * * @type {Array} */ const flat_term_selector_EMPTY_ARRAY = []; /** * Module constants */ const MAX_TERMS_SUGGESTIONS = 20; const flat_term_selector_DEFAULT_QUERY = { per_page: MAX_TERMS_SUGGESTIONS, orderby: 'count', order: 'desc', _fields: 'id,name', context: 'view' }; const isSameTermName = (termA, termB) => unescapeString(termA).toLowerCase() === unescapeString(termB).toLowerCase(); const termNamesToIds = (names, terms) => { return names.map(termName => (0,external_lodash_namespaceObject.find)(terms, term => isSameTermName(term.name, termName)).id); }; // Tries to create a term or fetch it if it already exists. function findOrCreateTerm(termName, restBase, namespace) { const escapedTermName = (0,external_lodash_namespaceObject.escape)(termName); return external_wp_apiFetch_default()({ path: `/${namespace}/${restBase}`, method: 'POST', data: { name: escapedTermName } }).catch(error => { if (error.code !== 'term_exists') { return Promise.reject(error); } return Promise.resolve({ id: error.data.term_id, name: termName }); }).then(unescapeTerm); } function FlatTermSelector(_ref) { let { slug } = _ref; const [values, setValues] = (0,external_wp_element_namespaceObject.useState)([]); const [search, setSearch] = (0,external_wp_element_namespaceObject.useState)(''); const debouncedSearch = (0,external_wp_compose_namespaceObject.useDebounce)(setSearch, 500); const { terms, termIds, taxonomy, hasAssignAction, hasCreateAction, hasResolvedTerms } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getCurrentPost, getEditedPostAttribute } = select(store_store); const { getEntityRecords, getTaxonomy, hasFinishedResolution } = select(external_wp_coreData_namespaceObject.store); const post = getCurrentPost(); const _taxonomy = getTaxonomy(slug); const _termIds = _taxonomy ? getEditedPostAttribute(_taxonomy.rest_base) : flat_term_selector_EMPTY_ARRAY; const query = { ...flat_term_selector_DEFAULT_QUERY, include: _termIds.join(','), per_page: -1 }; return { hasCreateAction: _taxonomy ? (0,external_lodash_namespaceObject.get)(post, ['_links', 'wp:action-create-' + _taxonomy.rest_base], false) : false, hasAssignAction: _taxonomy ? (0,external_lodash_namespaceObject.get)(post, ['_links', 'wp:action-assign-' + _taxonomy.rest_base], false) : false, taxonomy: _taxonomy, termIds: _termIds, terms: _termIds.length ? getEntityRecords('taxonomy', slug, query) : flat_term_selector_EMPTY_ARRAY, hasResolvedTerms: hasFinishedResolution('getEntityRecords', ['taxonomy', slug, query]) }; }, [slug]); const { searchResults } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getEntityRecords } = select(external_wp_coreData_namespaceObject.store); return { searchResults: !!search ? getEntityRecords('taxonomy', slug, { ...flat_term_selector_DEFAULT_QUERY, search }) : flat_term_selector_EMPTY_ARRAY }; }, [search]); // Update terms state only after the selectors are resolved. // We're using this to avoid terms temporarily disappearing on slow networks // while core data makes REST API requests. (0,external_wp_element_namespaceObject.useEffect)(() => { if (hasResolvedTerms) { const newValues = (terms !== null && terms !== void 0 ? terms : []).map(term => unescapeString(term.name)); setValues(newValues); } }, [terms, hasResolvedTerms]); const suggestions = (0,external_wp_element_namespaceObject.useMemo)(() => { return (searchResults !== null && searchResults !== void 0 ? searchResults : []).map(term => unescapeString(term.name)); }, [searchResults]); const { editPost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); if (!hasAssignAction) { return null; } function onUpdateTerms(newTermIds) { editPost({ [taxonomy.rest_base]: newTermIds }); } function onChange(termNames) { var _taxonomy$rest_namesp; const availableTerms = [...(terms !== null && terms !== void 0 ? terms : []), ...(searchResults !== null && searchResults !== void 0 ? searchResults : [])]; const uniqueTerms = termNames.reduce((acc, name) => { if (!acc.some(n => n.toLowerCase() === name.toLowerCase())) { acc.push(name); } return acc; }, []); const newTermNames = uniqueTerms.filter(termName => !(0,external_lodash_namespaceObject.find)(availableTerms, term => isSameTermName(term.name, termName))); // Optimistically update term values. // The selector will always re-fetch terms later. setValues(uniqueTerms); if (newTermNames.length === 0) { return onUpdateTerms(termNamesToIds(uniqueTerms, availableTerms)); } if (!hasCreateAction) { return; } const namespace = (_taxonomy$rest_namesp = taxonomy === null || taxonomy === void 0 ? void 0 : taxonomy.rest_namespace) !== null && _taxonomy$rest_namesp !== void 0 ? _taxonomy$rest_namesp : 'wp/v2'; Promise.all(newTermNames.map(termName => findOrCreateTerm(termName, taxonomy.rest_base, namespace))).then(newTerms => { const newAvailableTerms = availableTerms.concat(newTerms); return onUpdateTerms(termNamesToIds(uniqueTerms, newAvailableTerms)); }); } function appendTerm(newTerm) { if (termIds.includes(newTerm.id)) { return; } const newTermIds = [...termIds, newTerm.id]; const termAddedMessage = (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: term name. */ (0,external_wp_i18n_namespaceObject._x)('%s added', 'term'), (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', 'singular_name'], slug === 'post_tag' ? (0,external_wp_i18n_namespaceObject.__)('Tag') : (0,external_wp_i18n_namespaceObject.__)('Term'))); (0,external_wp_a11y_namespaceObject.speak)(termAddedMessage, 'assertive'); onUpdateTerms(newTermIds); } const newTermLabel = (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', 'add_new_item'], slug === 'post_tag' ? (0,external_wp_i18n_namespaceObject.__)('Add new tag') : (0,external_wp_i18n_namespaceObject.__)('Add new Term')); const singularName = (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', 'singular_name'], slug === 'post_tag' ? (0,external_wp_i18n_namespaceObject.__)('Tag') : (0,external_wp_i18n_namespaceObject.__)('Term')); const termAddedLabel = (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: term name. */ (0,external_wp_i18n_namespaceObject._x)('%s added', 'term'), singularName); const termRemovedLabel = (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: term name. */ (0,external_wp_i18n_namespaceObject._x)('%s removed', 'term'), singularName); const removeTermLabel = (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: term name. */ (0,external_wp_i18n_namespaceObject._x)('Remove %s', 'term'), singularName); return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.FormTokenField, { value: values, suggestions: suggestions, onChange: onChange, onInputChange: debouncedSearch, maxSuggestions: MAX_TERMS_SUGGESTIONS, label: newTermLabel, messages: { added: termAddedLabel, removed: termRemovedLabel, remove: removeTermLabel } }), (0,external_wp_element_namespaceObject.createElement)(MostUsedTerms, { taxonomy: taxonomy, onSelect: appendTerm })); } /* harmony default export */ var flat_term_selector = ((0,external_wp_components_namespaceObject.withFilters)('editor.PostTaxonomyType')(FlatTermSelector)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-panel/maybe-tags-panel.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const TagsPanel = () => { const panelBodyTitle = [(0,external_wp_i18n_namespaceObject.__)('Suggestion:'), (0,external_wp_element_namespaceObject.createElement)("span", { className: "editor-post-publish-panel__link", key: "label" }, (0,external_wp_i18n_namespaceObject.__)('Add tags'))]; return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, { initialOpen: false, title: panelBodyTitle }, (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('Tags help users and search engines navigate your site and find your content. Add a few keywords to describe your post.')), (0,external_wp_element_namespaceObject.createElement)(flat_term_selector, { slug: 'post_tag' })); }; class MaybeTagsPanel extends external_wp_element_namespaceObject.Component { constructor(props) { super(props); this.state = { hadTagsWhenOpeningThePanel: props.hasTags }; } /* * We only want to show the tag panel if the post didn't have * any tags when the user hit the Publish button. * * We can't use the prop.hasTags because it'll change to true * if the user adds a new tag within the pre-publish panel. * This would force a re-render and a new prop.hasTags check, * hiding this panel and keeping the user from adding * more than one tag. */ render() { if (!this.state.hadTagsWhenOpeningThePanel) { return (0,external_wp_element_namespaceObject.createElement)(TagsPanel, null); } return null; } } /* harmony default export */ var maybe_tags_panel = ((0,external_wp_compose_namespaceObject.compose)((0,external_wp_data_namespaceObject.withSelect)(select => { const postType = select(store_store).getCurrentPostType(); const tagsTaxonomy = select(external_wp_coreData_namespaceObject.store).getTaxonomy('post_tag'); const tags = tagsTaxonomy && select(store_store).getEditedPostAttribute(tagsTaxonomy.rest_base); return { areTagsFetched: tagsTaxonomy !== undefined, isPostTypeSupported: tagsTaxonomy && (0,external_lodash_namespaceObject.some)(tagsTaxonomy.types, type => type === postType), hasTags: tags && tags.length }; }), (0,external_wp_compose_namespaceObject.ifCondition)(_ref => { let { areTagsFetched, isPostTypeSupported } = _ref; return isPostTypeSupported && areTagsFetched; }))(MaybeTagsPanel)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-panel/maybe-post-format-panel.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const getSuggestion = (supportedFormats, suggestedPostFormat) => { const formats = POST_FORMATS.filter(format => (0,external_lodash_namespaceObject.includes)(supportedFormats, format.id)); return (0,external_lodash_namespaceObject.find)(formats, format => format.id === suggestedPostFormat); }; const PostFormatSuggestion = _ref => { let { suggestedPostFormat, suggestionText, onUpdatePostFormat } = _ref; return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { variant: "link", onClick: () => onUpdatePostFormat(suggestedPostFormat) }, suggestionText); }; function PostFormatPanel() { const { currentPostFormat, suggestion } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getEditedPostAttribute, getSuggestedPostFormat } = select(store_store); const supportedFormats = (0,external_lodash_namespaceObject.get)(select(external_wp_coreData_namespaceObject.store).getThemeSupports(), ['formats'], []); return { currentPostFormat: getEditedPostAttribute('format'), suggestion: getSuggestion(supportedFormats, getSuggestedPostFormat()) }; }, []); const { editPost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const onUpdatePostFormat = format => editPost({ format }); const panelBodyTitle = [(0,external_wp_i18n_namespaceObject.__)('Suggestion:'), (0,external_wp_element_namespaceObject.createElement)("span", { className: "editor-post-publish-panel__link", key: "label" }, (0,external_wp_i18n_namespaceObject.__)('Use a post format'))]; if (!suggestion || suggestion.id === currentPostFormat) { return null; } return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, { initialOpen: false, title: panelBodyTitle }, (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('Your theme uses post formats to highlight different kinds of content, like images or videos. Apply a post format to see this special styling.')), (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_element_namespaceObject.createElement)(PostFormatSuggestion, { onUpdatePostFormat: onUpdatePostFormat, suggestedPostFormat: suggestion.id, suggestionText: (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: post format */ (0,external_wp_i18n_namespaceObject.__)('Apply the "%1$s" format.'), suggestion.caption) }))); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-taxonomies/hierarchical-term-selector.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * Module Constants */ const hierarchical_term_selector_DEFAULT_QUERY = { per_page: -1, orderby: 'name', order: 'asc', _fields: 'id,name,parent', context: 'view' }; const MIN_TERMS_COUNT_FOR_FILTER = 8; const hierarchical_term_selector_EMPTY_ARRAY = []; /** * Sort Terms by Selected. * * @param {Object[]} termsTree Array of terms in tree format. * @param {number[]} terms Selected terms. * * @return {Object[]} Sorted array of terms. */ function sortBySelected(termsTree, terms) { const treeHasSelection = termTree => { if (terms.indexOf(termTree.id) !== -1) { return true; } if (undefined === termTree.children) { return false; } return termTree.children.map(treeHasSelection).filter(child => child).length > 0; }; const termOrChildIsSelected = (termA, termB) => { const termASelected = treeHasSelection(termA); const termBSelected = treeHasSelection(termB); if (termASelected === termBSelected) { return 0; } if (termASelected && !termBSelected) { return -1; } if (!termASelected && termBSelected) { return 1; } return 0; }; const newTermTree = [...termsTree]; newTermTree.sort(termOrChildIsSelected); return newTermTree; } /** * Find term by parent id or name. * * @param {Object[]} terms Array of Terms. * @param {number|string} parent id. * @param {string} name Term name. * @return {Object} Term object. */ function findTerm(terms, parent, name) { return (0,external_lodash_namespaceObject.find)(terms, term => { return (!term.parent && !parent || parseInt(term.parent) === parseInt(parent)) && term.name.toLowerCase() === name.toLowerCase(); }); } /** * Get filter matcher function. * * @param {string} filterValue Filter value. * @return {(function(Object): (Object|boolean))} Matcher function. */ function getFilterMatcher(filterValue) { const matchTermsForFilter = originalTerm => { if ('' === filterValue) { return originalTerm; } // Shallow clone, because we'll be filtering the term's children and // don't want to modify the original term. const term = { ...originalTerm }; // Map and filter the children, recursive so we deal with grandchildren // and any deeper levels. if (term.children.length > 0) { term.children = term.children.map(matchTermsForFilter).filter(child => child); } // If the term's name contains the filterValue, or it has children // (i.e. some child matched at some point in the tree) then return it. if (-1 !== term.name.toLowerCase().indexOf(filterValue.toLowerCase()) || term.children.length > 0) { return term; } // Otherwise, return false. After mapping, the list of terms will need // to have false values filtered out. return false; }; return matchTermsForFilter; } /** * Hierarchical term selector. * * @param {Object} props Component props. * @param {string} props.slug Taxonomy slug. * @return {WPElement} Hierarchical term selector component. */ function HierarchicalTermSelector(_ref) { let { slug } = _ref; const [adding, setAdding] = (0,external_wp_element_namespaceObject.useState)(false); const [formName, setFormName] = (0,external_wp_element_namespaceObject.useState)(''); /** * @type {[number|'', Function]} */ const [formParent, setFormParent] = (0,external_wp_element_namespaceObject.useState)(''); const [showForm, setShowForm] = (0,external_wp_element_namespaceObject.useState)(false); const [filterValue, setFilterValue] = (0,external_wp_element_namespaceObject.useState)(''); const [filteredTermsTree, setFilteredTermsTree] = (0,external_wp_element_namespaceObject.useState)([]); const debouncedSpeak = (0,external_wp_compose_namespaceObject.useDebounce)(external_wp_a11y_namespaceObject.speak, 500); const { hasCreateAction, hasAssignAction, terms, loading, availableTerms, taxonomy } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getCurrentPost, getEditedPostAttribute } = select(store_store); const { getTaxonomy, getEntityRecords, isResolving } = select(external_wp_coreData_namespaceObject.store); const _taxonomy = getTaxonomy(slug); return { hasCreateAction: _taxonomy ? (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-create-' + _taxonomy.rest_base], false) : false, hasAssignAction: _taxonomy ? (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-assign-' + _taxonomy.rest_base], false) : false, terms: _taxonomy ? getEditedPostAttribute(_taxonomy.rest_base) : hierarchical_term_selector_EMPTY_ARRAY, loading: isResolving('getEntityRecords', ['taxonomy', slug, hierarchical_term_selector_DEFAULT_QUERY]), availableTerms: getEntityRecords('taxonomy', slug, hierarchical_term_selector_DEFAULT_QUERY) || hierarchical_term_selector_EMPTY_ARRAY, taxonomy: _taxonomy }; }, [slug]); const { editPost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const { saveEntityRecord } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store); const availableTermsTree = (0,external_wp_element_namespaceObject.useMemo)(() => sortBySelected(buildTermsTree(availableTerms), terms), // Remove `terms` from the dependency list to avoid reordering every time // checking or unchecking a term. [availableTerms]); if (!hasAssignAction) { return null; } /** * Append new term. * * @param {Object} term Term object. * @return {Promise} A promise that resolves to save term object. */ const addTerm = term => { return saveEntityRecord('taxonomy', slug, term); }; /** * Update terms for post. * * @param {number[]} termIds Term ids. */ const onUpdateTerms = termIds => { editPost({ [taxonomy.rest_base]: termIds }); }; /** * Handler for checking term. * * @param {number} termId */ const onChange = termId => { const hasTerm = terms.includes(termId); const newTerms = hasTerm ? (0,external_lodash_namespaceObject.without)(terms, termId) : [...terms, termId]; onUpdateTerms(newTerms); }; const onChangeFormName = value => { setFormName(value); }; /** * Handler for changing form parent. * * @param {number|''} parentId Parent post id. */ const onChangeFormParent = parentId => { setFormParent(parentId); }; const onToggleForm = () => { setShowForm(!showForm); }; const onAddTerm = async event => { event.preventDefault(); if (formName === '' || adding) { return; } // Check if the term we are adding already exists. const existingTerm = findTerm(availableTerms, formParent, formName); if (existingTerm) { // If the term we are adding exists but is not selected select it. if (!(0,external_lodash_namespaceObject.some)(terms, term => term === existingTerm.id)) { onUpdateTerms([...terms, existingTerm.id]); } setFormName(''); setFormParent(''); return; } setAdding(true); const newTerm = await addTerm({ name: formName, parent: formParent ? formParent : undefined }); const termAddedMessage = (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: taxonomy name */ (0,external_wp_i18n_namespaceObject._x)('%s added', 'term'), (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', 'singular_name'], slug === 'category' ? (0,external_wp_i18n_namespaceObject.__)('Category') : (0,external_wp_i18n_namespaceObject.__)('Term'))); (0,external_wp_a11y_namespaceObject.speak)(termAddedMessage, 'assertive'); setAdding(false); setFormName(''); setFormParent(''); onUpdateTerms([...terms, newTerm.id]); }; const setFilter = value => { const newFilteredTermsTree = availableTermsTree.map(getFilterMatcher(value)).filter(term => term); const getResultCount = termsTree => { let count = 0; for (let i = 0; i < termsTree.length; i++) { count++; if (undefined !== termsTree[i].children) { count += getResultCount(termsTree[i].children); } } return count; }; setFilterValue(value); setFilteredTermsTree(newFilteredTermsTree); const resultCount = getResultCount(newFilteredTermsTree); const resultsFoundMessage = (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %d: number of results */ (0,external_wp_i18n_namespaceObject._n)('%d result found.', '%d results found.', resultCount), resultCount); debouncedSpeak(resultsFoundMessage, 'assertive'); }; const renderTerms = renderedTerms => { return renderedTerms.map(term => { return (0,external_wp_element_namespaceObject.createElement)("div", { key: term.id, className: "editor-post-taxonomies__hierarchical-terms-choice" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, { checked: terms.indexOf(term.id) !== -1, onChange: () => { const termId = parseInt(term.id, 10); onChange(termId); }, label: (0,external_lodash_namespaceObject.unescape)(term.name) }), !!term.children.length && (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-taxonomies__hierarchical-terms-subchoices" }, renderTerms(term.children))); }); }; const labelWithFallback = (labelProperty, fallbackIsCategory, fallbackIsNotCategory) => (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', labelProperty], slug === 'category' ? fallbackIsCategory : fallbackIsNotCategory); const newTermButtonLabel = labelWithFallback('add_new_item', (0,external_wp_i18n_namespaceObject.__)('Add new category'), (0,external_wp_i18n_namespaceObject.__)('Add new term')); const newTermLabel = labelWithFallback('new_item_name', (0,external_wp_i18n_namespaceObject.__)('Add new category'), (0,external_wp_i18n_namespaceObject.__)('Add new term')); const parentSelectLabel = labelWithFallback('parent_item', (0,external_wp_i18n_namespaceObject.__)('Parent Category'), (0,external_wp_i18n_namespaceObject.__)('Parent Term')); const noParentOption = `— ${parentSelectLabel} —`; const newTermSubmitLabel = newTermButtonLabel; const filterLabel = (0,external_lodash_namespaceObject.get)(taxonomy, ['labels', 'search_items'], (0,external_wp_i18n_namespaceObject.__)('Search Terms')); const groupLabel = (0,external_lodash_namespaceObject.get)(taxonomy, ['name'], (0,external_wp_i18n_namespaceObject.__)('Terms')); const showFilter = availableTerms.length >= MIN_TERMS_COUNT_FOR_FILTER; return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, showFilter && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, { className: "editor-post-taxonomies__hierarchical-terms-filter", label: filterLabel, value: filterValue, onChange: setFilter }), (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-taxonomies__hierarchical-terms-list", tabIndex: "0", role: "group", "aria-label": groupLabel }, renderTerms('' !== filterValue ? filteredTermsTree : availableTermsTree)), !loading && hasCreateAction && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { onClick: onToggleForm, className: "editor-post-taxonomies__hierarchical-terms-add", "aria-expanded": showForm, variant: "link" }, newTermButtonLabel), showForm && (0,external_wp_element_namespaceObject.createElement)("form", { onSubmit: onAddTerm }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, { className: "editor-post-taxonomies__hierarchical-terms-input", label: newTermLabel, value: formName, onChange: onChangeFormName, required: true }), !!availableTerms.length && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TreeSelect, { label: parentSelectLabel, noOptionLabel: noParentOption, onChange: onChangeFormParent, selectedId: formParent, tree: availableTermsTree }), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { variant: "secondary", type: "submit", className: "editor-post-taxonomies__hierarchical-terms-submit" }, newTermSubmitLabel))); } /* harmony default export */ var hierarchical_term_selector = ((0,external_wp_components_namespaceObject.withFilters)('editor.PostTaxonomyType')(HierarchicalTermSelector)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-panel/maybe-category-panel.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function MaybeCategoryPanel() { const hasNoCategory = (0,external_wp_data_namespaceObject.useSelect)(select => { var _select$getEntityReco; const postType = select(store_store).getCurrentPostType(); const categoriesTaxonomy = select(external_wp_coreData_namespaceObject.store).getTaxonomy('category'); const defaultCategoryId = (_select$getEntityReco = select(external_wp_coreData_namespaceObject.store).getEntityRecord('root', 'site')) === null || _select$getEntityReco === void 0 ? void 0 : _select$getEntityReco.default_category; const defaultCategory = select(external_wp_coreData_namespaceObject.store).getEntityRecord('taxonomy', 'category', defaultCategoryId); const postTypeSupportsCategories = categoriesTaxonomy && (0,external_lodash_namespaceObject.some)(categoriesTaxonomy.types, type => type === postType); const categories = categoriesTaxonomy && select(store_store).getEditedPostAttribute(categoriesTaxonomy.rest_base); // This boolean should return true if everything is loaded // ( categoriesTaxonomy, defaultCategory ) // and the post has not been assigned a category different than "uncategorized". return !!categoriesTaxonomy && !!defaultCategory && postTypeSupportsCategories && ((categories === null || categories === void 0 ? void 0 : categories.length) === 0 || (categories === null || categories === void 0 ? void 0 : categories.length) === 1 && defaultCategory.id === categories[0]); }, []); const [shouldShowPanel, setShouldShowPanel] = (0,external_wp_element_namespaceObject.useState)(false); (0,external_wp_element_namespaceObject.useEffect)(() => { // We use state to avoid hiding the panel if the user edits the categories // and adds one within the panel itself (while visible). if (hasNoCategory) { setShouldShowPanel(true); } }, [hasNoCategory]); if (!shouldShowPanel) { return null; } const panelBodyTitle = [(0,external_wp_i18n_namespaceObject.__)('Suggestion:'), (0,external_wp_element_namespaceObject.createElement)("span", { className: "editor-post-publish-panel__link", key: "label" }, (0,external_wp_i18n_namespaceObject.__)('Assign a category'))]; return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, { initialOpen: false, title: panelBodyTitle }, (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_i18n_namespaceObject.__)('Categories provide a helpful way to group related posts together and to quickly tell readers what a post is about.')), (0,external_wp_element_namespaceObject.createElement)(hierarchical_term_selector, { slug: "category" })); } /* harmony default export */ var maybe_category_panel = (MaybeCategoryPanel); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-panel/prepublish.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PostPublishPanelPrepublish(_ref) { let { children } = _ref; const { isBeingScheduled, isRequestingSiteIcon, hasPublishAction, siteIconUrl, siteTitle, siteHome } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getCurrentPost, isEditedPostBeingScheduled } = select(store_store); const { getEntityRecord, isResolving } = select(external_wp_coreData_namespaceObject.store); const siteData = getEntityRecord('root', '__unstableBase', undefined) || {}; return { hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false), isBeingScheduled: isEditedPostBeingScheduled(), isRequestingSiteIcon: isResolving('getEntityRecord', ['root', '__unstableBase', undefined]), siteIconUrl: siteData.site_icon_url, siteTitle: siteData.name, siteHome: siteData.home && (0,external_wp_url_namespaceObject.filterURLForDisplay)(siteData.home) }; }, []); let siteIcon = (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Icon, { className: "components-site-icon", size: "36px", icon: library_wordpress }); if (siteIconUrl) { siteIcon = (0,external_wp_element_namespaceObject.createElement)("img", { alt: (0,external_wp_i18n_namespaceObject.__)('Site Icon'), className: "components-site-icon", src: siteIconUrl }); } if (isRequestingSiteIcon) { siteIcon = null; } let prePublishTitle, prePublishBodyText; if (!hasPublishAction) { prePublishTitle = (0,external_wp_i18n_namespaceObject.__)('Are you ready to submit for review?'); prePublishBodyText = (0,external_wp_i18n_namespaceObject.__)('When you’re ready, submit your work for review, and an Editor will be able to approve it for you.'); } else if (isBeingScheduled) { prePublishTitle = (0,external_wp_i18n_namespaceObject.__)('Are you ready to schedule?'); prePublishBodyText = (0,external_wp_i18n_namespaceObject.__)('Your work will be published at the specified date and time.'); } else { prePublishTitle = (0,external_wp_i18n_namespaceObject.__)('Are you ready to publish?'); prePublishBodyText = (0,external_wp_i18n_namespaceObject.__)('Double-check your settings before publishing.'); } return (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-publish-panel__prepublish" }, (0,external_wp_element_namespaceObject.createElement)("div", null, (0,external_wp_element_namespaceObject.createElement)("strong", null, prePublishTitle)), (0,external_wp_element_namespaceObject.createElement)("p", null, prePublishBodyText), (0,external_wp_element_namespaceObject.createElement)("div", { className: "components-site-card" }, siteIcon, (0,external_wp_element_namespaceObject.createElement)("div", { className: "components-site-info" }, (0,external_wp_element_namespaceObject.createElement)("span", { className: "components-site-name" }, (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(siteTitle) || (0,external_wp_i18n_namespaceObject.__)('(Untitled)')), (0,external_wp_element_namespaceObject.createElement)("span", { className: "components-site-home" }, siteHome))), hasPublishAction && (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, { initialOpen: false, title: [(0,external_wp_i18n_namespaceObject.__)('Visibility:'), (0,external_wp_element_namespaceObject.createElement)("span", { className: "editor-post-publish-panel__link", key: "label" }, (0,external_wp_element_namespaceObject.createElement)(PostVisibilityLabel, null))] }, (0,external_wp_element_namespaceObject.createElement)(PostVisibility, null)), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, { initialOpen: false, title: [(0,external_wp_i18n_namespaceObject.__)('Publish:'), (0,external_wp_element_namespaceObject.createElement)("span", { className: "editor-post-publish-panel__link", key: "label" }, (0,external_wp_element_namespaceObject.createElement)(PostScheduleLabel, null))] }, (0,external_wp_element_namespaceObject.createElement)(PostSchedule, null))), (0,external_wp_element_namespaceObject.createElement)(PostFormatPanel, null), (0,external_wp_element_namespaceObject.createElement)(maybe_tags_panel, null), (0,external_wp_element_namespaceObject.createElement)(maybe_category_panel, null), children); } /* harmony default export */ var prepublish = (PostPublishPanelPrepublish); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-panel/postpublish.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const POSTNAME = '%postname%'; /** * Returns URL for a future post. * * @param {Object} post Post object. * * @return {string} PostPublish URL. */ const getFuturePostUrl = post => { const { slug } = post; if (post.permalink_template.includes(POSTNAME)) { return post.permalink_template.replace(POSTNAME, slug); } return post.permalink_template; }; function postpublish_CopyButton(_ref) { let { text, onCopy, children } = _ref; const ref = (0,external_wp_compose_namespaceObject.useCopyToClipboard)(text, onCopy); return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { variant: "secondary", ref: ref }, children); } class PostPublishPanelPostpublish extends external_wp_element_namespaceObject.Component { constructor() { super(...arguments); this.state = { showCopyConfirmation: false }; this.onCopy = this.onCopy.bind(this); this.onSelectInput = this.onSelectInput.bind(this); this.postLink = (0,external_wp_element_namespaceObject.createRef)(); } componentDidMount() { if (this.props.focusOnMount) { this.postLink.current.focus(); } } componentWillUnmount() { clearTimeout(this.dismissCopyConfirmation); } onCopy() { this.setState({ showCopyConfirmation: true }); clearTimeout(this.dismissCopyConfirmation); this.dismissCopyConfirmation = setTimeout(() => { this.setState({ showCopyConfirmation: false }); }, 4000); } onSelectInput(event) { event.target.select(); } render() { const { children, isScheduled, post, postType } = this.props; const postLabel = (0,external_lodash_namespaceObject.get)(postType, ['labels', 'singular_name']); const viewPostLabel = (0,external_lodash_namespaceObject.get)(postType, ['labels', 'view_item']); const addNewPostLabel = (0,external_lodash_namespaceObject.get)(postType, ['labels', 'add_new_item']); const link = post.status === 'future' ? getFuturePostUrl(post) : post.link; const addLink = (0,external_wp_url_namespaceObject.addQueryArgs)('post-new.php', { post_type: post.type }); const postPublishNonLinkHeader = isScheduled ? (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_i18n_namespaceObject.__)('is now scheduled. It will go live on'), ' ', (0,external_wp_element_namespaceObject.createElement)(PostScheduleLabel, null), ".") : (0,external_wp_i18n_namespaceObject.__)('is now live.'); return (0,external_wp_element_namespaceObject.createElement)("div", { className: "post-publish-panel__postpublish" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, { className: "post-publish-panel__postpublish-header" }, (0,external_wp_element_namespaceObject.createElement)("a", { ref: this.postLink, href: link }, (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(post.title) || (0,external_wp_i18n_namespaceObject.__)('(no title)')), ' ', postPublishNonLinkHeader), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.PanelBody, null, (0,external_wp_element_namespaceObject.createElement)("p", { className: "post-publish-panel__postpublish-subheader" }, (0,external_wp_element_namespaceObject.createElement)("strong", null, (0,external_wp_i18n_namespaceObject.__)('What’s next?'))), (0,external_wp_element_namespaceObject.createElement)("div", { className: "post-publish-panel__postpublish-post-address-container" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, { className: "post-publish-panel__postpublish-post-address", readOnly: true, label: (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: post type singular name */ (0,external_wp_i18n_namespaceObject.__)('%s address'), postLabel), value: (0,external_wp_url_namespaceObject.safeDecodeURIComponent)(link), onFocus: this.onSelectInput }), (0,external_wp_element_namespaceObject.createElement)("div", { className: "post-publish-panel__postpublish-post-address__copy-button-wrap" }, (0,external_wp_element_namespaceObject.createElement)(postpublish_CopyButton, { text: link, onCopy: this.onCopy }, this.state.showCopyConfirmation ? (0,external_wp_i18n_namespaceObject.__)('Copied!') : (0,external_wp_i18n_namespaceObject.__)('Copy')))), (0,external_wp_element_namespaceObject.createElement)("div", { className: "post-publish-panel__postpublish-buttons" }, !isScheduled && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { variant: "primary", href: link }, viewPostLabel), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { variant: isScheduled ? 'primary' : 'secondary', href: addLink }, addNewPostLabel))), children); } } /* harmony default export */ var postpublish = ((0,external_wp_data_namespaceObject.withSelect)(select => { const { getEditedPostAttribute, getCurrentPost, isCurrentPostScheduled } = select(store_store); const { getPostType } = select(external_wp_coreData_namespaceObject.store); return { post: getCurrentPost(), postType: getPostType(getEditedPostAttribute('type')), isScheduled: isCurrentPostScheduled() }; })(PostPublishPanelPostpublish)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-publish-panel/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ class PostPublishPanel extends external_wp_element_namespaceObject.Component { constructor() { super(...arguments); this.onSubmit = this.onSubmit.bind(this); } componentDidUpdate(prevProps) { // Automatically collapse the publish sidebar when a post // is published and the user makes an edit. if (prevProps.isPublished && !this.props.isSaving && this.props.isDirty) { this.props.onClose(); } } onSubmit() { const { onClose, hasPublishAction, isPostTypeViewable } = this.props; if (!hasPublishAction || !isPostTypeViewable) { onClose(); } } render() { const { forceIsDirty, forceIsSaving, isBeingScheduled, isPublished, isPublishSidebarEnabled, isScheduled, isSaving, isSavingNonPostEntityChanges, onClose, onTogglePublishSidebar, PostPublishExtension, PrePublishExtension, ...additionalProps } = this.props; const { hasPublishAction, isDirty, isPostTypeViewable, ...propsForPanel } = additionalProps; const isPublishedOrScheduled = isPublished || isScheduled && isBeingScheduled; const isPrePublish = !isPublishedOrScheduled && !isSaving; const isPostPublish = isPublishedOrScheduled && !isSaving; return (0,external_wp_element_namespaceObject.createElement)("div", _extends({ className: "editor-post-publish-panel" }, propsForPanel), (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-publish-panel__header" }, isPostPublish ? (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { onClick: onClose, icon: close_small, label: (0,external_wp_i18n_namespaceObject.__)('Close panel') }) : (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-publish-panel__header-publish-button" }, (0,external_wp_element_namespaceObject.createElement)(post_publish_button, { focusOnMount: true, onSubmit: this.onSubmit, forceIsDirty: forceIsDirty, forceIsSaving: forceIsSaving })), (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-publish-panel__header-cancel-button" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { disabled: isSavingNonPostEntityChanges, onClick: onClose, variant: "secondary" }, (0,external_wp_i18n_namespaceObject.__)('Cancel'))))), (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-publish-panel__content" }, isPrePublish && (0,external_wp_element_namespaceObject.createElement)(prepublish, null, PrePublishExtension && (0,external_wp_element_namespaceObject.createElement)(PrePublishExtension, null)), isPostPublish && (0,external_wp_element_namespaceObject.createElement)(postpublish, { focusOnMount: true }, PostPublishExtension && (0,external_wp_element_namespaceObject.createElement)(PostPublishExtension, null)), isSaving && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Spinner, null)), (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-publish-panel__footer" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, { label: (0,external_wp_i18n_namespaceObject.__)('Always show pre-publish checks.'), checked: isPublishSidebarEnabled, onChange: onTogglePublishSidebar }))); } } /* harmony default export */ var post_publish_panel = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { const { getPostType } = select(external_wp_coreData_namespaceObject.store); const { getCurrentPost, getEditedPostAttribute, isCurrentPostPublished, isCurrentPostScheduled, isEditedPostBeingScheduled, isEditedPostDirty, isSavingPost, isSavingNonPostEntityChanges } = select(store_store); const { isPublishSidebarEnabled } = select(store_store); const postType = getPostType(getEditedPostAttribute('type')); return { hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false), isPostTypeViewable: (0,external_lodash_namespaceObject.get)(postType, ['viewable'], false), isBeingScheduled: isEditedPostBeingScheduled(), isDirty: isEditedPostDirty(), isPublished: isCurrentPostPublished(), isPublishSidebarEnabled: isPublishSidebarEnabled(), isSaving: isSavingPost(), isSavingNonPostEntityChanges: isSavingNonPostEntityChanges(), isScheduled: isCurrentPostScheduled() }; }), (0,external_wp_data_namespaceObject.withDispatch)((dispatch, _ref) => { let { isPublishSidebarEnabled } = _ref; const { disablePublishSidebar, enablePublishSidebar } = dispatch(store_store); return { onTogglePublishSidebar: () => { if (isPublishSidebarEnabled) { disablePublishSidebar(); } else { enablePublishSidebar(); } } }; }), external_wp_components_namespaceObject.withFocusReturn, external_wp_components_namespaceObject.withConstrainedTabbing])(PostPublishPanel)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/cloud-upload.js /** * WordPress dependencies */ const cloudUpload = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M17.3 10.1c0-2.5-2.1-4.4-4.8-4.4-2.2 0-4.1 1.4-4.6 3.3h-.2C5.7 9 4 10.7 4 12.8c0 2.1 1.7 3.8 3.7 3.8h9c1.8 0 3.2-1.5 3.2-3.3.1-1.6-1.1-2.9-2.6-3.2zm-.5 5.1h-4v-2.4L14 14l1-1-3-3-3 3 1 1 1.2-1.2v2.4H7.7c-1.2 0-2.2-1.1-2.2-2.3s1-2.4 2.2-2.4H9l.3-1.1c.4-1.3 1.7-2.2 3.2-2.2 1.8 0 3.3 1.3 3.3 2.9v1.3l1.3.2c.8.1 1.4.9 1.4 1.8 0 1-.8 1.8-1.7 1.8z" })); /* harmony default export */ var cloud_upload = (cloudUpload); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/icon/index.js /** * WordPress dependencies */ /** @typedef {{icon: JSX.Element, size?: number} & import('@wordpress/primitives').SVGProps} IconProps */ /** * Return an SVG icon. * * @param {IconProps} props icon is the SVG component to render * size is a number specifiying the icon size in pixels * Other props will be passed to wrapped SVG component * * @return {JSX.Element} Icon component */ function Icon(_ref) { let { icon, size = 24, ...props } = _ref; return (0,external_wp_element_namespaceObject.cloneElement)(icon, { width: size, height: size, ...props }); } /* harmony default export */ var icon = (Icon); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/check.js /** * WordPress dependencies */ const check_check = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z" })); /* harmony default export */ var library_check = (check_check); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/cloud.js /** * WordPress dependencies */ const cloud = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M17.3 10.1c0-2.5-2.1-4.4-4.8-4.4-2.2 0-4.1 1.4-4.6 3.3h-.2C5.7 9 4 10.7 4 12.8c0 2.1 1.7 3.8 3.7 3.8h9c1.8 0 3.2-1.5 3.2-3.3.1-1.6-1.1-2.9-2.6-3.2zm-.5 5.1h-9c-1.2 0-2.2-1.1-2.2-2.3s1-2.4 2.2-2.4h1.3l.3-1.1c.4-1.3 1.7-2.2 3.2-2.2 1.8 0 3.3 1.3 3.3 2.9v1.3l1.3.2c.8.1 1.4.9 1.4 1.8-.1 1-.9 1.8-1.8 1.8z" })); /* harmony default export */ var library_cloud = (cloud); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-switch-to-draft-button/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostSwitchToDraftButton(_ref) { let { isSaving, isPublished, isScheduled, onClick } = _ref; const isMobileViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('small', '<'); const [showConfirmDialog, setShowConfirmDialog] = (0,external_wp_element_namespaceObject.useState)(false); if (!isPublished && !isScheduled) { return null; } let alertMessage; if (isPublished) { alertMessage = (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to unpublish this post?'); } else if (isScheduled) { alertMessage = (0,external_wp_i18n_namespaceObject.__)('Are you sure you want to unschedule this post?'); } const handleConfirm = () => { setShowConfirmDialog(false); onClick(); }; return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { className: "editor-post-switch-to-draft", onClick: () => { setShowConfirmDialog(true); }, disabled: isSaving, variant: "tertiary" }, isMobileViewport ? (0,external_wp_i18n_namespaceObject.__)('Draft') : (0,external_wp_i18n_namespaceObject.__)('Switch to draft')), (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.__experimentalConfirmDialog, { isOpen: showConfirmDialog, onConfirm: handleConfirm, onCancel: () => setShowConfirmDialog(false) }, alertMessage)); } /* harmony default export */ var post_switch_to_draft_button = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { const { isSavingPost, isCurrentPostPublished, isCurrentPostScheduled } = select(store_store); return { isSaving: isSavingPost(), isPublished: isCurrentPostPublished(), isScheduled: isCurrentPostScheduled() }; }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => { const { editPost, savePost } = dispatch(store_store); return { onClick: () => { editPost({ status: 'draft' }); savePost(); } }; })])(PostSwitchToDraftButton)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-saved-state/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * Component showing whether the post is saved or not and providing save * buttons. * * @param {Object} props Component props. * @param {?boolean} props.forceIsDirty Whether to force the post to be marked * as dirty. * @param {?boolean} props.forceIsSaving Whether to force the post to be marked * as being saved. * @param {?boolean} props.showIconLabels Whether interface buttons show labels instead of icons * @return {import('@wordpress/element').WPComponent} The component. */ function PostSavedState(_ref) { let { forceIsDirty, forceIsSaving, showIconLabels = false } = _ref; const [forceSavedMessage, setForceSavedMessage] = (0,external_wp_element_namespaceObject.useState)(false); const isLargeViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('small'); const { isAutosaving, isDirty, isNew, isPending, isPublished, isSaveable, isSaving, isScheduled, hasPublishAction } = (0,external_wp_data_namespaceObject.useSelect)(select => { var _getCurrentPost$_link, _getCurrentPost, _getCurrentPost$_link2; const { isEditedPostNew, isCurrentPostPublished, isCurrentPostScheduled, isEditedPostDirty, isSavingPost, isEditedPostSaveable, getCurrentPost, isAutosavingPost, getEditedPostAttribute } = select(store_store); return { isAutosaving: isAutosavingPost(), isDirty: forceIsDirty || isEditedPostDirty(), isNew: isEditedPostNew(), isPending: 'pending' === getEditedPostAttribute('status'), isPublished: isCurrentPostPublished(), isSaving: forceIsSaving || isSavingPost(), isSaveable: isEditedPostSaveable(), isScheduled: isCurrentPostScheduled(), hasPublishAction: (_getCurrentPost$_link = (_getCurrentPost = getCurrentPost()) === null || _getCurrentPost === void 0 ? void 0 : (_getCurrentPost$_link2 = _getCurrentPost._links) === null || _getCurrentPost$_link2 === void 0 ? void 0 : _getCurrentPost$_link2['wp:action-publish']) !== null && _getCurrentPost$_link !== void 0 ? _getCurrentPost$_link : false }; }, [forceIsDirty, forceIsSaving]); const { savePost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const wasSaving = (0,external_wp_compose_namespaceObject.usePrevious)(isSaving); (0,external_wp_element_namespaceObject.useEffect)(() => { let timeoutId; if (wasSaving && !isSaving) { setForceSavedMessage(true); timeoutId = setTimeout(() => { setForceSavedMessage(false); }, 1000); } return () => clearTimeout(timeoutId); }, [isSaving]); // Once the post has been submitted for review this button // is not needed for the contributor role. if (!hasPublishAction && isPending) { return null; } if (isPublished || isScheduled) { return (0,external_wp_element_namespaceObject.createElement)(post_switch_to_draft_button, null); } /* translators: button label text should, if possible, be under 16 characters. */ const label = isPending ? (0,external_wp_i18n_namespaceObject.__)('Save as pending') : (0,external_wp_i18n_namespaceObject.__)('Save draft'); /* translators: button label text should, if possible, be under 16 characters. */ const shortLabel = (0,external_wp_i18n_namespaceObject.__)('Save'); const isSaved = forceSavedMessage || !isNew && !isDirty; const isSavedState = isSaving || isSaved; const isDisabled = isSaving || isSaved || !isSaveable; let text; if (isSaving) { text = isAutosaving ? (0,external_wp_i18n_namespaceObject.__)('Autosaving') : (0,external_wp_i18n_namespaceObject.__)('Saving'); } else if (isSaved) { text = (0,external_wp_i18n_namespaceObject.__)('Saved'); } else if (isLargeViewport) { text = label; } else if (showIconLabels) { text = shortLabel; } // Use common Button instance for all saved states so that focus is not // lost. return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { className: isSaveable || isSaving ? classnames_default()({ 'editor-post-save-draft': !isSavedState, 'editor-post-saved-state': isSavedState, 'is-saving': isSaving, 'is-autosaving': isAutosaving, 'is-saved': isSaved, [(0,external_wp_components_namespaceObject.__unstableGetAnimateClassName)({ type: 'loading' })]: isSaving }) : undefined, onClick: isDisabled ? undefined : () => savePost(), shortcut: external_wp_keycodes_namespaceObject.displayShortcut.primary('s'), variant: isLargeViewport ? 'tertiary' : undefined, icon: isLargeViewport ? undefined : cloud_upload, label: showIconLabels ? undefined : label, "aria-disabled": isDisabled }, isSavedState && (0,external_wp_element_namespaceObject.createElement)(icon, { icon: isSaved ? library_check : library_cloud }), text); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-schedule/check.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PostScheduleCheck(_ref) { let { hasPublishAction, children } = _ref; if (!hasPublishAction) { return null; } return children; } /* harmony default export */ var post_schedule_check = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { const { getCurrentPost, getCurrentPostType } = select(store_store); return { hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false), postType: getCurrentPostType() }; })])(PostScheduleCheck)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-slug/check.js /** * Internal dependencies */ function PostSlugCheck(_ref) { let { children } = _ref; return (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, { supportKeys: "slug" }, children); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-slug/index.js /** * WordPress dependencies */ /** * Internal dependencies */ class PostSlug extends external_wp_element_namespaceObject.Component { constructor(_ref) { let { postSlug, postTitle, postID } = _ref; super(...arguments); this.state = { editedSlug: (0,external_wp_url_namespaceObject.safeDecodeURIComponent)(postSlug) || (0,external_wp_url_namespaceObject.cleanForSlug)(postTitle) || postID }; this.setSlug = this.setSlug.bind(this); } setSlug(event) { const { postSlug, onUpdateSlug } = this.props; const { value } = event.target; const editedSlug = (0,external_wp_url_namespaceObject.cleanForSlug)(value); if (editedSlug === postSlug) { return; } onUpdateSlug(editedSlug); } render() { const { editedSlug } = this.state; return (0,external_wp_element_namespaceObject.createElement)(PostSlugCheck, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, { label: (0,external_wp_i18n_namespaceObject.__)('Slug'), autoComplete: "off", spellCheck: "false", value: editedSlug, onChange: slug => this.setState({ editedSlug: slug }), onBlur: this.setSlug, className: "editor-post-slug" })); } } /* harmony default export */ var post_slug = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { const { getCurrentPost, getEditedPostAttribute } = select(store_store); const { id } = getCurrentPost(); return { postSlug: getEditedPostAttribute('slug'), postTitle: getEditedPostAttribute('title'), postID: id }; }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => { const { editPost } = dispatch(store_store); return { onUpdateSlug(slug) { editPost({ slug }); } }; })])(PostSlug)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-sticky/check.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PostStickyCheck(_ref) { let { hasStickyAction, postType, children } = _ref; if (postType !== 'post' || !hasStickyAction) { return null; } return children; } /* harmony default export */ var post_sticky_check = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { const post = select(store_store).getCurrentPost(); return { hasStickyAction: (0,external_lodash_namespaceObject.get)(post, ['_links', 'wp:action-sticky'], false), postType: select(store_store).getCurrentPostType() }; })])(PostStickyCheck)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-sticky/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostSticky(_ref) { let { onUpdateSticky, postSticky = false } = _ref; return (0,external_wp_element_namespaceObject.createElement)(post_sticky_check, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.CheckboxControl, { label: (0,external_wp_i18n_namespaceObject.__)('Stick to the top of the blog'), checked: postSticky, onChange: () => onUpdateSticky(!postSticky) })); } /* harmony default export */ var post_sticky = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { return { postSticky: select(store_store).getEditedPostAttribute('sticky') }; }), (0,external_wp_data_namespaceObject.withDispatch)(dispatch => { return { onUpdateSticky(postSticky) { dispatch(store_store).editPost({ sticky: postSticky }); } }; })])(PostSticky)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-taxonomies/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ const identity = x => x; function PostTaxonomies(_ref) { let { postType, taxonomies, taxonomyWrapper = identity } = _ref; const availableTaxonomies = (0,external_lodash_namespaceObject.filter)(taxonomies, taxonomy => (0,external_lodash_namespaceObject.includes)(taxonomy.types, postType)); const visibleTaxonomies = (0,external_lodash_namespaceObject.filter)(availableTaxonomies, // In some circumstances .visibility can end up as undefined so optional chaining operator required. // https://github.com/WordPress/gutenberg/issues/40326 taxonomy => { var _taxonomy$visibility; return (_taxonomy$visibility = taxonomy.visibility) === null || _taxonomy$visibility === void 0 ? void 0 : _taxonomy$visibility.show_ui; }); return visibleTaxonomies.map(taxonomy => { const TaxonomyComponent = taxonomy.hierarchical ? hierarchical_term_selector : flat_term_selector; return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, { key: `taxonomy-${taxonomy.slug}` }, taxonomyWrapper((0,external_wp_element_namespaceObject.createElement)(TaxonomyComponent, { slug: taxonomy.slug }), taxonomy)); }); } /* harmony default export */ var post_taxonomies = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { return { postType: select(store_store).getCurrentPostType(), taxonomies: select(external_wp_coreData_namespaceObject.store).getTaxonomies({ per_page: -1 }) }; })])(PostTaxonomies)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-taxonomies/check.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PostTaxonomiesCheck(_ref) { let { postType, taxonomies, children } = _ref; const hasTaxonomies = (0,external_lodash_namespaceObject.some)(taxonomies, taxonomy => (0,external_lodash_namespaceObject.includes)(taxonomy.types, postType)); if (!hasTaxonomies) { return null; } return children; } /* harmony default export */ var post_taxonomies_check = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { return { postType: select(store_store).getCurrentPostType(), taxonomies: select(external_wp_coreData_namespaceObject.store).getTaxonomies({ per_page: -1 }) }; })])(PostTaxonomiesCheck)); // EXTERNAL MODULE: ./node_modules/react-autosize-textarea/lib/index.js var lib = __webpack_require__(773); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-text-editor/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PostTextEditor() { const postContent = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getEditedPostContent(), []); const { editPost, resetEditorBlocks } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const [value, setValue] = (0,external_wp_element_namespaceObject.useState)(postContent); const [isDirty, setIsDirty] = (0,external_wp_element_namespaceObject.useState)(false); const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(PostTextEditor); const valueRef = (0,external_wp_element_namespaceObject.useRef)(); if (!isDirty && value !== postContent) { setValue(postContent); } /** * Handles a textarea change event to notify the onChange prop callback and * reflect the new value in the component's own state. This marks the start * of the user's edits, if not already changed, preventing future props * changes to value from replacing the rendered value. This is expected to * be followed by a reset to dirty state via `stopEditing`. * * @see stopEditing * * @param {Event} event Change event. */ const onChange = event => { const newValue = event.target.value; editPost({ content: newValue }); setValue(newValue); setIsDirty(true); valueRef.current = newValue; }; /** * Function called when the user has completed their edits, responsible for * ensuring that changes, if made, are surfaced to the onPersist prop * callback and resetting dirty state. */ const stopEditing = () => { if (isDirty) { const blocks = (0,external_wp_blocks_namespaceObject.parse)(value); resetEditorBlocks(blocks); setIsDirty(false); } }; // Ensure changes aren't lost when component unmounts. (0,external_wp_element_namespaceObject.useEffect)(() => { return () => { if (valueRef.current) { const blocks = (0,external_wp_blocks_namespaceObject.parse)(valueRef.current); resetEditorBlocks(blocks); } }; }, []); return (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.VisuallyHidden, { as: "label", htmlFor: `post-content-${instanceId}` }, (0,external_wp_i18n_namespaceObject.__)('Type text or HTML')), (0,external_wp_element_namespaceObject.createElement)(lib/* default */.Z, { autoComplete: "off", dir: "auto", value: value, onChange: onChange, onBlur: stopEditing, className: "editor-post-text-editor", id: `post-content-${instanceId}`, placeholder: (0,external_wp_i18n_namespaceObject.__)('Start writing with text or HTML') })); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-title/index.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * Constants */ const REGEXP_NEWLINES = /[\r\n]+/g; function PostTitle(_, forwardedRef) { const ref = (0,external_wp_element_namespaceObject.useRef)(); const [isSelected, setIsSelected] = (0,external_wp_element_namespaceObject.useState)(false); const { editPost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const { insertDefaultBlock, clearSelectedBlock, insertBlocks } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_blockEditor_namespaceObject.store); const { isCleanNewPost, title, placeholder, isFocusMode, hasFixedToolbar } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getEditedPostAttribute, isCleanNewPost: _isCleanNewPost } = select(store_store); const { getSettings } = select(external_wp_blockEditor_namespaceObject.store); const { titlePlaceholder, focusMode, hasFixedToolbar: _hasFixedToolbar } = getSettings(); return { isCleanNewPost: _isCleanNewPost(), title: getEditedPostAttribute('title'), placeholder: titlePlaceholder, isFocusMode: focusMode, hasFixedToolbar: _hasFixedToolbar }; }, []); (0,external_wp_element_namespaceObject.useImperativeHandle)(forwardedRef, () => ({ focus: () => { var _ref$current; ref === null || ref === void 0 ? void 0 : (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.focus(); } })); (0,external_wp_element_namespaceObject.useEffect)(() => { if (!ref.current) { return; } const { ownerDocument } = ref.current; const { activeElement, body } = ownerDocument; // Only autofocus the title when the post is entirely empty. This should // only happen for a new post, which means we focus the title on new // post so the author can start typing right away, without needing to // click anything. if (isCleanNewPost && (!activeElement || body === activeElement)) { ref.current.focus(); } }, [isCleanNewPost]); function onEnterPress() { insertDefaultBlock(undefined, undefined, 0); } function onInsertBlockAfter(blocks) { insertBlocks(blocks, 0); } function onUpdate(newTitle) { editPost({ title: newTitle }); } const [selection, setSelection] = (0,external_wp_element_namespaceObject.useState)({}); function onSelect() { setIsSelected(true); clearSelectedBlock(); } function onUnselect() { setIsSelected(false); setSelection({}); } function onChange(value) { onUpdate(value.replace(REGEXP_NEWLINES, ' ')); } function onKeyDown(event) { if (event.keyCode === external_wp_keycodes_namespaceObject.ENTER) { event.preventDefault(); onEnterPress(); } } function onPaste(event) { const clipboardData = event.clipboardData; let plainText = ''; let html = ''; // IE11 only supports `Text` as an argument for `getData` and will // otherwise throw an invalid argument error, so we try the standard // arguments first, then fallback to `Text` if they fail. try { plainText = clipboardData.getData('text/plain'); html = clipboardData.getData('text/html'); } catch (error1) { try { html = clipboardData.getData('Text'); } catch (error2) { // Some browsers like UC Browser paste plain text by default and // don't support clipboardData at all, so allow default // behaviour. return; } } // Allows us to ask for this information when we get a report. window.console.log('Received HTML:\n\n', html); window.console.log('Received plain text:\n\n', plainText); const content = (0,external_wp_blocks_namespaceObject.pasteHandler)({ HTML: html, plainText }); event.preventDefault(); if (!content.length) { return; } if (typeof content !== 'string') { const [firstBlock] = content; if (!title && (firstBlock.name === 'core/heading' || firstBlock.name === 'core/paragraph')) { onUpdate(firstBlock.attributes.content); onInsertBlockAfter(content.slice(1)); } else { onInsertBlockAfter(content); } } else { const value = { ...(0,external_wp_richText_namespaceObject.create)({ html: title }), ...selection }; const newValue = (0,external_wp_richText_namespaceObject.insert)(value, (0,external_wp_richText_namespaceObject.create)({ html: content })); onUpdate((0,external_wp_richText_namespaceObject.toHTMLString)({ value: newValue })); setSelection({ start: newValue.start, end: newValue.end }); } } // The wp-block className is important for editor styles. // This same block is used in both the visual and the code editor. const className = classnames_default()('wp-block wp-block-post-title block-editor-block-list__block editor-post-title editor-post-title__input rich-text', { 'is-selected': isSelected, 'is-focus-mode': isFocusMode, 'has-fixed-toolbar': hasFixedToolbar }); const decodedPlaceholder = (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(placeholder) || (0,external_wp_i18n_namespaceObject.__)('Add title'); const { ref: richTextRef } = (0,external_wp_richText_namespaceObject.__unstableUseRichText)({ value: title, onChange, placeholder: decodedPlaceholder, selectionStart: selection.start, selectionEnd: selection.end, onSelectionChange(newStart, newEnd) { setSelection(sel => { const { start, end } = sel; if (start === newStart && end === newEnd) { return sel; } return { start: newStart, end: newEnd }; }); }, __unstableDisableFormats: true, preserveWhiteSpace: true }); /* eslint-disable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */ return (0,external_wp_element_namespaceObject.createElement)(post_type_support_check, { supportKeys: "title" }, (0,external_wp_element_namespaceObject.createElement)("h1", { ref: (0,external_wp_compose_namespaceObject.useMergeRefs)([richTextRef, ref]), contentEditable: true, className: className, "aria-label": decodedPlaceholder, role: "textbox", "aria-multiline": "true", onFocus: onSelect, onBlur: onUnselect, onKeyDown: onKeyDown, onKeyPress: onUnselect, onPaste: onPaste })); /* eslint-enable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */ } /* harmony default export */ var post_title = ((0,external_wp_element_namespaceObject.forwardRef)(PostTitle)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-trash/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostTrash() { const { isNew, isDeleting, postId } = (0,external_wp_data_namespaceObject.useSelect)(select => { const store = select(store_store); return { isNew: store.isEditedPostNew(), isDeleting: store.isDeletingPost(), postId: store.getCurrentPostId() }; }, []); const { trashPost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); if (isNew || !postId) { return null; } return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, { className: "editor-post-trash", isDestructive: true, variant: "secondary", isBusy: isDeleting, "aria-disabled": isDeleting, onClick: isDeleting ? undefined : () => trashPost() }, (0,external_wp_i18n_namespaceObject.__)('Move to trash')); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-trash/check.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostTrashCheck(_ref) { let { isNew, postId, canUserDelete, children } = _ref; if (isNew || !postId || !canUserDelete) { return null; } return children; } /* harmony default export */ var post_trash_check = ((0,external_wp_data_namespaceObject.withSelect)(select => { const { isEditedPostNew, getCurrentPostId, getCurrentPostType } = select(store_store); const { getPostType, canUser } = select(external_wp_coreData_namespaceObject.store); const postId = getCurrentPostId(); const postType = getPostType(getCurrentPostType()); const resource = (postType === null || postType === void 0 ? void 0 : postType.rest_base) || ''; // eslint-disable-line camelcase return { isNew: isEditedPostNew(), postId, canUserDelete: postId && resource ? canUser('delete', resource, postId) : false }; })(PostTrashCheck)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-url/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostURL(_ref) { let { onClose } = _ref; const { isEditable, postSlug, viewPostLabel, postLink, permalinkPrefix, permalinkSuffix } = (0,external_wp_data_namespaceObject.useSelect)(select => { const postTypeSlug = select(store_store).getCurrentPostType(); const postType = select(external_wp_coreData_namespaceObject.store).getPostType(postTypeSlug); const permalinkParts = select(store_store).getPermalinkParts(); return { isEditable: select(store_store).isPermalinkEditable(), postSlug: (0,external_wp_url_namespaceObject.safeDecodeURIComponent)(select(store_store).getEditedPostSlug()), viewPostLabel: postType === null || postType === void 0 ? void 0 : postType.labels.view_item, postLink: select(store_store).getCurrentPost().link, permalinkPrefix: permalinkParts === null || permalinkParts === void 0 ? void 0 : permalinkParts.prefix, permalinkSuffix: permalinkParts === null || permalinkParts === void 0 ? void 0 : permalinkParts.suffix }; }, []); const { editPost } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const [forceEmptyField, setForceEmptyField] = (0,external_wp_element_namespaceObject.useState)(false); return (0,external_wp_element_namespaceObject.createElement)("div", { className: "editor-post-url" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.__experimentalInspectorPopoverHeader, { title: (0,external_wp_i18n_namespaceObject.__)('URL'), onClose: onClose }), isEditable && (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.TextControl, { label: (0,external_wp_i18n_namespaceObject.__)('Permalink'), value: forceEmptyField ? '' : postSlug, autoComplete: "off", spellCheck: "false", help: (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_i18n_namespaceObject.__)('The last part of the URL.'), ' ', (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ExternalLink, { href: (0,external_wp_i18n_namespaceObject.__)('https://wordpress.org/support/article/settings-sidebar/#permalink') }, (0,external_wp_i18n_namespaceObject.__)('Learn more.'))), onChange: newValue => { editPost({ slug: newValue }); // When we delete the field the permalink gets // reverted to the original value. // The forceEmptyField logic allows the user to have // the field temporarily empty while typing. if (!newValue) { if (!forceEmptyField) { setForceEmptyField(true); } return; } if (forceEmptyField) { setForceEmptyField(false); } }, onBlur: event => { editPost({ slug: (0,external_wp_url_namespaceObject.cleanForSlug)(event.target.value) }); if (forceEmptyField) { setForceEmptyField(false); } } }), isEditable && (0,external_wp_element_namespaceObject.createElement)("h3", { className: "editor-post-url__link-label" }, viewPostLabel !== null && viewPostLabel !== void 0 ? viewPostLabel : (0,external_wp_i18n_namespaceObject.__)('View post')), (0,external_wp_element_namespaceObject.createElement)("p", null, (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.ExternalLink, { className: "editor-post-url__link", href: postLink, target: "_blank" }, isEditable ? (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("span", { className: "editor-post-url__link-prefix" }, permalinkPrefix), (0,external_wp_element_namespaceObject.createElement)("span", { className: "editor-post-url__link-slug" }, postSlug), (0,external_wp_element_namespaceObject.createElement)("span", { className: "editor-post-url__link-suffix" }, permalinkSuffix)) : postLink))); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-url/check.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostURLCheck(_ref) { let { children } = _ref; const isVisible = (0,external_wp_data_namespaceObject.useSelect)(select => { const postTypeSlug = select(store_store).getCurrentPostType(); const postType = select(external_wp_coreData_namespaceObject.store).getPostType(postTypeSlug); if (!(postType !== null && postType !== void 0 && postType.viewable)) { return false; } const post = select(store_store).getCurrentPost(); if (!post.link) { return false; } const permalinkParts = select(store_store).getPermalinkParts(); if (!permalinkParts) { return false; } return true; }, []); if (!isVisible) { return null; } return children; } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-url/label.js /** * WordPress dependencies */ /** * Internal dependencies */ function PostURLLabel() { return usePostURLLabel(); } function usePostURLLabel() { const postLink = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getPermalink(), []); return (0,external_wp_url_namespaceObject.filterURLForDisplay)((0,external_wp_url_namespaceObject.safeDecodeURIComponent)(postLink)); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/post-visibility/check.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function PostVisibilityCheck(_ref) { let { hasPublishAction, render } = _ref; const canEdit = hasPublishAction; return render({ canEdit }); } /* harmony default export */ var post_visibility_check = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)(select => { const { getCurrentPost, getCurrentPostType } = select(store_store); return { hasPublishAction: (0,external_lodash_namespaceObject.get)(getCurrentPost(), ['_links', 'wp:action-publish'], false), postType: getCurrentPostType() }; })])(PostVisibilityCheck)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/info.js /** * WordPress dependencies */ const info = (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_primitives_namespaceObject.Path, { d: "M12 3.2c-4.8 0-8.8 3.9-8.8 8.8 0 4.8 3.9 8.8 8.8 8.8 4.8 0 8.8-3.9 8.8-8.8 0-4.8-4-8.8-8.8-8.8zm0 16c-4 0-7.2-3.3-7.2-7.2C4.8 8 8 4.8 12 4.8s7.2 3.3 7.2 7.2c0 4-3.2 7.2-7.2 7.2zM11 17h2v-6h-2v6zm0-8h2V7h-2v2z" })); /* harmony default export */ var library_info = (info); ;// CONCATENATED MODULE: external ["wp","wordcount"] var external_wp_wordcount_namespaceObject = window["wp"]["wordcount"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/word-count/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function WordCount() { const content = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getEditedPostAttribute('content'), []); /* * translators: If your word count is based on single characters (e.g. East Asian characters), * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'. * Do not translate into your own language. */ const wordCountType = (0,external_wp_i18n_namespaceObject._x)('words', 'Word count type. Do not translate!'); return (0,external_wp_element_namespaceObject.createElement)("span", { className: "word-count" }, (0,external_wp_wordcount_namespaceObject.count)(content, wordCountType)); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/time-to-read/index.js /** * WordPress dependencies */ /** * Internal dependencies */ /** * Average reading rate - based on average taken from * https://irisreading.com/average-reading-speed-in-various-languages/ * (Characters/minute used for Chinese rather than words). * * @type {number} A rough estimate of the average reading rate across multiple languages. */ const AVERAGE_READING_RATE = 189; function TimeToRead() { const content = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getEditedPostAttribute('content'), []); /* * translators: If your word count is based on single characters (e.g. East Asian characters), * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'. * Do not translate into your own language. */ const wordCountType = (0,external_wp_i18n_namespaceObject._x)('words', 'Word count type. Do not translate!'); const minutesToRead = Math.round((0,external_wp_wordcount_namespaceObject.count)(content, wordCountType) / AVERAGE_READING_RATE); const minutesToReadString = minutesToRead === 0 ? (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.__)('< 1 minute'), { span: (0,external_wp_element_namespaceObject.createElement)("span", { className: "table-of-contents__number" }) }) : (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s is the number of minutes the post will take to read. */ (0,external_wp_i18n_namespaceObject._n)('%d minute', '%d minutes', minutesToRead), minutesToRead), { span: (0,external_wp_element_namespaceObject.createElement)("span", { className: "table-of-contents__number" }) }); return (0,external_wp_element_namespaceObject.createElement)("span", { className: "time-to-read" }, minutesToReadString); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/character-count/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function CharacterCount() { const content = (0,external_wp_data_namespaceObject.useSelect)(select => select(store_store).getEditedPostAttribute('content'), []); return (0,external_wp_wordcount_namespaceObject.count)(content, 'characters_including_spaces'); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/table-of-contents/panel.js /** * WordPress dependencies */ /** * Internal dependencies */ function TableOfContentsPanel(_ref) { let { hasOutlineItemsDisabled, onRequestClose } = _ref; const { headingCount, paragraphCount, numberOfBlocks } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getGlobalBlockCount } = select(external_wp_blockEditor_namespaceObject.store); return { headingCount: getGlobalBlockCount('core/heading'), paragraphCount: getGlobalBlockCount('core/paragraph'), numberOfBlocks: getGlobalBlockCount() }; }, []); return ( /* * Disable reason: The `list` ARIA role is redundant but * Safari+VoiceOver won't announce the list otherwise. */ /* eslint-disable jsx-a11y/no-redundant-roles */ (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("div", { className: "table-of-contents__wrapper", role: "note", "aria-label": (0,external_wp_i18n_namespaceObject.__)('Document Statistics'), tabIndex: "0" }, (0,external_wp_element_namespaceObject.createElement)("ul", { role: "list", className: "table-of-contents__counts" }, (0,external_wp_element_namespaceObject.createElement)("li", { className: "table-of-contents__count" }, (0,external_wp_i18n_namespaceObject.__)('Words'), (0,external_wp_element_namespaceObject.createElement)(WordCount, null)), (0,external_wp_element_namespaceObject.createElement)("li", { className: "table-of-contents__count" }, (0,external_wp_i18n_namespaceObject.__)('Characters'), (0,external_wp_element_namespaceObject.createElement)("span", { className: "table-of-contents__number" }, (0,external_wp_element_namespaceObject.createElement)(CharacterCount, null))), (0,external_wp_element_namespaceObject.createElement)("li", { className: "table-of-contents__count" }, (0,external_wp_i18n_namespaceObject.__)('Time to read'), (0,external_wp_element_namespaceObject.createElement)(TimeToRead, null)), (0,external_wp_element_namespaceObject.createElement)("li", { className: "table-of-contents__count" }, (0,external_wp_i18n_namespaceObject.__)('Headings'), (0,external_wp_element_namespaceObject.createElement)("span", { className: "table-of-contents__number" }, headingCount)), (0,external_wp_element_namespaceObject.createElement)("li", { className: "table-of-contents__count" }, (0,external_wp_i18n_namespaceObject.__)('Paragraphs'), (0,external_wp_element_namespaceObject.createElement)("span", { className: "table-of-contents__number" }, paragraphCount)), (0,external_wp_element_namespaceObject.createElement)("li", { className: "table-of-contents__count" }, (0,external_wp_i18n_namespaceObject.__)('Blocks'), (0,external_wp_element_namespaceObject.createElement)("span", { className: "table-of-contents__number" }, numberOfBlocks)))), headingCount > 0 && (0,external_wp_element_namespaceObject.createElement)(external_wp_element_namespaceObject.Fragment, null, (0,external_wp_element_namespaceObject.createElement)("hr", null), (0,external_wp_element_namespaceObject.createElement)("h2", { className: "table-of-contents__title" }, (0,external_wp_i18n_namespaceObject.__)('Document Outline')), (0,external_wp_element_namespaceObject.createElement)(document_outline, { onSelect: onRequestClose, hasOutlineItemsDisabled: hasOutlineItemsDisabled }))) /* eslint-enable jsx-a11y/no-redundant-roles */ ); } /* harmony default export */ var panel = (TableOfContentsPanel); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/table-of-contents/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function TableOfContents(_ref, ref) { let { hasOutlineItemsDisabled, repositionDropdown, ...props } = _ref; const hasBlocks = (0,external_wp_data_namespaceObject.useSelect)(select => !!select(external_wp_blockEditor_namespaceObject.store).getBlockCount(), []); return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Dropdown, { position: repositionDropdown ? 'middle right right' : 'bottom', className: "table-of-contents", contentClassName: "table-of-contents__popover", renderToggle: _ref2 => { let { isOpen, onToggle } = _ref2; return (0,external_wp_element_namespaceObject.createElement)(external_wp_components_namespaceObject.Button, _extends({}, props, { ref: ref, onClick: hasBlocks ? onToggle : undefined, icon: library_info, "aria-expanded": isOpen, "aria-haspopup": "true" /* translators: button label text should, if possible, be under 16 characters. */ , label: (0,external_wp_i18n_namespaceObject.__)('Details'), tooltipPosition: "bottom", "aria-disabled": !hasBlocks })); }, renderContent: _ref3 => { let { onClose } = _ref3; return (0,external_wp_element_namespaceObject.createElement)(panel, { onRequestClose: onClose, hasOutlineItemsDisabled: hasOutlineItemsDisabled }); } }); } /* harmony default export */ var table_of_contents = ((0,external_wp_element_namespaceObject.forwardRef)(TableOfContents)); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/unsaved-changes-warning/index.js /** * WordPress dependencies */ /** * Warns the user if there are unsaved changes before leaving the editor. * Compatible with Post Editor and Site Editor. * * @return {WPComponent} The component. */ function UnsavedChangesWarning() { const isDirty = (0,external_wp_data_namespaceObject.useSelect)(select => { return () => { const { __experimentalGetDirtyEntityRecords } = select(external_wp_coreData_namespaceObject.store); const dirtyEntityRecords = __experimentalGetDirtyEntityRecords(); return dirtyEntityRecords.length > 0; }; }, []); /** * Warns the user if there are unsaved changes before leaving the editor. * * @param {Event} event `beforeunload` event. * * @return {?string} Warning prompt message, if unsaved changes exist. */ const warnIfUnsavedChanges = event => { // We need to call the selector directly in the listener to avoid race // conditions with `BrowserURL` where `componentDidUpdate` gets the // new value of `isEditedPostDirty` before this component does, // causing this component to incorrectly think a trashed post is still dirty. if (isDirty()) { event.returnValue = (0,external_wp_i18n_namespaceObject.__)('You have unsaved changes. If you proceed, they will be lost.'); return event.returnValue; } }; (0,external_wp_element_namespaceObject.useEffect)(() => { window.addEventListener('beforeunload', warnIfUnsavedChanges); return () => { window.removeEventListener('beforeunload', warnIfUnsavedChanges); }; }, []); return null; } ;// CONCATENATED MODULE: external ["wp","reusableBlocks"] var external_wp_reusableBlocks_namespaceObject = window["wp"]["reusableBlocks"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/provider/with-registry-provider.js /** * WordPress dependencies */ /** * Internal dependencies */ const withRegistryProvider = (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => (0,external_wp_data_namespaceObject.withRegistry)(props => { const { useSubRegistry = true, registry, ...additionalProps } = props; if (!useSubRegistry) { return (0,external_wp_element_namespaceObject.createElement)(WrappedComponent, additionalProps); } const [subRegistry, setSubRegistry] = (0,external_wp_element_namespaceObject.useState)(null); (0,external_wp_element_namespaceObject.useEffect)(() => { const newRegistry = (0,external_wp_data_namespaceObject.createRegistry)({ 'core/block-editor': external_wp_blockEditor_namespaceObject.storeConfig }, registry); newRegistry.registerStore('core/editor', storeConfig); setSubRegistry(newRegistry); }, [registry]); if (!subRegistry) { return null; } return (0,external_wp_element_namespaceObject.createElement)(external_wp_data_namespaceObject.RegistryProvider, { value: subRegistry }, (0,external_wp_element_namespaceObject.createElement)(WrappedComponent, additionalProps)); }), 'withRegistryProvider'); /* harmony default export */ var with_registry_provider = (withRegistryProvider); ;// CONCATENATED MODULE: external ["wp","mediaUtils"] var external_wp_mediaUtils_namespaceObject = window["wp"]["mediaUtils"]; ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/utils/media-upload/index.js /** * WordPress dependencies */ /** * Internal dependencies */ const media_upload_noop = () => {}; /** * Upload a media file when the file upload button is activated. * Wrapper around mediaUpload() that injects the current post ID. * * @param {Object} $0 Parameters object passed to the function. * @param {?Object} $0.additionalData Additional data to include in the request. * @param {string} $0.allowedTypes Array with the types of media that can be uploaded, if unset all types are allowed. * @param {Array} $0.filesList List of files. * @param {?number} $0.maxUploadFileSize Maximum upload size in bytes allowed for the site. * @param {Function} $0.onError Function called when an error happens. * @param {Function} $0.onFileChange Function called each time a file or a temporary representation of the file is available. */ function mediaUpload(_ref) { let { additionalData = {}, allowedTypes, filesList, maxUploadFileSize, onError = media_upload_noop, onFileChange } = _ref; const { getCurrentPostId, getEditorSettings } = (0,external_wp_data_namespaceObject.select)(store_store); const wpAllowedMimeTypes = getEditorSettings().allowedMimeTypes; maxUploadFileSize = maxUploadFileSize || getEditorSettings().maxUploadFileSize; (0,external_wp_mediaUtils_namespaceObject.uploadMedia)({ allowedTypes, filesList, onFileChange, additionalData: { post: getCurrentPostId(), ...additionalData }, maxUploadFileSize, onError: _ref2 => { let { message } = _ref2; return onError(message); }, wpAllowedMimeTypes }); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/provider/use-block-editor-settings.js /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ /** * React hook used to compute the block editor settings to use for the post editor. * * @param {Object} settings EditorProvider settings prop. * @param {boolean} hasTemplate Whether template mode is enabled. * * @return {Object} Block Editor Settings. */ function useBlockEditorSettings(settings, hasTemplate) { var _settings$__experimen, _settings$__experimen2; const { reusableBlocks, hasUploadPermissions, canUseUnfilteredHTML, userCanCreatePages, pageOnFront, postType } = (0,external_wp_data_namespaceObject.useSelect)(select => { var _canUser; const { canUserUseUnfilteredHTML, getCurrentPostType } = select(store_store); const isWeb = external_wp_element_namespaceObject.Platform.OS === 'web'; const { canUser, getEntityRecord } = select(external_wp_coreData_namespaceObject.store); const siteSettings = canUser('read', 'settings') ? getEntityRecord('root', 'site') : undefined; return { canUseUnfilteredHTML: canUserUseUnfilteredHTML(), reusableBlocks: isWeb ? select(external_wp_coreData_namespaceObject.store).getEntityRecords('postType', 'wp_block', { per_page: -1 }) : [], // Reusable blocks are fetched in the native version of this hook. hasUploadPermissions: (_canUser = canUser('create', 'media')) !== null && _canUser !== void 0 ? _canUser : true, userCanCreatePages: canUser('create', 'pages'), pageOnFront: siteSettings === null || siteSettings === void 0 ? void 0 : siteSettings.page_on_front, postType: getCurrentPostType() }; }, []); const settingsBlockPatterns = (_settings$__experimen = settings.__experimentalAdditionalBlockPatterns) !== null && _settings$__experimen !== void 0 ? _settings$__experimen : // WP 6.0 settings.__experimentalBlockPatterns; // WP 5.9 const settingsBlockPatternCategories = (_settings$__experimen2 = settings.__experimentalAdditionalBlockPatternCategories) !== null && _settings$__experimen2 !== void 0 ? _settings$__experimen2 : // WP 6.0 settings.__experimentalBlockPatternCategories; // WP 5.9 const { restBlockPatterns, restBlockPatternCategories } = (0,external_wp_data_namespaceObject.useSelect)(select => ({ restBlockPatterns: select(external_wp_coreData_namespaceObject.store).getBlockPatterns(), restBlockPatternCategories: select(external_wp_coreData_namespaceObject.store).getBlockPatternCategories() }), []); const blockPatterns = (0,external_wp_element_namespaceObject.useMemo)(() => [...(settingsBlockPatterns || []), ...(restBlockPatterns || [])].filter((x, index, arr) => index === arr.findIndex(y => x.name === y.name)).filter(_ref => { let { postTypes } = _ref; return !postTypes || Array.isArray(postTypes) && postTypes.includes(postType); }), [settingsBlockPatterns, restBlockPatterns, postType]); const blockPatternCategories = (0,external_wp_element_namespaceObject.useMemo)(() => [...(settingsBlockPatternCategories || []), ...(restBlockPatternCategories || [])].filter((x, index, arr) => index === arr.findIndex(y => x.name === y.name)), [settingsBlockPatternCategories, restBlockPatternCategories]); const { undo } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const { saveEntityRecord } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_coreData_namespaceObject.store); /** * Creates a Post entity. * This is utilised by the Link UI to allow for on-the-fly creation of Posts/Pages. * * @param {Object} options parameters for the post being created. These mirror those used on 3rd param of saveEntityRecord. * @return {Object} the post type object that was created. */ const createPageEntity = options => { if (!userCanCreatePages) { return Promise.reject({ message: (0,external_wp_i18n_namespaceObject.__)('You do not have permission to create Pages.') }); } return saveEntityRecord('postType', 'page', options); }; return (0,external_wp_element_namespaceObject.useMemo)(() => ({ ...(0,external_lodash_namespaceObject.pick)(settings, ['__experimentalBlockDirectory', '__experimentalDiscussionSettings', '__experimentalFeatures', '__experimentalPreferredStyleVariations', '__experimentalSetIsInserterOpened', '__unstableGalleryWithImageBlocks', 'alignWide', 'allowedBlockTypes', 'bodyPlaceholder', 'canLockBlocks', 'codeEditingEnabled', 'colors', 'disableCustomColors', 'disableCustomFontSizes', 'disableCustomSpacingSizes', 'disableCustomGradients', 'disableLayoutStyles', 'enableCustomLineHeight', 'enableCustomSpacing', 'enableCustomUnits', 'focusMode', 'fontSizes', 'gradients', 'generateAnchors', 'hasFixedToolbar', 'hasReducedUI', 'hasInlineToolbar', 'imageDefaultSize', 'imageDimensions', 'imageEditing', 'imageSizes', 'isRTL', 'keepCaretInsideBlock', 'maxWidth', 'onUpdateDefaultBlockStyles', 'styles', 'template', 'templateLock', 'titlePlaceholder', 'supportsLayout', 'widgetTypesToHideFromLegacyWidgetBlock', '__unstableResolvedAssets']), mediaUpload: hasUploadPermissions ? mediaUpload : undefined, __experimentalReusableBlocks: reusableBlocks, __experimentalBlockPatterns: blockPatterns, __experimentalBlockPatternCategories: blockPatternCategories, __experimentalFetchLinkSuggestions: (search, searchOptions) => (0,external_wp_coreData_namespaceObject.__experimentalFetchLinkSuggestions)(search, searchOptions, settings), __experimentalFetchRichUrlData: external_wp_coreData_namespaceObject.__experimentalFetchUrlData, __experimentalCanUserUseUnfilteredHTML: canUseUnfilteredHTML, __experimentalUndo: undo, outlineMode: hasTemplate, __experimentalCreatePageEntity: createPageEntity, __experimentalUserCanCreatePages: userCanCreatePages, pageOnFront, __experimentalPreferPatternsOnRoot: hasTemplate }), [settings, hasUploadPermissions, reusableBlocks, blockPatterns, blockPatternCategories, canUseUnfilteredHTML, undo, hasTemplate, userCanCreatePages, pageOnFront]); } /* harmony default export */ var use_block_editor_settings = (useBlockEditorSettings); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/provider/index.js /** * WordPress dependencies */ /** * Internal dependencies */ function EditorProvider(_ref) { let { __unstableTemplate, post, settings, recovery, initialEdits, children } = _ref; const defaultBlockContext = (0,external_wp_element_namespaceObject.useMemo)(() => { if (post.type === 'wp_template') { return {}; } return { postId: post.id, postType: post.type }; }, [post.id, post.type]); const { selection, isReady } = (0,external_wp_data_namespaceObject.useSelect)(select => { const { getEditorSelection, __unstableIsEditorReady } = select(store_store); return { isReady: __unstableIsEditorReady(), selection: getEditorSelection() }; }, []); const { id, type } = __unstableTemplate !== null && __unstableTemplate !== void 0 ? __unstableTemplate : post; const [blocks, onInput, onChange] = (0,external_wp_coreData_namespaceObject.useEntityBlockEditor)('postType', type, { id }); const editorSettings = use_block_editor_settings(settings, !!__unstableTemplate); const { updatePostLock, setupEditor, updateEditorSettings, __experimentalTearDownEditor } = (0,external_wp_data_namespaceObject.useDispatch)(store_store); const { createWarningNotice } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store); // Initialize and tear down the editor. // Ideally this should be synced on each change and not just something you do once. (0,external_wp_element_namespaceObject.useLayoutEffect)(() => { // Assume that we don't need to initialize in the case of an error recovery. if (recovery) { return; } updatePostLock(settings.postLock); setupEditor(post, initialEdits, settings.template); if (settings.autosave) { createWarningNotice((0,external_wp_i18n_namespaceObject.__)('There is an autosave of this post that is more recent than the version below.'), { id: 'autosave-exists', actions: [{ label: (0,external_wp_i18n_namespaceObject.__)('View the autosave'), url: settings.autosave.editLink }] }); } return () => { __experimentalTearDownEditor(); }; }, []); // Synchronize the editor settings as they change. (0,external_wp_element_namespaceObject.useEffect)(() => { updateEditorSettings(settings); }, [settings]); if (!isReady) { return null; } return (0,external_wp_element_namespaceObject.createElement)(external_wp_coreData_namespaceObject.EntityProvider, { kind: "root", type: "site" }, (0,external_wp_element_namespaceObject.createElement)(external_wp_coreData_namespaceObject.EntityProvider, { kind: "postType", type: post.type, id: post.id }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockContextProvider, { value: defaultBlockContext }, (0,external_wp_element_namespaceObject.createElement)(external_wp_blockEditor_namespaceObject.BlockEditorProvider, { value: blocks, onChange: onChange, onInput: onInput, selection: selection, settings: editorSettings, useSubRegistry: false }, children, (0,external_wp_element_namespaceObject.createElement)(external_wp_reusableBlocks_namespaceObject.ReusableBlocksMenuItems, null))))); } /* harmony default export */ var provider = (with_registry_provider(EditorProvider)); ;// CONCATENATED MODULE: external ["wp","serverSideRender"] var external_wp_serverSideRender_namespaceObject = window["wp"]["serverSideRender"]; var external_wp_serverSideRender_default = /*#__PURE__*/__webpack_require__.n(external_wp_serverSideRender_namespaceObject); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/deprecated.js // Block Creation Components. /** * WordPress dependencies */ function deprecateComponent(name, Wrapped) { let staticsToHoist = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; const Component = (0,external_wp_element_namespaceObject.forwardRef)((props, ref) => { external_wp_deprecated_default()('wp.editor.' + name, { since: '5.3', alternative: 'wp.blockEditor.' + name, version: '6.2' }); return (0,external_wp_element_namespaceObject.createElement)(Wrapped, _extends({ ref: ref }, props)); }); staticsToHoist.forEach(staticName => { Component[staticName] = deprecateComponent(name + '.' + staticName, Wrapped[staticName]); }); return Component; } function deprecateFunction(name, func) { return function () { external_wp_deprecated_default()('wp.editor.' + name, { since: '5.3', alternative: 'wp.blockEditor.' + name, version: '6.2' }); return func(...arguments); }; } const RichText = deprecateComponent('RichText', external_wp_blockEditor_namespaceObject.RichText, ['Content']); RichText.isEmpty = deprecateFunction('RichText.isEmpty', external_wp_blockEditor_namespaceObject.RichText.isEmpty); const Autocomplete = deprecateComponent('Autocomplete', external_wp_blockEditor_namespaceObject.Autocomplete); const AlignmentToolbar = deprecateComponent('AlignmentToolbar', external_wp_blockEditor_namespaceObject.AlignmentToolbar); const BlockAlignmentToolbar = deprecateComponent('BlockAlignmentToolbar', external_wp_blockEditor_namespaceObject.BlockAlignmentToolbar); const BlockControls = deprecateComponent('BlockControls', external_wp_blockEditor_namespaceObject.BlockControls, ['Slot']); const BlockEdit = deprecateComponent('BlockEdit', external_wp_blockEditor_namespaceObject.BlockEdit); const BlockEditorKeyboardShortcuts = deprecateComponent('BlockEditorKeyboardShortcuts', external_wp_blockEditor_namespaceObject.BlockEditorKeyboardShortcuts); const BlockFormatControls = deprecateComponent('BlockFormatControls', external_wp_blockEditor_namespaceObject.BlockFormatControls, ['Slot']); const BlockIcon = deprecateComponent('BlockIcon', external_wp_blockEditor_namespaceObject.BlockIcon); const BlockInspector = deprecateComponent('BlockInspector', external_wp_blockEditor_namespaceObject.BlockInspector); const BlockList = deprecateComponent('BlockList', external_wp_blockEditor_namespaceObject.BlockList); const BlockMover = deprecateComponent('BlockMover', external_wp_blockEditor_namespaceObject.BlockMover); const BlockNavigationDropdown = deprecateComponent('BlockNavigationDropdown', external_wp_blockEditor_namespaceObject.BlockNavigationDropdown); const BlockSelectionClearer = deprecateComponent('BlockSelectionClearer', external_wp_blockEditor_namespaceObject.BlockSelectionClearer); const BlockSettingsMenu = deprecateComponent('BlockSettingsMenu', external_wp_blockEditor_namespaceObject.BlockSettingsMenu); const BlockTitle = deprecateComponent('BlockTitle', external_wp_blockEditor_namespaceObject.BlockTitle); const BlockToolbar = deprecateComponent('BlockToolbar', external_wp_blockEditor_namespaceObject.BlockToolbar); const ColorPalette = deprecateComponent('ColorPalette', external_wp_blockEditor_namespaceObject.ColorPalette); const ContrastChecker = deprecateComponent('ContrastChecker', external_wp_blockEditor_namespaceObject.ContrastChecker); const CopyHandler = deprecateComponent('CopyHandler', external_wp_blockEditor_namespaceObject.CopyHandler); const DefaultBlockAppender = deprecateComponent('DefaultBlockAppender', external_wp_blockEditor_namespaceObject.DefaultBlockAppender); const FontSizePicker = deprecateComponent('FontSizePicker', external_wp_blockEditor_namespaceObject.FontSizePicker); const Inserter = deprecateComponent('Inserter', external_wp_blockEditor_namespaceObject.Inserter); const InnerBlocks = deprecateComponent('InnerBlocks', external_wp_blockEditor_namespaceObject.InnerBlocks, ['ButtonBlockAppender', 'DefaultBlockAppender', 'Content']); const InspectorAdvancedControls = deprecateComponent('InspectorAdvancedControls', external_wp_blockEditor_namespaceObject.InspectorAdvancedControls, ['Slot']); const InspectorControls = deprecateComponent('InspectorControls', external_wp_blockEditor_namespaceObject.InspectorControls, ['Slot']); const PanelColorSettings = deprecateComponent('PanelColorSettings', external_wp_blockEditor_namespaceObject.PanelColorSettings); const PlainText = deprecateComponent('PlainText', external_wp_blockEditor_namespaceObject.PlainText); const RichTextShortcut = deprecateComponent('RichTextShortcut', external_wp_blockEditor_namespaceObject.RichTextShortcut); const RichTextToolbarButton = deprecateComponent('RichTextToolbarButton', external_wp_blockEditor_namespaceObject.RichTextToolbarButton); const __unstableRichTextInputEvent = deprecateComponent('__unstableRichTextInputEvent', external_wp_blockEditor_namespaceObject.__unstableRichTextInputEvent); const MediaPlaceholder = deprecateComponent('MediaPlaceholder', external_wp_blockEditor_namespaceObject.MediaPlaceholder); const MediaUpload = deprecateComponent('MediaUpload', external_wp_blockEditor_namespaceObject.MediaUpload); const MediaUploadCheck = deprecateComponent('MediaUploadCheck', external_wp_blockEditor_namespaceObject.MediaUploadCheck); const MultiSelectScrollIntoView = deprecateComponent('MultiSelectScrollIntoView', external_wp_blockEditor_namespaceObject.MultiSelectScrollIntoView); const NavigableToolbar = deprecateComponent('NavigableToolbar', external_wp_blockEditor_namespaceObject.NavigableToolbar); const ObserveTyping = deprecateComponent('ObserveTyping', external_wp_blockEditor_namespaceObject.ObserveTyping); const SkipToSelectedBlock = deprecateComponent('SkipToSelectedBlock', external_wp_blockEditor_namespaceObject.SkipToSelectedBlock); const URLInput = deprecateComponent('URLInput', external_wp_blockEditor_namespaceObject.URLInput); const URLInputButton = deprecateComponent('URLInputButton', external_wp_blockEditor_namespaceObject.URLInputButton); const URLPopover = deprecateComponent('URLPopover', external_wp_blockEditor_namespaceObject.URLPopover); const Warning = deprecateComponent('Warning', external_wp_blockEditor_namespaceObject.Warning); const WritingFlow = deprecateComponent('WritingFlow', external_wp_blockEditor_namespaceObject.WritingFlow); const createCustomColorsHOC = deprecateFunction('createCustomColorsHOC', external_wp_blockEditor_namespaceObject.createCustomColorsHOC); const getColorClassName = deprecateFunction('getColorClassName', external_wp_blockEditor_namespaceObject.getColorClassName); const getColorObjectByAttributeValues = deprecateFunction('getColorObjectByAttributeValues', external_wp_blockEditor_namespaceObject.getColorObjectByAttributeValues); const getColorObjectByColorValue = deprecateFunction('getColorObjectByColorValue', external_wp_blockEditor_namespaceObject.getColorObjectByColorValue); const getFontSize = deprecateFunction('getFontSize', external_wp_blockEditor_namespaceObject.getFontSize); const getFontSizeClass = deprecateFunction('getFontSizeClass', external_wp_blockEditor_namespaceObject.getFontSizeClass); const withColorContext = deprecateFunction('withColorContext', external_wp_blockEditor_namespaceObject.withColorContext); const withColors = deprecateFunction('withColors', external_wp_blockEditor_namespaceObject.withColors); const withFontSizes = deprecateFunction('withFontSizes', external_wp_blockEditor_namespaceObject.withFontSizes); ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/components/index.js // Block Creation Components. // Post Related Components. // State Related Components. ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/utils/url.js /** * WordPress dependencies */ /** * Performs some basic cleanup of a string for use as a post slug * * This replicates some of what sanitize_title() does in WordPress core, but * is only designed to approximate what the slug will be. * * Converts Latin-1 Supplement and Latin Extended-A letters to basic Latin letters. * Removes combining diacritical marks. Converts whitespace, periods, * and forward slashes to hyphens. Removes any remaining non-word characters * except hyphens and underscores. Converts remaining string to lowercase. * It does not account for octets, HTML entities, or other encoded characters. * * @param {string} string Title or slug to be processed * * @return {string} Processed string */ function cleanForSlug(string) { external_wp_deprecated_default()('wp.editor.cleanForSlug', { since: '12.7', plugin: 'Gutenberg', alternative: 'wp.url.cleanForSlug' }); return (0,external_wp_url_namespaceObject.cleanForSlug)(string); } ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/utils/index.js /** * Internal dependencies */ ;// CONCATENATED MODULE: ./node_modules/@wordpress/editor/build-module/index.js /** * Internal dependencies */ /* * Backward compatibility */ }(); (window.wp = window.wp || {}).editor = __webpack_exports__; /******/ })() ;